mirror of
https://github.com/casdoor/casdoor.git
synced 2025-07-25 17:00:29 +08:00
Compare commits
9 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
a3f8ded10c | ||
![]() |
e3d135bc6e | ||
![]() |
fc864b0de4 | ||
![]() |
3211bcc777 | ||
![]() |
9f4430ed04 | ||
![]() |
05830b9ff6 | ||
![]() |
347b25676f | ||
![]() |
2417ff84e6 | ||
![]() |
468631e654 |
@@ -238,6 +238,10 @@ func (c *ApiController) Signup() {
|
||||
}
|
||||
}
|
||||
|
||||
if invitation != nil && invitation.SignupGroup != "" {
|
||||
user.Groups = []string{invitation.SignupGroup}
|
||||
}
|
||||
|
||||
affected, err := object.AddUser(user)
|
||||
if err != nil {
|
||||
c.ResponseError(err.Error())
|
||||
|
@@ -132,7 +132,8 @@ func (c *ApiController) SendVerificationCode() {
|
||||
c.ResponseError(err.Error())
|
||||
return
|
||||
}
|
||||
remoteAddr := util.GetIPFromRequest(c.Ctx.Request)
|
||||
|
||||
clientIp := util.GetClientIpFromRequest(c.Ctx.Request)
|
||||
|
||||
if msg := vform.CheckParameter(form.SendVerifyCode, c.GetAcceptLanguage()); msg != "" {
|
||||
c.ResponseError(msg)
|
||||
@@ -259,7 +260,7 @@ func (c *ApiController) SendVerificationCode() {
|
||||
return
|
||||
}
|
||||
|
||||
sendResp = object.SendVerificationCodeToEmail(organization, user, provider, remoteAddr, vform.Dest)
|
||||
sendResp = object.SendVerificationCodeToEmail(organization, user, provider, clientIp, vform.Dest)
|
||||
case object.VerifyTypePhone:
|
||||
if vform.Method == LoginVerification || vform.Method == ForgetVerification {
|
||||
if user != nil && util.GetMaskedPhone(user.Phone) == vform.Dest {
|
||||
@@ -309,7 +310,7 @@ func (c *ApiController) SendVerificationCode() {
|
||||
c.ResponseError(fmt.Sprintf(c.T("verification:Phone number is invalid in your region %s"), vform.CountryCode))
|
||||
return
|
||||
} else {
|
||||
sendResp = object.SendVerificationCodeToPhone(organization, user, provider, remoteAddr, phone)
|
||||
sendResp = object.SendVerificationCodeToPhone(organization, user, provider, clientIp, phone)
|
||||
}
|
||||
}
|
||||
|
||||
|
2
go.mod
2
go.mod
@@ -11,6 +11,7 @@ require (
|
||||
github.com/casbin/casbin/v2 v2.77.2
|
||||
github.com/casdoor/go-sms-sender v0.24.0
|
||||
github.com/casdoor/gomail/v2 v2.0.1
|
||||
github.com/casdoor/ldapserver v1.2.0
|
||||
github.com/casdoor/notify v0.45.0
|
||||
github.com/casdoor/oss v1.8.0
|
||||
github.com/casdoor/xorm-adapter/v3 v3.1.0
|
||||
@@ -20,7 +21,6 @@ require (
|
||||
github.com/elazarl/go-bindata-assetfs v1.0.1 // indirect
|
||||
github.com/elimity-com/scim v0.0.0-20230426070224-941a5eac92f3
|
||||
github.com/fogleman/gg v1.3.0
|
||||
github.com/forestmgy/ldapserver v1.1.0
|
||||
github.com/go-asn1-ber/asn1-ber v1.5.5
|
||||
github.com/go-git/go-git/v5 v5.11.0
|
||||
github.com/go-ldap/ldap/v3 v3.4.6
|
||||
|
4
go.sum
4
go.sum
@@ -1091,6 +1091,8 @@ github.com/casdoor/go-sms-sender v0.24.0 h1:LNLsce3EG/87I3JS6UiajF3LlQmdIiCgebEu
|
||||
github.com/casdoor/go-sms-sender v0.24.0/go.mod h1:bOm4H8/YfJmEHjBatEVQFOnAf0OOn1B0Wi5B7zDhws0=
|
||||
github.com/casdoor/gomail/v2 v2.0.1 h1:J+FG6x80s9e5lBHUn8Sv0Y56mud34KiWih5YdmudR/w=
|
||||
github.com/casdoor/gomail/v2 v2.0.1/go.mod h1:VnGPslEAtpix5FjHisR/WKB1qvZDBaujbikxDe9d+2Q=
|
||||
github.com/casdoor/ldapserver v1.2.0 h1:HdSYe+ULU6z9K+2BqgTrJKQRR4//ERAXB64ttOun6Ow=
|
||||
github.com/casdoor/ldapserver v1.2.0/go.mod h1:VwYU2vqQ2pA8sa00PRekH71R2XmgfzMKhmp1XrrDu2s=
|
||||
github.com/casdoor/notify v0.45.0 h1:OlaFvcQFjGOgA4mRx07M8AH1gvb5xNo21mcqrVGlLgk=
|
||||
github.com/casdoor/notify v0.45.0/go.mod h1:wNHQu0tiDROMBIvz0j3Om3Lhd5yZ+AIfnFb8MYb8OLQ=
|
||||
github.com/casdoor/oss v1.8.0 h1:uuyKhDIp7ydOtV4lpqhAY23Ban2Ln8La8+QT36CwylM=
|
||||
@@ -1237,8 +1239,6 @@ github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga
|
||||
github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
|
||||
github.com/fogleman/gg v1.3.0 h1:/7zJX8F6AaYQc57WQCyN9cAIz+4bCJGO9B+dyW29am8=
|
||||
github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
|
||||
github.com/forestmgy/ldapserver v1.1.0 h1:gvil4nuLhqPEL8SugCkFhRyA0/lIvRdwZSqlrw63ll4=
|
||||
github.com/forestmgy/ldapserver v1.1.0/go.mod h1:1RZ8lox1QSY7rmbjdmy+sYQXY4Lp7SpGzpdE3+j3IyM=
|
||||
github.com/form3tech-oss/jwt-go v3.2.2+incompatible h1:TcekIExNqud5crz4xD2pavyTgWiPvpYe4Xau31I0PRk=
|
||||
github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
|
||||
github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
|
||||
|
@@ -21,7 +21,7 @@ import (
|
||||
|
||||
"github.com/casdoor/casdoor/conf"
|
||||
"github.com/casdoor/casdoor/object"
|
||||
ldap "github.com/forestmgy/ldapserver"
|
||||
ldap "github.com/casdoor/ldapserver"
|
||||
"github.com/lor00x/goldap/message"
|
||||
)
|
||||
|
||||
|
@@ -23,7 +23,7 @@ import (
|
||||
"github.com/casdoor/casdoor/util"
|
||||
"github.com/lor00x/goldap/message"
|
||||
|
||||
ldap "github.com/forestmgy/ldapserver"
|
||||
ldap "github.com/casdoor/ldapserver"
|
||||
|
||||
"github.com/xorm-io/builder"
|
||||
)
|
||||
|
@@ -50,7 +50,7 @@ func maskPassword(recordString string) string {
|
||||
}
|
||||
|
||||
func NewRecord(ctx *context.Context) (*casvisorsdk.Record, error) {
|
||||
ip := strings.Replace(util.GetIPFromRequest(ctx.Request), ": ", "", -1)
|
||||
clientIp := strings.Replace(util.GetClientIpFromRequest(ctx.Request), ": ", "", -1)
|
||||
action := strings.Replace(ctx.Request.URL.Path, "/api/", "", -1)
|
||||
requestUri := util.FilterQuery(ctx.Request.RequestURI, []string{"accessToken"})
|
||||
if len(requestUri) > 1000 {
|
||||
@@ -83,7 +83,7 @@ func NewRecord(ctx *context.Context) (*casvisorsdk.Record, error) {
|
||||
record := casvisorsdk.Record{
|
||||
Name: util.GenerateId(),
|
||||
CreatedTime: util.GetCurrentTime(),
|
||||
ClientIp: ip,
|
||||
ClientIp: clientIp,
|
||||
User: "",
|
||||
Method: ctx.Request.Method,
|
||||
RequestUri: requestUri,
|
||||
|
27
util/log.go
27
util/log.go
@@ -23,16 +23,15 @@ import (
|
||||
"github.com/beego/beego/logs"
|
||||
)
|
||||
|
||||
func GetIPInfo(clientIP string) string {
|
||||
if clientIP == "" {
|
||||
func getIpInfo(clientIp string) string {
|
||||
if clientIp == "" {
|
||||
return ""
|
||||
}
|
||||
|
||||
ips := strings.Split(clientIP, ",")
|
||||
ips := strings.Split(clientIp, ",")
|
||||
res := ""
|
||||
for i := range ips {
|
||||
ip := strings.TrimSpace(ips[i])
|
||||
// desc := GetDescFromIP(ip)
|
||||
ipstr := fmt.Sprintf("%s: %s", ip, "")
|
||||
if i != len(ips)-1 {
|
||||
res += ipstr + " -> "
|
||||
@@ -44,29 +43,29 @@ func GetIPInfo(clientIP string) string {
|
||||
return res
|
||||
}
|
||||
|
||||
func GetIPFromRequest(req *http.Request) string {
|
||||
clientIP := req.Header.Get("x-forwarded-for")
|
||||
if clientIP == "" {
|
||||
func GetClientIpFromRequest(req *http.Request) string {
|
||||
clientIp := req.Header.Get("x-forwarded-for")
|
||||
if clientIp == "" {
|
||||
ipPort := strings.Split(req.RemoteAddr, ":")
|
||||
if len(ipPort) >= 1 && len(ipPort) <= 2 {
|
||||
clientIP = ipPort[0]
|
||||
clientIp = ipPort[0]
|
||||
} else if len(ipPort) > 2 {
|
||||
idx := strings.LastIndex(req.RemoteAddr, ":")
|
||||
clientIP = req.RemoteAddr[0:idx]
|
||||
clientIP = strings.TrimLeft(clientIP, "[")
|
||||
clientIP = strings.TrimRight(clientIP, "]")
|
||||
clientIp = req.RemoteAddr[0:idx]
|
||||
clientIp = strings.TrimLeft(clientIp, "[")
|
||||
clientIp = strings.TrimRight(clientIp, "]")
|
||||
}
|
||||
}
|
||||
|
||||
return GetIPInfo(clientIP)
|
||||
return getIpInfo(clientIp)
|
||||
}
|
||||
|
||||
func LogInfo(ctx *context.Context, f string, v ...interface{}) {
|
||||
ipString := fmt.Sprintf("(%s) ", GetIPFromRequest(ctx.Request))
|
||||
ipString := fmt.Sprintf("(%s) ", GetClientIpFromRequest(ctx.Request))
|
||||
logs.Info(ipString+f, v...)
|
||||
}
|
||||
|
||||
func LogWarning(ctx *context.Context, f string, v ...interface{}) {
|
||||
ipString := fmt.Sprintf("(%s) ", GetIPFromRequest(ctx.Request))
|
||||
ipString := fmt.Sprintf("(%s) ", GetClientIpFromRequest(ctx.Request))
|
||||
logs.Warning(ipString+f, v...)
|
||||
}
|
||||
|
@@ -51,6 +51,9 @@ func IsPhoneValid(phone string, countryCode string) bool {
|
||||
}
|
||||
|
||||
func IsPhoneAllowInRegin(countryCode string, allowRegions []string) bool {
|
||||
if ContainsString(allowRegions, "All") {
|
||||
return true
|
||||
}
|
||||
return ContainsString(allowRegions, countryCode)
|
||||
}
|
||||
|
||||
|
@@ -362,7 +362,11 @@ class App extends Component {
|
||||
if (this.isDoorPages()) {
|
||||
return (
|
||||
<ConfigProvider theme={{
|
||||
algorithm: Setting.getAlgorithm(["default"]),
|
||||
token: {
|
||||
colorPrimary: this.state.themeData.colorPrimary,
|
||||
borderRadius: this.state.themeData.borderRadius,
|
||||
},
|
||||
algorithm: Setting.getAlgorithm(this.state.themeAlgorithm),
|
||||
}}>
|
||||
<StyleProvider hashPriority="high" transformers={[legacyLogicalPropertiesTransformer]}>
|
||||
<Layout id="parent-area">
|
||||
@@ -372,6 +376,7 @@ class App extends Component {
|
||||
<EntryPage
|
||||
account={this.state.account}
|
||||
theme={this.state.themeData}
|
||||
themeAlgorithm={this.state.themeAlgorithm}
|
||||
updateApplication={(application) => {
|
||||
this.setState({
|
||||
application: application,
|
||||
@@ -446,7 +451,6 @@ class App extends Component {
|
||||
setLogoutState={() => {
|
||||
this.setState({
|
||||
account: null,
|
||||
themeAlgorithm: ["default"],
|
||||
});
|
||||
}}
|
||||
/>
|
||||
|
@@ -129,6 +129,15 @@ img {
|
||||
background-attachment: fixed;
|
||||
}
|
||||
|
||||
.loginBackgroundDark {
|
||||
flex: auto;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
background: #000 no-repeat;
|
||||
background-size: 100% 100%;
|
||||
background-attachment: fixed;
|
||||
}
|
||||
|
||||
.ant-menu-horizontal {
|
||||
border-bottom: none !important;
|
||||
}
|
||||
|
@@ -46,12 +46,18 @@ require("codemirror/mode/css/css");
|
||||
const {Option} = Select;
|
||||
|
||||
const template = `<style>
|
||||
.login-panel{
|
||||
.login-panel {
|
||||
padding: 40px 70px 0 70px;
|
||||
border-radius: 10px;
|
||||
background-color: #ffffff;
|
||||
box-shadow: 0 0 30px 20px rgba(0, 0, 0, 0.20);
|
||||
}
|
||||
}
|
||||
.login-panel-dark {
|
||||
padding: 40px 70px 0 70px;
|
||||
border-radius: 10px;
|
||||
background-color: #333333;
|
||||
box-shadow: 0 0 30px 20px rgba(255, 255, 255, 0.20);
|
||||
}
|
||||
</style>`;
|
||||
|
||||
const previewGrid = Setting.isMobile() ? 22 : 11;
|
||||
@@ -977,6 +983,7 @@ class ApplicationEditPage extends React.Component {
|
||||
<SigninTable
|
||||
title={i18next.t("application:Signin items")}
|
||||
table={this.state.application.signinItems}
|
||||
themeAlgorithm={this.state.themeAlgorithm}
|
||||
onUpdateTable={(value) => {
|
||||
this.updateApplicationField("signinItems", value);
|
||||
}}
|
||||
|
@@ -94,10 +94,12 @@ class EntryPage extends React.Component {
|
||||
});
|
||||
};
|
||||
|
||||
const isDarkMode = this.props.themeAlgorithm.includes("dark");
|
||||
|
||||
return (
|
||||
<React.Fragment>
|
||||
<CustomHead headerHtml={this.state.application?.headerHtml} />
|
||||
<div className="loginBackground"
|
||||
<div className={`${isDarkMode ? "loginBackgroundDark" : "loginBackground"}`}
|
||||
style={{backgroundImage: Setting.inIframe() || Setting.isMobile() ? null : `url(${this.state.application?.formBackgroundUrl})`}}>
|
||||
<Spin size="large" spinning={this.state.application === undefined && this.state.pricing === undefined} tip={i18next.t("login:Loading")}
|
||||
style={{margin: "0 auto"}} />
|
||||
@@ -124,6 +126,7 @@ class EntryPage extends React.Component {
|
||||
<Route exact path="/captcha" render={(props) => <CaptchaPage {...props} />} />
|
||||
</Switch>
|
||||
</div>
|
||||
|
||||
</React.Fragment>
|
||||
);
|
||||
}
|
||||
|
@@ -20,6 +20,7 @@ import * as ApplicationBackend from "./backend/ApplicationBackend";
|
||||
import * as Setting from "./Setting";
|
||||
import i18next from "i18next";
|
||||
import copy from "copy-to-clipboard";
|
||||
import * as GroupBackend from "./backend/GroupBackend";
|
||||
|
||||
const {Option} = Select;
|
||||
|
||||
@@ -33,6 +34,7 @@ class InvitationEditPage extends React.Component {
|
||||
invitation: null,
|
||||
organizations: [],
|
||||
applications: [],
|
||||
groups: [],
|
||||
mode: props.location.mode !== undefined ? props.location.mode : "edit",
|
||||
};
|
||||
}
|
||||
@@ -41,6 +43,7 @@ class InvitationEditPage extends React.Component {
|
||||
this.getInvitation();
|
||||
this.getOrganizations();
|
||||
this.getApplicationsByOrganization(this.state.organizationName);
|
||||
this.getGroupsByOrganization(this.state.organizationName);
|
||||
}
|
||||
|
||||
getInvitation() {
|
||||
@@ -75,6 +78,17 @@ class InvitationEditPage extends React.Component {
|
||||
});
|
||||
}
|
||||
|
||||
getGroupsByOrganization(organizationName) {
|
||||
GroupBackend.getGroups(organizationName)
|
||||
.then((res) => {
|
||||
if (res.status === "ok") {
|
||||
this.setState({
|
||||
groups: res.data,
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
parseInvitationField(key, value) {
|
||||
if ([""].includes(key)) {
|
||||
value = Setting.myParseInt(value);
|
||||
@@ -120,7 +134,7 @@ class InvitationEditPage extends React.Component {
|
||||
{Setting.getLabel(i18next.t("general:Organization"), i18next.t("general:Organization - Tooltip"))} :
|
||||
</Col>
|
||||
<Col span={22} >
|
||||
<Select virtual={false} style={{width: "100%"}} disabled={!Setting.isAdminUser(this.props.account) || isCreatedByPlan} value={this.state.invitation.owner} onChange={(value => {this.updateInvitationField("owner", value); this.getApplicationsByOrganization(value);})}>
|
||||
<Select virtual={false} style={{width: "100%"}} disabled={!Setting.isAdminUser(this.props.account) || isCreatedByPlan} value={this.state.invitation.owner} onChange={(value => {this.updateInvitationField("owner", value); this.getApplicationsByOrganization(value);this.getGroupsByOrganization(value);})}>
|
||||
{
|
||||
this.state.organizations.map((organization, index) => <Option key={index} value={organization.name}>{organization.name}</Option>)
|
||||
}
|
||||
@@ -204,6 +218,21 @@ class InvitationEditPage extends React.Component {
|
||||
]} />
|
||||
</Col>
|
||||
</Row>
|
||||
<Row style={{marginTop: "20px"}} >
|
||||
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
|
||||
{Setting.getLabel(i18next.t("provider:Signup group"), i18next.t("provider:Signup group - Tooltip"))} :
|
||||
</Col>
|
||||
<Col span={22} >
|
||||
<Select virtual={false} style={{width: "100%"}} value={this.state.invitation.signupGroup} onChange={(value => {this.updateInvitationField("signupGroup", value);})}>
|
||||
<Option key={""} value={""}>
|
||||
{i18next.t("general:Default")}
|
||||
</Option>
|
||||
{
|
||||
this.state.groups.map((group, index) => <Option key={index} value={`${group.owner}/${group.name}`}>{group.name}</Option>)
|
||||
}
|
||||
</Select>
|
||||
</Col>
|
||||
</Row>
|
||||
<Row style={{marginTop: "20px"}} >
|
||||
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
|
||||
{Setting.getLabel(i18next.t("signup:Username"), i18next.t("signup:Username - Tooltip"))} :
|
||||
|
@@ -350,6 +350,7 @@ class OrganizationEditPage extends React.Component {
|
||||
}}
|
||||
filterOption={(input, option) => (option?.text ?? "").toLowerCase().includes(input.toLowerCase())}
|
||||
>
|
||||
{Setting.getCountryCodeOption({name: i18next.t("organization:All"), code: "All", phone: 0})}
|
||||
{
|
||||
Setting.getCountryCodeData().map((country) => Setting.getCountryCodeOption(country))
|
||||
}
|
||||
|
@@ -418,6 +418,9 @@ export function getCountryCode(country) {
|
||||
}
|
||||
|
||||
export function getCountryCodeData(countryCodes = phoneNumber.getCountries()) {
|
||||
if (countryCodes?.includes("All")) {
|
||||
countryCodes = phoneNumber.getCountries();
|
||||
}
|
||||
return countryCodes?.map((countryCode) => {
|
||||
if (phoneNumber.isSupportedCountry(countryCode)) {
|
||||
const name = initCountries().getName(countryCode, getLanguage());
|
||||
@@ -436,10 +439,10 @@ export function getCountryCodeOption(country) {
|
||||
<Option key={country.code} value={country.code} label={`+${country.phone}`} text={`${country.name}, ${country.code}, ${country.phone}`} >
|
||||
<div style={{display: "flex", justifyContent: "space-between", marginRight: "10px"}}>
|
||||
<div>
|
||||
{getCountryImage(country)}
|
||||
{country.code === "All" ? null : getCountryImage(country)}
|
||||
{`${country.name}`}
|
||||
</div>
|
||||
{`+${country.phone}`}
|
||||
{country.code === "All" ? null : `+${country.phone}`}
|
||||
</div>
|
||||
</Option>
|
||||
);
|
||||
@@ -1554,3 +1557,7 @@ export function getCurrencyText(product) {
|
||||
return "(Unknown currency)";
|
||||
}
|
||||
}
|
||||
|
||||
export function isDarkTheme(themeAlgorithm) {
|
||||
return themeAlgorithm && themeAlgorithm.includes("dark");
|
||||
}
|
||||
|
@@ -52,7 +52,6 @@ class LoginPage extends React.Component {
|
||||
username: null,
|
||||
validEmailOrPhone: false,
|
||||
validEmail: false,
|
||||
enableCaptchaModal: CaptchaRule.Never,
|
||||
openCaptchaModal: false,
|
||||
openFaceRecognitionModal: false,
|
||||
verifyCaptcha: undefined,
|
||||
@@ -93,17 +92,6 @@ class LoginPage extends React.Component {
|
||||
}
|
||||
if (prevProps.application !== this.props.application) {
|
||||
this.setState({loginMethod: this.getDefaultLoginMethod(this.props.application)});
|
||||
|
||||
const captchaProviderItems = this.getCaptchaProviderItems(this.props.application);
|
||||
if (captchaProviderItems) {
|
||||
if (captchaProviderItems.some(providerItem => providerItem.rule === "Always")) {
|
||||
this.setState({enableCaptchaModal: CaptchaRule.Always});
|
||||
} else if (captchaProviderItems.some(providerItem => providerItem.rule === "Dynamic")) {
|
||||
this.setState({enableCaptchaModal: CaptchaRule.Dynamic});
|
||||
} else {
|
||||
this.setState({enableCaptchaModal: CaptchaRule.Never});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (prevProps.account !== this.props.account && this.props.account !== undefined) {
|
||||
@@ -133,6 +121,19 @@ class LoginPage extends React.Component {
|
||||
}
|
||||
}
|
||||
|
||||
getCaptchaRule(application) {
|
||||
const captchaProviderItems = this.getCaptchaProviderItems(application);
|
||||
if (captchaProviderItems) {
|
||||
if (captchaProviderItems.some(providerItem => providerItem.rule === "Always")) {
|
||||
return CaptchaRule.Always;
|
||||
} else if (captchaProviderItems.some(providerItem => providerItem.rule === "Dynamic")) {
|
||||
return CaptchaRule.Dynamic;
|
||||
} else {
|
||||
return CaptchaRule.Never;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
checkCaptchaStatus(values) {
|
||||
AuthBackend.getCaptchaStatus(values)
|
||||
.then((res) => {
|
||||
@@ -388,13 +389,14 @@ class LoginPage extends React.Component {
|
||||
} else {
|
||||
values["password"] = passwordCipher;
|
||||
}
|
||||
if (this.state.enableCaptchaModal === CaptchaRule.Always) {
|
||||
const captchaRule = this.getCaptchaRule(this.getApplicationObj());
|
||||
if (captchaRule === CaptchaRule.Always) {
|
||||
this.setState({
|
||||
openCaptchaModal: true,
|
||||
values: values,
|
||||
});
|
||||
return;
|
||||
} else if (this.state.enableCaptchaModal === CaptchaRule.Dynamic) {
|
||||
} else if (captchaRule === CaptchaRule.Dynamic) {
|
||||
this.checkCaptchaStatus(values);
|
||||
return;
|
||||
}
|
||||
@@ -911,7 +913,7 @@ class LoginPage extends React.Component {
|
||||
}
|
||||
|
||||
renderCaptchaModal(application) {
|
||||
if (this.state.enableCaptchaModal === CaptchaRule.Never) {
|
||||
if (this.getCaptchaRule(this.getApplicationObj()) === CaptchaRule.Never) {
|
||||
return null;
|
||||
}
|
||||
const captchaProviderItems = this.getCaptchaProviderItems(application);
|
||||
@@ -1291,7 +1293,7 @@ class LoginPage extends React.Component {
|
||||
<div className="login-content" style={{margin: this.props.preview ?? this.parseOffset(application.formOffset)}}>
|
||||
{Setting.inIframe() || Setting.isMobile() ? null : <div dangerouslySetInnerHTML={{__html: application.formCss}} />}
|
||||
{Setting.inIframe() || !Setting.isMobile() ? null : <div dangerouslySetInnerHTML={{__html: application.formCssMobile}} />}
|
||||
<div className="login-panel">
|
||||
<div className={Setting.isDarkTheme(this.props.themeAlgorithm) ? "login-panel-dark" : "login-panel"}>
|
||||
<div className="side-image" style={{display: application.formOffset !== 4 ? "none" : null}}>
|
||||
<div dangerouslySetInnerHTML={{__html: application.formSideHtml}} />
|
||||
</div>
|
||||
|
@@ -842,7 +842,7 @@ class SignupPage extends React.Component {
|
||||
<div className="login-content" style={{margin: this.props.preview ?? this.parseOffset(application.formOffset)}}>
|
||||
{Setting.inIframe() || Setting.isMobile() ? null : <div dangerouslySetInnerHTML={{__html: application.formCss}} />}
|
||||
{Setting.inIframe() || !Setting.isMobile() ? null : <div dangerouslySetInnerHTML={{__html: application.formCssMobile}} />}
|
||||
<div className="login-panel" >
|
||||
<div className={Setting.isDarkTheme(this.props.themeAlgorithm) ? "login-panel-dark" : "login-panel"}>
|
||||
<div className="side-image" style={{display: application.formOffset !== 4 ? "none" : null}}>
|
||||
<div dangerouslySetInnerHTML={{__html: application.formSideHtml}} />
|
||||
</div>
|
||||
|
@@ -12,7 +12,7 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
import React, {useState} from "react";
|
||||
import React, {Fragment, useState} from "react";
|
||||
import i18next from "i18next";
|
||||
import {Button, Input} from "antd";
|
||||
import * as AuthBackend from "../AuthBackend";
|
||||
@@ -67,24 +67,32 @@ export function MfaAuthVerifyForm({formValues, authParams, mfaProps, application
|
||||
|
||||
if (mfaType !== RecoveryMfaType) {
|
||||
return (
|
||||
<div style={{width: 300, height: 350}}>
|
||||
<div style={{width: 320, height: 350}}>
|
||||
<div style={{marginBottom: 24, textAlign: "center", fontSize: "24px"}}>
|
||||
{i18next.t("mfa:Multi-factor authentication")}
|
||||
</div>
|
||||
<div style={{marginBottom: 24}}>
|
||||
{i18next.t("mfa:Multi-factor authentication description")}
|
||||
</div>
|
||||
{mfaType === SmsMfaType || mfaType === EmailMfaType ? (
|
||||
<MfaVerifySmsForm
|
||||
mfaProps={mfaProps}
|
||||
method={mfaAuth}
|
||||
onFinish={verify}
|
||||
application={application}
|
||||
/>) : (
|
||||
<MfaVerifyTotpForm
|
||||
mfaProps={mfaProps}
|
||||
onFinish={verify}
|
||||
/>
|
||||
<Fragment>
|
||||
<div style={{marginBottom: 24}}>
|
||||
{i18next.t("mfa:You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue")}
|
||||
</div>
|
||||
<MfaVerifySmsForm
|
||||
mfaProps={mfaProps}
|
||||
method={mfaAuth}
|
||||
onFinish={verify}
|
||||
application={application}
|
||||
/>
|
||||
</Fragment>
|
||||
) : (
|
||||
<Fragment>
|
||||
<div style={{marginBottom: 24}}>
|
||||
{i18next.t("mfa:You have enabled Multi-Factor Authentication, please enter the TOTP code")}
|
||||
</div>
|
||||
<MfaVerifyTotpForm
|
||||
mfaProps={mfaProps}
|
||||
onFinish={verify}
|
||||
/>
|
||||
</Fragment>
|
||||
)}
|
||||
<span style={{float: "right"}}>
|
||||
{i18next.t("mfa:Have problems?")}
|
||||
|
@@ -538,7 +538,6 @@
|
||||
"Have problems?": "Have problems?",
|
||||
"Multi-factor authentication": "Multi-factor authentication",
|
||||
"Multi-factor authentication - Tooltip ": "Multi-factor authentication - Tooltip ",
|
||||
"Multi-factor authentication description": "Multi-factor authentication description",
|
||||
"Multi-factor methods": "Multi-factor methods",
|
||||
"Multi-factor recover": "Multi-factor recover",
|
||||
"Multi-factor recover description": "Multi-factor recover description",
|
||||
@@ -563,6 +562,8 @@
|
||||
"Verification failed": "Verification failed",
|
||||
"Verify Code": "Verify Code",
|
||||
"Verify Password": "Verify Password",
|
||||
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
|
||||
"You have enabled Multi-Factor Authentication, please enter the TOTP code": "You have enabled Multi-Factor Authentication, please enter the TOTP code",
|
||||
"Your email is": "Your email is",
|
||||
"Your phone is": "Your phone is",
|
||||
"preferred": "preferred"
|
||||
|
@@ -538,7 +538,6 @@
|
||||
"Have problems?": "Máte problémy?",
|
||||
"Multi-factor authentication": "Vícefaktorové ověřování",
|
||||
"Multi-factor authentication - Tooltip ": "Dvoufaktorové ověřování - Tooltip",
|
||||
"Multi-factor authentication description": "Popis dvoufaktorového ověřování",
|
||||
"Multi-factor methods": "Metody dvoufaktorového ověřování",
|
||||
"Multi-factor recover": "Obnovení dvoufaktorového ověřování",
|
||||
"Multi-factor recover description": "Popis obnovení dvoufaktorového ověřování",
|
||||
@@ -563,6 +562,8 @@
|
||||
"Verification failed": "Ověření selhalo",
|
||||
"Verify Code": "Ověřit kód",
|
||||
"Verify Password": "Ověřit heslo",
|
||||
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
|
||||
"You have enabled Multi-Factor Authentication, please enter the TOTP code": "You have enabled Multi-Factor Authentication, please enter the TOTP code",
|
||||
"Your email is": "Váš email je",
|
||||
"Your phone is": "Váš telefon je",
|
||||
"preferred": "preferované"
|
||||
|
@@ -538,7 +538,6 @@
|
||||
"Have problems?": "Have problems?",
|
||||
"Multi-factor authentication": "Multi-factor authentication",
|
||||
"Multi-factor authentication - Tooltip ": "Multi-factor authentication - Tooltip ",
|
||||
"Multi-factor authentication description": "Multi-factor authentication description",
|
||||
"Multi-factor methods": "Multi-factor methods",
|
||||
"Multi-factor recover": "Multi-factor recover",
|
||||
"Multi-factor recover description": "Multi-factor recover description",
|
||||
@@ -563,6 +562,8 @@
|
||||
"Verification failed": "Verification failed",
|
||||
"Verify Code": "Verify Code",
|
||||
"Verify Password": "Verify Password",
|
||||
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
|
||||
"You have enabled Multi-Factor Authentication, please enter the TOTP code": "You have enabled Multi-Factor Authentication, please enter the TOTP code",
|
||||
"Your email is": "Your email is",
|
||||
"Your phone is": "Your phone is",
|
||||
"preferred": "preferred"
|
||||
|
@@ -538,7 +538,6 @@
|
||||
"Have problems?": "Have problems?",
|
||||
"Multi-factor authentication": "Multi-factor authentication",
|
||||
"Multi-factor authentication - Tooltip ": "Multi-factor authentication - Tooltip ",
|
||||
"Multi-factor authentication description": "Multi-factor authentication description",
|
||||
"Multi-factor methods": "Multi-factor methods",
|
||||
"Multi-factor recover": "Multi-factor recover",
|
||||
"Multi-factor recover description": "Multi-factor recover description",
|
||||
@@ -563,6 +562,8 @@
|
||||
"Verification failed": "Verification failed",
|
||||
"Verify Code": "Verify Code",
|
||||
"Verify Password": "Verify Password",
|
||||
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
|
||||
"You have enabled Multi-Factor Authentication, please enter the TOTP code": "You have enabled Multi-Factor Authentication, please enter the TOTP code",
|
||||
"Your email is": "Your email is",
|
||||
"Your phone is": "Your phone is",
|
||||
"preferred": "preferred"
|
||||
|
@@ -538,7 +538,6 @@
|
||||
"Have problems?": "Have problems?",
|
||||
"Multi-factor authentication": "Multi-factor authentication",
|
||||
"Multi-factor authentication - Tooltip ": "Multi-factor authentication - Tooltip ",
|
||||
"Multi-factor authentication description": "Multi-factor authentication description",
|
||||
"Multi-factor methods": "Multi-factor methods",
|
||||
"Multi-factor recover": "Multi-factor recover",
|
||||
"Multi-factor recover description": "Multi-factor recover description",
|
||||
@@ -563,6 +562,8 @@
|
||||
"Verification failed": "Verification failed",
|
||||
"Verify Code": "Verify Code",
|
||||
"Verify Password": "Verify Password",
|
||||
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
|
||||
"You have enabled Multi-Factor Authentication, please enter the TOTP code": "You have enabled Multi-Factor Authentication, please enter the TOTP code",
|
||||
"Your email is": "Your email is",
|
||||
"Your phone is": "Your phone is",
|
||||
"preferred": "preferred"
|
||||
|
@@ -538,7 +538,6 @@
|
||||
"Have problems?": "Have problems?",
|
||||
"Multi-factor authentication": "Multi-factor authentication",
|
||||
"Multi-factor authentication - Tooltip ": "Multi-factor authentication - Tooltip ",
|
||||
"Multi-factor authentication description": "Multi-factor authentication description",
|
||||
"Multi-factor methods": "Multi-factor methods",
|
||||
"Multi-factor recover": "Multi-factor recover",
|
||||
"Multi-factor recover description": "Multi-factor recover description",
|
||||
@@ -563,6 +562,8 @@
|
||||
"Verification failed": "Verification failed",
|
||||
"Verify Code": "Verify Code",
|
||||
"Verify Password": "Verify Password",
|
||||
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
|
||||
"You have enabled Multi-Factor Authentication, please enter the TOTP code": "You have enabled Multi-Factor Authentication, please enter the TOTP code",
|
||||
"Your email is": "Your email is",
|
||||
"Your phone is": "Your phone is",
|
||||
"preferred": "preferred"
|
||||
|
@@ -538,7 +538,6 @@
|
||||
"Have problems?": "Have problems?",
|
||||
"Multi-factor authentication": "Multi-factor authentication",
|
||||
"Multi-factor authentication - Tooltip ": "Multi-factor authentication - Tooltip ",
|
||||
"Multi-factor authentication description": "Multi-factor authentication description",
|
||||
"Multi-factor methods": "Multi-factor methods",
|
||||
"Multi-factor recover": "Multi-factor recover",
|
||||
"Multi-factor recover description": "Multi-factor recover description",
|
||||
@@ -563,6 +562,8 @@
|
||||
"Verification failed": "Verification failed",
|
||||
"Verify Code": "Verify Code",
|
||||
"Verify Password": "Verify Password",
|
||||
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
|
||||
"You have enabled Multi-Factor Authentication, please enter the TOTP code": "You have enabled Multi-Factor Authentication, please enter the TOTP code",
|
||||
"Your email is": "Your email is",
|
||||
"Your phone is": "Your phone is",
|
||||
"preferred": "preferred"
|
||||
|
@@ -538,7 +538,6 @@
|
||||
"Have problems?": "Des problèmes ?",
|
||||
"Multi-factor authentication": "Authentification multifacteur",
|
||||
"Multi-factor authentication - Tooltip ": "Authentification multifacteur - infobulle ",
|
||||
"Multi-factor authentication description": "Description de l'authentification multifacteur",
|
||||
"Multi-factor methods": "Méthodes d'authentification multifacteur",
|
||||
"Multi-factor recover": "Restauration de l'authentification multifacteur",
|
||||
"Multi-factor recover description": "Description de la restauration de l'authentification multifacteur",
|
||||
@@ -563,6 +562,8 @@
|
||||
"Verification failed": "Échec de la vérification",
|
||||
"Verify Code": "Vérifier le code",
|
||||
"Verify Password": "Confirmez le mot de passe",
|
||||
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
|
||||
"You have enabled Multi-Factor Authentication, please enter the TOTP code": "You have enabled Multi-Factor Authentication, please enter the TOTP code",
|
||||
"Your email is": "Votre e-mail est",
|
||||
"Your phone is": "Votre téléphone est",
|
||||
"preferred": "préféré"
|
||||
|
@@ -538,7 +538,6 @@
|
||||
"Have problems?": "Have problems?",
|
||||
"Multi-factor authentication": "Multi-factor authentication",
|
||||
"Multi-factor authentication - Tooltip ": "Multi-factor authentication - Tooltip ",
|
||||
"Multi-factor authentication description": "Multi-factor authentication description",
|
||||
"Multi-factor methods": "Multi-factor methods",
|
||||
"Multi-factor recover": "Multi-factor recover",
|
||||
"Multi-factor recover description": "Multi-factor recover description",
|
||||
@@ -563,6 +562,8 @@
|
||||
"Verification failed": "Verification failed",
|
||||
"Verify Code": "Verify Code",
|
||||
"Verify Password": "Verify Password",
|
||||
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
|
||||
"You have enabled Multi-Factor Authentication, please enter the TOTP code": "You have enabled Multi-Factor Authentication, please enter the TOTP code",
|
||||
"Your email is": "Your email is",
|
||||
"Your phone is": "Your phone is",
|
||||
"preferred": "preferred"
|
||||
|
@@ -538,7 +538,6 @@
|
||||
"Have problems?": "Have problems?",
|
||||
"Multi-factor authentication": "Multi-factor authentication",
|
||||
"Multi-factor authentication - Tooltip ": "Multi-factor authentication - Tooltip ",
|
||||
"Multi-factor authentication description": "Multi-factor authentication description",
|
||||
"Multi-factor methods": "Multi-factor methods",
|
||||
"Multi-factor recover": "Multi-factor recover",
|
||||
"Multi-factor recover description": "Multi-factor recover description",
|
||||
@@ -563,6 +562,8 @@
|
||||
"Verification failed": "Verification failed",
|
||||
"Verify Code": "Verify Code",
|
||||
"Verify Password": "Verify Password",
|
||||
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
|
||||
"You have enabled Multi-Factor Authentication, please enter the TOTP code": "You have enabled Multi-Factor Authentication, please enter the TOTP code",
|
||||
"Your email is": "Your email is",
|
||||
"Your phone is": "Your phone is",
|
||||
"preferred": "preferred"
|
||||
|
@@ -538,7 +538,6 @@
|
||||
"Have problems?": "Have problems?",
|
||||
"Multi-factor authentication": "Multi-factor authentication",
|
||||
"Multi-factor authentication - Tooltip ": "Multi-factor authentication - Tooltip ",
|
||||
"Multi-factor authentication description": "Multi-factor authentication description",
|
||||
"Multi-factor methods": "Multi-factor methods",
|
||||
"Multi-factor recover": "Multi-factor recover",
|
||||
"Multi-factor recover description": "Multi-factor recover description",
|
||||
@@ -563,6 +562,8 @@
|
||||
"Verification failed": "Verification failed",
|
||||
"Verify Code": "Verify Code",
|
||||
"Verify Password": "Verify Password",
|
||||
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
|
||||
"You have enabled Multi-Factor Authentication, please enter the TOTP code": "You have enabled Multi-Factor Authentication, please enter the TOTP code",
|
||||
"Your email is": "Your email is",
|
||||
"Your phone is": "Your phone is",
|
||||
"preferred": "preferred"
|
||||
|
@@ -538,7 +538,6 @@
|
||||
"Have problems?": "Have problems?",
|
||||
"Multi-factor authentication": "Multi-factor authentication",
|
||||
"Multi-factor authentication - Tooltip ": "Multi-factor authentication - Tooltip ",
|
||||
"Multi-factor authentication description": "Multi-factor authentication description",
|
||||
"Multi-factor methods": "Multi-factor methods",
|
||||
"Multi-factor recover": "Multi-factor recover",
|
||||
"Multi-factor recover description": "Multi-factor recover description",
|
||||
@@ -563,6 +562,8 @@
|
||||
"Verification failed": "Verification failed",
|
||||
"Verify Code": "Verify Code",
|
||||
"Verify Password": "Verify Password",
|
||||
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
|
||||
"You have enabled Multi-Factor Authentication, please enter the TOTP code": "You have enabled Multi-Factor Authentication, please enter the TOTP code",
|
||||
"Your email is": "Your email is",
|
||||
"Your phone is": "Your phone is",
|
||||
"preferred": "preferred"
|
||||
|
@@ -538,7 +538,6 @@
|
||||
"Have problems?": "Have problems?",
|
||||
"Multi-factor authentication": "Multi-factor authentication",
|
||||
"Multi-factor authentication - Tooltip ": "Multi-factor authentication - Tooltip ",
|
||||
"Multi-factor authentication description": "Multi-factor authentication description",
|
||||
"Multi-factor methods": "Multi-factor methods",
|
||||
"Multi-factor recover": "Multi-factor recover",
|
||||
"Multi-factor recover description": "Multi-factor recover description",
|
||||
@@ -563,6 +562,8 @@
|
||||
"Verification failed": "Verification failed",
|
||||
"Verify Code": "Verify Code",
|
||||
"Verify Password": "Verify Password",
|
||||
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
|
||||
"You have enabled Multi-Factor Authentication, please enter the TOTP code": "You have enabled Multi-Factor Authentication, please enter the TOTP code",
|
||||
"Your email is": "Your email is",
|
||||
"Your phone is": "Your phone is",
|
||||
"preferred": "preferred"
|
||||
|
@@ -538,7 +538,6 @@
|
||||
"Have problems?": "Have problems?",
|
||||
"Multi-factor authentication": "Multi-factor authentication",
|
||||
"Multi-factor authentication - Tooltip ": "Multi-factor authentication - Tooltip ",
|
||||
"Multi-factor authentication description": "Multi-factor authentication description",
|
||||
"Multi-factor methods": "Multi-factor methods",
|
||||
"Multi-factor recover": "Multi-factor recover",
|
||||
"Multi-factor recover description": "Multi-factor recover description",
|
||||
@@ -563,6 +562,8 @@
|
||||
"Verification failed": "Verification failed",
|
||||
"Verify Code": "Verify Code",
|
||||
"Verify Password": "Verify Password",
|
||||
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
|
||||
"You have enabled Multi-Factor Authentication, please enter the TOTP code": "You have enabled Multi-Factor Authentication, please enter the TOTP code",
|
||||
"Your email is": "Your email is",
|
||||
"Your phone is": "Your phone is",
|
||||
"preferred": "preferred"
|
||||
|
@@ -538,7 +538,6 @@
|
||||
"Have problems?": "Have problems?",
|
||||
"Multi-factor authentication": "Multi-factor authentication",
|
||||
"Multi-factor authentication - Tooltip ": "Multi-factor authentication - Tooltip ",
|
||||
"Multi-factor authentication description": "Multi-factor authentication description",
|
||||
"Multi-factor methods": "Multi-factor methods",
|
||||
"Multi-factor recover": "Multi-factor recover",
|
||||
"Multi-factor recover description": "Multi-factor recover description",
|
||||
@@ -563,6 +562,8 @@
|
||||
"Verification failed": "Verification failed",
|
||||
"Verify Code": "Verify Code",
|
||||
"Verify Password": "Verify Password",
|
||||
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
|
||||
"You have enabled Multi-Factor Authentication, please enter the TOTP code": "You have enabled Multi-Factor Authentication, please enter the TOTP code",
|
||||
"Your email is": "Your email is",
|
||||
"Your phone is": "Your phone is",
|
||||
"preferred": "preferred"
|
||||
|
@@ -538,7 +538,6 @@
|
||||
"Have problems?": "Have problems?",
|
||||
"Multi-factor authentication": "Multi-factor authentication",
|
||||
"Multi-factor authentication - Tooltip ": "Multi-factor authentication - Tooltip ",
|
||||
"Multi-factor authentication description": "Multi-factor authentication description",
|
||||
"Multi-factor methods": "Multi-factor methods",
|
||||
"Multi-factor recover": "Multi-factor recover",
|
||||
"Multi-factor recover description": "Multi-factor recover description",
|
||||
@@ -563,6 +562,8 @@
|
||||
"Verification failed": "Verification failed",
|
||||
"Verify Code": "Verify Code",
|
||||
"Verify Password": "Verify Password",
|
||||
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
|
||||
"You have enabled Multi-Factor Authentication, please enter the TOTP code": "You have enabled Multi-Factor Authentication, please enter the TOTP code",
|
||||
"Your email is": "Your email is",
|
||||
"Your phone is": "Your phone is",
|
||||
"preferred": "preferred"
|
||||
|
@@ -538,7 +538,6 @@
|
||||
"Have problems?": "Have problems?",
|
||||
"Multi-factor authentication": "Multi-factor authentication",
|
||||
"Multi-factor authentication - Tooltip ": "Multi-factor authentication - Tooltip ",
|
||||
"Multi-factor authentication description": "Multi-factor authentication description",
|
||||
"Multi-factor methods": "Multi-factor methods",
|
||||
"Multi-factor recover": "Multi-factor recover",
|
||||
"Multi-factor recover description": "Multi-factor recover description",
|
||||
@@ -563,6 +562,8 @@
|
||||
"Verification failed": "Verification failed",
|
||||
"Verify Code": "Verify Code",
|
||||
"Verify Password": "Verify Password",
|
||||
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
|
||||
"You have enabled Multi-Factor Authentication, please enter the TOTP code": "You have enabled Multi-Factor Authentication, please enter the TOTP code",
|
||||
"Your email is": "Your email is",
|
||||
"Your phone is": "Your phone is",
|
||||
"preferred": "preferred"
|
||||
|
@@ -538,7 +538,6 @@
|
||||
"Have problems?": "Tem problemas?",
|
||||
"Multi-factor authentication": "Autenticação de vários fatores",
|
||||
"Multi-factor authentication - Tooltip ": "Autenticação de múltiplos fatores - Tooltip ",
|
||||
"Multi-factor authentication description": "Multi-factor authentication description",
|
||||
"Multi-factor methods": "Multi-factor methods",
|
||||
"Multi-factor recover": "Multi-factor recover",
|
||||
"Multi-factor recover description": "Multi-factor recover description",
|
||||
@@ -563,6 +562,8 @@
|
||||
"Verification failed": "Verification failed",
|
||||
"Verify Code": "Verify Code",
|
||||
"Verify Password": "Verify Password",
|
||||
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
|
||||
"You have enabled Multi-Factor Authentication, please enter the TOTP code": "You have enabled Multi-Factor Authentication, please enter the TOTP code",
|
||||
"Your email is": "Your email is",
|
||||
"Your phone is": "Your phone is",
|
||||
"preferred": "preferred"
|
||||
|
@@ -538,7 +538,6 @@
|
||||
"Have problems?": "Возникли проблемы?",
|
||||
"Multi-factor authentication": "Многофакторная аутентификация",
|
||||
"Multi-factor authentication - Tooltip ": "Multi-factor authentication - Tooltip ",
|
||||
"Multi-factor authentication description": "Multi-factor authentication description",
|
||||
"Multi-factor methods": "Multi-factor methods",
|
||||
"Multi-factor recover": "Multi-factor recover",
|
||||
"Multi-factor recover description": "Multi-factor recover description",
|
||||
@@ -563,6 +562,8 @@
|
||||
"Verification failed": "Проверка не удалась",
|
||||
"Verify Code": "Verify Code",
|
||||
"Verify Password": "Verify Password",
|
||||
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
|
||||
"You have enabled Multi-Factor Authentication, please enter the TOTP code": "You have enabled Multi-Factor Authentication, please enter the TOTP code",
|
||||
"Your email is": "Ваш email",
|
||||
"Your phone is": "Ваш телефон",
|
||||
"preferred": "preferred"
|
||||
|
@@ -538,7 +538,6 @@
|
||||
"Have problems?": "Máte problémy?",
|
||||
"Multi-factor authentication": "Viacfaktorová autentifikácia",
|
||||
"Multi-factor authentication - Tooltip ": "Viacfaktorová autentifikácia - Nápoveda ",
|
||||
"Multi-factor authentication description": "Popis viacfaktorovej autentifikácie",
|
||||
"Multi-factor methods": "Metódy viacfaktorovej autentifikácie",
|
||||
"Multi-factor recover": "Obnova viacfaktorovej autentifikácie",
|
||||
"Multi-factor recover description": "Popis obnovy viacfaktorovej autentifikácie",
|
||||
@@ -563,6 +562,8 @@
|
||||
"Verification failed": "Overenie zlyhalo",
|
||||
"Verify Code": "Overiť kód",
|
||||
"Verify Password": "Overiť heslo",
|
||||
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
|
||||
"You have enabled Multi-Factor Authentication, please enter the TOTP code": "You have enabled Multi-Factor Authentication, please enter the TOTP code",
|
||||
"Your email is": "Váš email je",
|
||||
"Your phone is": "Váš telefón je",
|
||||
"preferred": "preferované"
|
||||
|
@@ -538,7 +538,6 @@
|
||||
"Have problems?": "Have problems?",
|
||||
"Multi-factor authentication": "Multi-factor authentication",
|
||||
"Multi-factor authentication - Tooltip ": "Multi-factor authentication - Tooltip ",
|
||||
"Multi-factor authentication description": "Multi-factor authentication description",
|
||||
"Multi-factor methods": "Multi-factor methods",
|
||||
"Multi-factor recover": "Multi-factor recover",
|
||||
"Multi-factor recover description": "Multi-factor recover description",
|
||||
@@ -563,6 +562,8 @@
|
||||
"Verification failed": "Verification failed",
|
||||
"Verify Code": "Verify Code",
|
||||
"Verify Password": "Verify Password",
|
||||
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
|
||||
"You have enabled Multi-Factor Authentication, please enter the TOTP code": "You have enabled Multi-Factor Authentication, please enter the TOTP code",
|
||||
"Your email is": "Your email is",
|
||||
"Your phone is": "Your phone is",
|
||||
"preferred": "preferred"
|
||||
|
@@ -538,7 +538,6 @@
|
||||
"Have problems?": "Have problems?",
|
||||
"Multi-factor authentication": "Multi-factor authentication",
|
||||
"Multi-factor authentication - Tooltip ": "Multi-factor authentication - Tooltip ",
|
||||
"Multi-factor authentication description": "Multi-factor authentication description",
|
||||
"Multi-factor methods": "Multi-factor methods",
|
||||
"Multi-factor recover": "Multi-factor recover",
|
||||
"Multi-factor recover description": "Multi-factor recover description",
|
||||
@@ -563,6 +562,8 @@
|
||||
"Verification failed": "Doğrulama başarısız",
|
||||
"Verify Code": "Kodu doğrula",
|
||||
"Verify Password": "Parolayı Doğrula",
|
||||
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
|
||||
"You have enabled Multi-Factor Authentication, please enter the TOTP code": "You have enabled Multi-Factor Authentication, please enter the TOTP code",
|
||||
"Your email is": "E-postanız",
|
||||
"Your phone is": "Telefon numaranız",
|
||||
"preferred": "tercih edilen"
|
||||
|
@@ -538,7 +538,6 @@
|
||||
"Have problems?": "Є проблеми?",
|
||||
"Multi-factor authentication": "Багатофакторна аутентифікація",
|
||||
"Multi-factor authentication - Tooltip ": "Багатофакторна автентифікація – підказка ",
|
||||
"Multi-factor authentication description": "Опис багатофакторної автентифікації",
|
||||
"Multi-factor methods": "Багатофакторні методи",
|
||||
"Multi-factor recover": "Багатофакторне відновлення",
|
||||
"Multi-factor recover description": "Опис багатофакторного відновлення",
|
||||
@@ -563,6 +562,8 @@
|
||||
"Verification failed": "Не вдалося перевірити",
|
||||
"Verify Code": "Підтвердити код",
|
||||
"Verify Password": "Підтвердіть пароль",
|
||||
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
|
||||
"You have enabled Multi-Factor Authentication, please enter the TOTP code": "You have enabled Multi-Factor Authentication, please enter the TOTP code",
|
||||
"Your email is": "Ваша електронна адреса",
|
||||
"Your phone is": "Ваш телефон",
|
||||
"preferred": "бажаний"
|
||||
|
@@ -538,7 +538,6 @@
|
||||
"Have problems?": "Have problems?",
|
||||
"Multi-factor authentication": "Multi-factor authentication",
|
||||
"Multi-factor authentication - Tooltip ": "Multi-factor authentication - Tooltip ",
|
||||
"Multi-factor authentication description": "Multi-factor authentication description",
|
||||
"Multi-factor methods": "Multi-factor methods",
|
||||
"Multi-factor recover": "Multi-factor recover",
|
||||
"Multi-factor recover description": "Multi-factor recover description",
|
||||
@@ -563,6 +562,8 @@
|
||||
"Verification failed": "Verification failed",
|
||||
"Verify Code": "Verify Code",
|
||||
"Verify Password": "Verify Password",
|
||||
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue",
|
||||
"You have enabled Multi-Factor Authentication, please enter the TOTP code": "You have enabled Multi-Factor Authentication, please enter the TOTP code",
|
||||
"Your email is": "Your email is",
|
||||
"Your phone is": "Your phone is",
|
||||
"preferred": "preferred"
|
||||
|
@@ -538,7 +538,6 @@
|
||||
"Have problems?": "遇到问题?",
|
||||
"Multi-factor authentication": "多因素认证",
|
||||
"Multi-factor authentication - Tooltip ": "多因素认证 - Tooltip ",
|
||||
"Multi-factor authentication description": "您已经启用多因素认证,请输入认证码",
|
||||
"Multi-factor methods": "多因素认证方式",
|
||||
"Multi-factor recover": "重置多因素认证",
|
||||
"Multi-factor recover description": "如果您无法访问您的设备,输入您的多因素认证恢复代码来确认您的身份",
|
||||
@@ -563,6 +562,8 @@
|
||||
"Verification failed": "验证失败",
|
||||
"Verify Code": "验证码",
|
||||
"Verify Password": "验证密码",
|
||||
"You have enabled Multi-Factor Authentication, Please click 'Send Code' to continue": "您已经启用多因素认证, 请点击 '发送验证码' 继续",
|
||||
"You have enabled Multi-Factor Authentication, please enter the TOTP code": "您已经启用多因素认证,请输入TOTP认证码",
|
||||
"Your email is": "你的电子邮件",
|
||||
"Your phone is": "你的手机号",
|
||||
"preferred": "首选"
|
||||
|
Reference in New Issue
Block a user