// 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 React from "react"; import i18next from "i18next"; import * as Provider from "./Provider"; import {getProviderLogoURL} from "../Setting"; import {GithubLoginButton, GoogleLoginButton} from "react-social-login-buttons"; import QqLoginButton from "./QqLoginButton"; import FacebookLoginButton from "./FacebookLoginButton"; import WeiboLoginButton from "./WeiboLoginButton"; import GiteeLoginButton from "./GiteeLoginButton"; import WechatLoginButton from "./WechatLoginButton"; import DingTalkLoginButton from "./DingTalkLoginButton"; import LinkedInLoginButton from "./LinkedInLoginButton"; import WeComLoginButton from "./WeComLoginButton"; import LarkLoginButton from "./LarkLoginButton"; import GitLabLoginButton from "./GitLabLoginButton"; import AdfsLoginButton from "./AdfsLoginButton"; import CasdoorLoginButton from "./CasdoorLoginButton"; import BaiduLoginButton from "./BaiduLoginButton"; import AlipayLoginButton from "./AlipayLoginButton"; import InfoflowLoginButton from "./InfoflowLoginButton"; import AppleLoginButton from "./AppleLoginButton"; import AzureADLoginButton from "./AzureADLoginButton"; import AzureADB2CLoginButton from "./AzureADB2CLoginButton"; import SlackLoginButton from "./SlackLoginButton"; import SteamLoginButton from "./SteamLoginButton"; import BilibiliLoginButton from "./BilibiliLoginButton"; import OktaLoginButton from "./OktaLoginButton"; import DouyinLoginButton from "./DouyinLoginButton"; import LoginButton from "./LoginButton"; import * as AuthBackend from "./AuthBackend"; import * as Setting from "../Setting"; import {getEvent} from "./Util"; import {Modal} from "antd"; function getSigninButton(provider) { const text = i18next.t("login:Sign in with {type}").replace("{type}", provider.displayName !== "" ? provider.displayName : provider.type); if (provider.type === "GitHub") { return ; } else if (provider.type === "Google") { return ; } else if (provider.type === "QQ") { return ; } else if (provider.type === "Facebook") { return ; } else if (provider.type === "Weibo") { return ; } else if (provider.type === "Gitee") { return ; } else if (provider.type === "WeChat") { return ; } else if (provider.type === "DingTalk") { return ; } else if (provider.type === "LinkedIn") { return ; } else if (provider.type === "WeCom") { return ; } else if (provider.type === "Lark") { return ; } else if (provider.type === "GitLab") { return ; } else if (provider.type === "ADFS") { return ; } else if (provider.type === "Casdoor") { return ; } else if (provider.type === "Baidu") { return ; } else if (provider.type === "Alipay") { return ; } else if (provider.type === "Infoflow") { return ; } else if (provider.type === "Apple") { return ; } else if (provider.type === "AzureAD") { return ; } else if (provider.type === "AzureADB2C") { return ; } else if (provider.type === "Slack") { return ; } else if (provider.type === "Steam") { return ; } else if (provider.type === "Bilibili") { return ; } else if (provider.type === "Okta") { return ; } else if (provider.type === "Douyin") { return ; } else { return ; } } function goToSamlUrl(provider, location) { const params = new URLSearchParams(location.search); const clientId = params.get("client_id") ?? ""; const state = params.get("state"); const realRedirectUri = params.get("redirect_uri"); const redirectUri = `${window.location.origin}/callback/saml`; const providerName = provider.name; const relayState = `${clientId}&${state}&${providerName}&${realRedirectUri}&${redirectUri}`; AuthBackend.getSamlLogin(`${provider.owner}/${providerName}`, btoa(relayState)).then((res) => { if (res.data2 === "POST") { document.write(res.data); } else { window.location.href = res.data; } }); } export function goToWeb3Url(application, provider, method) { if (provider.type === "MetaMask") { import("./Web3Auth") .then(module => { const authViaMetaMask = module.authViaMetaMask; authViaMetaMask(application, provider, method); }); } else if (provider.type === "Web3Onboard") { import("./Web3Auth") .then(module => { const authViaWeb3Onboard = module.authViaWeb3Onboard; authViaWeb3Onboard(application, provider, method); }); } } export function renderProviderLogo(provider, application, width, margin, size, location) { if (size === "small") { if (provider.category === "OAuth") { if (provider.type === "WeChat" && provider.clientId2 !== "" && provider.clientSecret2 !== "" && provider.disableSsl === true && !navigator.userAgent.includes("MicroMessenger")) { const info = async() => { AuthBackend.getWechatQRCode(`${provider.owner}/${provider.name}`).then( async res => { if (res.status !== "ok") { Setting.showMessage("error", res?.msg); return; } const t1 = setInterval(await getEvent, 1000, application, provider, res.data2); {Modal.info({ title: i18next.t("provider:Please use WeChat to scan the QR code and follow the official account for sign in"), content: (
Wechat QR code
), onOk() { window.clearInterval(t1); }, });} } ); }; return ( {provider.displayName} ); } else { return ( {provider.displayName} ); } } else if (provider.category === "SAML") { return ( goToSamlUrl(provider, location)}> {provider.displayName} ); } else if (provider.category === "Web3") { return ( goToWeb3Url(application, provider, "signup")}> {provider.displayName} ); } } else if (provider.type === "Custom") { // style definition const text = i18next.t("login:Sign in with {type}").replace("{type}", provider.displayName); const customAStyle = {display: "block", height: "55px", color: "#000"}; const customButtonStyle = {display: "flex", alignItems: "center", width: "calc(100% - 10px)", height: "50px", margin: "5px", padding: "0 10px", backgroundColor: "transparent", boxShadow: "0px 1px 3px rgba(0,0,0,0.5)", border: "0px", borderRadius: "3px", cursor: "pointer"}; const customImgStyle = {justfyContent: "space-between"}; const customSpanStyle = {textAlign: "center", lineHeight: "50px", width: "100%", fontSize: "19px"}; if (provider.category === "OAuth") { return ( ); } else if (provider.category === "SAML") { return ( goToSamlUrl(provider, location)} style={customAStyle}> ); } } else { // big button, for disable password signin if (provider.category === "SAML") { return ( ); } else if (provider.category === "Web3") { return ( ); } else { return ( ); } } }