diff --git a/pkg/api/login.go b/pkg/api/login.go index d1c571d8e0f..c3dea616abf 100644 --- a/pkg/api/login.go +++ b/pkg/api/login.go @@ -25,11 +25,12 @@ func LoginView(c *middleware.Context) { return } - viewData.Settings["googleAuthEnabled"] = setting.OAuthService.Google - viewData.Settings["githubAuthEnabled"] = setting.OAuthService.GitHub - viewData.Settings["grafanaNetAuthEnabled"] = setting.OAuthService.GrafanaNet - viewData.Settings["genericOAuthEnabled"] = setting.OAuthService.Generic - viewData.Settings["oauthProviderName"] = setting.OAuthService.OAuthProviderName + enabledOAuths := make(map[string]interface{}) + for key, oauth := range setting.OAuthService.OAuthInfos { + enabledOAuths[key] = map[string]string{"name": oauth.Name} + } + + viewData.Settings["oauth"] = enabledOAuths viewData.Settings["disableUserSignUp"] = !setting.AllowUserSignUp viewData.Settings["loginHint"] = setting.LoginHint viewData.Settings["allowUserPassLogin"] = setting.AllowUserPassLogin diff --git a/pkg/setting/setting_oauth.go b/pkg/setting/setting_oauth.go index 63d0da928e3..8d51343e635 100644 --- a/pkg/setting/setting_oauth.go +++ b/pkg/setting/setting_oauth.go @@ -8,12 +8,11 @@ type OAuthInfo struct { AllowedDomains []string ApiUrl string AllowSignup bool + Name string } type OAuther struct { - GitHub, Google, Twitter, Generic, GrafanaNet bool - OAuthInfos map[string]*OAuthInfo - OAuthProviderName string + OAuthInfos map[string]*OAuthInfo } var OAuthService *OAuther diff --git a/pkg/social/social.go b/pkg/social/social.go index fc29fe9c5d2..4dbc70d71a9 100644 --- a/pkg/social/social.go +++ b/pkg/social/social.go @@ -51,6 +51,7 @@ func NewOAuthService() { Enabled: sec.Key("enabled").MustBool(), AllowedDomains: sec.Key("allowed_domains").Strings(" "), AllowSignup: sec.Key("allow_sign_up").MustBool(), + Name: sec.Key("name").MustString(name), } if !info.Enabled { @@ -71,22 +72,18 @@ func NewOAuthService() { // GitHub. if name == "github" { - setting.OAuthService.GitHub = true - teamIds := sec.Key("team_ids").Ints(",") - allowedOrganizations := sec.Key("allowed_organizations").Strings(" ") SocialMap["github"] = &SocialGithub{ Config: &config, allowedDomains: info.AllowedDomains, apiUrl: info.ApiUrl, allowSignup: info.AllowSignup, - teamIds: teamIds, - allowedOrganizations: allowedOrganizations, + teamIds: sec.Key("team_ids").Ints(","), + allowedOrganizations: sec.Key("allowed_organizations").Strings(" "), } } // Google. if name == "google" { - setting.OAuthService.Google = true SocialMap["google"] = &SocialGoogle{ Config: &config, allowedDomains: info.AllowedDomains, apiUrl: info.ApiUrl, @@ -96,35 +93,23 @@ func NewOAuthService() { // Generic - Uses the same scheme as Github. if name == "generic_oauth" { - setting.OAuthService.Generic = true - setting.OAuthService.OAuthProviderName = sec.Key("oauth_provider_name").String() - teamIds := sec.Key("team_ids").Ints(",") - allowedOrganizations := sec.Key("allowed_organizations").Strings(" ") SocialMap["generic_oauth"] = &GenericOAuth{ Config: &config, allowedDomains: info.AllowedDomains, apiUrl: info.ApiUrl, allowSignup: info.AllowSignup, - teamIds: teamIds, - allowedOrganizations: allowedOrganizations, + teamIds: sec.Key("team_ids").Ints(","), + allowedOrganizations: sec.Key("allowed_organizations").Strings(" "), } } if name == "grafananet" { - setting.OAuthService.GrafanaNet = true - allowedOrganizations := sec.Key("allowed_organizations").Strings(" ") - - url := sec.Key("url").String() - if url == "" { - url = "https://grafana.net" - } - config := oauth2.Config{ ClientID: info.ClientId, ClientSecret: info.ClientSecret, Endpoint: oauth2.Endpoint{ - AuthURL: url + "/oauth2/authorize", - TokenURL: url + "/api/oauth2/token", + AuthURL: setting.GrafanaNetUrl + "/oauth2/authorize", + TokenURL: setting.GrafanaNetUrl + "/api/oauth2/token", }, RedirectURL: strings.TrimSuffix(setting.AppUrl, "/") + SocialBaseUrl + name, Scopes: info.Scopes, @@ -132,9 +117,9 @@ func NewOAuthService() { SocialMap["grafananet"] = &SocialGrafanaNet{ Config: &config, - url: url, + url: setting.GrafanaNetUrl, allowSignup: info.AllowSignup, - allowedOrganizations: allowedOrganizations, + allowedOrganizations: sec.Key("allowed_organizations").Strings(" "), } } } diff --git a/public/app/core/controllers/login_ctrl.js b/public/app/core/controllers/login_ctrl.js index ea4bbd515fa..8a336c16086 100644 --- a/public/app/core/controllers/login_ctrl.js +++ b/public/app/core/controllers/login_ctrl.js @@ -1,9 +1,10 @@ define([ 'angular', + 'lodash', '../core_module', 'app/core/config', ], -function (angular, coreModule, config) { +function (angular, _, coreModule, config) { 'use strict'; var failCodes = { @@ -21,18 +22,10 @@ function (angular, coreModule, config) { contextSrv.sidemenu = false; - $scope.googleAuthEnabled = config.googleAuthEnabled; - $scope.githubAuthEnabled = config.githubAuthEnabled; - $scope.grafanaNetAuthEnabled = config.grafanaNetAuthEnabled; - $scope.oauthEnabled = ( - config.githubAuthEnabled - || config.googleAuthEnabled - || config.grafanaNetAuthEnabled - || config.genericOAuthEnabled - ); + $scope.oauth = config.oauth; + $scope.oauthEnabled = _.keys(config.oauth).length > 0; + $scope.allowUserPassLogin = config.allowUserPassLogin; - $scope.genericOAuthEnabled = config.genericOAuthEnabled; - $scope.oauthProviderName = config.oauthProviderName; $scope.disableUserSignUp = config.disableUserSignUp; $scope.loginHint = config.loginHint; diff --git a/public/app/partials/login.html b/public/app/partials/login.html index d9bf7ecdb18..648632fe1c4 100644 --- a/public/app/partials/login.html +++ b/public/app/partials/login.html @@ -51,20 +51,20 @@
- + with Google - + with Github - + with Grafana.net - + - with {{oauthProviderName || "OAuth 2"}} + with {{oauth.generic_oauth.name}}