oidc_client.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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. Meteor.call("getServiceConfiguration", "oidc",(_, result) => {
  14. if (result) {
  15. var config = result;
  16. var credentialToken = Random.secret();
  17. var loginStyle = OAuth._loginStyle('oidc', config, options);
  18. // options
  19. options = options || {};
  20. options.client_id = config.clientId;
  21. options.response_type = options.response_type || 'code';
  22. options.redirect_uri = OAuth._redirectUri('oidc', config);
  23. options.state = OAuth._stateParam(loginStyle, credentialToken, options.redirectUrl);
  24. options.scope = config.requestPermissions || 'openid profile email';
  25. if (config.loginStyle && config.loginStyle == 'popup') {
  26. options.display = 'popup';
  27. }
  28. var loginUrl = config.serverUrl + config.authorizationEndpoint;
  29. // check if the loginUrl already contains a "?"
  30. var first = loginUrl.indexOf('?') === -1;
  31. for (var k in options) {
  32. if (first) {
  33. loginUrl += '?';
  34. first = false;
  35. }
  36. else {
  37. loginUrl += '&'
  38. }
  39. loginUrl += encodeURIComponent(k) + '=' + encodeURIComponent(options[k]);
  40. }
  41. //console.log('XXX: loginURL: ' + loginUrl)
  42. options.popupOptions = options.popupOptions || {};
  43. var popupOptions = {
  44. width: options.popupOptions.width || 320,
  45. height: options.popupOptions.height || 450
  46. };
  47. OAuth.launchLogin({
  48. loginService: 'oidc',
  49. loginStyle: loginStyle,
  50. loginUrl: loginUrl,
  51. credentialRequestCompleteCallback: credentialRequestCompleteCallback,
  52. credentialToken: credentialToken,
  53. popupOptions: popupOptions,
  54. });
  55. }
  56. else
  57. {
  58. credentialRequestCompleteCallback && credentialRequestCompleteCallback(
  59. new ServiceConfiguration.ConfigError('Service oidc not configured.'));
  60. return;
  61. }
  62. });
  63. };