oidc_client.js 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. Oidc = {};
  2. // Request OpenID Connect credentials for the user
  3. // @param options {optional}
  4. // @param credentialRequestCompleteCallback {Function} Callback function to call on
  5. // completion. Takes one argument, credentialToken on success, or Error on
  6. // error.
  7. Oidc.requestCredential = function (options, credentialRequestCompleteCallback) {
  8. // support both (options, callback) and (callback).
  9. if (!credentialRequestCompleteCallback && typeof options === 'function') {
  10. credentialRequestCompleteCallback = options;
  11. options = {};
  12. }
  13. var config = ServiceConfiguration.configurations.findOne({service: 'oidc'});
  14. if (!config) {
  15. credentialRequestCompleteCallback && credentialRequestCompleteCallback(
  16. new ServiceConfiguration.ConfigError('Service oidc not configured.'));
  17. return;
  18. }
  19. var credentialToken = Random.secret();
  20. var loginStyle = OAuth._loginStyle('oidc', config, options);
  21. // options
  22. options = options || {};
  23. options.client_id = config.clientId;
  24. options.response_type = options.response_type || 'code';
  25. options.redirect_uri = OAuth._redirectUri('oidc', config);
  26. options.state = OAuth._stateParam(loginStyle, credentialToken, options.redirectUrl);
  27. options.scope = config.requestPermissions || 'openid profile email';
  28. if (config.loginStyle && config.loginStyle == 'popup') {
  29. options.display = 'popup';
  30. } else if (config.loginStyle && config.loginStyle == 'redirect') {
  31. options.display = 'redirect';
  32. }
  33. var loginUrl = config.serverUrl + config.authorizationEndpoint;
  34. // check if the loginUrl already contains a "?"
  35. var first = loginUrl.indexOf('?') === -1;
  36. for (var k in options) {
  37. if (first) {
  38. loginUrl += '?';
  39. first = false;
  40. }
  41. else {
  42. loginUrl += '&'
  43. }
  44. loginUrl += encodeURIComponent(k) + '=' + encodeURIComponent(options[k]);
  45. }
  46. //console.log('XXX: loginURL: ' + loginUrl)
  47. if (config.loginStyle && config.loginStyle == 'popup') {
  48. options.popupOptions = options.popupOptions || {};
  49. var popupOptions = {
  50. width: options.popupOptions.width || 320,
  51. height: options.popupOptions.height || 450
  52. };
  53. OAuth.launchLogin({
  54. loginService: 'oidc',
  55. loginStyle: loginStyle,
  56. loginUrl: loginUrl,
  57. credentialRequestCompleteCallback: credentialRequestCompleteCallback,
  58. credentialToken: credentialToken,
  59. popupOptions: popupOptions,
  60. });
  61. } else if (config.loginStyle && config.loginStyle == 'redirect') {
  62. OAuth.launchLogin({
  63. loginService: 'oidc',
  64. loginStyle: loginStyle,
  65. loginUrl: loginUrl,
  66. credentialRequestCompleteCallback: credentialRequestCompleteCallback,
  67. credentialToken: credentialToken,
  68. });
  69. }
  70. };