mirror of
https://github.com/casdoor/casdoor.git
synced 2025-07-17 01:43:49 +08:00
Compare commits
3 Commits
Author | SHA1 | Date | |
---|---|---|---|
2a53241128 | |||
835273576b | |||
7fdc264ff6 |
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":
|
||||
|
@ -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,
|
||||
|
@ -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 => {
|
||||
|
@ -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;
|
||||
}
|
||||
@ -1619,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)";
|
||||
}
|
||||
|
@ -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`;
|
||||
|
@ -177,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",
|
||||
|
@ -177,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",
|
||||
|
@ -177,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",
|
||||
|
@ -177,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",
|
||||
|
@ -177,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",
|
||||
|
@ -177,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",
|
||||
|
@ -177,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",
|
||||
|
@ -177,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",
|
||||
|
@ -177,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",
|
||||
|
@ -177,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",
|
||||
|
@ -177,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",
|
||||
|
@ -177,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",
|
||||
|
@ -177,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",
|
||||
|
@ -177,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",
|
||||
|
@ -177,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",
|
||||
|
@ -177,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",
|
||||
|
@ -177,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",
|
||||
|
@ -177,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",
|
||||
|
@ -177,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": "Редактировать контролёра доступа",
|
||||
|
@ -177,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",
|
||||
|
@ -177,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",
|
||||
|
@ -177,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",
|
||||
|
@ -177,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",
|
||||
|
@ -177,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",
|
||||
|
@ -177,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执行器",
|
||||
|
Reference in New Issue
Block a user