67 lines
2.4 KiB
JavaScript
67 lines
2.4 KiB
JavaScript
/**
|
|
* Service which provides access to the various keys defined in configuration, and working with
|
|
* external services that rely on those keys.
|
|
*/
|
|
angular.module('quay').factory('KeyService', ['$location', 'Config', function($location, Config) {
|
|
var keyService = {}
|
|
var oauth = window.__oauth;
|
|
|
|
keyService['stripePublishableKey'] = Config['STRIPE_PUBLISHABLE_KEY'];
|
|
|
|
keyService['githubTriggerClientId'] = oauth['GITHUB_TRIGGER_CONFIG']['CLIENT_ID'];
|
|
keyService['githubLoginClientId'] = oauth['GITHUB_LOGIN_CONFIG']['CLIENT_ID'];
|
|
keyService['googleLoginClientId'] = oauth['GOOGLE_LOGIN_CONFIG']['CLIENT_ID'];
|
|
|
|
keyService['githubRedirectUri'] = Config.getUrl('/oauth2/github/callback');
|
|
keyService['googleRedirectUri'] = Config.getUrl('/oauth2/google/callback');
|
|
|
|
keyService['githubLoginUrl'] = oauth['GITHUB_LOGIN_CONFIG']['AUTHORIZE_ENDPOINT'];
|
|
keyService['googleLoginUrl'] = oauth['GOOGLE_LOGIN_CONFIG']['AUTHORIZE_ENDPOINT'];
|
|
|
|
keyService['githubEndpoint'] = oauth['GITHUB_LOGIN_CONFIG']['GITHUB_ENDPOINT'];
|
|
|
|
keyService['githubTriggerEndpoint'] = oauth['GITHUB_TRIGGER_CONFIG']['GITHUB_ENDPOINT'];
|
|
keyService['githubTriggerAuthorizeUrl'] = oauth['GITHUB_TRIGGER_CONFIG']['AUTHORIZE_ENDPOINT'];
|
|
|
|
keyService['githubLoginScope'] = 'user:email';
|
|
if (oauth['GITHUB_LOGIN_CONFIG']['ORG_RESTRICT']) {
|
|
keyService['githubLoginScope'] += ',read:org';
|
|
}
|
|
|
|
keyService['googleLoginScope'] = 'openid email';
|
|
|
|
keyService.isEnterprise = function(service) {
|
|
switch (service) {
|
|
case 'github':
|
|
return keyService['githubLoginUrl'].indexOf('https://github.com/') < 0;
|
|
|
|
case 'github-trigger':
|
|
return keyService['githubTriggerAuthorizeUrl'].indexOf('https://github.com/') < 0;
|
|
}
|
|
|
|
return false;
|
|
};
|
|
|
|
keyService.getExternalLoginUrl = function(service, action) {
|
|
var state_clause = '';
|
|
if (Config.MIXPANEL_KEY && window.mixpanel) {
|
|
if (mixpanel.get_distinct_id !== undefined) {
|
|
state_clause = "&state=" + encodeURIComponent(mixpanel.get_distinct_id());
|
|
}
|
|
}
|
|
|
|
var client_id = keyService[service + 'LoginClientId'];
|
|
var scope = keyService[service + 'LoginScope'];
|
|
var redirect_uri = keyService[service + 'RedirectUri'];
|
|
if (action == 'attach') {
|
|
redirect_uri += '/attach';
|
|
}
|
|
|
|
var url = keyService[service + 'LoginUrl'] + 'client_id=' + client_id + '&scope=' + scope +
|
|
'&redirect_uri=' + redirect_uri + state_clause;
|
|
|
|
return url;
|
|
};
|
|
|
|
return keyService;
|
|
}]);
|