diff --git a/controllers/auth.go b/controllers/auth.go index 6beca023..d0a61a73 100644 --- a/controllers/auth.go +++ b/controllers/auth.go @@ -174,13 +174,36 @@ func (c *ApiController) GetApplicationLogin() { } func setHttpClient(idProvider idp.IdProvider, providerType string) { - if providerType == "GitHub" || providerType == "Google" || providerType == "Facebook" || providerType == "LinkedIn" || providerType == "Steam" || providerType == "Line" { + if isProxyProviderType(providerType) { idProvider.SetHttpClient(proxy.ProxyHttpClient) } else { idProvider.SetHttpClient(proxy.DefaultHttpClient) } } +func isProxyProviderType(providerType string) bool { + providerTypes := []string{ + "GitHub", + "Google", + "Facebook", + "LinkedIn", + "Steam", + "Line", + "Amazon", + "Instagram", + "TikTok", + "Twitter", + "Uber", + "Yahoo", + } + for _, v := range providerTypes { + if strings.EqualFold(v, providerType) { + return true + } + } + return false +} + // Login ... // @Title Login // @Tag Login API diff --git a/idp/goth.go b/idp/goth.go index c7cb8498..f162b9b5 100644 --- a/idp/goth.go +++ b/idp/goth.go @@ -25,30 +25,59 @@ import ( "github.com/markbates/goth" "github.com/markbates/goth/providers/amazon" "github.com/markbates/goth/providers/apple" + "github.com/markbates/goth/providers/auth0" "github.com/markbates/goth/providers/azureadv2" + "github.com/markbates/goth/providers/battlenet" "github.com/markbates/goth/providers/bitbucket" + "github.com/markbates/goth/providers/box" + "github.com/markbates/goth/providers/cloudfoundry" + "github.com/markbates/goth/providers/dailymotion" + "github.com/markbates/goth/providers/deezer" "github.com/markbates/goth/providers/digitalocean" "github.com/markbates/goth/providers/discord" "github.com/markbates/goth/providers/dropbox" + "github.com/markbates/goth/providers/eveonline" "github.com/markbates/goth/providers/facebook" + "github.com/markbates/goth/providers/fitbit" "github.com/markbates/goth/providers/gitea" "github.com/markbates/goth/providers/github" "github.com/markbates/goth/providers/gitlab" "github.com/markbates/goth/providers/google" "github.com/markbates/goth/providers/heroku" + "github.com/markbates/goth/providers/influxcloud" "github.com/markbates/goth/providers/instagram" + "github.com/markbates/goth/providers/intercom" "github.com/markbates/goth/providers/kakao" + "github.com/markbates/goth/providers/lastfm" "github.com/markbates/goth/providers/line" "github.com/markbates/goth/providers/linkedin" + "github.com/markbates/goth/providers/mailru" + "github.com/markbates/goth/providers/meetup" "github.com/markbates/goth/providers/microsoftonline" + "github.com/markbates/goth/providers/naver" + "github.com/markbates/goth/providers/nextcloud" + "github.com/markbates/goth/providers/onedrive" + "github.com/markbates/goth/providers/oura" + "github.com/markbates/goth/providers/patreon" "github.com/markbates/goth/providers/paypal" "github.com/markbates/goth/providers/salesforce" "github.com/markbates/goth/providers/shopify" "github.com/markbates/goth/providers/slack" + "github.com/markbates/goth/providers/soundcloud" + "github.com/markbates/goth/providers/spotify" "github.com/markbates/goth/providers/steam" + "github.com/markbates/goth/providers/strava" + "github.com/markbates/goth/providers/stripe" + "github.com/markbates/goth/providers/tiktok" "github.com/markbates/goth/providers/tumblr" - "github.com/markbates/goth/providers/twitter" + "github.com/markbates/goth/providers/twitch" + "github.com/markbates/goth/providers/twitterv2" + "github.com/markbates/goth/providers/typetalk" + "github.com/markbates/goth/providers/uber" + "github.com/markbates/goth/providers/wepay" + "github.com/markbates/goth/providers/xero" "github.com/markbates/goth/providers/yahoo" + "github.com/markbates/goth/providers/yammer" "github.com/markbates/goth/providers/yandex" "github.com/markbates/goth/providers/zoom" "golang.org/x/oauth2" @@ -77,11 +106,41 @@ func NewGothIdProvider(providerType string, clientId string, clientSecret string Provider: azureadv2.New(clientId, clientSecret, redirectUrl, azureadv2.ProviderOptions{Tenant: "common"}), Session: &azureadv2.Session{}, } + case "Auth0": + idp = GothIdProvider{ + Provider: auth0.New(clientId, clientSecret, redirectUrl, "casdoor.auth0.com"), + Session: &auth0.Session{}, + } + case "BattleNet": + idp = GothIdProvider{ + Provider: battlenet.New(clientId, clientSecret, redirectUrl), + Session: &battlenet.Session{}, + } case "Bitbucket": idp = GothIdProvider{ Provider: bitbucket.New(clientId, clientSecret, redirectUrl), Session: &bitbucket.Session{}, } + case "Box": + idp = GothIdProvider{ + Provider: box.New(clientId, clientSecret, redirectUrl), + Session: &box.Session{}, + } + case "CloudFoundry": + idp = GothIdProvider{ + Provider: cloudfoundry.New("", clientId, clientSecret, redirectUrl), + Session: &cloudfoundry.Session{}, + } + case "Dailymotion": + idp = GothIdProvider{ + Provider: dailymotion.New(clientId, clientSecret, redirectUrl), + Session: &dailymotion.Session{}, + } + case "Deezer": + idp = GothIdProvider{ + Provider: deezer.New(clientId, clientSecret, redirectUrl), + Session: &deezer.Session{}, + } case "DigitalOcean": idp = GothIdProvider{ Provider: digitalocean.New(clientId, clientSecret, redirectUrl), @@ -97,6 +156,16 @@ func NewGothIdProvider(providerType string, clientId string, clientSecret string Provider: dropbox.New(clientId, clientSecret, redirectUrl), Session: &dropbox.Session{}, } + case "EveOnline": + idp = GothIdProvider{ + Provider: eveonline.New(clientId, clientSecret, redirectUrl), + Session: &eveonline.Session{}, + } + case "Fitbit": + idp = GothIdProvider{ + Provider: fitbit.New(clientId, clientSecret, redirectUrl), + Session: &fitbit.Session{}, + } case "Facebook": idp = GothIdProvider{ Provider: facebook.New(clientId, clientSecret, redirectUrl), @@ -127,16 +196,31 @@ func NewGothIdProvider(providerType string, clientId string, clientSecret string Provider: heroku.New(clientId, clientSecret, redirectUrl), Session: &heroku.Session{}, } + case "InfluxCloud": + idp = GothIdProvider{ + Provider: influxcloud.New(clientId, clientSecret, redirectUrl), + Session: &influxcloud.Session{}, + } case "Instagram": idp = GothIdProvider{ Provider: instagram.New(clientId, clientSecret, redirectUrl), Session: &instagram.Session{}, } + case "Intercom": + idp = GothIdProvider{ + Provider: intercom.New(clientId, clientSecret, redirectUrl), + Session: &intercom.Session{}, + } case "Kakao": idp = GothIdProvider{ Provider: kakao.New(clientId, clientSecret, redirectUrl), Session: &kakao.Session{}, } + case "Lastfm": + idp = GothIdProvider{ + Provider: lastfm.New(clientId, clientSecret, redirectUrl), + Session: &lastfm.Session{}, + } case "Linkedin": idp = GothIdProvider{ Provider: linkedin.New(clientId, clientSecret, redirectUrl), @@ -147,11 +231,46 @@ func NewGothIdProvider(providerType string, clientId string, clientSecret string Provider: line.New(clientId, clientSecret, redirectUrl), Session: &line.Session{}, } + case "Mailru": + idp = GothIdProvider{ + Provider: mailru.New(clientId, clientSecret, redirectUrl), + Session: &mailru.Session{}, + } + case "Meetup": + idp = GothIdProvider{ + Provider: meetup.New(clientId, clientSecret, redirectUrl), + Session: &meetup.Session{}, + } case "MicrosoftOnline": idp = GothIdProvider{ Provider: microsoftonline.New(clientId, clientSecret, redirectUrl), Session: µsoftonline.Session{}, } + case "Naver": + idp = GothIdProvider{ + Provider: naver.New(clientId, clientSecret, redirectUrl), + Session: &naver.Session{}, + } + case "Nextcloud": + idp = GothIdProvider{ + Provider: nextcloud.New(clientId, clientSecret, redirectUrl), + Session: &nextcloud.Session{}, + } + case "OneDrive": + idp = GothIdProvider{ + Provider: onedrive.New(clientId, clientSecret, redirectUrl), + Session: &onedrive.Session{}, + } + case "Oura": + idp = GothIdProvider{ + Provider: oura.New(clientId, clientSecret, redirectUrl), + Session: &oura.Session{}, + } + case "Patreon": + idp = GothIdProvider{ + Provider: patreon.New(clientId, clientSecret, redirectUrl), + Session: &patreon.Session{}, + } case "Paypal": idp = GothIdProvider{ Provider: paypal.New(clientId, clientSecret, redirectUrl), @@ -172,26 +291,81 @@ func NewGothIdProvider(providerType string, clientId string, clientSecret string Provider: slack.New(clientId, clientSecret, redirectUrl), Session: &slack.Session{}, } + case "Soundcloud": + idp = GothIdProvider{ + Provider: soundcloud.New(clientId, clientSecret, redirectUrl), + Session: &soundcloud.Session{}, + } + case "Spotify": + idp = GothIdProvider{ + Provider: spotify.New(clientId, clientSecret, redirectUrl), + Session: &spotify.Session{}, + } case "Steam": idp = GothIdProvider{ Provider: steam.New(clientSecret, redirectUrl), Session: &steam.Session{}, } + case "Strava": + idp = GothIdProvider{ + Provider: strava.New(clientId, clientSecret, redirectUrl), + Session: &strava.Session{}, + } + case "Stripe": + idp = GothIdProvider{ + Provider: stripe.New(clientId, clientSecret, redirectUrl), + Session: &stripe.Session{}, + } + case "TikTok": + idp = GothIdProvider{ + Provider: tiktok.New(clientId, clientSecret, redirectUrl), + Session: &tiktok.Session{}, + } case "Tumblr": idp = GothIdProvider{ Provider: tumblr.New(clientId, clientSecret, redirectUrl), Session: &tumblr.Session{}, } + case "Twitch": + idp = GothIdProvider{ + Provider: twitch.New(clientId, clientSecret, redirectUrl), + Session: &twitch.Session{}, + } case "Twitter": idp = GothIdProvider{ - Provider: twitter.New(clientId, clientSecret, redirectUrl), - Session: &twitter.Session{}, + Provider: twitterv2.New(clientId, clientSecret, redirectUrl), + Session: &twitterv2.Session{}, + } + case "Typetalk": + idp = GothIdProvider{ + Provider: typetalk.New(clientId, clientSecret, redirectUrl), + Session: &typetalk.Session{}, + } + case "Uber": + idp = GothIdProvider{ + Provider: uber.New(clientId, clientSecret, redirectUrl), + Session: &uber.Session{}, + } + case "Wepay": + idp = GothIdProvider{ + Provider: wepay.New(clientId, clientSecret, redirectUrl), + Session: &wepay.Session{}, + } + case "Xero": + idp = GothIdProvider{ + Provider: xero.New(clientId, clientSecret, redirectUrl), + Session: &xero.Session{}, } case "Yahoo": idp = GothIdProvider{ Provider: yahoo.New(clientId, clientSecret, redirectUrl), Session: &yahoo.Session{}, } + case "Yammer": + idp = GothIdProvider{ + Provider: yammer.New(clientId, clientSecret, redirectUrl), + Session: &yammer.Session{}, + } case "Yandex": idp = GothIdProvider{ Provider: yandex.New(clientId, clientSecret, redirectUrl), @@ -232,6 +406,9 @@ func (idp *GothIdProvider) GetToken(code string) (*oauth2.Token, error) { // to call the function to obtain accessToken value = url.Values{} value.Add("code", code) + if idp.Provider.Name() == "twitterv2" || idp.Provider.Name() == "fitbit" { + value.Add("oauth_verifier", "casdoor-verifier") + } } accessToken, err := idp.Session.Authorize(idp.Provider, value) if err != nil { diff --git a/idp/provider.go b/idp/provider.go index dc1ea8bc..3e50259e 100644 --- a/idp/provider.go +++ b/idp/provider.go @@ -98,7 +98,61 @@ func GetIdProvider(typ string, subType string, clientId string, clientSecret str return nil } -var gothList = []string{"Apple", "AzureAD", "Slack", "Steam", "Line"} +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 { diff --git a/object/user.go b/object/user.go index 177542f5..3da60b54 100644 --- a/object/user.go +++ b/object/user.go @@ -78,32 +78,80 @@ type User struct { LastSigninTime string `xorm:"varchar(100)" json:"lastSigninTime"` LastSigninIp string `xorm:"varchar(100)" json:"lastSigninIp"` - GitHub string `xorm:"github varchar(100)" json:"github"` - Google string `xorm:"varchar(100)" json:"google"` - QQ string `xorm:"qq varchar(100)" json:"qq"` - WeChat string `xorm:"wechat varchar(100)" json:"wechat"` - Facebook string `xorm:"facebook varchar(100)" json:"facebook"` - DingTalk string `xorm:"dingtalk varchar(100)" json:"dingtalk"` - Weibo string `xorm:"weibo varchar(100)" json:"weibo"` - Gitee string `xorm:"gitee varchar(100)" json:"gitee"` - LinkedIn string `xorm:"linkedin varchar(100)" json:"linkedin"` - Wecom string `xorm:"wecom varchar(100)" json:"wecom"` - Lark string `xorm:"lark varchar(100)" json:"lark"` - Gitlab string `xorm:"gitlab varchar(100)" json:"gitlab"` - Adfs string `xorm:"adfs varchar(100)" json:"adfs"` - Baidu string `xorm:"baidu varchar(100)" json:"baidu"` - Alipay string `xorm:"alipay varchar(100)" json:"alipay"` - Casdoor string `xorm:"casdoor varchar(100)" json:"casdoor"` - Infoflow string `xorm:"infoflow varchar(100)" json:"infoflow"` - Apple string `xorm:"apple varchar(100)" json:"apple"` - AzureAD string `xorm:"azuread varchar(100)" json:"azuread"` - Slack string `xorm:"slack varchar(100)" json:"slack"` - Steam string `xorm:"steam varchar(100)" json:"steam"` - Bilibili string `xorm:"bilibili varchar(100)" json:"bilibili"` - Okta string `xorm:"okta varchar(100)" json:"okta"` - Douyin string `xorm:"douyin varchar(100)" json:"douyin"` - Line string `xorm:"line varchar(100)" json:"line"` - Custom string `xorm:"custom varchar(100)" json:"custom"` + GitHub string `xorm:"github varchar(100)" json:"github"` + Google string `xorm:"varchar(100)" json:"google"` + QQ string `xorm:"qq varchar(100)" json:"qq"` + WeChat string `xorm:"wechat varchar(100)" json:"wechat"` + Facebook string `xorm:"facebook varchar(100)" json:"facebook"` + DingTalk string `xorm:"dingtalk varchar(100)" json:"dingtalk"` + Weibo string `xorm:"weibo varchar(100)" json:"weibo"` + Gitee string `xorm:"gitee varchar(100)" json:"gitee"` + LinkedIn string `xorm:"linkedin varchar(100)" json:"linkedin"` + Wecom string `xorm:"wecom varchar(100)" json:"wecom"` + Lark string `xorm:"lark varchar(100)" json:"lark"` + Gitlab string `xorm:"gitlab varchar(100)" json:"gitlab"` + Adfs string `xorm:"adfs varchar(100)" json:"adfs"` + Baidu string `xorm:"baidu varchar(100)" json:"baidu"` + Alipay string `xorm:"alipay varchar(100)" json:"alipay"` + Casdoor string `xorm:"casdoor varchar(100)" json:"casdoor"` + Infoflow string `xorm:"infoflow varchar(100)" json:"infoflow"` + Apple string `xorm:"apple varchar(100)" json:"apple"` + AzureAD string `xorm:"azuread varchar(100)" json:"azuread"` + Slack string `xorm:"slack varchar(100)" json:"slack"` + Steam string `xorm:"steam varchar(100)" json:"steam"` + Bilibili string `xorm:"bilibili varchar(100)" json:"bilibili"` + Okta string `xorm:"okta varchar(100)" json:"okta"` + Douyin string `xorm:"douyin varchar(100)" json:"douyin"` + Line string `xorm:"line varchar(100)" json:"line"` + Amazon string `xorm:"amazon varchar(100)" json:"amazon"` + Auth0 string `xorm:"auth0 varchar(100)" json:"auth0"` + BattleNet string `xorm:"battlenet varchar(100)" json:"battlenet"` + Bitbucket string `xorm:"bitbucket varchar(100)" json:"bitbucket"` + Box string `xorm:"box varchar(100)" json:"box"` + CloudFoundry string `xorm:"cloudfoundry varchar(100)" json:"cloudfoundry"` + Dailymotion string `xorm:"dailymotion varchar(100)" json:"dailymotion"` + Deezer string `xorm:"deezer varchar(100)" json:"deezer"` + DigitalOcean string `xorm:"digitalocean varchar(100)" json:"digitalocean"` + Discord string `xorm:"discord varchar(100)" json:"discord"` + Dropbox string `xorm:"dropbox varchar(100)" json:"dropbox"` + EveOnline string `xorm:"eveonline varchar(100)" json:"eveonline"` + Fitbit string `xorm:"fitbit varchar(100)" json:"fitbit"` + Gitea string `xorm:"gitea varchar(100)" json:"gitea"` + Heroku string `xorm:"heroku varchar(100)" json:"heroku"` + InfluxCloud string `xorm:"influxcloud varchar(100)" json:"influxcloud"` + Instagram string `xorm:"instagram varchar(100)" json:"instagram"` + Intercom string `xorm:"intercom varchar(100)" json:"intercom"` + Kakao string `xorm:"kakao varchar(100)" json:"kakao"` + Lastfm string `xorm:"lastfm varchar(100)" json:"lastfm"` + Mailru string `xorm:"mailru varchar(100)" json:"mailru"` + Meetup string `xorm:"meetup varchar(100)" json:"meetup"` + MicrosoftOnline string `xorm:"microsoftonline varchar(100)" json:"microsoftonline"` + Naver string `xorm:"naver varchar(100)" json:"naver"` + Nextcloud string `xorm:"nextcloud varchar(100)" json:"nextcloud"` + OneDrive string `xorm:"onedrive varchar(100)" json:"onedrive"` + Oura string `xorm:"oura varchar(100)" json:"oura"` + Patreon string `xorm:"patreon varchar(100)" json:"patreon"` + Paypal string `xorm:"paypal varchar(100)" json:"paypal"` + SalesForce string `xorm:"salesforce varchar(100)" json:"salesforce"` + Shopify string `xorm:"shopify varchar(100)" json:"shopify"` + Soundcloud string `xorm:"soundcloud varchar(100)" json:"soundcloud"` + Spotify string `xorm:"spotify varchar(100)" json:"spotify"` + Strava string `xorm:"strava varchar(100)" json:"strava"` + Stripe string `xorm:"stripe varchar(100)" json:"stripe"` + TikTok string `xorm:"tiktok varchar(100)" json:"tiktok"` + Tumblr string `xorm:"tumblr varchar(100)" json:"tumblr"` + Twitch string `xorm:"twitch varchar(100)" json:"twitch"` + Twitter string `xorm:"twitter varchar(100)" json:"twitter"` + Typetalk string `xorm:"typetalk varchar(100)" json:"typetalk"` + Uber string `xorm:"uber varchar(100)" json:"uber"` + VK string `xorm:"vk varchar(100)" json:"vk"` + Wepay string `xorm:"wepay varchar(100)" json:"wepay"` + Xero string `xorm:"xero varchar(100)" json:"xero"` + Yahoo string `xorm:"yahoo varchar(100)" json:"yahoo"` + Yammer string `xorm:"yammer varchar(100)" json:"yammer"` + Yandex string `xorm:"yandex varchar(100)" json:"yandex"` + Zoom string `xorm:"zoom varchar(100)" json:"zoom"` + Custom string `xorm:"custom varchar(100)" json:"custom"` WebauthnCredentials []webauthn.Credential `xorm:"webauthnCredentials blob" json:"webauthnCredentials"` diff --git a/web/src/Setting.js b/web/src/Setting.js index fbab9c53..9cc93a71 100644 --- a/web/src/Setting.js +++ b/web/src/Setting.js @@ -779,6 +779,54 @@ export function getProviderTypeOptions(category) { {id: "Okta", name: "Okta"}, {id: "Douyin", name: "Douyin"}, {id: "Line", name: "Line"}, + {id: "Amazon", name: "Amazon"}, + {id: "Auth0", name: "Auth0"}, + {id: "BattleNet", name: "Battle.net"}, + {id: "Bitbucket", name: "Bitbucket"}, + {id: "Box", name: "Box"}, + {id: "CloudFoundry", name: "Cloud Foundry"}, + {id: "Dailymotion", name: "Dailymotion"}, + {id: "Deezer", name: "Deezer"}, + {id: "DigitalOcean", name: "DigitalOcean"}, + {id: "Discord", name: "Discord"}, + {id: "Dropbox", name: "Dropbox"}, + {id: "EveOnline", name: "Eve Online"}, + {id: "Fitbit", name: "Fitbit"}, + {id: "Gitea", name: "Gitea"}, + {id: "Heroku", name: "Heroku"}, + {id: "InfluxCloud", name: "InfluxCloud"}, + {id: "Instagram", name: "Instagram"}, + {id: "Intercom", name: "Intercom"}, + {id: "Kakao", name: "Kakao"}, + {id: "Lastfm", name: "Lastfm"}, + {id: "Mailru", name: "Mailru"}, + {id: "Meetup", name: "Meetup"}, + {id: "MicrosoftOnline", name: "MicrosoftOnline"}, + {id: "Naver", name: "Naver"}, + {id: "Nextcloud", name: "Nextcloud"}, + {id: "OneDrive", name: "OneDrive"}, + {id: "Oura", name: "Oura"}, + {id: "Patreon", name: "Patreon"}, + {id: "Paypal", name: "Paypal"}, + {id: "SalesForce", name: "SalesForce"}, + {id: "Shopify", name: "Shopify"}, + {id: "Soundcloud", name: "Soundcloud"}, + {id: "Spotify", name: "Spotify"}, + {id: "Strava", name: "Strava"}, + {id: "Stripe", name: "Stripe"}, + {id: "TikTok", name: "TikTok"}, + {id: "Tumblr", name: "Tumblr"}, + {id: "Twitch", name: "Twitch"}, + {id: "Twitter", name: "Twitter"}, + {id: "Typetalk", name: "Typetalk"}, + {id: "Uber", name: "Uber"}, + {id: "VK", name: "VK"}, + {id: "Wepay", name: "Wepay"}, + {id: "Xero", name: "Xero"}, + {id: "Yahoo", name: "Yahoo"}, + {id: "Yammer", name: "Yammer"}, + {id: "Yandex", name: "Yandex"}, + {id: "Zoom", name: "Zoom"}, {id: "Custom", name: "Custom"}, ] ); diff --git a/web/src/auth/LineLoginButton.js b/web/src/auth/LineLoginButton.js deleted file mode 100644 index b81ed81d..00000000 --- a/web/src/auth/LineLoginButton.js +++ /dev/null @@ -1,32 +0,0 @@ -// 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. - -import {createButton} from "react-social-login-buttons"; -import {StaticBaseUrl} from "../Setting"; - -function Icon({width = 24, height = 24, color}) { - return Sign in with Line; -} - -const config = { - text: "Sign in with Line", - icon: Icon, - iconFormat: name => `fa fa-${name}`, - style: {background: "#ffffff", color: "#000000"}, - activeStyle: {background: "#ededee"}, -}; - -const LineLoginButton = createButton(config); - -export default LineLoginButton; diff --git a/web/src/auth/LoginButton.js b/web/src/auth/LoginButton.js new file mode 100644 index 00000000..d01eeff0 --- /dev/null +++ b/web/src/auth/LoginButton.js @@ -0,0 +1,34 @@ +// Copyright 2023 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. + +import i18next from "i18next"; +import {createButton} from "react-social-login-buttons"; +import {StaticBaseUrl} from "../Setting"; + +function LoginButton({type, align = "center", style = {background: "#ffffff", color: "#000000"}, activeStyle = {background: "#ededee"}}) { + function Icon({width = 24, height = 24, color}) { + return {`Sign; + } + const config = { + text: `Sign in with ${type}`, + icon: Icon, + style: style, + activeStyle: activeStyle, + }; + const Button = createButton(config); + const text = i18next.t("login:Sign in with {type}").replace("{type}", type); + return