mirror of
https://github.com/casdoor/casdoor.git
synced 2025-07-17 01:43:49 +08:00
Compare commits
7 Commits
Author | SHA1 | Date | |
---|---|---|---|
3ac5aad648 | |||
2a53241128 | |||
835273576b | |||
7fdc264ff6 | |||
a120734bb1 | |||
edd0b30e08 | |||
2da597b26f |
@ -355,20 +355,27 @@ func isProxyProviderType(providerType string) bool {
|
||||
|
||||
func checkMfaEnable(c *ApiController, user *object.User, organization *object.Organization, verificationType string) bool {
|
||||
if object.IsNeedPromptMfa(organization, user) {
|
||||
// The prompt page needs the user to be srigned in
|
||||
// The prompt page needs the user to be signed in
|
||||
c.SetSessionUsername(user.GetId())
|
||||
c.ResponseOk(object.RequiredMfa)
|
||||
return true
|
||||
}
|
||||
|
||||
if user.IsMfaEnabled() {
|
||||
currentTime := util.String2Time(util.GetCurrentTime())
|
||||
mfaRememberDeadline := util.String2Time(user.MfaRememberDeadline)
|
||||
if user.MfaRememberDeadline != "" && mfaRememberDeadline.After(currentTime) {
|
||||
return false
|
||||
}
|
||||
c.setMfaUserSession(user.GetId())
|
||||
mfaList := object.GetAllMfaProps(user, true)
|
||||
mfaAllowList := []*object.MfaProps{}
|
||||
mfaRememberInHours := organization.MfaRememberInHours
|
||||
for _, prop := range mfaList {
|
||||
if prop.MfaType == verificationType || !prop.Enabled {
|
||||
continue
|
||||
}
|
||||
prop.MfaRememberInHours = mfaRememberInHours
|
||||
mfaAllowList = append(mfaAllowList, prop)
|
||||
}
|
||||
if len(mfaAllowList) >= 1 {
|
||||
@ -973,6 +980,28 @@ func (c *ApiController) Login() {
|
||||
return
|
||||
}
|
||||
|
||||
var application *object.Application
|
||||
if authForm.ClientId == "" {
|
||||
application, err = object.GetApplication(fmt.Sprintf("admin/%s", authForm.Application))
|
||||
} else {
|
||||
application, err = object.GetApplicationByClientId(authForm.ClientId)
|
||||
}
|
||||
if err != nil {
|
||||
c.ResponseError(err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if application == nil {
|
||||
c.ResponseError(fmt.Sprintf(c.T("auth:The application: %s does not exist"), authForm.Application))
|
||||
return
|
||||
}
|
||||
|
||||
var organization *object.Organization
|
||||
organization, err = object.GetOrganization(util.GetId("admin", application.Organization))
|
||||
if err != nil {
|
||||
c.ResponseError(c.T(err.Error()))
|
||||
}
|
||||
|
||||
if authForm.Passcode != "" {
|
||||
if authForm.MfaType == c.GetSession("verificationCodeType") {
|
||||
c.ResponseError("Invalid multi-factor authentication type")
|
||||
@ -999,6 +1028,17 @@ func (c *ApiController) Login() {
|
||||
}
|
||||
}
|
||||
|
||||
if authForm.EnableMfaRemember {
|
||||
mfaRememberInSeconds := organization.MfaRememberInHours * 3600
|
||||
currentTime := util.String2Time(util.GetCurrentTime())
|
||||
duration := time.Duration(mfaRememberInSeconds) * time.Second
|
||||
user.MfaRememberDeadline = util.Time2String(currentTime.Add(duration))
|
||||
_, err = object.UpdateUser(user.GetId(), user, []string{"mfa_remember_deadline"}, user.IsAdmin)
|
||||
if err != nil {
|
||||
c.ResponseError(err.Error())
|
||||
return
|
||||
}
|
||||
}
|
||||
c.SetSession("verificationCodeType", "")
|
||||
} else if authForm.RecoveryCode != "" {
|
||||
err = object.MfaRecover(user, authForm.RecoveryCode)
|
||||
@ -1011,22 +1051,6 @@ func (c *ApiController) Login() {
|
||||
return
|
||||
}
|
||||
|
||||
var application *object.Application
|
||||
if authForm.ClientId == "" {
|
||||
application, err = object.GetApplication(fmt.Sprintf("admin/%s", authForm.Application))
|
||||
} else {
|
||||
application, err = object.GetApplicationByClientId(authForm.ClientId)
|
||||
}
|
||||
if err != nil {
|
||||
c.ResponseError(err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if application == nil {
|
||||
c.ResponseError(fmt.Sprintf(c.T("auth:The application: %s does not exist"), authForm.Application))
|
||||
return
|
||||
}
|
||||
|
||||
resp = c.HandleLoggedIn(application, user, &authForm)
|
||||
c.setMfaUserSession("")
|
||||
|
||||
|
@ -58,6 +58,12 @@ func (c *ApiController) MfaSetupInitiate() {
|
||||
return
|
||||
}
|
||||
|
||||
organization, err := object.GetOrganizationByUser(user)
|
||||
if err != nil {
|
||||
c.ResponseError(err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
mfaProps, err := MfaUtil.Initiate(user.GetId())
|
||||
if err != nil {
|
||||
c.ResponseError(err.Error())
|
||||
@ -66,6 +72,7 @@ func (c *ApiController) MfaSetupInitiate() {
|
||||
|
||||
recoveryCode := uuid.NewString()
|
||||
mfaProps.RecoveryCodes = []string{recoveryCode}
|
||||
mfaProps.MfaRememberInHours = organization.MfaRememberInHours
|
||||
|
||||
resp := mfaProps
|
||||
c.ResponseOk(resp)
|
||||
|
@ -98,6 +98,10 @@ func (c *ApiController) GetOrganization() {
|
||||
return
|
||||
}
|
||||
|
||||
if organization != nil && organization.MfaRememberInHours == 0 {
|
||||
organization.MfaRememberInHours = 12
|
||||
}
|
||||
|
||||
c.ResponseOk(organization)
|
||||
}
|
||||
|
||||
|
@ -140,6 +140,9 @@ func (c *ApiController) SendEmail() {
|
||||
}
|
||||
content = strings.Replace(content, "%{user.friendlyName}", userString, 1)
|
||||
|
||||
matchContent := object.ResetLinkReg.Find([]byte(content))
|
||||
content = strings.Replace(content, string(matchContent), "", -1)
|
||||
|
||||
for _, receiver := range emailForm.Receivers {
|
||||
err = object.SendEmail(provider, emailForm.Title, content, receiver, emailForm.Sender)
|
||||
if err != nil {
|
||||
|
@ -258,7 +258,7 @@ func (c *ApiController) SendVerificationCode() {
|
||||
return
|
||||
}
|
||||
|
||||
sendResp = object.SendVerificationCodeToEmail(organization, user, provider, clientIp, vform.Dest)
|
||||
sendResp = object.SendVerificationCodeToEmail(organization, user, provider, clientIp, vform.Dest, vform.Method, c.Ctx.Request.Host, application.Name)
|
||||
case object.VerifyTypePhone:
|
||||
if vform.Method == LoginVerification || vform.Method == ForgetVerification {
|
||||
if user != nil && util.GetMaskedPhone(user.Phone) == vform.Dest {
|
||||
|
@ -61,9 +61,10 @@ type AuthForm struct {
|
||||
CaptchaToken string `json:"captchaToken"`
|
||||
ClientSecret string `json:"clientSecret"`
|
||||
|
||||
MfaType string `json:"mfaType"`
|
||||
Passcode string `json:"passcode"`
|
||||
RecoveryCode string `json:"recoveryCode"`
|
||||
MfaType string `json:"mfaType"`
|
||||
Passcode string `json:"passcode"`
|
||||
RecoveryCode string `json:"recoveryCode"`
|
||||
EnableMfaRemember bool `json:"enableMfaRemember"`
|
||||
|
||||
Plan string `json:"plan"`
|
||||
Pricing string `json:"pricing"`
|
||||
|
19
idp/lark.go
19
idp/lark.go
@ -27,16 +27,22 @@ import (
|
||||
)
|
||||
|
||||
type LarkIdProvider struct {
|
||||
Client *http.Client
|
||||
Config *oauth2.Config
|
||||
Client *http.Client
|
||||
Config *oauth2.Config
|
||||
LarkDomain string
|
||||
}
|
||||
|
||||
func NewLarkIdProvider(clientId string, clientSecret string, redirectUrl string) *LarkIdProvider {
|
||||
func NewLarkIdProvider(clientId string, clientSecret string, redirectUrl string, useGlobalEndpoint bool) *LarkIdProvider {
|
||||
idp := &LarkIdProvider{}
|
||||
|
||||
if useGlobalEndpoint {
|
||||
idp.LarkDomain = "https://open.larksuite.com"
|
||||
} else {
|
||||
idp.LarkDomain = "https://open.feishu.cn"
|
||||
}
|
||||
|
||||
config := idp.getConfig(clientId, clientSecret, redirectUrl)
|
||||
idp.Config = config
|
||||
|
||||
return idp
|
||||
}
|
||||
|
||||
@ -47,7 +53,7 @@ func (idp *LarkIdProvider) SetHttpClient(client *http.Client) {
|
||||
// getConfig return a point of Config, which describes a typical 3-legged OAuth2 flow
|
||||
func (idp *LarkIdProvider) getConfig(clientId string, clientSecret string, redirectUrl string) *oauth2.Config {
|
||||
endpoint := oauth2.Endpoint{
|
||||
TokenURL: "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal",
|
||||
TokenURL: idp.LarkDomain + "/open-apis/auth/v3/tenant_access_token/internal",
|
||||
}
|
||||
|
||||
config := &oauth2.Config{
|
||||
@ -162,6 +168,7 @@ type LarkUserInfo struct {
|
||||
} `json:"data"`
|
||||
}
|
||||
|
||||
// GetUserInfo use LarkAccessToken gotten before return LinkedInUserInf
|
||||
// GetUserInfo use LarkAccessToken gotten before return LinkedInUserInfo
|
||||
// get more detail via: https://docs.microsoft.com/en-us/linkedin/consumer/integrations/self-serve/sign-in-with-linkedin?context=linkedin/consumer/context
|
||||
func (idp *LarkIdProvider) GetUserInfo(token *oauth2.Token) (*UserInfo, error) {
|
||||
@ -175,7 +182,7 @@ func (idp *LarkIdProvider) GetUserInfo(token *oauth2.Token) (*UserInfo, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
req, err := http.NewRequest("POST", "https://open.feishu.cn/open-apis/authen/v1/access_token", strings.NewReader(string(data)))
|
||||
req, err := http.NewRequest("POST", idp.LarkDomain+"/open-apis/authen/v1/access_token", strings.NewReader(string(data)))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -87,7 +87,7 @@ func GetIdProvider(idpInfo *ProviderInfo, redirectUrl string) (IdProvider, error
|
||||
return nil, fmt.Errorf("WeCom provider subType: %s is not supported", idpInfo.SubType)
|
||||
}
|
||||
case "Lark":
|
||||
return NewLarkIdProvider(idpInfo.ClientId, idpInfo.ClientSecret, redirectUrl), nil
|
||||
return NewLarkIdProvider(idpInfo.ClientId, idpInfo.ClientSecret, redirectUrl, idpInfo.DisableSsl), nil
|
||||
case "GitLab":
|
||||
return NewGitlabIdProvider(idpInfo.ClientId, idpInfo.ClientSecret, redirectUrl), nil
|
||||
case "ADFS":
|
||||
|
@ -252,7 +252,7 @@ func CheckPassword(user *User, password string, lang string, options ...bool) er
|
||||
|
||||
credManager := cred.GetCredManager(passwordType)
|
||||
if credManager == nil {
|
||||
return fmt.Errorf(i18n.Translate(lang, "check:unsupported password type: %s"), organization.PasswordType)
|
||||
return fmt.Errorf(i18n.Translate(lang, "check:unsupported password type: %s"), passwordType)
|
||||
}
|
||||
|
||||
if organization.MasterPassword != "" {
|
||||
@ -265,6 +265,16 @@ func CheckPassword(user *User, password string, lang string, options ...bool) er
|
||||
return recordSigninErrorInfo(user, lang, enableCaptcha)
|
||||
}
|
||||
|
||||
isOutdated := passwordType != organization.PasswordType
|
||||
if isOutdated {
|
||||
user.Password = password
|
||||
user.UpdateUserPassword(organization)
|
||||
_, err = UpdateUser(user.GetId(), user, []string{"password", "password_type", "password_salt"}, true)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return resetUserSigninErrorTimes(user)
|
||||
}
|
||||
|
||||
|
@ -21,13 +21,14 @@ import (
|
||||
)
|
||||
|
||||
type MfaProps struct {
|
||||
Enabled bool `json:"enabled"`
|
||||
IsPreferred bool `json:"isPreferred"`
|
||||
MfaType string `json:"mfaType" form:"mfaType"`
|
||||
Secret string `json:"secret,omitempty"`
|
||||
CountryCode string `json:"countryCode,omitempty"`
|
||||
URL string `json:"url,omitempty"`
|
||||
RecoveryCodes []string `json:"recoveryCodes,omitempty"`
|
||||
Enabled bool `json:"enabled"`
|
||||
IsPreferred bool `json:"isPreferred"`
|
||||
MfaType string `json:"mfaType" form:"mfaType"`
|
||||
Secret string `json:"secret,omitempty"`
|
||||
CountryCode string `json:"countryCode,omitempty"`
|
||||
URL string `json:"url,omitempty"`
|
||||
RecoveryCodes []string `json:"recoveryCodes,omitempty"`
|
||||
MfaRememberInHours int `json:"mfaRememberInHours"`
|
||||
}
|
||||
|
||||
type MfaInterface interface {
|
||||
|
@ -84,8 +84,9 @@ type Organization struct {
|
||||
NavItems []string `xorm:"varchar(1000)" json:"navItems"`
|
||||
WidgetItems []string `xorm:"varchar(1000)" json:"widgetItems"`
|
||||
|
||||
MfaItems []*MfaItem `xorm:"varchar(300)" json:"mfaItems"`
|
||||
AccountItems []*AccountItem `xorm:"varchar(5000)" json:"accountItems"`
|
||||
MfaItems []*MfaItem `xorm:"varchar(300)" json:"mfaItems"`
|
||||
MfaRememberInHours int `json:"mfaRememberInHours"`
|
||||
AccountItems []*AccountItem `xorm:"varchar(5000)" json:"accountItems"`
|
||||
}
|
||||
|
||||
func GetOrganizationCount(owner, name, field, value string) (int64, error) {
|
||||
|
@ -210,11 +210,12 @@ type User struct {
|
||||
LastSigninWrongTime string `xorm:"varchar(100)" json:"lastSigninWrongTime"`
|
||||
SigninWrongTimes int `json:"signinWrongTimes"`
|
||||
|
||||
ManagedAccounts []ManagedAccount `xorm:"managedAccounts blob" json:"managedAccounts"`
|
||||
MfaAccounts []MfaAccount `xorm:"mfaAccounts blob" json:"mfaAccounts"`
|
||||
MfaItems []*MfaItem `xorm:"varchar(300)" json:"mfaItems"`
|
||||
NeedUpdatePassword bool `json:"needUpdatePassword"`
|
||||
IpWhitelist string `xorm:"varchar(200)" json:"ipWhitelist"`
|
||||
ManagedAccounts []ManagedAccount `xorm:"managedAccounts blob" json:"managedAccounts"`
|
||||
MfaAccounts []MfaAccount `xorm:"mfaAccounts blob" json:"mfaAccounts"`
|
||||
MfaItems []*MfaItem `xorm:"varchar(300)" json:"mfaItems"`
|
||||
MfaRememberDeadline string `xorm:"varchar(100)" json:"mfaRememberDeadline"`
|
||||
NeedUpdatePassword bool `json:"needUpdatePassword"`
|
||||
IpWhitelist string `xorm:"varchar(200)" json:"ipWhitelist"`
|
||||
}
|
||||
|
||||
type Userinfo struct {
|
||||
@ -792,7 +793,7 @@ func UpdateUser(id string, user *User, columns []string, isAdmin bool) (bool, er
|
||||
"eveonline", "fitbit", "gitea", "heroku", "influxcloud", "instagram", "intercom", "kakao", "lastfm", "mailru", "meetup",
|
||||
"microsoftonline", "naver", "nextcloud", "onedrive", "oura", "patreon", "paypal", "salesforce", "shopify", "soundcloud",
|
||||
"spotify", "strava", "stripe", "type", "tiktok", "tumblr", "twitch", "twitter", "typetalk", "uber", "vk", "wepay", "xero", "yahoo",
|
||||
"yammer", "yandex", "zoom", "custom", "need_update_password", "ip_whitelist",
|
||||
"yammer", "yandex", "zoom", "custom", "need_update_password", "ip_whitelist", "mfa_items", "mfa_remember_deadline",
|
||||
}
|
||||
}
|
||||
if isAdmin {
|
||||
|
@ -19,6 +19,8 @@ import (
|
||||
"fmt"
|
||||
"math"
|
||||
"math/rand"
|
||||
"net/url"
|
||||
"regexp"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
@ -33,6 +35,8 @@ type VerifyResult struct {
|
||||
Msg string
|
||||
}
|
||||
|
||||
var ResetLinkReg *regexp.Regexp
|
||||
|
||||
const (
|
||||
VerificationSuccess = iota
|
||||
wrongCodeError
|
||||
@ -45,6 +49,10 @@ const (
|
||||
VerifyTypeEmail = "email"
|
||||
)
|
||||
|
||||
func init() {
|
||||
ResetLinkReg = regexp.MustCompile("(?s)<reset-link>(.*?)</reset-link>")
|
||||
}
|
||||
|
||||
type VerificationRecord struct {
|
||||
Owner string `xorm:"varchar(100) notnull pk" json:"owner"`
|
||||
Name string `xorm:"varchar(100) notnull pk" json:"name"`
|
||||
@ -81,7 +89,7 @@ func IsAllowSend(user *User, remoteAddr, recordType string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func SendVerificationCodeToEmail(organization *Organization, user *User, provider *Provider, remoteAddr string, dest string) error {
|
||||
func SendVerificationCodeToEmail(organization *Organization, user *User, provider *Provider, remoteAddr string, dest string, method string, host string, applicationName string) error {
|
||||
sender := organization.DisplayName
|
||||
title := provider.Title
|
||||
|
||||
@ -93,6 +101,23 @@ func SendVerificationCodeToEmail(organization *Organization, user *User, provide
|
||||
// "You have requested a verification code at Casdoor. Here is your code: %s, please enter in 5 minutes."
|
||||
content := strings.Replace(provider.Content, "%s", code, 1)
|
||||
|
||||
if method == "forget" {
|
||||
originFrontend, _ := getOriginFromHost(host)
|
||||
|
||||
query := url.Values{}
|
||||
query.Add("code", code)
|
||||
query.Add("username", user.Name)
|
||||
query.Add("dest", util.GetMaskedEmail(dest))
|
||||
forgetURL := originFrontend + "/forget/" + applicationName + "?" + query.Encode()
|
||||
|
||||
content = strings.Replace(content, "%link", forgetURL, -1)
|
||||
content = strings.Replace(content, "<reset-link>", "", -1)
|
||||
content = strings.Replace(content, "</reset-link>", "", -1)
|
||||
} else {
|
||||
matchContent := ResetLinkReg.Find([]byte(content))
|
||||
content = strings.Replace(content, string(matchContent), "", -1)
|
||||
}
|
||||
|
||||
userString := "Hi"
|
||||
if user != nil {
|
||||
userString = user.GetFriendlyName()
|
||||
|
@ -404,6 +404,7 @@ class App extends Component {
|
||||
account={this.state.account}
|
||||
theme={this.state.themeData}
|
||||
themeAlgorithm={this.state.themeAlgorithm}
|
||||
requiredEnableMfa={this.state.requiredEnableMfa}
|
||||
updateApplication={(application) => {
|
||||
this.setState({
|
||||
application: application,
|
||||
|
@ -603,6 +603,16 @@ class OrganizationEditPage extends React.Component {
|
||||
/>
|
||||
</Col>
|
||||
</Row>
|
||||
<Row style={{marginTop: "20px"}} >
|
||||
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
|
||||
{Setting.getLabel(i18next.t("application:MFA remember time"), i18next.t("application:MFA remember time - Tooltip"))} :
|
||||
</Col>
|
||||
<Col span={22} >
|
||||
<InputNumber style={{width: "150px"}} value={this.state.organization.mfaRememberInHours} min={1} step={1} precision={0} addonAfter="Hours" onChange={value => {
|
||||
this.updateOrganizationField("mfaRememberInHours", value);
|
||||
}} />
|
||||
</Col>
|
||||
</Row>
|
||||
<Row style={{marginTop: "20px"}} >
|
||||
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
|
||||
{Setting.getLabel(i18next.t("general:MFA items"), i18next.t("general:MFA items - Tooltip"))} :
|
||||
|
@ -25,6 +25,7 @@ import PopconfirmModal from "./common/modal/PopconfirmModal";
|
||||
class OrganizationListPage extends BaseListPage {
|
||||
newOrganization() {
|
||||
const randomName = Setting.getRandomName();
|
||||
const DefaultMfaRememberInHours = 12;
|
||||
return {
|
||||
owner: "admin", // this.props.account.organizationname,
|
||||
name: `organization_${randomName}`,
|
||||
@ -48,6 +49,7 @@ class OrganizationListPage extends BaseListPage {
|
||||
enableSoftDeletion: false,
|
||||
isProfilePublic: true,
|
||||
enableTour: true,
|
||||
mfaRememberInHours: DefaultMfaRememberInHours,
|
||||
accountItems: [
|
||||
{name: "Organization", visible: true, viewRule: "Public", modifyRule: "Admin"},
|
||||
{name: "ID", visible: true, viewRule: "Public", modifyRule: "Immutable"},
|
||||
|
@ -241,6 +241,21 @@ class PlanEditPage extends React.Component {
|
||||
{id: "HKD", name: "HKD"},
|
||||
{id: "SGD", name: "SGD"},
|
||||
{id: "BRL", name: "BRL"},
|
||||
{id: "PLN", name: "PLN"},
|
||||
{id: "KRW", name: "KRW"},
|
||||
{id: "INR", name: "INR"},
|
||||
{id: "RUB", name: "RUB"},
|
||||
{id: "MXN", name: "MXN"},
|
||||
{id: "ZAR", name: "ZAR"},
|
||||
{id: "TRY", name: "TRY"},
|
||||
{id: "SEK", name: "SEK"},
|
||||
{id: "NOK", name: "NOK"},
|
||||
{id: "DKK", name: "DKK"},
|
||||
{id: "THB", name: "THB"},
|
||||
{id: "MYR", name: "MYR"},
|
||||
{id: "TWD", name: "TWD"},
|
||||
{id: "CZK", name: "CZK"},
|
||||
{id: "HUF", name: "HUF"},
|
||||
].map((item, index) => <Option key={index} value={item.id}>{item.name}</Option>)
|
||||
}
|
||||
</Select>
|
||||
|
@ -141,6 +141,36 @@ class ProductBuyPage extends React.Component {
|
||||
return "S$";
|
||||
} else if (product?.currency === "BRL") {
|
||||
return "R$";
|
||||
} else if (product?.currency === "PLN") {
|
||||
return "zł";
|
||||
} else if (product?.currency === "KRW") {
|
||||
return "₩";
|
||||
} else if (product?.currency === "INR") {
|
||||
return "₹";
|
||||
} else if (product?.currency === "RUB") {
|
||||
return "₽";
|
||||
} else if (product?.currency === "MXN") {
|
||||
return "$";
|
||||
} else if (product?.currency === "ZAR") {
|
||||
return "R";
|
||||
} else if (product?.currency === "TRY") {
|
||||
return "₺";
|
||||
} else if (product?.currency === "SEK") {
|
||||
return "kr";
|
||||
} else if (product?.currency === "NOK") {
|
||||
return "kr";
|
||||
} else if (product?.currency === "DKK") {
|
||||
return "kr";
|
||||
} else if (product?.currency === "THB") {
|
||||
return "฿";
|
||||
} else if (product?.currency === "MYR") {
|
||||
return "RM";
|
||||
} else if (product?.currency === "TWD") {
|
||||
return "NT$";
|
||||
} else if (product?.currency === "CZK") {
|
||||
return "Kč";
|
||||
} else if (product?.currency === "HUF") {
|
||||
return "Ft";
|
||||
} else {
|
||||
return "(Unknown currency)";
|
||||
}
|
||||
|
@ -218,6 +218,21 @@ class ProductEditPage extends React.Component {
|
||||
{id: "HKD", name: "HKD"},
|
||||
{id: "SGD", name: "SGD"},
|
||||
{id: "BRL", name: "BRL"},
|
||||
{id: "PLN", name: "PLN"},
|
||||
{id: "KRW", name: "KRW"},
|
||||
{id: "INR", name: "INR"},
|
||||
{id: "RUB", name: "RUB"},
|
||||
{id: "MXN", name: "MXN"},
|
||||
{id: "ZAR", name: "ZAR"},
|
||||
{id: "TRY", name: "TRY"},
|
||||
{id: "SEK", name: "SEK"},
|
||||
{id: "NOK", name: "NOK"},
|
||||
{id: "DKK", name: "DKK"},
|
||||
{id: "THB", name: "THB"},
|
||||
{id: "MYR", name: "MYR"},
|
||||
{id: "TWD", name: "TWD"},
|
||||
{id: "CZK", name: "CZK"},
|
||||
{id: "HUF", name: "HUF"},
|
||||
].map((item, index) => <Option key={index} value={item.id}>{item.name}</Option>)
|
||||
}
|
||||
</Select>
|
||||
|
@ -931,10 +931,12 @@ class ProviderEditPage extends React.Component {
|
||||
)
|
||||
}
|
||||
{
|
||||
this.state.provider.type !== "Google" ? null : (
|
||||
this.state.provider.type !== "Google" && this.state.provider.type !== "Lark" ? null : (
|
||||
<Row style={{marginTop: "20px"}} >
|
||||
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
|
||||
{Setting.getLabel(i18next.t("provider:Get phone number"), i18next.t("provider:Get phone number - Tooltip"))} :
|
||||
{this.state.provider.type === "Google" ?
|
||||
Setting.getLabel(i18next.t("provider:Get phone number"), i18next.t("provider:Get phone number - Tooltip"))
|
||||
: Setting.getLabel(i18next.t("provider:Use global endpoint"), i18next.t("provider:Use global endpoint - Tooltip"))} :
|
||||
</Col>
|
||||
<Col span={1} >
|
||||
<Switch disabled={!this.state.provider.clientId} checked={this.state.provider.disableSsl} onChange={checked => {
|
||||
@ -1227,7 +1229,7 @@ class ProviderEditPage extends React.Component {
|
||||
</Col>
|
||||
<Col span={22} >
|
||||
<Row style={{marginTop: "20px"}} >
|
||||
<Button style={{marginLeft: "10px", marginBottom: "5px"}} onClick={() => this.updateProviderField("content", "You have requested a verification code at Casdoor. Here is your code: %s, please enter in 5 minutes.")} >
|
||||
<Button style={{marginLeft: "10px", marginBottom: "5px"}} onClick={() => this.updateProviderField("content", "You have requested a verification code at Casdoor. Here is your code: %s, please enter in 5 minutes. <reset-link>Or click %link to reset</reset-link>")} >
|
||||
{i18next.t("provider:Reset to Default Text")}
|
||||
</Button>
|
||||
<Button style={{marginLeft: "10px", marginBottom: "5px"}} type="primary" onClick={() => this.updateProviderField("content", Setting.getDefaultHtmlEmailContent())} >
|
||||
|
@ -1516,6 +1516,54 @@ export function getCurrencySymbol(currency) {
|
||||
return "$";
|
||||
} else if (currency === "CNY" || currency === "cny") {
|
||||
return "¥";
|
||||
} else if (currency === "EUR" || currency === "eur") {
|
||||
return "€";
|
||||
} else if (currency === "JPY" || currency === "jpy") {
|
||||
return "¥";
|
||||
} else if (currency === "GBP" || currency === "gbp") {
|
||||
return "£";
|
||||
} else if (currency === "AUD" || currency === "aud") {
|
||||
return "A$";
|
||||
} else if (currency === "CAD" || currency === "cad") {
|
||||
return "C$";
|
||||
} else if (currency === "CHF" || currency === "chf") {
|
||||
return "CHF";
|
||||
} else if (currency === "HKD" || currency === "hkd") {
|
||||
return "HK$";
|
||||
} else if (currency === "SGD" || currency === "sgd") {
|
||||
return "S$";
|
||||
} else if (currency === "BRL" || currency === "brl") {
|
||||
return "R$";
|
||||
} else if (currency === "PLN" || currency === "pln") {
|
||||
return "zł";
|
||||
} else if (currency === "KRW" || currency === "krw") {
|
||||
return "₩";
|
||||
} else if (currency === "INR" || currency === "inr") {
|
||||
return "₹";
|
||||
} else if (currency === "RUB" || currency === "rub") {
|
||||
return "₽";
|
||||
} else if (currency === "MXN" || currency === "mxn") {
|
||||
return "$";
|
||||
} else if (currency === "ZAR" || currency === "zar") {
|
||||
return "R";
|
||||
} else if (currency === "TRY" || currency === "try") {
|
||||
return "₺";
|
||||
} else if (currency === "SEK" || currency === "sek") {
|
||||
return "kr";
|
||||
} else if (currency === "NOK" || currency === "nok") {
|
||||
return "kr";
|
||||
} else if (currency === "DKK" || currency === "dkk") {
|
||||
return "kr";
|
||||
} else if (currency === "THB" || currency === "thb") {
|
||||
return "฿";
|
||||
} else if (currency === "MYR" || currency === "myr") {
|
||||
return "RM";
|
||||
} else if (currency === "TWD" || currency === "twd") {
|
||||
return "NT$";
|
||||
} else if (currency === "CZK" || currency === "czk") {
|
||||
return "Kč";
|
||||
} else if (currency === "HUF" || currency === "huf") {
|
||||
return "Ft";
|
||||
} else {
|
||||
return currency;
|
||||
}
|
||||
@ -1580,6 +1628,11 @@ export function getDefaultHtmlEmailContent() {
|
||||
<div class="code">
|
||||
%s
|
||||
</div>
|
||||
<reset-link>
|
||||
<div class="link">
|
||||
Or click this <a href="%link">link</a> to reset
|
||||
</div>
|
||||
</reset-link>
|
||||
<p>Thanks</p>
|
||||
<p>Casbin Team</p>
|
||||
<hr>
|
||||
@ -1614,6 +1667,36 @@ export function getCurrencyText(product) {
|
||||
return i18next.t("currency:SGD");
|
||||
} else if (product?.currency === "BRL") {
|
||||
return i18next.t("currency:BRL");
|
||||
} else if (product?.currency === "PLN") {
|
||||
return i18next.t("currency:PLN");
|
||||
} else if (product?.currency === "KRW") {
|
||||
return i18next.t("currency:KRW");
|
||||
} else if (product?.currency === "INR") {
|
||||
return i18next.t("currency:INR");
|
||||
} else if (product?.currency === "RUB") {
|
||||
return i18next.t("currency:RUB");
|
||||
} else if (product?.currency === "MXN") {
|
||||
return i18next.t("currency:MXN");
|
||||
} else if (product?.currency === "ZAR") {
|
||||
return i18next.t("currency:ZAR");
|
||||
} else if (product?.currency === "TRY") {
|
||||
return i18next.t("currency:TRY");
|
||||
} else if (product?.currency === "SEK") {
|
||||
return i18next.t("currency:SEK");
|
||||
} else if (product?.currency === "NOK") {
|
||||
return i18next.t("currency:NOK");
|
||||
} else if (product?.currency === "DKK") {
|
||||
return i18next.t("currency:DKK");
|
||||
} else if (product?.currency === "THB") {
|
||||
return i18next.t("currency:THB");
|
||||
} else if (product?.currency === "MYR") {
|
||||
return i18next.t("currency:MYR");
|
||||
} else if (product?.currency === "TWD") {
|
||||
return i18next.t("currency:TWD");
|
||||
} else if (product?.currency === "CZK") {
|
||||
return i18next.t("currency:CZK");
|
||||
} else if (product?.currency === "HUF") {
|
||||
return i18next.t("currency:HUF");
|
||||
} else {
|
||||
return "(Unknown currency)";
|
||||
}
|
||||
|
@ -31,18 +31,21 @@ const {Option} = Select;
|
||||
class ForgetPage extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
const queryParams = new URLSearchParams(location.search);
|
||||
this.state = {
|
||||
classes: props,
|
||||
applicationName: props.applicationName ?? props.match.params?.applicationName,
|
||||
msg: null,
|
||||
name: props.account ? props.account.name : "",
|
||||
name: props.account ? props.account.name : queryParams.get("username"),
|
||||
username: props.account ? props.account.name : "",
|
||||
phone: "",
|
||||
email: "",
|
||||
dest: "",
|
||||
isVerifyTypeFixed: false,
|
||||
verifyType: "", // "email", "phone"
|
||||
current: 0,
|
||||
current: queryParams.get("code") ? 2 : 0,
|
||||
code: queryParams.get("code"),
|
||||
queryParams: queryParams,
|
||||
};
|
||||
this.form = React.createRef();
|
||||
}
|
||||
@ -148,9 +151,26 @@ class ForgetPage extends React.Component {
|
||||
}
|
||||
}
|
||||
|
||||
onFinish(values) {
|
||||
async onFinish(values) {
|
||||
values.username = this.state.name;
|
||||
values.userOwner = this.getApplicationObj()?.organizationObj.name;
|
||||
|
||||
if (this.state.queryParams.get("code")) {
|
||||
const res = await UserBackend.verifyCode({
|
||||
application: this.getApplicationObj().name,
|
||||
organization: values.userOwner,
|
||||
username: this.state.queryParams.get("dest"),
|
||||
name: this.state.name,
|
||||
code: this.state.code,
|
||||
type: "login",
|
||||
});
|
||||
|
||||
if (res.status !== "ok") {
|
||||
Setting.showMessage("error", res.msg);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
UserBackend.setPassword(values.userOwner, values.username, "", values?.newPassword, this.state.code).then(res => {
|
||||
if (res.status === "ok") {
|
||||
const linkInStorage = sessionStorage.getItem("signinUrl");
|
||||
|
@ -1040,6 +1040,10 @@ class LoginPage extends React.Component {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (this.props.requiredEnableMfa) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (this.state.userCode && this.state.userCodeStatus === "success") {
|
||||
return null;
|
||||
}
|
||||
|
@ -68,6 +68,7 @@ const authInfo = {
|
||||
Lark: {
|
||||
// scope: "email",
|
||||
endpoint: "https://open.feishu.cn/open-apis/authen/v1/index",
|
||||
endpoint2: "https://accounts.larksuite.com/open-apis/authen/v1/authorize",
|
||||
},
|
||||
GitLab: {
|
||||
scope: "read_user+profile",
|
||||
@ -406,6 +407,8 @@ export function getAuthUrl(application, provider, method, code) {
|
||||
if (provider.domain) {
|
||||
endpoint = `${provider.domain}/apps/oauth2/authorize`;
|
||||
}
|
||||
} else if (provider.type === "Lark" && provider.disableSsl) {
|
||||
endpoint = authInfo[provider.type].endpoint2;
|
||||
}
|
||||
|
||||
if (provider.type === "Google" || provider.type === "GitHub" || provider.type === "Facebook"
|
||||
@ -460,6 +463,9 @@ export function getAuthUrl(application, provider, method, code) {
|
||||
return `https://error:not-supported-provider-sub-type:${provider.subType}`;
|
||||
}
|
||||
} else if (provider.type === "Lark") {
|
||||
if (provider.disableSsl) {
|
||||
redirectUri = encodeURIComponent(redirectUri);
|
||||
}
|
||||
return `${endpoint}?app_id=${provider.clientId}&redirect_uri=${redirectUri}&state=${state}`;
|
||||
} else if (provider.type === "ADFS") {
|
||||
return `${provider.domain}/adfs/oauth2/authorize?client_id=${provider.clientId}&redirect_uri=${redirectUri}&state=${state}&response_type=code&nonce=casdoor&scope=openid`;
|
||||
|
@ -31,9 +31,9 @@ export function MfaAuthVerifyForm({formValues, authParams, mfaProps, application
|
||||
const [mfaType, setMfaType] = useState(mfaProps.mfaType);
|
||||
const [recoveryCode, setRecoveryCode] = useState("");
|
||||
|
||||
const verify = ({passcode}) => {
|
||||
const verify = ({passcode, enableMfaRemember}) => {
|
||||
setLoading(true);
|
||||
const values = {...formValues, passcode};
|
||||
const values = {...formValues, passcode, enableMfaRemember};
|
||||
values["mfaType"] = mfaProps.mfaType;
|
||||
const loginFunction = formValues.type === "cas" ? AuthBackend.loginCas : AuthBackend.login;
|
||||
loginFunction(values, authParams).then((res) => {
|
||||
|
@ -1,5 +1,5 @@
|
||||
import {UserOutlined} from "@ant-design/icons";
|
||||
import {Button, Form, Input, Space} from "antd";
|
||||
import {Button, Checkbox, Form, Input, Space} from "antd";
|
||||
import i18next from "i18next";
|
||||
import React, {useEffect} from "react";
|
||||
import {CountryCodeSelect} from "../../common/select/CountryCodeSelect";
|
||||
@ -12,6 +12,13 @@ export const MfaVerifySmsForm = ({mfaProps, application, onFinish, method, user}
|
||||
const [dest, setDest] = React.useState("");
|
||||
const [form] = Form.useForm();
|
||||
|
||||
const handleFinish = (values) => {
|
||||
onFinish({
|
||||
passcode: values.passcode,
|
||||
enableMfaRemember: values.enableMfaRemember,
|
||||
});
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
if (method === mfaAuth) {
|
||||
setDest(mfaProps.secret);
|
||||
@ -51,9 +58,10 @@ export const MfaVerifySmsForm = ({mfaProps, application, onFinish, method, user}
|
||||
<Form
|
||||
form={form}
|
||||
style={{width: "300px"}}
|
||||
onFinish={onFinish}
|
||||
onFinish={handleFinish}
|
||||
initialValues={{
|
||||
countryCode: mfaProps.countryCode,
|
||||
enableMfaRemember: false,
|
||||
}}
|
||||
>
|
||||
{isShowText() ?
|
||||
@ -109,6 +117,14 @@ export const MfaVerifySmsForm = ({mfaProps, application, onFinish, method, user}
|
||||
application={application}
|
||||
/>
|
||||
</Form.Item>
|
||||
<Form.Item
|
||||
name="enableMfaRemember"
|
||||
valuePropName="checked"
|
||||
>
|
||||
<Checkbox>
|
||||
{i18next.t("mfa:Remember this account for {hour} hours").replace("{hour}", mfaProps?.mfaRememberInHours)}
|
||||
</Checkbox>
|
||||
</Form.Item>
|
||||
<Form.Item>
|
||||
<Button
|
||||
style={{marginTop: 24}}
|
||||
|
@ -1,5 +1,5 @@
|
||||
import {CopyOutlined} from "@ant-design/icons";
|
||||
import {Button, Col, Form, Input, QRCode, Space} from "antd";
|
||||
import {Button, Checkbox, Col, Form, Input, QRCode, Space} from "antd";
|
||||
import copy from "copy-to-clipboard";
|
||||
import i18next from "i18next";
|
||||
import React from "react";
|
||||
@ -8,6 +8,13 @@ import * as Setting from "../../Setting";
|
||||
export const MfaVerifyTotpForm = ({mfaProps, onFinish}) => {
|
||||
const [form] = Form.useForm();
|
||||
|
||||
const handleFinish = (values) => {
|
||||
onFinish({
|
||||
passcode: values.passcode,
|
||||
enableMfaRemember: values.enableMfaRemember,
|
||||
});
|
||||
};
|
||||
|
||||
const renderSecret = () => {
|
||||
if (!mfaProps.secret) {
|
||||
return null;
|
||||
@ -40,7 +47,10 @@ export const MfaVerifyTotpForm = ({mfaProps, onFinish}) => {
|
||||
<Form
|
||||
form={form}
|
||||
style={{width: "300px"}}
|
||||
onFinish={onFinish}
|
||||
onFinish={handleFinish}
|
||||
initialValues={{
|
||||
enableMfaRemember: false,
|
||||
}}
|
||||
>
|
||||
{renderSecret()}
|
||||
<Form.Item
|
||||
@ -54,6 +64,14 @@ export const MfaVerifyTotpForm = ({mfaProps, onFinish}) => {
|
||||
}}
|
||||
/>
|
||||
</Form.Item>
|
||||
<Form.Item
|
||||
name="enableMfaRemember"
|
||||
valuePropName="checked"
|
||||
>
|
||||
<Checkbox>
|
||||
{i18next.t("mfa:Remember this account for {hour} hours").replace("{hour}", mfaProps?.mfaRememberInHours)}
|
||||
</Checkbox>
|
||||
</Form.Item>
|
||||
<Form.Item>
|
||||
<Button
|
||||
style={{marginTop: 24}}
|
||||
|
@ -82,7 +82,7 @@ export function renderPasswordPopover(options, password) {
|
||||
}
|
||||
|
||||
export function checkPasswordComplexity(password, options) {
|
||||
if (password.length === 0) {
|
||||
if (!password?.length) {
|
||||
return i18next.t("login:Please input your password!");
|
||||
}
|
||||
|
||||
|
@ -82,6 +82,8 @@
|
||||
"Left": "Left",
|
||||
"Logged in successfully": "Logged in successfully",
|
||||
"Logged out successfully": "Logged out successfully",
|
||||
"MFA remember time": "MFA remember time",
|
||||
"MFA remember time - Tooltip": "MFA remember time - Tooltip",
|
||||
"Multiple Choices": "Multiple Choices",
|
||||
"New Application": "New Application",
|
||||
"No verification": "No verification",
|
||||
@ -175,12 +177,27 @@
|
||||
"CAD": "CAD",
|
||||
"CHF": "CHF",
|
||||
"CNY": "CNY",
|
||||
"CZK": "CZK",
|
||||
"DKK": "DKK",
|
||||
"EUR": "EUR",
|
||||
"GBP": "GBP",
|
||||
"HKD": "HKD",
|
||||
"HUF": "HUF",
|
||||
"INR": "INR",
|
||||
"JPY": "JPY",
|
||||
"KRW": "KRW",
|
||||
"MXN": "MXN",
|
||||
"MYR": "MYR",
|
||||
"NOK": "NOK",
|
||||
"PLN": "PLN",
|
||||
"RUB": "RUB",
|
||||
"SEK": "SEK",
|
||||
"SGD": "SGD",
|
||||
"USD": "USD"
|
||||
"THB": "THB",
|
||||
"TRY": "TRY",
|
||||
"TWD": "TWD",
|
||||
"USD": "USD",
|
||||
"ZAR": "ZAR"
|
||||
},
|
||||
"enforcer": {
|
||||
"Edit Enforcer": "Edit Enforcer",
|
||||
@ -580,13 +597,13 @@
|
||||
"Multi-factor recover": "Multi-factor recover",
|
||||
"Multi-factor recover description": "Multi-factor recover description",
|
||||
"Or copy the secret to your Authenticator App": "Or copy the secret to your Authenticator App",
|
||||
"Passcode": "Passcode",
|
||||
"Please bind your email first, the system will automatically uses the mail for multi-factor authentication": "Please bind your email first, the system will automatically uses the mail for multi-factor authentication",
|
||||
"Please bind your phone first, the system automatically uses the phone for multi-factor authentication": "Please bind your phone first, the system automatically uses the phone for multi-factor authentication",
|
||||
"Please confirm the information below": "Please confirm the information below",
|
||||
"Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code": "Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code",
|
||||
"Protect your account with Multi-factor authentication": "Protect your account with Multi-factor authentication",
|
||||
"Recovery code": "Recovery code",
|
||||
"Remember this account for {hour} hours": "Remember this account for {hour} hours",
|
||||
"Scan the QR code with your Authenticator App": "Scan the QR code with your Authenticator App",
|
||||
"Set preferred": "Set preferred",
|
||||
"Setup": "Setup",
|
||||
|
@ -82,6 +82,8 @@
|
||||
"Left": "Vlevo",
|
||||
"Logged in successfully": "Úspěšně přihlášen",
|
||||
"Logged out successfully": "Úspěšně odhlášen",
|
||||
"MFA remember time": "MFA remember time",
|
||||
"MFA remember time - Tooltip": "MFA remember time - Tooltip",
|
||||
"Multiple Choices": "Multiple Choices",
|
||||
"New Application": "Nová aplikace",
|
||||
"No verification": "Bez ověření",
|
||||
@ -175,12 +177,27 @@
|
||||
"CAD": "CAD",
|
||||
"CHF": "CHF",
|
||||
"CNY": "CNY",
|
||||
"CZK": "CZK",
|
||||
"DKK": "DKK",
|
||||
"EUR": "EUR",
|
||||
"GBP": "GBP",
|
||||
"HKD": "HKD",
|
||||
"HUF": "HUF",
|
||||
"INR": "INR",
|
||||
"JPY": "JPY",
|
||||
"KRW": "KRW",
|
||||
"MXN": "MXN",
|
||||
"MYR": "MYR",
|
||||
"NOK": "NOK",
|
||||
"PLN": "PLN",
|
||||
"RUB": "RUB",
|
||||
"SEK": "SEK",
|
||||
"SGD": "SGD",
|
||||
"USD": "USD"
|
||||
"THB": "THB",
|
||||
"TRY": "TRY",
|
||||
"TWD": "TWD",
|
||||
"USD": "USD",
|
||||
"ZAR": "ZAR"
|
||||
},
|
||||
"enforcer": {
|
||||
"Edit Enforcer": "Upravit Enforcer",
|
||||
@ -580,13 +597,13 @@
|
||||
"Multi-factor recover": "Obnovení dvoufaktorového ověřování",
|
||||
"Multi-factor recover description": "Popis obnovení dvoufaktorového ověřování",
|
||||
"Or copy the secret to your Authenticator App": "Nebo zkopírujte tajný kód do své aplikace Authenticator",
|
||||
"Passcode": "Přístupový kód",
|
||||
"Please bind your email first, the system will automatically uses the mail for multi-factor authentication": "Nejprve prosím spojte svůj email, systém automaticky použije tento email pro dvoufaktorové ověřování",
|
||||
"Please bind your phone first, the system automatically uses the phone for multi-factor authentication": "Nejprve prosím spojte svůj telefon, systém automaticky použije tento telefon pro dvoufaktorové ověřování",
|
||||
"Please confirm the information below": "Potvrďte prosím níže uvedené informace",
|
||||
"Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code": "Uložte si tento obnovovací kód. Pokud vaše zařízení nemůže poskytnout ověřovací kód, můžete resetovat dvoufaktorové ověřování pomocí tohoto kódu",
|
||||
"Protect your account with Multi-factor authentication": "Chraňte svůj účet pomocí dvoufaktorového ověřování",
|
||||
"Recovery code": "Obnovovací kód",
|
||||
"Remember this account for {hour} hours": "Remember this account for {hour} hours",
|
||||
"Scan the QR code with your Authenticator App": "Naskenujte QR kód pomocí aplikace Authenticator",
|
||||
"Set preferred": "Nastavit jako preferované",
|
||||
"Setup": "Nastavení",
|
||||
|
@ -82,6 +82,8 @@
|
||||
"Left": "Links",
|
||||
"Logged in successfully": "Erfolgreich eingeloggt",
|
||||
"Logged out successfully": "Erfolgreich ausgeloggt",
|
||||
"MFA remember time": "MFA remember time",
|
||||
"MFA remember time - Tooltip": "MFA remember time - Tooltip",
|
||||
"Multiple Choices": "Multiple Choices",
|
||||
"New Application": "Neue Anwendung",
|
||||
"No verification": "No verification",
|
||||
@ -175,12 +177,27 @@
|
||||
"CAD": "CAD",
|
||||
"CHF": "CHF",
|
||||
"CNY": "CNY",
|
||||
"CZK": "CZK",
|
||||
"DKK": "DKK",
|
||||
"EUR": "EUR",
|
||||
"GBP": "GBP",
|
||||
"HKD": "HKD",
|
||||
"HUF": "HUF",
|
||||
"INR": "INR",
|
||||
"JPY": "JPY",
|
||||
"KRW": "KRW",
|
||||
"MXN": "MXN",
|
||||
"MYR": "MYR",
|
||||
"NOK": "NOK",
|
||||
"PLN": "PLN",
|
||||
"RUB": "RUB",
|
||||
"SEK": "SEK",
|
||||
"SGD": "SGD",
|
||||
"USD": "USD"
|
||||
"THB": "THB",
|
||||
"TRY": "TRY",
|
||||
"TWD": "TWD",
|
||||
"USD": "USD",
|
||||
"ZAR": "ZAR"
|
||||
},
|
||||
"enforcer": {
|
||||
"Edit Enforcer": "Edit Enforcer",
|
||||
@ -580,13 +597,13 @@
|
||||
"Multi-factor recover": "Multi-factor recover",
|
||||
"Multi-factor recover description": "Multi-factor recover description",
|
||||
"Or copy the secret to your Authenticator App": "Or copy the secret to your Authenticator App",
|
||||
"Passcode": "Passcode",
|
||||
"Please bind your email first, the system will automatically uses the mail for multi-factor authentication": "Please bind your email first, the system will automatically uses the mail for multi-factor authentication",
|
||||
"Please bind your phone first, the system automatically uses the phone for multi-factor authentication": "Please bind your phone first, the system automatically uses the phone for multi-factor authentication",
|
||||
"Please confirm the information below": "Please confirm the information below",
|
||||
"Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code": "Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code",
|
||||
"Protect your account with Multi-factor authentication": "Protect your account with Multi-factor authentication",
|
||||
"Recovery code": "Recovery code",
|
||||
"Remember this account for {hour} hours": "Remember this account for {hour} hours",
|
||||
"Scan the QR code with your Authenticator App": "Scan the QR code with your Authenticator App",
|
||||
"Set preferred": "Set preferred",
|
||||
"Setup": "Setup",
|
||||
|
@ -82,6 +82,8 @@
|
||||
"Left": "Left",
|
||||
"Logged in successfully": "Logged in successfully",
|
||||
"Logged out successfully": "Logged out successfully",
|
||||
"MFA remember time": "MFA remember time",
|
||||
"MFA remember time - Tooltip": "Configures the duration that a account is remembered as trusted after a successful MFA login",
|
||||
"Multiple Choices": "Multiple Choices",
|
||||
"New Application": "New Application",
|
||||
"No verification": "No verification",
|
||||
@ -175,12 +177,27 @@
|
||||
"CAD": "CAD",
|
||||
"CHF": "CHF",
|
||||
"CNY": "CNY",
|
||||
"CZK": "CZK",
|
||||
"DKK": "DKK",
|
||||
"EUR": "EUR",
|
||||
"GBP": "GBP",
|
||||
"HKD": "HKD",
|
||||
"HUF": "HUF",
|
||||
"INR": "INR",
|
||||
"JPY": "JPY",
|
||||
"KRW": "KRW",
|
||||
"MXN": "MXN",
|
||||
"MYR": "MYR",
|
||||
"NOK": "NOK",
|
||||
"PLN": "PLN",
|
||||
"RUB": "RUB",
|
||||
"SEK": "SEK",
|
||||
"SGD": "SGD",
|
||||
"USD": "USD"
|
||||
"THB": "THB",
|
||||
"TRY": "TRY",
|
||||
"TWD": "TWD",
|
||||
"USD": "USD",
|
||||
"ZAR": "ZAR"
|
||||
},
|
||||
"enforcer": {
|
||||
"Edit Enforcer": "Edit Enforcer",
|
||||
@ -580,13 +597,13 @@
|
||||
"Multi-factor recover": "Multi-factor recover",
|
||||
"Multi-factor recover description": "Multi-factor recover description",
|
||||
"Or copy the secret to your Authenticator App": "Or copy the secret to your Authenticator App",
|
||||
"Passcode": "Passcode",
|
||||
"Please bind your email first, the system will automatically uses the mail for multi-factor authentication": "Please bind your email first, the system will automatically uses the mail for multi-factor authentication",
|
||||
"Please bind your phone first, the system automatically uses the phone for multi-factor authentication": "Please bind your phone first, the system automatically uses the phone for multi-factor authentication",
|
||||
"Please confirm the information below": "Please confirm the information below",
|
||||
"Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code": "Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code",
|
||||
"Protect your account with Multi-factor authentication": "Protect your account with Multi-factor authentication",
|
||||
"Recovery code": "Recovery code",
|
||||
"Remember this account for {hour} hours": "Remember this account for {hour} hours",
|
||||
"Scan the QR code with your Authenticator App": "Scan the QR code with your Authenticator App",
|
||||
"Set preferred": "Set preferred",
|
||||
"Setup": "Setup",
|
||||
|
@ -82,6 +82,8 @@
|
||||
"Left": "Izquierda",
|
||||
"Logged in successfully": "Acceso satisfactorio",
|
||||
"Logged out successfully": "Cerró sesión exitosamente",
|
||||
"MFA remember time": "MFA remember time",
|
||||
"MFA remember time - Tooltip": "MFA remember time - Tooltip",
|
||||
"Multiple Choices": "Multiple Choices",
|
||||
"New Application": "Nueva aplicación",
|
||||
"No verification": "No verification",
|
||||
@ -175,12 +177,27 @@
|
||||
"CAD": "CAD",
|
||||
"CHF": "CHF",
|
||||
"CNY": "CNY",
|
||||
"CZK": "CZK",
|
||||
"DKK": "DKK",
|
||||
"EUR": "EUR",
|
||||
"GBP": "GBP",
|
||||
"HKD": "HKD",
|
||||
"HUF": "HUF",
|
||||
"INR": "INR",
|
||||
"JPY": "JPY",
|
||||
"KRW": "KRW",
|
||||
"MXN": "MXN",
|
||||
"MYR": "MYR",
|
||||
"NOK": "NOK",
|
||||
"PLN": "PLN",
|
||||
"RUB": "RUB",
|
||||
"SEK": "SEK",
|
||||
"SGD": "SGD",
|
||||
"USD": "USD"
|
||||
"THB": "THB",
|
||||
"TRY": "TRY",
|
||||
"TWD": "TWD",
|
||||
"USD": "USD",
|
||||
"ZAR": "ZAR"
|
||||
},
|
||||
"enforcer": {
|
||||
"Edit Enforcer": "Edit Enforcer",
|
||||
@ -580,13 +597,13 @@
|
||||
"Multi-factor recover": "Multi-factor recover",
|
||||
"Multi-factor recover description": "Multi-factor recover description",
|
||||
"Or copy the secret to your Authenticator App": "Or copy the secret to your Authenticator App",
|
||||
"Passcode": "Passcode",
|
||||
"Please bind your email first, the system will automatically uses the mail for multi-factor authentication": "Please bind your email first, the system will automatically uses the mail for multi-factor authentication",
|
||||
"Please bind your phone first, the system automatically uses the phone for multi-factor authentication": "Please bind your phone first, the system automatically uses the phone for multi-factor authentication",
|
||||
"Please confirm the information below": "Please confirm the information below",
|
||||
"Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code": "Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code",
|
||||
"Protect your account with Multi-factor authentication": "Protect your account with Multi-factor authentication",
|
||||
"Recovery code": "Recovery code",
|
||||
"Remember this account for {hour} hours": "Remember this account for {hour} hours",
|
||||
"Scan the QR code with your Authenticator App": "Scan the QR code with your Authenticator App",
|
||||
"Set preferred": "Set preferred",
|
||||
"Setup": "Setup",
|
||||
|
@ -82,6 +82,8 @@
|
||||
"Left": "چپ",
|
||||
"Logged in successfully": "با موفقیت وارد شدید",
|
||||
"Logged out successfully": "با موفقیت خارج شدید",
|
||||
"MFA remember time": "MFA remember time",
|
||||
"MFA remember time - Tooltip": "MFA remember time - Tooltip",
|
||||
"Multiple Choices": "انتخابهای متعدد",
|
||||
"New Application": "برنامه جدید",
|
||||
"No verification": "بدون تأیید",
|
||||
@ -175,12 +177,27 @@
|
||||
"CAD": "CAD",
|
||||
"CHF": "CHF",
|
||||
"CNY": "CNY",
|
||||
"CZK": "CZK",
|
||||
"DKK": "DKK",
|
||||
"EUR": "EUR",
|
||||
"GBP": "GBP",
|
||||
"HKD": "HKD",
|
||||
"HUF": "HUF",
|
||||
"INR": "INR",
|
||||
"JPY": "JPY",
|
||||
"KRW": "KRW",
|
||||
"MXN": "MXN",
|
||||
"MYR": "MYR",
|
||||
"NOK": "NOK",
|
||||
"PLN": "PLN",
|
||||
"RUB": "RUB",
|
||||
"SEK": "SEK",
|
||||
"SGD": "SGD",
|
||||
"USD": "USD"
|
||||
"THB": "THB",
|
||||
"TRY": "TRY",
|
||||
"TWD": "TWD",
|
||||
"USD": "USD",
|
||||
"ZAR": "ZAR"
|
||||
},
|
||||
"enforcer": {
|
||||
"Edit Enforcer": "ویرایش Enforcer",
|
||||
@ -580,13 +597,13 @@
|
||||
"Multi-factor recover": "بازیابی چندعاملی",
|
||||
"Multi-factor recover description": "توضیح بازیابی چندعاملی",
|
||||
"Or copy the secret to your Authenticator App": "یا راز را به برنامه تأیید هویت خود کپی کنید",
|
||||
"Passcode": "کد عبور",
|
||||
"Please bind your email first, the system will automatically uses the mail for multi-factor authentication": "لطفاً ابتدا ایمیل خود را متصل کنید، سیستم بهطور خودکار از ایمیل برای احراز هویت چندعاملی استفاده میکند",
|
||||
"Please bind your phone first, the system automatically uses the phone for multi-factor authentication": "لطفاً ابتدا تلفن خود را متصل کنید، سیستم بهطور خودکار از تلفن برای احراز هویت چندعاملی استفاده میکند",
|
||||
"Please confirm the information below": "لطفاً اطلاعات زیر را تأیید کنید",
|
||||
"Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code": "لطفاً این کد بازیابی را ذخیره کنید. هنگامی که دستگاه شما نتواند کد تأیید ارائه دهد، میتوانید احراز هویت mfa را با این کد بازیابی تنظیم مجدد کنید",
|
||||
"Protect your account with Multi-factor authentication": "حساب خود را با احراز هویت چندعاملی محافظت کنید",
|
||||
"Recovery code": "کد بازیابی",
|
||||
"Remember this account for {hour} hours": "Remember this account for {hour} hours",
|
||||
"Scan the QR code with your Authenticator App": "کد QR را با برنامه تأیید هویت خود اسکن کنید",
|
||||
"Set preferred": "تنظیم بهعنوان مورد علاقه",
|
||||
"Setup": "راهاندازی",
|
||||
|
@ -82,6 +82,8 @@
|
||||
"Left": "Left",
|
||||
"Logged in successfully": "Logged in successfully",
|
||||
"Logged out successfully": "Logged out successfully",
|
||||
"MFA remember time": "MFA remember time",
|
||||
"MFA remember time - Tooltip": "MFA remember time - Tooltip",
|
||||
"Multiple Choices": "Multiple Choices",
|
||||
"New Application": "New Application",
|
||||
"No verification": "No verification",
|
||||
@ -175,12 +177,27 @@
|
||||
"CAD": "CAD",
|
||||
"CHF": "CHF",
|
||||
"CNY": "CNY",
|
||||
"CZK": "CZK",
|
||||
"DKK": "DKK",
|
||||
"EUR": "EUR",
|
||||
"GBP": "GBP",
|
||||
"HKD": "HKD",
|
||||
"HUF": "HUF",
|
||||
"INR": "INR",
|
||||
"JPY": "JPY",
|
||||
"KRW": "KRW",
|
||||
"MXN": "MXN",
|
||||
"MYR": "MYR",
|
||||
"NOK": "NOK",
|
||||
"PLN": "PLN",
|
||||
"RUB": "RUB",
|
||||
"SEK": "SEK",
|
||||
"SGD": "SGD",
|
||||
"USD": "USD"
|
||||
"THB": "THB",
|
||||
"TRY": "TRY",
|
||||
"TWD": "TWD",
|
||||
"USD": "USD",
|
||||
"ZAR": "ZAR"
|
||||
},
|
||||
"enforcer": {
|
||||
"Edit Enforcer": "Edit Enforcer",
|
||||
@ -580,13 +597,13 @@
|
||||
"Multi-factor recover": "Multi-factor recover",
|
||||
"Multi-factor recover description": "Multi-factor recover description",
|
||||
"Or copy the secret to your Authenticator App": "Or copy the secret to your Authenticator App",
|
||||
"Passcode": "Passcode",
|
||||
"Please bind your email first, the system will automatically uses the mail for multi-factor authentication": "Please bind your email first, the system will automatically uses the mail for multi-factor authentication",
|
||||
"Please bind your phone first, the system automatically uses the phone for multi-factor authentication": "Please bind your phone first, the system automatically uses the phone for multi-factor authentication",
|
||||
"Please confirm the information below": "Please confirm the information below",
|
||||
"Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code": "Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code",
|
||||
"Protect your account with Multi-factor authentication": "Protect your account with Multi-factor authentication",
|
||||
"Recovery code": "Recovery code",
|
||||
"Remember this account for {hour} hours": "Remember this account for {hour} hours",
|
||||
"Scan the QR code with your Authenticator App": "Scan the QR code with your Authenticator App",
|
||||
"Set preferred": "Set preferred",
|
||||
"Setup": "Setup",
|
||||
|
@ -82,6 +82,8 @@
|
||||
"Left": "Gauche",
|
||||
"Logged in successfully": "Connexion réussie",
|
||||
"Logged out successfully": "Déconnexion réussie",
|
||||
"MFA remember time": "MFA remember time",
|
||||
"MFA remember time - Tooltip": "MFA remember time - Tooltip",
|
||||
"Multiple Choices": "Multiple Choices",
|
||||
"New Application": "Nouvelle application",
|
||||
"No verification": "Aucune vérification",
|
||||
@ -175,12 +177,27 @@
|
||||
"CAD": "CAD",
|
||||
"CHF": "CHF",
|
||||
"CNY": "CNY",
|
||||
"CZK": "CZK",
|
||||
"DKK": "DKK",
|
||||
"EUR": "EUR",
|
||||
"GBP": "GBP",
|
||||
"HKD": "HKD",
|
||||
"HUF": "HUF",
|
||||
"INR": "INR",
|
||||
"JPY": "JPY",
|
||||
"KRW": "KRW",
|
||||
"MXN": "MXN",
|
||||
"MYR": "MYR",
|
||||
"NOK": "NOK",
|
||||
"PLN": "PLN",
|
||||
"RUB": "RUB",
|
||||
"SEK": "SEK",
|
||||
"SGD": "SGD",
|
||||
"USD": "USD"
|
||||
"THB": "THB",
|
||||
"TRY": "TRY",
|
||||
"TWD": "TWD",
|
||||
"USD": "USD",
|
||||
"ZAR": "ZAR"
|
||||
},
|
||||
"enforcer": {
|
||||
"Edit Enforcer": "Éditer l'exécuteur",
|
||||
@ -580,13 +597,13 @@
|
||||
"Multi-factor recover": "Restauration de l'authentification multifacteur",
|
||||
"Multi-factor recover description": "Description de la restauration de l'authentification multifacteur",
|
||||
"Or copy the secret to your Authenticator App": "Ou copiez la clé secrète dans votre application d'authentification",
|
||||
"Passcode": "Code d'accès",
|
||||
"Please bind your email first, the system will automatically uses the mail for multi-factor authentication": "Veuillez lier votre e-mail en premier, le système l'utilisera automatiquement pour l'authentification multifacteur",
|
||||
"Please bind your phone first, the system automatically uses the phone for multi-factor authentication": "Veuillez lier votre numéro de téléphone en premier, le système l'utilisera automatiquement pour l'authentification multifacteur",
|
||||
"Please confirm the information below": "Veuillez confirmer les informations ci-dessous",
|
||||
"Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code": "Veuillez enregistrer ce code de récupération. Si votre appareil ne peut pas vous fournir un code d'authentification, vous pourrez réinitialiser l'authentification multifacteur avec ce code de récupération",
|
||||
"Protect your account with Multi-factor authentication": "Protégez votre compte avec l'authentification multifacteur",
|
||||
"Recovery code": "Code de récupération",
|
||||
"Remember this account for {hour} hours": "Remember this account for {hour} hours",
|
||||
"Scan the QR code with your Authenticator App": "Scannez le QR code avec votre application d'authentification",
|
||||
"Set preferred": "Définir comme préféré",
|
||||
"Setup": "Configurer",
|
||||
|
@ -82,6 +82,8 @@
|
||||
"Left": "Left",
|
||||
"Logged in successfully": "Logged in successfully",
|
||||
"Logged out successfully": "Logged out successfully",
|
||||
"MFA remember time": "MFA remember time",
|
||||
"MFA remember time - Tooltip": "MFA remember time - Tooltip",
|
||||
"Multiple Choices": "Multiple Choices",
|
||||
"New Application": "New Application",
|
||||
"No verification": "No verification",
|
||||
@ -175,12 +177,27 @@
|
||||
"CAD": "CAD",
|
||||
"CHF": "CHF",
|
||||
"CNY": "CNY",
|
||||
"CZK": "CZK",
|
||||
"DKK": "DKK",
|
||||
"EUR": "EUR",
|
||||
"GBP": "GBP",
|
||||
"HKD": "HKD",
|
||||
"HUF": "HUF",
|
||||
"INR": "INR",
|
||||
"JPY": "JPY",
|
||||
"KRW": "KRW",
|
||||
"MXN": "MXN",
|
||||
"MYR": "MYR",
|
||||
"NOK": "NOK",
|
||||
"PLN": "PLN",
|
||||
"RUB": "RUB",
|
||||
"SEK": "SEK",
|
||||
"SGD": "SGD",
|
||||
"USD": "USD"
|
||||
"THB": "THB",
|
||||
"TRY": "TRY",
|
||||
"TWD": "TWD",
|
||||
"USD": "USD",
|
||||
"ZAR": "ZAR"
|
||||
},
|
||||
"enforcer": {
|
||||
"Edit Enforcer": "Edit Enforcer",
|
||||
@ -580,13 +597,13 @@
|
||||
"Multi-factor recover": "Multi-factor recover",
|
||||
"Multi-factor recover description": "Multi-factor recover description",
|
||||
"Or copy the secret to your Authenticator App": "Or copy the secret to your Authenticator App",
|
||||
"Passcode": "Passcode",
|
||||
"Please bind your email first, the system will automatically uses the mail for multi-factor authentication": "Please bind your email first, the system will automatically uses the mail for multi-factor authentication",
|
||||
"Please bind your phone first, the system automatically uses the phone for multi-factor authentication": "Please bind your phone first, the system automatically uses the phone for multi-factor authentication",
|
||||
"Please confirm the information below": "Please confirm the information below",
|
||||
"Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code": "Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code",
|
||||
"Protect your account with Multi-factor authentication": "Protect your account with Multi-factor authentication",
|
||||
"Recovery code": "Recovery code",
|
||||
"Remember this account for {hour} hours": "Remember this account for {hour} hours",
|
||||
"Scan the QR code with your Authenticator App": "Scan the QR code with your Authenticator App",
|
||||
"Set preferred": "Set preferred",
|
||||
"Setup": "Setup",
|
||||
|
@ -82,6 +82,8 @@
|
||||
"Left": "Kiri",
|
||||
"Logged in successfully": "Berhasil masuk",
|
||||
"Logged out successfully": "Berhasil keluar dari sistem",
|
||||
"MFA remember time": "MFA remember time",
|
||||
"MFA remember time - Tooltip": "The duration for which the account is remembered as trusted after a successful MFA login",
|
||||
"Multiple Choices": "Multiple Choices",
|
||||
"New Application": "Aplikasi Baru",
|
||||
"No verification": "No verification",
|
||||
@ -175,12 +177,27 @@
|
||||
"CAD": "CAD",
|
||||
"CHF": "CHF",
|
||||
"CNY": "CNY",
|
||||
"CZK": "CZK",
|
||||
"DKK": "DKK",
|
||||
"EUR": "EUR",
|
||||
"GBP": "GBP",
|
||||
"HKD": "HKD",
|
||||
"HUF": "HUF",
|
||||
"INR": "INR",
|
||||
"JPY": "JPY",
|
||||
"KRW": "KRW",
|
||||
"MXN": "MXN",
|
||||
"MYR": "MYR",
|
||||
"NOK": "NOK",
|
||||
"PLN": "PLN",
|
||||
"RUB": "RUB",
|
||||
"SEK": "SEK",
|
||||
"SGD": "SGD",
|
||||
"USD": "USD"
|
||||
"THB": "THB",
|
||||
"TRY": "TRY",
|
||||
"TWD": "TWD",
|
||||
"USD": "USD",
|
||||
"ZAR": "ZAR"
|
||||
},
|
||||
"enforcer": {
|
||||
"Edit Enforcer": "Edit Enforcer",
|
||||
@ -580,13 +597,13 @@
|
||||
"Multi-factor recover": "Multi-factor recover",
|
||||
"Multi-factor recover description": "Multi-factor recover description",
|
||||
"Or copy the secret to your Authenticator App": "Or copy the secret to your Authenticator App",
|
||||
"Passcode": "Passcode",
|
||||
"Please bind your email first, the system will automatically uses the mail for multi-factor authentication": "Please bind your email first, the system will automatically uses the mail for multi-factor authentication",
|
||||
"Please bind your phone first, the system automatically uses the phone for multi-factor authentication": "Please bind your phone first, the system automatically uses the phone for multi-factor authentication",
|
||||
"Please confirm the information below": "Please confirm the information below",
|
||||
"Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code": "Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code",
|
||||
"Protect your account with Multi-factor authentication": "Protect your account with Multi-factor authentication",
|
||||
"Recovery code": "Recovery code",
|
||||
"Remember this account for {hour} hours": "Remember this account for {hour} hours",
|
||||
"Scan the QR code with your Authenticator App": "Scan the QR code with your Authenticator App",
|
||||
"Set preferred": "Set preferred",
|
||||
"Setup": "Setup",
|
||||
|
@ -82,6 +82,8 @@
|
||||
"Left": "Left",
|
||||
"Logged in successfully": "Logged in successfully",
|
||||
"Logged out successfully": "Logged out successfully",
|
||||
"MFA remember time": "MFA remember time",
|
||||
"MFA remember time - Tooltip": "MFA remember time - Tooltip",
|
||||
"Multiple Choices": "Multiple Choices",
|
||||
"New Application": "New Application",
|
||||
"No verification": "No verification",
|
||||
@ -175,12 +177,27 @@
|
||||
"CAD": "CAD",
|
||||
"CHF": "CHF",
|
||||
"CNY": "CNY",
|
||||
"CZK": "CZK",
|
||||
"DKK": "DKK",
|
||||
"EUR": "EUR",
|
||||
"GBP": "GBP",
|
||||
"HKD": "HKD",
|
||||
"HUF": "HUF",
|
||||
"INR": "INR",
|
||||
"JPY": "JPY",
|
||||
"KRW": "KRW",
|
||||
"MXN": "MXN",
|
||||
"MYR": "MYR",
|
||||
"NOK": "NOK",
|
||||
"PLN": "PLN",
|
||||
"RUB": "RUB",
|
||||
"SEK": "SEK",
|
||||
"SGD": "SGD",
|
||||
"USD": "USD"
|
||||
"THB": "THB",
|
||||
"TRY": "TRY",
|
||||
"TWD": "TWD",
|
||||
"USD": "USD",
|
||||
"ZAR": "ZAR"
|
||||
},
|
||||
"enforcer": {
|
||||
"Edit Enforcer": "Edit Enforcer",
|
||||
@ -580,13 +597,13 @@
|
||||
"Multi-factor recover": "Multi-factor recover",
|
||||
"Multi-factor recover description": "Multi-factor recover description",
|
||||
"Or copy the secret to your Authenticator App": "Or copy the secret to your Authenticator App",
|
||||
"Passcode": "Passcode",
|
||||
"Please bind your email first, the system will automatically uses the mail for multi-factor authentication": "Please bind your email first, the system will automatically uses the mail for multi-factor authentication",
|
||||
"Please bind your phone first, the system automatically uses the phone for multi-factor authentication": "Please bind your phone first, the system automatically uses the phone for multi-factor authentication",
|
||||
"Please confirm the information below": "Please confirm the information below",
|
||||
"Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code": "Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code",
|
||||
"Protect your account with Multi-factor authentication": "Protect your account with Multi-factor authentication",
|
||||
"Recovery code": "Recovery code",
|
||||
"Remember this account for {hour} hours": "Remember this account for {hour} hours",
|
||||
"Scan the QR code with your Authenticator App": "Scan the QR code with your Authenticator App",
|
||||
"Set preferred": "Set preferred",
|
||||
"Setup": "Setup",
|
||||
|
@ -82,6 +82,8 @@
|
||||
"Left": "左",
|
||||
"Logged in successfully": "正常にログインしました",
|
||||
"Logged out successfully": "正常にログアウトしました",
|
||||
"MFA remember time": "MFA remember time",
|
||||
"MFA remember time - Tooltip": "MFA remember time - Tooltip",
|
||||
"Multiple Choices": "Multiple Choices",
|
||||
"New Application": "新しいアプリケーション",
|
||||
"No verification": "No verification",
|
||||
@ -175,12 +177,27 @@
|
||||
"CAD": "CAD",
|
||||
"CHF": "CHF",
|
||||
"CNY": "CNY",
|
||||
"CZK": "CZK",
|
||||
"DKK": "DKK",
|
||||
"EUR": "EUR",
|
||||
"GBP": "GBP",
|
||||
"HKD": "HKD",
|
||||
"HUF": "HUF",
|
||||
"INR": "INR",
|
||||
"JPY": "JPY",
|
||||
"KRW": "KRW",
|
||||
"MXN": "MXN",
|
||||
"MYR": "MYR",
|
||||
"NOK": "NOK",
|
||||
"PLN": "PLN",
|
||||
"RUB": "RUB",
|
||||
"SEK": "SEK",
|
||||
"SGD": "SGD",
|
||||
"USD": "USD"
|
||||
"THB": "THB",
|
||||
"TRY": "TRY",
|
||||
"TWD": "TWD",
|
||||
"USD": "USD",
|
||||
"ZAR": "ZAR"
|
||||
},
|
||||
"enforcer": {
|
||||
"Edit Enforcer": "Edit Enforcer",
|
||||
@ -580,13 +597,13 @@
|
||||
"Multi-factor recover": "Multi-factor recover",
|
||||
"Multi-factor recover description": "Multi-factor recover description",
|
||||
"Or copy the secret to your Authenticator App": "Or copy the secret to your Authenticator App",
|
||||
"Passcode": "Passcode",
|
||||
"Please bind your email first, the system will automatically uses the mail for multi-factor authentication": "Please bind your email first, the system will automatically uses the mail for multi-factor authentication",
|
||||
"Please bind your phone first, the system automatically uses the phone for multi-factor authentication": "Please bind your phone first, the system automatically uses the phone for multi-factor authentication",
|
||||
"Please confirm the information below": "Please confirm the information below",
|
||||
"Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code": "Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code",
|
||||
"Protect your account with Multi-factor authentication": "Protect your account with Multi-factor authentication",
|
||||
"Recovery code": "Recovery code",
|
||||
"Remember this account for {hour} hours": "Remember this account for {hour} hours",
|
||||
"Scan the QR code with your Authenticator App": "Scan the QR code with your Authenticator App",
|
||||
"Set preferred": "Set preferred",
|
||||
"Setup": "Setup",
|
||||
|
@ -82,6 +82,8 @@
|
||||
"Left": "Left",
|
||||
"Logged in successfully": "Logged in successfully",
|
||||
"Logged out successfully": "Logged out successfully",
|
||||
"MFA remember time": "MFA remember time",
|
||||
"MFA remember time - Tooltip": "MFA remember time - Tooltip",
|
||||
"Multiple Choices": "Multiple Choices",
|
||||
"New Application": "New Application",
|
||||
"No verification": "No verification",
|
||||
@ -175,12 +177,27 @@
|
||||
"CAD": "CAD",
|
||||
"CHF": "CHF",
|
||||
"CNY": "CNY",
|
||||
"CZK": "CZK",
|
||||
"DKK": "DKK",
|
||||
"EUR": "EUR",
|
||||
"GBP": "GBP",
|
||||
"HKD": "HKD",
|
||||
"HUF": "HUF",
|
||||
"INR": "INR",
|
||||
"JPY": "JPY",
|
||||
"KRW": "KRW",
|
||||
"MXN": "MXN",
|
||||
"MYR": "MYR",
|
||||
"NOK": "NOK",
|
||||
"PLN": "PLN",
|
||||
"RUB": "RUB",
|
||||
"SEK": "SEK",
|
||||
"SGD": "SGD",
|
||||
"USD": "USD"
|
||||
"THB": "THB",
|
||||
"TRY": "TRY",
|
||||
"TWD": "TWD",
|
||||
"USD": "USD",
|
||||
"ZAR": "ZAR"
|
||||
},
|
||||
"enforcer": {
|
||||
"Edit Enforcer": "Edit Enforcer",
|
||||
@ -580,13 +597,13 @@
|
||||
"Multi-factor recover": "Multi-factor recover",
|
||||
"Multi-factor recover description": "Multi-factor recover description",
|
||||
"Or copy the secret to your Authenticator App": "Or copy the secret to your Authenticator App",
|
||||
"Passcode": "Passcode",
|
||||
"Please bind your email first, the system will automatically uses the mail for multi-factor authentication": "Please bind your email first, the system will automatically uses the mail for multi-factor authentication",
|
||||
"Please bind your phone first, the system automatically uses the phone for multi-factor authentication": "Please bind your phone first, the system automatically uses the phone for multi-factor authentication",
|
||||
"Please confirm the information below": "Please confirm the information below",
|
||||
"Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code": "Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code",
|
||||
"Protect your account with Multi-factor authentication": "Protect your account with Multi-factor authentication",
|
||||
"Recovery code": "Recovery code",
|
||||
"Remember this account for {hour} hours": "Remember this account for {hour} hours",
|
||||
"Scan the QR code with your Authenticator App": "Scan the QR code with your Authenticator App",
|
||||
"Set preferred": "Set preferred",
|
||||
"Setup": "Setup",
|
||||
|
@ -82,6 +82,8 @@
|
||||
"Left": "왼쪽",
|
||||
"Logged in successfully": "성공적으로 로그인했습니다",
|
||||
"Logged out successfully": "로그아웃이 성공적으로 되었습니다",
|
||||
"MFA remember time": "MFA remember time",
|
||||
"MFA remember time - Tooltip": "MFA remember time - Tooltip",
|
||||
"Multiple Choices": "Multiple Choices",
|
||||
"New Application": "새로운 응용 프로그램",
|
||||
"No verification": "No verification",
|
||||
@ -175,12 +177,27 @@
|
||||
"CAD": "CAD",
|
||||
"CHF": "CHF",
|
||||
"CNY": "CNY",
|
||||
"CZK": "CZK",
|
||||
"DKK": "DKK",
|
||||
"EUR": "EUR",
|
||||
"GBP": "GBP",
|
||||
"HKD": "HKD",
|
||||
"HUF": "HUF",
|
||||
"INR": "INR",
|
||||
"JPY": "JPY",
|
||||
"KRW": "KRW",
|
||||
"MXN": "MXN",
|
||||
"MYR": "MYR",
|
||||
"NOK": "NOK",
|
||||
"PLN": "PLN",
|
||||
"RUB": "RUB",
|
||||
"SEK": "SEK",
|
||||
"SGD": "SGD",
|
||||
"USD": "USD"
|
||||
"THB": "THB",
|
||||
"TRY": "TRY",
|
||||
"TWD": "TWD",
|
||||
"USD": "USD",
|
||||
"ZAR": "ZAR"
|
||||
},
|
||||
"enforcer": {
|
||||
"Edit Enforcer": "Edit Enforcer",
|
||||
@ -580,13 +597,13 @@
|
||||
"Multi-factor recover": "Multi-factor recover",
|
||||
"Multi-factor recover description": "Multi-factor recover description",
|
||||
"Or copy the secret to your Authenticator App": "Or copy the secret to your Authenticator App",
|
||||
"Passcode": "Passcode",
|
||||
"Please bind your email first, the system will automatically uses the mail for multi-factor authentication": "Please bind your email first, the system will automatically uses the mail for multi-factor authentication",
|
||||
"Please bind your phone first, the system automatically uses the phone for multi-factor authentication": "Please bind your phone first, the system automatically uses the phone for multi-factor authentication",
|
||||
"Please confirm the information below": "Please confirm the information below",
|
||||
"Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code": "Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code",
|
||||
"Protect your account with Multi-factor authentication": "Protect your account with Multi-factor authentication",
|
||||
"Recovery code": "Recovery code",
|
||||
"Remember this account for {hour} hours": "Remember this account for {hour} hours",
|
||||
"Scan the QR code with your Authenticator App": "Scan the QR code with your Authenticator App",
|
||||
"Set preferred": "Set preferred",
|
||||
"Setup": "Setup",
|
||||
|
@ -82,6 +82,8 @@
|
||||
"Left": "Left",
|
||||
"Logged in successfully": "Logged in successfully",
|
||||
"Logged out successfully": "Logged out successfully",
|
||||
"MFA remember time": "MFA remember time",
|
||||
"MFA remember time - Tooltip": "MFA remember time - Tooltip",
|
||||
"Multiple Choices": "Multiple Choices",
|
||||
"New Application": "New Application",
|
||||
"No verification": "No verification",
|
||||
@ -175,12 +177,27 @@
|
||||
"CAD": "CAD",
|
||||
"CHF": "CHF",
|
||||
"CNY": "CNY",
|
||||
"CZK": "CZK",
|
||||
"DKK": "DKK",
|
||||
"EUR": "EUR",
|
||||
"GBP": "GBP",
|
||||
"HKD": "HKD",
|
||||
"HUF": "HUF",
|
||||
"INR": "INR",
|
||||
"JPY": "JPY",
|
||||
"KRW": "KRW",
|
||||
"MXN": "MXN",
|
||||
"MYR": "MYR",
|
||||
"NOK": "NOK",
|
||||
"PLN": "PLN",
|
||||
"RUB": "RUB",
|
||||
"SEK": "SEK",
|
||||
"SGD": "SGD",
|
||||
"USD": "USD"
|
||||
"THB": "THB",
|
||||
"TRY": "TRY",
|
||||
"TWD": "TWD",
|
||||
"USD": "USD",
|
||||
"ZAR": "ZAR"
|
||||
},
|
||||
"enforcer": {
|
||||
"Edit Enforcer": "Edit Enforcer",
|
||||
@ -580,13 +597,13 @@
|
||||
"Multi-factor recover": "Multi-factor recover",
|
||||
"Multi-factor recover description": "Multi-factor recover description",
|
||||
"Or copy the secret to your Authenticator App": "Or copy the secret to your Authenticator App",
|
||||
"Passcode": "Passcode",
|
||||
"Please bind your email first, the system will automatically uses the mail for multi-factor authentication": "Please bind your email first, the system will automatically uses the mail for multi-factor authentication",
|
||||
"Please bind your phone first, the system automatically uses the phone for multi-factor authentication": "Please bind your phone first, the system automatically uses the phone for multi-factor authentication",
|
||||
"Please confirm the information below": "Please confirm the information below",
|
||||
"Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code": "Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code",
|
||||
"Protect your account with Multi-factor authentication": "Protect your account with Multi-factor authentication",
|
||||
"Recovery code": "Recovery code",
|
||||
"Remember this account for {hour} hours": "Remember this account for {hour} hours",
|
||||
"Scan the QR code with your Authenticator App": "Scan the QR code with your Authenticator App",
|
||||
"Set preferred": "Set preferred",
|
||||
"Setup": "Setup",
|
||||
|
@ -82,6 +82,8 @@
|
||||
"Left": "Left",
|
||||
"Logged in successfully": "Logged in successfully",
|
||||
"Logged out successfully": "Logged out successfully",
|
||||
"MFA remember time": "MFA remember time",
|
||||
"MFA remember time - Tooltip": "MFA remember time - Tooltip",
|
||||
"Multiple Choices": "Multiple Choices",
|
||||
"New Application": "New Application",
|
||||
"No verification": "No verification",
|
||||
@ -175,12 +177,27 @@
|
||||
"CAD": "CAD",
|
||||
"CHF": "CHF",
|
||||
"CNY": "CNY",
|
||||
"CZK": "CZK",
|
||||
"DKK": "DKK",
|
||||
"EUR": "EUR",
|
||||
"GBP": "GBP",
|
||||
"HKD": "HKD",
|
||||
"HUF": "HUF",
|
||||
"INR": "INR",
|
||||
"JPY": "JPY",
|
||||
"KRW": "KRW",
|
||||
"MXN": "MXN",
|
||||
"MYR": "MYR",
|
||||
"NOK": "NOK",
|
||||
"PLN": "PLN",
|
||||
"RUB": "RUB",
|
||||
"SEK": "SEK",
|
||||
"SGD": "SGD",
|
||||
"USD": "USD"
|
||||
"THB": "THB",
|
||||
"TRY": "TRY",
|
||||
"TWD": "TWD",
|
||||
"USD": "USD",
|
||||
"ZAR": "ZAR"
|
||||
},
|
||||
"enforcer": {
|
||||
"Edit Enforcer": "Edit Enforcer",
|
||||
@ -580,13 +597,13 @@
|
||||
"Multi-factor recover": "Multi-factor recover",
|
||||
"Multi-factor recover description": "Multi-factor recover description",
|
||||
"Or copy the secret to your Authenticator App": "Or copy the secret to your Authenticator App",
|
||||
"Passcode": "Passcode",
|
||||
"Please bind your email first, the system will automatically uses the mail for multi-factor authentication": "Please bind your email first, the system will automatically uses the mail for multi-factor authentication",
|
||||
"Please bind your phone first, the system automatically uses the phone for multi-factor authentication": "Please bind your phone first, the system automatically uses the phone for multi-factor authentication",
|
||||
"Please confirm the information below": "Please confirm the information below",
|
||||
"Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code": "Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code",
|
||||
"Protect your account with Multi-factor authentication": "Protect your account with Multi-factor authentication",
|
||||
"Recovery code": "Recovery code",
|
||||
"Remember this account for {hour} hours": "Remember this account for {hour} hours",
|
||||
"Scan the QR code with your Authenticator App": "Scan the QR code with your Authenticator App",
|
||||
"Set preferred": "Set preferred",
|
||||
"Setup": "Setup",
|
||||
|
@ -82,6 +82,8 @@
|
||||
"Left": "Left",
|
||||
"Logged in successfully": "Logged in successfully",
|
||||
"Logged out successfully": "Logged out successfully",
|
||||
"MFA remember time": "MFA remember time",
|
||||
"MFA remember time - Tooltip": "MFA remember time - Tooltip",
|
||||
"Multiple Choices": "Multiple Choices",
|
||||
"New Application": "New Application",
|
||||
"No verification": "No verification",
|
||||
@ -175,12 +177,27 @@
|
||||
"CAD": "CAD",
|
||||
"CHF": "CHF",
|
||||
"CNY": "CNY",
|
||||
"CZK": "CZK",
|
||||
"DKK": "DKK",
|
||||
"EUR": "EUR",
|
||||
"GBP": "GBP",
|
||||
"HKD": "HKD",
|
||||
"HUF": "HUF",
|
||||
"INR": "INR",
|
||||
"JPY": "JPY",
|
||||
"KRW": "KRW",
|
||||
"MXN": "MXN",
|
||||
"MYR": "MYR",
|
||||
"NOK": "NOK",
|
||||
"PLN": "PLN",
|
||||
"RUB": "RUB",
|
||||
"SEK": "SEK",
|
||||
"SGD": "SGD",
|
||||
"USD": "USD"
|
||||
"THB": "THB",
|
||||
"TRY": "TRY",
|
||||
"TWD": "TWD",
|
||||
"USD": "USD",
|
||||
"ZAR": "ZAR"
|
||||
},
|
||||
"enforcer": {
|
||||
"Edit Enforcer": "Edit Enforcer",
|
||||
@ -580,13 +597,13 @@
|
||||
"Multi-factor recover": "Multi-factor recover",
|
||||
"Multi-factor recover description": "Multi-factor recover description",
|
||||
"Or copy the secret to your Authenticator App": "Or copy the secret to your Authenticator App",
|
||||
"Passcode": "Passcode",
|
||||
"Please bind your email first, the system will automatically uses the mail for multi-factor authentication": "Please bind your email first, the system will automatically uses the mail for multi-factor authentication",
|
||||
"Please bind your phone first, the system automatically uses the phone for multi-factor authentication": "Please bind your phone first, the system automatically uses the phone for multi-factor authentication",
|
||||
"Please confirm the information below": "Please confirm the information below",
|
||||
"Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code": "Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code",
|
||||
"Protect your account with Multi-factor authentication": "Protect your account with Multi-factor authentication",
|
||||
"Recovery code": "Recovery code",
|
||||
"Remember this account for {hour} hours": "Remember this account for {hour} hours",
|
||||
"Scan the QR code with your Authenticator App": "Scan the QR code with your Authenticator App",
|
||||
"Set preferred": "Set preferred",
|
||||
"Setup": "Setup",
|
||||
|
@ -82,6 +82,8 @@
|
||||
"Left": "Esquerda",
|
||||
"Logged in successfully": "Login realizado com sucesso",
|
||||
"Logged out successfully": "Logout realizado com sucesso",
|
||||
"MFA remember time": "MFA remember time",
|
||||
"MFA remember time - Tooltip": "MFA remember time - Tooltip",
|
||||
"Multiple Choices": "Multiple Choices",
|
||||
"New Application": "Nova Aplicação",
|
||||
"No verification": "Sem verificação",
|
||||
@ -175,12 +177,27 @@
|
||||
"CAD": "CAD",
|
||||
"CHF": "CHF",
|
||||
"CNY": "CNY",
|
||||
"CZK": "CZK",
|
||||
"DKK": "DKK",
|
||||
"EUR": "EUR",
|
||||
"GBP": "GBP",
|
||||
"HKD": "HKD",
|
||||
"HUF": "HUF",
|
||||
"INR": "INR",
|
||||
"JPY": "JPY",
|
||||
"KRW": "KRW",
|
||||
"MXN": "MXN",
|
||||
"MYR": "MYR",
|
||||
"NOK": "NOK",
|
||||
"PLN": "PLN",
|
||||
"RUB": "RUB",
|
||||
"SEK": "SEK",
|
||||
"SGD": "SGD",
|
||||
"USD": "USD"
|
||||
"THB": "THB",
|
||||
"TRY": "TRY",
|
||||
"TWD": "TWD",
|
||||
"USD": "USD",
|
||||
"ZAR": "ZAR"
|
||||
},
|
||||
"enforcer": {
|
||||
"Edit Enforcer": "Editar Executor",
|
||||
@ -580,13 +597,13 @@
|
||||
"Multi-factor recover": "Multi-factor recover",
|
||||
"Multi-factor recover description": "Multi-factor recover description",
|
||||
"Or copy the secret to your Authenticator App": "Or copy the secret to your Authenticator App",
|
||||
"Passcode": "Código de acesso",
|
||||
"Please bind your email first, the system will automatically uses the mail for multi-factor authentication": "Please bind your email first, the system will automatically uses the mail for multi-factor authentication",
|
||||
"Please bind your phone first, the system automatically uses the phone for multi-factor authentication": "Please bind your phone first, the system automatically uses the phone for multi-factor authentication",
|
||||
"Please confirm the information below": "Please confirm the information below",
|
||||
"Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code": "Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code",
|
||||
"Protect your account with Multi-factor authentication": "Protect your account with Multi-factor authentication",
|
||||
"Recovery code": "Recovery code",
|
||||
"Remember this account for {hour} hours": "Remember this account for {hour} hours",
|
||||
"Scan the QR code with your Authenticator App": "Scan the QR code with your Authenticator App",
|
||||
"Set preferred": "Set preferred",
|
||||
"Setup": "Setup",
|
||||
|
@ -82,6 +82,8 @@
|
||||
"Left": "Левый",
|
||||
"Logged in successfully": "Успешный вход в систему",
|
||||
"Logged out successfully": "Успешный выход из системы",
|
||||
"MFA remember time": "MFA remember time",
|
||||
"MFA remember time - Tooltip": "MFA remember time - Tooltip",
|
||||
"Multiple Choices": "Multiple Choices",
|
||||
"New Application": "Новое приложение",
|
||||
"No verification": "Нет верификации",
|
||||
@ -175,12 +177,27 @@
|
||||
"CAD": "CAD",
|
||||
"CHF": "CHF",
|
||||
"CNY": "CNY",
|
||||
"CZK": "CZK",
|
||||
"DKK": "DKK",
|
||||
"EUR": "EUR",
|
||||
"GBP": "GBP",
|
||||
"HKD": "HKD",
|
||||
"HUF": "HUF",
|
||||
"INR": "INR",
|
||||
"JPY": "JPY",
|
||||
"KRW": "KRW",
|
||||
"MXN": "MXN",
|
||||
"MYR": "MYR",
|
||||
"NOK": "NOK",
|
||||
"PLN": "PLN",
|
||||
"RUB": "RUB",
|
||||
"SEK": "SEK",
|
||||
"SGD": "SGD",
|
||||
"USD": "USD"
|
||||
"THB": "THB",
|
||||
"TRY": "TRY",
|
||||
"TWD": "TWD",
|
||||
"USD": "USD",
|
||||
"ZAR": "ZAR"
|
||||
},
|
||||
"enforcer": {
|
||||
"Edit Enforcer": "Редактировать контролёра доступа",
|
||||
@ -580,13 +597,13 @@
|
||||
"Multi-factor recover": "Multi-factor recover",
|
||||
"Multi-factor recover description": "Multi-factor recover description",
|
||||
"Or copy the secret to your Authenticator App": "Or copy the secret to your Authenticator App",
|
||||
"Passcode": "Passcode",
|
||||
"Please bind your email first, the system will automatically uses the mail for multi-factor authentication": "Please bind your email first, the system will automatically uses the mail for multi-factor authentication",
|
||||
"Please bind your phone first, the system automatically uses the phone for multi-factor authentication": "Please bind your phone first, the system automatically uses the phone for multi-factor authentication",
|
||||
"Please confirm the information below": "Please confirm the information below",
|
||||
"Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code": "Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code",
|
||||
"Protect your account with Multi-factor authentication": "Protect your account with Multi-factor authentication",
|
||||
"Recovery code": "Recovery code",
|
||||
"Remember this account for {hour} hours": "Remember this account for {hour} hours",
|
||||
"Scan the QR code with your Authenticator App": "Scan the QR code with your Authenticator App",
|
||||
"Set preferred": "Set preferred",
|
||||
"Setup": "Setup",
|
||||
|
@ -82,6 +82,8 @@
|
||||
"Left": "Vľavo",
|
||||
"Logged in successfully": "Úspešne prihlásený",
|
||||
"Logged out successfully": "Úspešne odhlásený",
|
||||
"MFA remember time": "MFA remember time",
|
||||
"MFA remember time - Tooltip": "MFA remember time - Tooltip",
|
||||
"Multiple Choices": "Multiple Choices",
|
||||
"New Application": "Nová aplikácia",
|
||||
"No verification": "Bez overenia",
|
||||
@ -175,12 +177,27 @@
|
||||
"CAD": "CAD",
|
||||
"CHF": "CHF",
|
||||
"CNY": "CNY",
|
||||
"CZK": "CZK",
|
||||
"DKK": "DKK",
|
||||
"EUR": "EUR",
|
||||
"GBP": "GBP",
|
||||
"HKD": "HKD",
|
||||
"HUF": "HUF",
|
||||
"INR": "INR",
|
||||
"JPY": "JPY",
|
||||
"KRW": "KRW",
|
||||
"MXN": "MXN",
|
||||
"MYR": "MYR",
|
||||
"NOK": "NOK",
|
||||
"PLN": "PLN",
|
||||
"RUB": "RUB",
|
||||
"SEK": "SEK",
|
||||
"SGD": "SGD",
|
||||
"USD": "USD"
|
||||
"THB": "THB",
|
||||
"TRY": "TRY",
|
||||
"TWD": "TWD",
|
||||
"USD": "USD",
|
||||
"ZAR": "ZAR"
|
||||
},
|
||||
"enforcer": {
|
||||
"Edit Enforcer": "Upraviť vynútiteľa",
|
||||
@ -580,13 +597,13 @@
|
||||
"Multi-factor recover": "Obnova viacfaktorovej autentifikácie",
|
||||
"Multi-factor recover description": "Popis obnovy viacfaktorovej autentifikácie",
|
||||
"Or copy the secret to your Authenticator App": "Alebo skopírujte tajomstvo do svojej aplikácie na autentifikáciu",
|
||||
"Passcode": "Kód",
|
||||
"Please bind your email first, the system will automatically uses the mail for multi-factor authentication": "Najskôr pripojte svoj email, systém automaticky použije mail na viacfaktorovú autentifikáciu",
|
||||
"Please bind your phone first, the system automatically uses the phone for multi-factor authentication": "Najskôr pripojte svoj telefón, systém automaticky použije telefón na viacfaktorovú autentifikáciu",
|
||||
"Please confirm the information below": "Potvrďte informácie nižšie",
|
||||
"Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code": "Uložte si tento obnovovací kód. Keď vaše zariadenie nebude schopné poskytnúť overovací kód, môžete obnoviť MFA autentifikáciu pomocou tohto obnovovacieho kódu",
|
||||
"Protect your account with Multi-factor authentication": "Chráňte svoj účet pomocou viacfaktorovej autentifikácie",
|
||||
"Recovery code": "Obnovovací kód",
|
||||
"Remember this account for {hour} hours": "Remember this account for {hour} hours",
|
||||
"Scan the QR code with your Authenticator App": "Naskenujte QR kód pomocou svojej aplikácie na autentifikáciu",
|
||||
"Set preferred": "Nastaviť ako preferované",
|
||||
"Setup": "Nastaviť",
|
||||
|
@ -82,6 +82,8 @@
|
||||
"Left": "Left",
|
||||
"Logged in successfully": "Logged in successfully",
|
||||
"Logged out successfully": "Logged out successfully",
|
||||
"MFA remember time": "MFA remember time",
|
||||
"MFA remember time - Tooltip": "MFA remember time - Tooltip",
|
||||
"Multiple Choices": "Multiple Choices",
|
||||
"New Application": "New Application",
|
||||
"No verification": "No verification",
|
||||
@ -175,12 +177,27 @@
|
||||
"CAD": "CAD",
|
||||
"CHF": "CHF",
|
||||
"CNY": "CNY",
|
||||
"CZK": "CZK",
|
||||
"DKK": "DKK",
|
||||
"EUR": "EUR",
|
||||
"GBP": "GBP",
|
||||
"HKD": "HKD",
|
||||
"HUF": "HUF",
|
||||
"INR": "INR",
|
||||
"JPY": "JPY",
|
||||
"KRW": "KRW",
|
||||
"MXN": "MXN",
|
||||
"MYR": "MYR",
|
||||
"NOK": "NOK",
|
||||
"PLN": "PLN",
|
||||
"RUB": "RUB",
|
||||
"SEK": "SEK",
|
||||
"SGD": "SGD",
|
||||
"USD": "USD"
|
||||
"THB": "THB",
|
||||
"TRY": "TRY",
|
||||
"TWD": "TWD",
|
||||
"USD": "USD",
|
||||
"ZAR": "ZAR"
|
||||
},
|
||||
"enforcer": {
|
||||
"Edit Enforcer": "Edit Enforcer",
|
||||
@ -580,13 +597,13 @@
|
||||
"Multi-factor recover": "Multi-factor recover",
|
||||
"Multi-factor recover description": "Multi-factor recover description",
|
||||
"Or copy the secret to your Authenticator App": "Or copy the secret to your Authenticator App",
|
||||
"Passcode": "Passcode",
|
||||
"Please bind your email first, the system will automatically uses the mail for multi-factor authentication": "Please bind your email first, the system will automatically uses the mail for multi-factor authentication",
|
||||
"Please bind your phone first, the system automatically uses the phone for multi-factor authentication": "Please bind your phone first, the system automatically uses the phone for multi-factor authentication",
|
||||
"Please confirm the information below": "Please confirm the information below",
|
||||
"Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code": "Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code",
|
||||
"Protect your account with Multi-factor authentication": "Protect your account with Multi-factor authentication",
|
||||
"Recovery code": "Recovery code",
|
||||
"Remember this account for {hour} hours": "Remember this account for {hour} hours",
|
||||
"Scan the QR code with your Authenticator App": "Scan the QR code with your Authenticator App",
|
||||
"Set preferred": "Set preferred",
|
||||
"Setup": "Setup",
|
||||
|
@ -82,6 +82,8 @@
|
||||
"Left": "Sol",
|
||||
"Logged in successfully": "Başarıyla giriş yapıldı",
|
||||
"Logged out successfully": "Başarıyla çıkış yapıldı",
|
||||
"MFA remember time": "MFA remember time",
|
||||
"MFA remember time - Tooltip": "MFA remember time - Tooltip",
|
||||
"Multiple Choices": "Multiple Choices",
|
||||
"New Application": "New Application",
|
||||
"No verification": "No verification",
|
||||
@ -175,12 +177,27 @@
|
||||
"CAD": "CAD",
|
||||
"CHF": "CHF",
|
||||
"CNY": "CNY",
|
||||
"CZK": "CZK",
|
||||
"DKK": "DKK",
|
||||
"EUR": "EUR",
|
||||
"GBP": "GBP",
|
||||
"HKD": "HKD",
|
||||
"HUF": "HUF",
|
||||
"INR": "INR",
|
||||
"JPY": "JPY",
|
||||
"KRW": "KRW",
|
||||
"MXN": "MXN",
|
||||
"MYR": "MYR",
|
||||
"NOK": "NOK",
|
||||
"PLN": "PLN",
|
||||
"RUB": "RUB",
|
||||
"SEK": "SEK",
|
||||
"SGD": "SGD",
|
||||
"USD": "USD"
|
||||
"THB": "THB",
|
||||
"TRY": "TRY",
|
||||
"TWD": "TWD",
|
||||
"USD": "USD",
|
||||
"ZAR": "ZAR"
|
||||
},
|
||||
"enforcer": {
|
||||
"Edit Enforcer": "Edit Enforcer",
|
||||
@ -580,13 +597,13 @@
|
||||
"Multi-factor recover": "Multi-factor recover",
|
||||
"Multi-factor recover description": "Multi-factor recover description",
|
||||
"Or copy the secret to your Authenticator App": "Veya kod 'u Authenticator uygulamasından kopyalayın",
|
||||
"Passcode": "Parola",
|
||||
"Please bind your email first, the system will automatically uses the mail for multi-factor authentication": "Please bind your email first, the system will automatically uses the mail for multi-factor authentication",
|
||||
"Please bind your phone first, the system automatically uses the phone for multi-factor authentication": "Please bind your phone first, the system automatically uses the phone for multi-factor authentication",
|
||||
"Please confirm the information below": "Lütfen aşağıdaki bilgileri doğrulayın",
|
||||
"Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code": "Lütfen bu kurtarma kodlarını kaydedin. Cihazınızdan yetkilendirme kodları oluşturamazsanız bu kodları kullanarak sorunu çözebilirsiniz",
|
||||
"Protect your account with Multi-factor authentication": "Protect your account with Multi-factor authentication",
|
||||
"Recovery code": "Kurtarma kodu",
|
||||
"Remember this account for {hour} hours": "Remember this account for {hour} hours",
|
||||
"Scan the QR code with your Authenticator App": "Bu QR kodunu kimlik doğrulama uygulamanızla tarayın",
|
||||
"Set preferred": "Set preferred",
|
||||
"Setup": "Setup",
|
||||
|
@ -82,6 +82,8 @@
|
||||
"Left": "Ліворуч",
|
||||
"Logged in successfully": "Успішно ввійшли",
|
||||
"Logged out successfully": "Успішно вийшов",
|
||||
"MFA remember time": "MFA remember time",
|
||||
"MFA remember time - Tooltip": "MFA remember time - Tooltip",
|
||||
"Multiple Choices": "Multiple Choices",
|
||||
"New Application": "Нова заявка",
|
||||
"No verification": "Без підтвердження",
|
||||
@ -175,12 +177,27 @@
|
||||
"CAD": "CAD",
|
||||
"CHF": "CHF",
|
||||
"CNY": "CNY",
|
||||
"CZK": "CZK",
|
||||
"DKK": "DKK",
|
||||
"EUR": "EUR",
|
||||
"GBP": "GBP",
|
||||
"HKD": "HKD",
|
||||
"HUF": "HUF",
|
||||
"INR": "INR",
|
||||
"JPY": "JPY",
|
||||
"KRW": "KRW",
|
||||
"MXN": "MXN",
|
||||
"MYR": "MYR",
|
||||
"NOK": "NOK",
|
||||
"PLN": "PLN",
|
||||
"RUB": "RUB",
|
||||
"SEK": "SEK",
|
||||
"SGD": "SGD",
|
||||
"USD": "USD"
|
||||
"THB": "THB",
|
||||
"TRY": "TRY",
|
||||
"TWD": "TWD",
|
||||
"USD": "USD",
|
||||
"ZAR": "ZAR"
|
||||
},
|
||||
"enforcer": {
|
||||
"Edit Enforcer": "Редагувати Enforcer",
|
||||
@ -580,13 +597,13 @@
|
||||
"Multi-factor recover": "Багатофакторне відновлення",
|
||||
"Multi-factor recover description": "Опис багатофакторного відновлення",
|
||||
"Or copy the secret to your Authenticator App": "Або скопіюйте секрет у програму Authenticator",
|
||||
"Passcode": "Пароль",
|
||||
"Please bind your email first, the system will automatically uses the mail for multi-factor authentication": "Спочатку прив’яжіть свою електронну адресу, система автоматично використовуватиме її для багатофакторної автентифікації",
|
||||
"Please bind your phone first, the system automatically uses the phone for multi-factor authentication": "Спочатку прив’яжіть свій телефон, система автоматично використовує телефон для багатофакторної автентифікації",
|
||||
"Please confirm the information below": "Підтвердьте інформацію нижче",
|
||||
"Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code": "Будь ласка, збережіть цей код відновлення. ",
|
||||
"Protect your account with Multi-factor authentication": "Захистіть свій обліковий запис за допомогою багатофакторної автентифікації",
|
||||
"Recovery code": "Код відновлення",
|
||||
"Remember this account for {hour} hours": "Remember this account for {hour} hours",
|
||||
"Scan the QR code with your Authenticator App": "Відскануйте QR-код за допомогою програми Authenticator",
|
||||
"Set preferred": "Встановити перевагу",
|
||||
"Setup": "Налаштування",
|
||||
|
@ -82,6 +82,8 @@
|
||||
"Left": "Trái",
|
||||
"Logged in successfully": "Đăng nhập thành công",
|
||||
"Logged out successfully": "Đã đăng xuất thành công",
|
||||
"MFA remember time": "MFA remember time",
|
||||
"MFA remember time - Tooltip": "MFA remember time - Tooltip",
|
||||
"Multiple Choices": "Multiple Choices",
|
||||
"New Application": "Ứng dụng mới",
|
||||
"No verification": "Không xác minh",
|
||||
@ -175,12 +177,27 @@
|
||||
"CAD": "CAD",
|
||||
"CHF": "CHF",
|
||||
"CNY": "CNY",
|
||||
"CZK": "CZK",
|
||||
"DKK": "DKK",
|
||||
"EUR": "EUR",
|
||||
"GBP": "GBP",
|
||||
"HKD": "HKD",
|
||||
"HUF": "HUF",
|
||||
"INR": "INR",
|
||||
"JPY": "JPY",
|
||||
"KRW": "KRW",
|
||||
"MXN": "MXN",
|
||||
"MYR": "MYR",
|
||||
"NOK": "NOK",
|
||||
"PLN": "PLN",
|
||||
"RUB": "RUB",
|
||||
"SEK": "SEK",
|
||||
"SGD": "SGD",
|
||||
"USD": "USD"
|
||||
"THB": "THB",
|
||||
"TRY": "TRY",
|
||||
"TWD": "TWD",
|
||||
"USD": "USD",
|
||||
"ZAR": "ZAR"
|
||||
},
|
||||
"enforcer": {
|
||||
"Edit Enforcer": "Edit Enforcer",
|
||||
@ -580,13 +597,13 @@
|
||||
"Multi-factor recover": "Multi-factor recover",
|
||||
"Multi-factor recover description": "Multi-factor recover description",
|
||||
"Or copy the secret to your Authenticator App": "Or copy the secret to your Authenticator App",
|
||||
"Passcode": "Passcode",
|
||||
"Please bind your email first, the system will automatically uses the mail for multi-factor authentication": "Please bind your email first, the system will automatically uses the mail for multi-factor authentication",
|
||||
"Please bind your phone first, the system automatically uses the phone for multi-factor authentication": "Please bind your phone first, the system automatically uses the phone for multi-factor authentication",
|
||||
"Please confirm the information below": "Please confirm the information below",
|
||||
"Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code": "Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code",
|
||||
"Protect your account with Multi-factor authentication": "Protect your account with Multi-factor authentication",
|
||||
"Recovery code": "Recovery code",
|
||||
"Remember this account for {hour} hours": "Remember this account for {hour} hours",
|
||||
"Scan the QR code with your Authenticator App": "Scan the QR code with your Authenticator App",
|
||||
"Set preferred": "Set preferred",
|
||||
"Setup": "Setup",
|
||||
|
@ -82,6 +82,8 @@
|
||||
"Left": "居左",
|
||||
"Logged in successfully": "登录成功",
|
||||
"Logged out successfully": "登出成功",
|
||||
"MFA remember time": "MFA记住时间",
|
||||
"MFA remember time - Tooltip": "配置MFA登录成功后帐户被记住为受信任的持续时间",
|
||||
"Multiple Choices": "多选",
|
||||
"New Application": "添加应用",
|
||||
"No verification": "不校验",
|
||||
@ -175,12 +177,27 @@
|
||||
"CAD": "加拿大元",
|
||||
"CHF": "瑞士法郎",
|
||||
"CNY": "人民币",
|
||||
"CZK": "捷克克朗",
|
||||
"DKK": "丹麦克朗",
|
||||
"EUR": "欧元",
|
||||
"GBP": "英镑",
|
||||
"HKD": "港币",
|
||||
"HUF": "匈牙利福林",
|
||||
"INR": "印度卢比",
|
||||
"JPY": "日元",
|
||||
"KRW": "韩元",
|
||||
"MXN": "墨西哥比索",
|
||||
"MYR": "马来西亚林吉特",
|
||||
"NOK": "挪威克朗",
|
||||
"PLN": "波兰兹罗提",
|
||||
"RUB": "俄罗斯卢布",
|
||||
"SEK": "瑞典克朗",
|
||||
"SGD": "新加坡元",
|
||||
"USD": "美元"
|
||||
"THB": "泰铢",
|
||||
"TRY": "土耳其里拉",
|
||||
"TWD": "新台币",
|
||||
"USD": "美元",
|
||||
"ZAR": "南非兰特"
|
||||
},
|
||||
"enforcer": {
|
||||
"Edit Enforcer": "编辑Casbin执行器",
|
||||
@ -580,13 +597,13 @@
|
||||
"Multi-factor recover": "重置多因素认证",
|
||||
"Multi-factor recover description": "如果您无法访问您的设备,输入您的多因素认证恢复代码来确认您的身份",
|
||||
"Or copy the secret to your Authenticator App": "或者将这个密钥复制到你的身份验证应用中",
|
||||
"Passcode": "认证码",
|
||||
"Please bind your email first, the system will automatically uses the mail for multi-factor authentication": "请先绑定邮箱,之后会自动使用该邮箱作为多因素认证的方式",
|
||||
"Please bind your phone first, the system automatically uses the phone for multi-factor authentication": "请先绑定手机号,之后会自动使用该手机号作为多因素认证的方式",
|
||||
"Please confirm the information below": "请确认以下信息",
|
||||
"Please save this recovery code. Once your device cannot provide an authentication code, you can reset mfa authentication by this recovery code": "请保存此恢复代码。一旦您的设备无法提供身份验证码,您可以通过此恢复码重置多因素认证",
|
||||
"Protect your account with Multi-factor authentication": "通过多因素认证保护您的帐户",
|
||||
"Recovery code": "恢复码",
|
||||
"Remember this account for {hour} hours": "记住这个账户 {hour} 小时",
|
||||
"Scan the QR code with your Authenticator App": "用你的身份验证应用扫描二维码",
|
||||
"Set preferred": "设为首选",
|
||||
"Setup": "设置",
|
||||
|
Reference in New Issue
Block a user