/** * 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['gitlabTriggerClientId'] = oauth['GITLAB_TRIGGER_CONFIG']['CLIENT_ID']; 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['gitlabRedirectUri'] = Config.getUrl('/oauth2/gitlab/callback'); 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['gitlabTriggerEndpoint'] = oauth['GITLAB_TRIGGER_CONFIG']['GITLAB_ENDPOINT']; keyService['gitlabTriggerAuthorizeUrl'] = oauth['GITLAB_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; }]);