瀏覽代碼

feat(oauth): refactoring PR #6077

Torkel Ödegaard 9 年之前
父節點
當前提交
e5fc4332cd
共有 5 個文件被更改,包括 27 次插入49 次删除
  1. 6 5
      pkg/api/login.go
  2. 2 3
      pkg/setting/setting_oauth.go
  3. 9 24
      pkg/social/social.go
  4. 5 12
      public/app/core/controllers/login_ctrl.js
  5. 5 5
      public/app/partials/login.html

+ 6 - 5
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

+ 2 - 3
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

+ 9 - 24
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(" "),
 			}
 		}
 	}

+ 5 - 12
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;
 

+ 5 - 5
public/app/partials/login.html

@@ -51,20 +51,20 @@
 				<div class="clearfix"></div>
 
 				<div class="login-oauth text-center" ng-show="oauthEnabled">
-					<a class="btn btn-large btn-google" href="login/google" target="_self" ng-if="googleAuthEnabled">
+					<a class="btn btn-large btn-google" href="login/google" target="_self" ng-if="oauth.google">
 						<i class="fa fa-google"></i>
 						with Google
 					</a>
-					<a class="btn btn-large btn-github" href="login/github" target="_self" ng-if="githubAuthEnabled">
+					<a class="btn btn-large btn-github" href="login/github" target="_self" ng-if="oauth.github">
 						<i class="fa fa-github"></i>
 						with Github
 					</a>
-					<a class="btn btn-large btn-grafana-net" href="login/grafananet" target="_self" ng-if="grafanaNetAuthEnabled">
+					<a class="btn btn-large btn-grafana-net" href="login/grafananet" target="_self" ng-if="oauth.grafananet">
 						with <span>Grafana.net</span>
 					</a>
-					<a class="btn btn-large btn-generic-oauth" href="login/generic_oauth" target="_self" ng-if="genericOAuthEnabled">
+					<a class="btn btn-large btn-generic-oauth" href="login/generic_oauth" target="_self" ng-if="oauth.generic_oauth">
 						<i class="fa fa-gear"></i>
-						with {{oauthProviderName || "OAuth 2"}}
+						with {{oauth.generic_oauth.name}}
 					</a>
 				</div>
 			</div>