mirror of
https://github.com/casdoor/casdoor.git
synced 2025-05-22 18:25:47 +08:00

* feat: add Web3-Onboard idp * feat: update Web3-Onboard logo * feat: update package.json * feat: remove unused package * feat: add yarn build param --max_old_space_size=4096 * feat: remove log * feat: add Wallet configure * feat: remove hardware wallets
188 lines
4.9 KiB
Go
188 lines
4.9 KiB
Go
// Copyright 2021 The Casdoor Authors. All Rights Reserved.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package idp
|
|
|
|
import (
|
|
"net/http"
|
|
"strings"
|
|
|
|
"golang.org/x/oauth2"
|
|
)
|
|
|
|
type UserInfo struct {
|
|
Id string
|
|
Username string
|
|
DisplayName string
|
|
UnionId string
|
|
Email string
|
|
Phone string
|
|
CountryCode string
|
|
AvatarUrl string
|
|
}
|
|
|
|
type ProviderInfo struct {
|
|
Type string
|
|
SubType string
|
|
ClientId string
|
|
ClientSecret string
|
|
AppId string
|
|
HostUrl string
|
|
RedirectUrl string
|
|
|
|
TokenURL string
|
|
AuthURL string
|
|
UserInfoURL string
|
|
UserMapping map[string]string
|
|
}
|
|
|
|
type IdProvider interface {
|
|
SetHttpClient(client *http.Client)
|
|
GetToken(code string) (*oauth2.Token, error)
|
|
GetUserInfo(token *oauth2.Token) (*UserInfo, error)
|
|
}
|
|
|
|
func GetIdProvider(idpInfo *ProviderInfo, redirectUrl string) IdProvider {
|
|
switch idpInfo.Type {
|
|
case "GitHub":
|
|
return NewGithubIdProvider(idpInfo.ClientId, idpInfo.ClientSecret, redirectUrl)
|
|
case "Google":
|
|
return NewGoogleIdProvider(idpInfo.ClientId, idpInfo.ClientSecret, redirectUrl)
|
|
case "QQ":
|
|
return NewQqIdProvider(idpInfo.ClientId, idpInfo.ClientSecret, redirectUrl)
|
|
case "WeChat":
|
|
return NewWeChatIdProvider(idpInfo.ClientId, idpInfo.ClientSecret, redirectUrl)
|
|
case "Facebook":
|
|
return NewFacebookIdProvider(idpInfo.ClientId, idpInfo.ClientSecret, redirectUrl)
|
|
case "DingTalk":
|
|
return NewDingTalkIdProvider(idpInfo.ClientId, idpInfo.ClientSecret, redirectUrl)
|
|
case "Weibo":
|
|
return NewWeiBoIdProvider(idpInfo.ClientId, idpInfo.ClientSecret, redirectUrl)
|
|
case "Gitee":
|
|
return NewGiteeIdProvider(idpInfo.ClientId, idpInfo.ClientSecret, redirectUrl)
|
|
case "LinkedIn":
|
|
return NewLinkedInIdProvider(idpInfo.ClientId, idpInfo.ClientSecret, redirectUrl)
|
|
case "WeCom":
|
|
if idpInfo.SubType == "Internal" {
|
|
return NewWeComInternalIdProvider(idpInfo.ClientId, idpInfo.ClientSecret, redirectUrl)
|
|
} else if idpInfo.SubType == "Third-party" {
|
|
return NewWeComIdProvider(idpInfo.ClientId, idpInfo.ClientSecret, redirectUrl)
|
|
} else {
|
|
return nil
|
|
}
|
|
case "Lark":
|
|
return NewLarkIdProvider(idpInfo.ClientId, idpInfo.ClientSecret, redirectUrl)
|
|
case "GitLab":
|
|
return NewGitlabIdProvider(idpInfo.ClientId, idpInfo.ClientSecret, redirectUrl)
|
|
case "Adfs":
|
|
return NewAdfsIdProvider(idpInfo.ClientId, idpInfo.ClientSecret, redirectUrl, idpInfo.HostUrl)
|
|
case "Baidu":
|
|
return NewBaiduIdProvider(idpInfo.ClientId, idpInfo.ClientSecret, redirectUrl)
|
|
case "Alipay":
|
|
return NewAlipayIdProvider(idpInfo.ClientId, idpInfo.ClientSecret, redirectUrl)
|
|
case "Custom":
|
|
return NewCustomIdProvider(idpInfo, redirectUrl)
|
|
case "Infoflow":
|
|
if idpInfo.SubType == "Internal" {
|
|
return NewInfoflowInternalIdProvider(idpInfo.ClientId, idpInfo.ClientSecret, idpInfo.AppId, redirectUrl)
|
|
} else if idpInfo.SubType == "Third-party" {
|
|
return NewInfoflowIdProvider(idpInfo.ClientId, idpInfo.ClientSecret, idpInfo.AppId, redirectUrl)
|
|
} else {
|
|
return nil
|
|
}
|
|
case "Casdoor":
|
|
return NewCasdoorIdProvider(idpInfo.ClientId, idpInfo.ClientSecret, redirectUrl, idpInfo.HostUrl)
|
|
case "Okta":
|
|
return NewOktaIdProvider(idpInfo.ClientId, idpInfo.ClientSecret, redirectUrl, idpInfo.HostUrl)
|
|
case "Douyin":
|
|
return NewDouyinIdProvider(idpInfo.ClientId, idpInfo.ClientSecret, redirectUrl)
|
|
case "Bilibili":
|
|
return NewBilibiliIdProvider(idpInfo.ClientId, idpInfo.ClientSecret, redirectUrl)
|
|
case "MetaMask":
|
|
return NewMetaMaskIdProvider()
|
|
case "Web3Onboard":
|
|
return NewWeb3OnboardIdProvider()
|
|
default:
|
|
if isGothSupport(idpInfo.Type) {
|
|
return NewGothIdProvider(idpInfo.Type, idpInfo.ClientId, idpInfo.ClientSecret, redirectUrl, idpInfo.HostUrl)
|
|
}
|
|
return nil
|
|
}
|
|
}
|
|
|
|
var gothList = []string{
|
|
"Apple",
|
|
"AzureAD",
|
|
"Slack",
|
|
"Steam",
|
|
"Line",
|
|
"Amazon",
|
|
"Auth0",
|
|
"BattleNet",
|
|
"Bitbucket",
|
|
"Box",
|
|
"CloudFoundry",
|
|
"Dailymotion",
|
|
"Deezer",
|
|
"DigitalOcean",
|
|
"Discord",
|
|
"Dropbox",
|
|
"EveOnline",
|
|
"Fitbit",
|
|
"Gitea",
|
|
"Heroku",
|
|
"InfluxCloud",
|
|
"Instagram",
|
|
"Intercom",
|
|
"Kakao",
|
|
"Lastfm",
|
|
"Mailru",
|
|
"Meetup",
|
|
"MicrosoftOnline",
|
|
"Naver",
|
|
"Nextcloud",
|
|
"OneDrive",
|
|
"Oura",
|
|
"Patreon",
|
|
"Paypal",
|
|
"SalesForce",
|
|
"Shopify",
|
|
"Soundcloud",
|
|
"Spotify",
|
|
"Strava",
|
|
"Stripe",
|
|
"TikTok",
|
|
"Tumblr",
|
|
"Twitch",
|
|
"Twitter",
|
|
"Typetalk",
|
|
"Uber",
|
|
"VK",
|
|
"Wepay",
|
|
"Xero",
|
|
"Yahoo",
|
|
"Yammer",
|
|
"Yandex",
|
|
"Zoom",
|
|
}
|
|
|
|
func isGothSupport(provider string) bool {
|
|
for _, value := range gothList {
|
|
if strings.EqualFold(value, provider) {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|