From a8502d11730056dbf5881524f52b86b78152093f Mon Sep 17 00:00:00 2001 From: Gucheng Wang Date: Sat, 29 Jan 2022 09:52:10 +0800 Subject: [PATCH] Fix GetIdProvider() bug. --- controllers/auth.go | 2 +- idp/provider.go | 40 +++++++++++++++++++++++----------------- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/controllers/auth.go b/controllers/auth.go index 2930dd29..d67ad5c0 100644 --- a/controllers/auth.go +++ b/controllers/auth.go @@ -221,7 +221,7 @@ func (c *ApiController) Login() { clientSecret = provider.ClientSecret2 } - idProvider := idp.GetIdProvider(provider.Type, clientId, clientSecret, form.RedirectUri) + idProvider := idp.GetIdProvider(provider.Type, provider.SubType, clientId, clientSecret, form.RedirectUri) if idProvider == nil { c.ResponseError(fmt.Sprintf("The provider type: %s is not supported", provider.Type)) return diff --git a/idp/provider.go b/idp/provider.go index 04a3dd4f..7b10a2ef 100644 --- a/idp/provider.go +++ b/idp/provider.go @@ -35,35 +35,41 @@ type IdProvider interface { GetUserInfo(token *oauth2.Token) (*UserInfo, error) } -func GetIdProvider(providerType string, clientId string, clientSecret string, redirectUrl string) IdProvider { - if providerType == "GitHub" { +func GetIdProvider(typ string, subType string, clientId string, clientSecret string, redirectUrl string) IdProvider { + if typ == "GitHub" { return NewGithubIdProvider(clientId, clientSecret, redirectUrl) - } else if providerType == "Google" { + } else if typ == "Google" { return NewGoogleIdProvider(clientId, clientSecret, redirectUrl) - } else if providerType == "QQ" { + } else if typ == "QQ" { return NewQqIdProvider(clientId, clientSecret, redirectUrl) - } else if providerType == "WeChat" { + } else if typ == "WeChat" { return NewWeChatIdProvider(clientId, clientSecret, redirectUrl) - } else if providerType == "Facebook" { + } else if typ == "Facebook" { return NewFacebookIdProvider(clientId, clientSecret, redirectUrl) - } else if providerType == "DingTalk" { + } else if typ == "DingTalk" { return NewDingTalkIdProvider(clientId, clientSecret, redirectUrl) - } else if providerType == "Weibo" { + } else if typ == "Weibo" { return NewWeiBoIdProvider(clientId, clientSecret, redirectUrl) - } else if providerType == "Gitee" { + } else if typ == "Gitee" { return NewGiteeIdProvider(clientId, clientSecret, redirectUrl) - } else if providerType == "LinkedIn" { + } else if typ == "LinkedIn" { return NewLinkedInIdProvider(clientId, clientSecret, redirectUrl) - } else if providerType == "WeCom" { - return NewWeComIdProvider(clientId, clientSecret, redirectUrl) - } else if providerType == "Lark" { + } else if typ == "WeCom" { + if subType == "Internal" { + return NewWeComInternalIdProvider(clientId, clientSecret, redirectUrl) + } else if subType == "Third-party" { + return NewWeComIdProvider(clientId, clientSecret, redirectUrl) + } else { + return nil + } + } else if typ == "Lark" { return NewLarkIdProvider(clientId, clientSecret, redirectUrl) - } else if providerType == "GitLab" { + } else if typ == "GitLab" { return NewGitlabIdProvider(clientId, clientSecret, redirectUrl) - } else if providerType == "Baidu" { + } else if typ == "Baidu" { return NewBaiduIdProvider(clientId, clientSecret, redirectUrl) - } else if isGothSupport(providerType) { - return NewGothIdProvider(providerType, clientId, clientSecret, redirectUrl) + } else if isGothSupport(typ) { + return NewGothIdProvider(typ, clientId, clientSecret, redirectUrl) } return nil