mirror of
https://github.com/casdoor/casdoor.git
synced 2025-07-15 15:13:49 +08:00
Compare commits
50 Commits
Author | SHA1 | Date | |
---|---|---|---|
2da597b26f | |||
ef14c84edc | |||
cb5c7667b5 | |||
920ed87f75 | |||
6598f0ccdf | |||
8e71e23d75 | |||
146a369f80 | |||
9bbe5afb7c | |||
b42391c6ce | |||
fb035a5353 | |||
b1f68a60a4 | |||
201d704a31 | |||
bf91ad6c97 | |||
3ccc0339c7 | |||
1f2b0a3587 | |||
0b3feb0d5f | |||
568c0e2c3d | |||
f4ad2b4034 | |||
c9f8727890 | |||
e2e3c1fbb8 | |||
73915ac0a0 | |||
bf9d55ff40 | |||
b36fb50239 | |||
4307baa759 | |||
3964bae1df | |||
d9b97d70be | |||
ca224fdd4c | |||
37daea2bbc | |||
af231bf946 | |||
6dc7b4d533 | |||
12cc0f429e | |||
8cc22dec91 | |||
0c08ae5365 | |||
c3485268d3 | |||
64a4956c42 | |||
855bdf47e8 | |||
de7e322fbb | |||
4cb0cd7c5a | |||
c6a50349cc | |||
8a098a4b6e | |||
09f98fd24a | |||
515d209063 | |||
4e17dae2c2 | |||
0ad4d82d9c | |||
731daf5204 | |||
b6b77da7cf | |||
8b4637aa3a | |||
87506b84e3 | |||
fed9332246 | |||
33afc52a0b |
@ -15,32 +15,51 @@
|
|||||||
package captcha
|
package captcha
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
|
||||||
"errors"
|
openapiutil "github.com/alibabacloud-go/openapi-util/service"
|
||||||
"fmt"
|
teaUtil "github.com/alibabacloud-go/tea-utils/v2/service"
|
||||||
"io"
|
"github.com/alibabacloud-go/tea/tea"
|
||||||
"net/http"
|
|
||||||
"net/url"
|
|
||||||
"sort"
|
|
||||||
"strconv"
|
|
||||||
"strings"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/casdoor/casdoor/util"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const AliyunCaptchaVerifyUrl = "http://afs.aliyuncs.com"
|
const AliyunCaptchaVerifyUrl = "captcha.cn-shanghai.aliyuncs.com"
|
||||||
|
|
||||||
type captchaSuccessResponse struct {
|
type VerifyCaptchaRequest struct {
|
||||||
Code int `json:"Code"`
|
CaptchaVerifyParam *string `json:"CaptchaVerifyParam,omitempty" xml:"CaptchaVerifyParam,omitempty"`
|
||||||
Msg string `json:"Msg"`
|
SceneId *string `json:"SceneId,omitempty" xml:"SceneId,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type captchaFailResponse struct {
|
type VerifyCaptchaResponseBodyResult struct {
|
||||||
Code string `json:"Code"`
|
VerifyResult *bool `json:"VerifyResult,omitempty" xml:"VerifyResult,omitempty"`
|
||||||
Message string `json:"Message"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type VerifyCaptchaResponseBody struct {
|
||||||
|
Code *string `json:"Code,omitempty" xml:"Code,omitempty"`
|
||||||
|
Message *string `json:"Message,omitempty" xml:"Message,omitempty"`
|
||||||
|
// Id of the request
|
||||||
|
RequestId *string `json:"RequestId,omitempty" xml:"RequestId,omitempty"`
|
||||||
|
Result *VerifyCaptchaResponseBodyResult `json:"Result,omitempty" xml:"Result,omitempty" type:"Struct"`
|
||||||
|
Success *bool `json:"Success,omitempty" xml:"Success,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type VerifyIntelligentCaptchaResponseBodyResult struct {
|
||||||
|
VerifyCode *string `json:"VerifyCode,omitempty" xml:"VerifyCode,omitempty"`
|
||||||
|
VerifyResult *bool `json:"VerifyResult,omitempty" xml:"VerifyResult,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type VerifyIntelligentCaptchaResponseBody struct {
|
||||||
|
Code *string `json:"Code,omitempty" xml:"Code,omitempty"`
|
||||||
|
Message *string `json:"Message,omitempty" xml:"Message,omitempty"`
|
||||||
|
// Id of the request
|
||||||
|
RequestId *string `json:"RequestId,omitempty" xml:"RequestId,omitempty"`
|
||||||
|
Result *VerifyIntelligentCaptchaResponseBodyResult `json:"Result,omitempty" xml:"Result,omitempty" type:"Struct"`
|
||||||
|
Success *bool `json:"Success,omitempty" xml:"Success,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type VerifyIntelligentCaptchaResponse struct {
|
||||||
|
Headers map[string]*string `json:"headers,omitempty" xml:"headers,omitempty" require:"true"`
|
||||||
|
StatusCode *int32 `json:"statusCode,omitempty" xml:"statusCode,omitempty" require:"true"`
|
||||||
|
Body *VerifyIntelligentCaptchaResponseBody `json:"body,omitempty" xml:"body,omitempty" require:"true"`
|
||||||
|
}
|
||||||
type AliyunCaptchaProvider struct{}
|
type AliyunCaptchaProvider struct{}
|
||||||
|
|
||||||
func NewAliyunCaptchaProvider() *AliyunCaptchaProvider {
|
func NewAliyunCaptchaProvider() *AliyunCaptchaProvider {
|
||||||
@ -48,68 +67,69 @@ func NewAliyunCaptchaProvider() *AliyunCaptchaProvider {
|
|||||||
return captcha
|
return captcha
|
||||||
}
|
}
|
||||||
|
|
||||||
func contentEscape(str string) string {
|
func (captcha *AliyunCaptchaProvider) VerifyCaptcha(token, clientId, clientSecret, clientId2 string) (bool, error) {
|
||||||
str = strings.Replace(str, " ", "%20", -1)
|
config := &openapi.Config{}
|
||||||
str = url.QueryEscape(str)
|
|
||||||
return str
|
|
||||||
}
|
|
||||||
|
|
||||||
func (captcha *AliyunCaptchaProvider) VerifyCaptcha(token, clientSecret string) (bool, error) {
|
config.Endpoint = tea.String(AliyunCaptchaVerifyUrl)
|
||||||
pathData, err := url.ParseQuery(token)
|
config.ConnectTimeout = tea.Int(5000)
|
||||||
|
config.ReadTimeout = tea.Int(5000)
|
||||||
|
config.AccessKeyId = tea.String(clientId)
|
||||||
|
config.AccessKeySecret = tea.String(clientSecret)
|
||||||
|
|
||||||
|
client := new(openapi.Client)
|
||||||
|
err := client.Init(config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
pathData["Action"] = []string{"AuthenticateSig"}
|
request := VerifyCaptchaRequest{CaptchaVerifyParam: tea.String(token), SceneId: tea.String(clientId2)}
|
||||||
pathData["Format"] = []string{"json"}
|
|
||||||
pathData["SignatureMethod"] = []string{"HMAC-SHA1"}
|
|
||||||
pathData["SignatureNonce"] = []string{strconv.FormatInt(time.Now().UnixNano(), 10)}
|
|
||||||
pathData["SignatureVersion"] = []string{"1.0"}
|
|
||||||
pathData["Timestamp"] = []string{time.Now().UTC().Format("2006-01-02T15:04:05Z")}
|
|
||||||
pathData["Version"] = []string{"2018-01-12"}
|
|
||||||
|
|
||||||
var keys []string
|
err = teaUtil.ValidateModel(&request)
|
||||||
for k := range pathData {
|
|
||||||
keys = append(keys, k)
|
|
||||||
}
|
|
||||||
sort.Strings(keys)
|
|
||||||
|
|
||||||
sortQuery := ""
|
|
||||||
for _, k := range keys {
|
|
||||||
sortQuery += k + "=" + contentEscape(pathData[k][0]) + "&"
|
|
||||||
}
|
|
||||||
sortQuery = strings.TrimSuffix(sortQuery, "&")
|
|
||||||
|
|
||||||
stringToSign := fmt.Sprintf("GET&%s&%s", url.QueryEscape("/"), url.QueryEscape(sortQuery))
|
|
||||||
|
|
||||||
signature := util.GetHmacSha1(clientSecret+"&", stringToSign)
|
|
||||||
|
|
||||||
resp, err := http.Get(fmt.Sprintf("%s?%s&Signature=%s", AliyunCaptchaVerifyUrl, sortQuery, url.QueryEscape(signature)))
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
defer resp.Body.Close()
|
runtime := &teaUtil.RuntimeOptions{}
|
||||||
body, err := io.ReadAll(resp.Body)
|
|
||||||
|
body := map[string]interface{}{}
|
||||||
|
if !tea.BoolValue(teaUtil.IsUnset(request.CaptchaVerifyParam)) {
|
||||||
|
body["CaptchaVerifyParam"] = request.CaptchaVerifyParam
|
||||||
|
}
|
||||||
|
|
||||||
|
if !tea.BoolValue(teaUtil.IsUnset(request.SceneId)) {
|
||||||
|
body["SceneId"] = request.SceneId
|
||||||
|
}
|
||||||
|
|
||||||
|
req := &openapi.OpenApiRequest{
|
||||||
|
Body: openapiutil.ParseToMap(body),
|
||||||
|
}
|
||||||
|
params := &openapi.Params{
|
||||||
|
Action: tea.String("VerifyIntelligentCaptcha"),
|
||||||
|
Version: tea.String("2023-03-05"),
|
||||||
|
Protocol: tea.String("HTTPS"),
|
||||||
|
Pathname: tea.String("/"),
|
||||||
|
Method: tea.String("POST"),
|
||||||
|
AuthType: tea.String("AK"),
|
||||||
|
Style: tea.String("RPC"),
|
||||||
|
ReqBodyType: tea.String("formData"),
|
||||||
|
BodyType: tea.String("json"),
|
||||||
|
}
|
||||||
|
|
||||||
|
res := &VerifyIntelligentCaptchaResponse{}
|
||||||
|
|
||||||
|
resBody, err := client.CallApi(params, req, runtime)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return handleCaptchaResponse(body)
|
err = tea.Convert(resBody, &res)
|
||||||
}
|
|
||||||
|
|
||||||
func handleCaptchaResponse(body []byte) (bool, error) {
|
|
||||||
captchaResp := &captchaSuccessResponse{}
|
|
||||||
err := json.Unmarshal(body, captchaResp)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
captchaFailResp := &captchaFailResponse{}
|
return false, err
|
||||||
err = json.Unmarshal(body, captchaFailResp)
|
|
||||||
if err != nil {
|
|
||||||
return false, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return false, errors.New(captchaFailResp.Message)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true, nil
|
if res.Body.Result.VerifyResult != nil && *res.Body.Result.VerifyResult {
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return false, nil
|
||||||
}
|
}
|
||||||
|
@ -23,6 +23,6 @@ func NewDefaultCaptchaProvider() *DefaultCaptchaProvider {
|
|||||||
return captcha
|
return captcha
|
||||||
}
|
}
|
||||||
|
|
||||||
func (captcha *DefaultCaptchaProvider) VerifyCaptcha(token, clientSecret string) (bool, error) {
|
func (captcha *DefaultCaptchaProvider) VerifyCaptcha(token, clientId, clientSecret, clientId2 string) (bool, error) {
|
||||||
return object.VerifyCaptcha(clientSecret, token), nil
|
return object.VerifyCaptcha(clientSecret, token), nil
|
||||||
}
|
}
|
||||||
|
@ -35,7 +35,7 @@ func NewGEETESTCaptchaProvider() *GEETESTCaptchaProvider {
|
|||||||
return captcha
|
return captcha
|
||||||
}
|
}
|
||||||
|
|
||||||
func (captcha *GEETESTCaptchaProvider) VerifyCaptcha(token, clientSecret string) (bool, error) {
|
func (captcha *GEETESTCaptchaProvider) VerifyCaptcha(token, clientId, clientSecret, clientId2 string) (bool, error) {
|
||||||
pathData, err := url.ParseQuery(token)
|
pathData, err := url.ParseQuery(token)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
|
@ -32,7 +32,7 @@ func NewHCaptchaProvider() *HCaptchaProvider {
|
|||||||
return captcha
|
return captcha
|
||||||
}
|
}
|
||||||
|
|
||||||
func (captcha *HCaptchaProvider) VerifyCaptcha(token, clientSecret string) (bool, error) {
|
func (captcha *HCaptchaProvider) VerifyCaptcha(token, clientId, clientSecret, clientId2 string) (bool, error) {
|
||||||
reqData := url.Values{
|
reqData := url.Values{
|
||||||
"secret": {clientSecret},
|
"secret": {clientSecret},
|
||||||
"response": {token},
|
"response": {token},
|
||||||
|
@ -17,7 +17,7 @@ package captcha
|
|||||||
import "fmt"
|
import "fmt"
|
||||||
|
|
||||||
type CaptchaProvider interface {
|
type CaptchaProvider interface {
|
||||||
VerifyCaptcha(token, clientSecret string) (bool, error)
|
VerifyCaptcha(token, clientId, clientSecret, clientId2 string) (bool, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetCaptchaProvider(captchaType string) CaptchaProvider {
|
func GetCaptchaProvider(captchaType string) CaptchaProvider {
|
||||||
@ -43,11 +43,11 @@ func GetCaptchaProvider(captchaType string) CaptchaProvider {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func VerifyCaptchaByCaptchaType(captchaType, token, clientSecret string) (bool, error) {
|
func VerifyCaptchaByCaptchaType(captchaType, token, clientId, clientSecret, clientId2 string) (bool, error) {
|
||||||
provider := GetCaptchaProvider(captchaType)
|
provider := GetCaptchaProvider(captchaType)
|
||||||
if provider == nil {
|
if provider == nil {
|
||||||
return false, fmt.Errorf("invalid captcha provider: %s", captchaType)
|
return false, fmt.Errorf("invalid captcha provider: %s", captchaType)
|
||||||
}
|
}
|
||||||
|
|
||||||
return provider.VerifyCaptcha(token, clientSecret)
|
return provider.VerifyCaptcha(token, clientId, clientSecret, clientId2)
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,7 @@ func NewReCaptchaProvider() *ReCaptchaProvider {
|
|||||||
return captcha
|
return captcha
|
||||||
}
|
}
|
||||||
|
|
||||||
func (captcha *ReCaptchaProvider) VerifyCaptcha(token, clientSecret string) (bool, error) {
|
func (captcha *ReCaptchaProvider) VerifyCaptcha(token, clientId, clientSecret, clientId2 string) (bool, error) {
|
||||||
reqData := url.Values{
|
reqData := url.Values{
|
||||||
"secret": {clientSecret},
|
"secret": {clientSecret},
|
||||||
"response": {token},
|
"response": {token},
|
||||||
|
@ -32,7 +32,7 @@ func NewCloudflareTurnstileProvider() *CloudflareTurnstileProvider {
|
|||||||
return captcha
|
return captcha
|
||||||
}
|
}
|
||||||
|
|
||||||
func (captcha *CloudflareTurnstileProvider) VerifyCaptcha(token, clientSecret string) (bool, error) {
|
func (captcha *CloudflareTurnstileProvider) VerifyCaptcha(token, clientId, clientSecret, clientId2 string) (bool, error) {
|
||||||
reqData := url.Values{
|
reqData := url.Values{
|
||||||
"secret": {clientSecret},
|
"secret": {clientSecret},
|
||||||
"response": {token},
|
"response": {token},
|
||||||
|
@ -66,7 +66,11 @@ func GetConfigBool(key string) bool {
|
|||||||
func GetConfigInt64(key string) (int64, error) {
|
func GetConfigInt64(key string) (int64, error) {
|
||||||
value := GetConfigString(key)
|
value := GetConfigString(key)
|
||||||
num, err := strconv.ParseInt(value, 10, 64)
|
num, err := strconv.ParseInt(value, 10, 64)
|
||||||
return num, err
|
if err != nil {
|
||||||
|
return 0, fmt.Errorf("GetConfigInt64(%s) error, %s", key, err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
return num, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetConfigDataSourceName() string {
|
func GetConfigDataSourceName() string {
|
||||||
|
@ -42,6 +42,7 @@ type Response struct {
|
|||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
Data interface{} `json:"data"`
|
Data interface{} `json:"data"`
|
||||||
Data2 interface{} `json:"data2"`
|
Data2 interface{} `json:"data2"`
|
||||||
|
Data3 interface{} `json:"data3"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type Captcha struct {
|
type Captcha struct {
|
||||||
@ -259,7 +260,7 @@ func (c *ApiController) Signup() {
|
|||||||
user.Groups = []string{application.DefaultGroup}
|
user.Groups = []string{application.DefaultGroup}
|
||||||
}
|
}
|
||||||
|
|
||||||
affected, err := object.AddUser(user)
|
affected, err := object.AddUser(user, c.GetAcceptLanguage())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.ResponseError(err.Error())
|
c.ResponseError(err.Error())
|
||||||
return
|
return
|
||||||
|
@ -132,7 +132,7 @@ func (c *ApiController) HandleLoggedIn(application *object.Application, user *ob
|
|||||||
if form.Type == ResponseTypeLogin {
|
if form.Type == ResponseTypeLogin {
|
||||||
c.SetSessionUsername(userId)
|
c.SetSessionUsername(userId)
|
||||||
util.LogInfo(c.Ctx, "API: [%s] signed in", userId)
|
util.LogInfo(c.Ctx, "API: [%s] signed in", userId)
|
||||||
resp = &Response{Status: "ok", Msg: "", Data: userId, Data2: user.NeedUpdatePassword}
|
resp = &Response{Status: "ok", Msg: "", Data: userId, Data3: user.NeedUpdatePassword}
|
||||||
} else if form.Type == ResponseTypeCode {
|
} else if form.Type == ResponseTypeCode {
|
||||||
clientId := c.Input().Get("clientId")
|
clientId := c.Input().Get("clientId")
|
||||||
responseType := c.Input().Get("responseType")
|
responseType := c.Input().Get("responseType")
|
||||||
@ -154,7 +154,7 @@ func (c *ApiController) HandleLoggedIn(application *object.Application, user *ob
|
|||||||
}
|
}
|
||||||
|
|
||||||
resp = codeToResponse(code)
|
resp = codeToResponse(code)
|
||||||
resp.Data2 = user.NeedUpdatePassword
|
resp.Data3 = user.NeedUpdatePassword
|
||||||
if application.EnableSigninSession || application.HasPromptPage() {
|
if application.EnableSigninSession || application.HasPromptPage() {
|
||||||
// The prompt page needs the user to be signed in
|
// The prompt page needs the user to be signed in
|
||||||
c.SetSessionUsername(userId)
|
c.SetSessionUsername(userId)
|
||||||
@ -168,7 +168,7 @@ func (c *ApiController) HandleLoggedIn(application *object.Application, user *ob
|
|||||||
token, _ := object.GetTokenByUser(application, user, scope, nonce, c.Ctx.Request.Host)
|
token, _ := object.GetTokenByUser(application, user, scope, nonce, c.Ctx.Request.Host)
|
||||||
resp = tokenToResponse(token)
|
resp = tokenToResponse(token)
|
||||||
|
|
||||||
resp.Data2 = user.NeedUpdatePassword
|
resp.Data3 = user.NeedUpdatePassword
|
||||||
}
|
}
|
||||||
} else if form.Type == ResponseTypeDevice {
|
} else if form.Type == ResponseTypeDevice {
|
||||||
authCache, ok := object.DeviceAuthMap.LoadAndDelete(form.UserCode)
|
authCache, ok := object.DeviceAuthMap.LoadAndDelete(form.UserCode)
|
||||||
@ -195,14 +195,14 @@ func (c *ApiController) HandleLoggedIn(application *object.Application, user *ob
|
|||||||
|
|
||||||
object.DeviceAuthMap.Store(authCacheCast.UserName, deviceAuthCacheDeviceCodeCast)
|
object.DeviceAuthMap.Store(authCacheCast.UserName, deviceAuthCacheDeviceCodeCast)
|
||||||
|
|
||||||
resp = &Response{Status: "ok", Msg: "", Data: userId, Data2: user.NeedUpdatePassword}
|
resp = &Response{Status: "ok", Msg: "", Data: userId, Data3: user.NeedUpdatePassword}
|
||||||
} else if form.Type == ResponseTypeSaml { // saml flow
|
} else if form.Type == ResponseTypeSaml { // saml flow
|
||||||
res, redirectUrl, method, err := object.GetSamlResponse(application, user, form.SamlRequest, c.Ctx.Request.Host)
|
res, redirectUrl, method, err := object.GetSamlResponse(application, user, form.SamlRequest, c.Ctx.Request.Host)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.ResponseError(err.Error(), nil)
|
c.ResponseError(err.Error(), nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
resp = &Response{Status: "ok", Msg: "", Data: res, Data2: map[string]interface{}{"redirectUrl": redirectUrl, "method": method, "needUpdatePassword": user.NeedUpdatePassword}}
|
resp = &Response{Status: "ok", Msg: "", Data: res, Data2: map[string]interface{}{"redirectUrl": redirectUrl, "method": method}, Data3: user.NeedUpdatePassword}
|
||||||
|
|
||||||
if application.EnableSigninSession || application.HasPromptPage() {
|
if application.EnableSigninSession || application.HasPromptPage() {
|
||||||
// The prompt page needs the user to be signed in
|
// The prompt page needs the user to be signed in
|
||||||
@ -355,20 +355,27 @@ func isProxyProviderType(providerType string) bool {
|
|||||||
|
|
||||||
func checkMfaEnable(c *ApiController, user *object.User, organization *object.Organization, verificationType string) bool {
|
func checkMfaEnable(c *ApiController, user *object.User, organization *object.Organization, verificationType string) bool {
|
||||||
if object.IsNeedPromptMfa(organization, user) {
|
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.SetSessionUsername(user.GetId())
|
||||||
c.ResponseOk(object.RequiredMfa)
|
c.ResponseOk(object.RequiredMfa)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
if user.IsMfaEnabled() {
|
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())
|
c.setMfaUserSession(user.GetId())
|
||||||
mfaList := object.GetAllMfaProps(user, true)
|
mfaList := object.GetAllMfaProps(user, true)
|
||||||
mfaAllowList := []*object.MfaProps{}
|
mfaAllowList := []*object.MfaProps{}
|
||||||
|
mfaRememberInHours := organization.MfaRememberInHours
|
||||||
for _, prop := range mfaList {
|
for _, prop := range mfaList {
|
||||||
if prop.MfaType == verificationType || !prop.Enabled {
|
if prop.MfaType == verificationType || !prop.Enabled {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
prop.MfaRememberInHours = mfaRememberInHours
|
||||||
mfaAllowList = append(mfaAllowList, prop)
|
mfaAllowList = append(mfaAllowList, prop)
|
||||||
}
|
}
|
||||||
if len(mfaAllowList) >= 1 {
|
if len(mfaAllowList) >= 1 {
|
||||||
@ -504,6 +511,8 @@ func (c *ApiController) Login() {
|
|||||||
c.ResponseError(fmt.Sprintf(c.T("verification:Phone number is invalid in your region %s"), authForm.CountryCode))
|
c.ResponseError(fmt.Sprintf(c.T("verification:Phone number is invalid in your region %s"), authForm.CountryCode))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
} else if verificationCodeType == object.VerifyTypeEmail {
|
||||||
|
checkDest = authForm.Username
|
||||||
}
|
}
|
||||||
|
|
||||||
// check result through Email or Phone
|
// check result through Email or Phone
|
||||||
@ -553,8 +562,11 @@ func (c *ApiController) Login() {
|
|||||||
c.ResponseError(c.T("auth:The login method: login with LDAP is not enabled for the application"))
|
c.ResponseError(c.T("auth:The login method: login with LDAP is not enabled for the application"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
clientIp := util.GetClientIpFromRequest(c.Ctx.Request)
|
||||||
|
|
||||||
var enableCaptcha bool
|
var enableCaptcha bool
|
||||||
if enableCaptcha, err = object.CheckToEnableCaptcha(application, authForm.Organization, authForm.Username); err != nil {
|
if enableCaptcha, err = object.CheckToEnableCaptcha(application, authForm.Organization, authForm.Username, clientIp); err != nil {
|
||||||
c.ResponseError(err.Error())
|
c.ResponseError(err.Error())
|
||||||
return
|
return
|
||||||
} else if enableCaptcha {
|
} else if enableCaptcha {
|
||||||
@ -569,7 +581,7 @@ func (c *ApiController) Login() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var isHuman bool
|
var isHuman bool
|
||||||
isHuman, err = captcha.VerifyCaptchaByCaptchaType(authForm.CaptchaType, authForm.CaptchaToken, authForm.ClientSecret)
|
isHuman, err = captcha.VerifyCaptchaByCaptchaType(authForm.CaptchaType, authForm.CaptchaToken, captchaProvider.ClientId, authForm.ClientSecret, captchaProvider.ClientId2)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.ResponseError(err.Error())
|
c.ResponseError(err.Error())
|
||||||
return
|
return
|
||||||
@ -867,7 +879,7 @@ func (c *ApiController) Login() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var affected bool
|
var affected bool
|
||||||
affected, err = object.AddUser(user)
|
affected, err = object.AddUser(user, c.GetAcceptLanguage())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.ResponseError(err.Error())
|
c.ResponseError(err.Error())
|
||||||
return
|
return
|
||||||
@ -968,6 +980,28 @@ func (c *ApiController) Login() {
|
|||||||
return
|
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.Passcode != "" {
|
||||||
if authForm.MfaType == c.GetSession("verificationCodeType") {
|
if authForm.MfaType == c.GetSession("verificationCodeType") {
|
||||||
c.ResponseError("Invalid multi-factor authentication type")
|
c.ResponseError("Invalid multi-factor authentication type")
|
||||||
@ -994,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", "")
|
c.SetSession("verificationCodeType", "")
|
||||||
} else if authForm.RecoveryCode != "" {
|
} else if authForm.RecoveryCode != "" {
|
||||||
err = object.MfaRecover(user, authForm.RecoveryCode)
|
err = object.MfaRecover(user, authForm.RecoveryCode)
|
||||||
@ -1006,22 +1051,6 @@ func (c *ApiController) Login() {
|
|||||||
return
|
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)
|
resp = c.HandleLoggedIn(application, user, &authForm)
|
||||||
c.setMfaUserSession("")
|
c.setMfaUserSession("")
|
||||||
|
|
||||||
@ -1220,27 +1249,26 @@ func (c *ApiController) GetQRCode() {
|
|||||||
func (c *ApiController) GetCaptchaStatus() {
|
func (c *ApiController) GetCaptchaStatus() {
|
||||||
organization := c.Input().Get("organization")
|
organization := c.Input().Get("organization")
|
||||||
userId := c.Input().Get("userId")
|
userId := c.Input().Get("userId")
|
||||||
user, err := object.GetUserByFields(organization, userId)
|
applicationName := c.Input().Get("application")
|
||||||
|
|
||||||
|
application, err := object.GetApplication(fmt.Sprintf("admin/%s", applicationName))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.ResponseError(err.Error())
|
c.ResponseError(err.Error())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if application == nil {
|
||||||
captchaEnabled := false
|
c.ResponseError("application not found")
|
||||||
if user != nil {
|
return
|
||||||
var failedSigninLimit int
|
|
||||||
failedSigninLimit, _, err = object.GetFailedSigninConfigByUser(user)
|
|
||||||
if err != nil {
|
|
||||||
c.ResponseError(err.Error())
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if user.SigninWrongTimes >= failedSigninLimit {
|
|
||||||
captchaEnabled = true
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
clientIp := util.GetClientIpFromRequest(c.Ctx.Request)
|
||||||
|
captchaEnabled, err := object.CheckToEnableCaptcha(application, organization, userId, clientIp)
|
||||||
|
if err != nil {
|
||||||
|
c.ResponseError(err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
c.ResponseOk(captchaEnabled)
|
c.ResponseOk(captchaEnabled)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Callback
|
// Callback
|
||||||
|
@ -165,7 +165,7 @@ func (c *ApiController) GetPolicies() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
if adapter == nil {
|
if adapter == nil {
|
||||||
c.ResponseError(fmt.Sprintf(c.T("the adapter: %s is not found"), adapterId))
|
c.ResponseError(fmt.Sprintf(c.T("enforcer:the adapter: %s is not found"), adapterId))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,6 +15,7 @@ package controllers
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/beego/beego/utils/pagination"
|
"github.com/beego/beego/utils/pagination"
|
||||||
"github.com/casdoor/casdoor/object"
|
"github.com/casdoor/casdoor/object"
|
||||||
@ -78,12 +79,12 @@ func (c *ApiController) GetGroups() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, group := range groups {
|
for _, group := range groups {
|
||||||
_, ok := groupsHaveChildrenMap[group.Name]
|
_, ok := groupsHaveChildrenMap[group.GetId()]
|
||||||
if ok {
|
if ok {
|
||||||
group.HaveChildren = true
|
group.HaveChildren = true
|
||||||
}
|
}
|
||||||
|
|
||||||
parent, ok := groupsHaveChildrenMap[group.ParentId]
|
parent, ok := groupsHaveChildrenMap[fmt.Sprintf("%s/%s", group.Owner, group.ParentId)]
|
||||||
if ok {
|
if ok {
|
||||||
group.ParentName = parent.DisplayName
|
group.ParentName = parent.DisplayName
|
||||||
}
|
}
|
||||||
|
56
controllers/group_upload.go
Normal file
56
controllers/group_upload.go
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
// Copyright 2025 The Casdoor Authors. All Rights Reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package controllers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"github.com/casdoor/casdoor/object"
|
||||||
|
"github.com/casdoor/casdoor/util"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (c *ApiController) UploadGroups() {
|
||||||
|
userId := c.GetSessionUsername()
|
||||||
|
owner, user := util.GetOwnerAndNameFromId(userId)
|
||||||
|
|
||||||
|
file, header, err := c.Ctx.Request.FormFile("file")
|
||||||
|
if err != nil {
|
||||||
|
c.ResponseError(err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
fileId := fmt.Sprintf("%s_%s_%s", owner, user, util.RemoveExt(header.Filename))
|
||||||
|
path := util.GetUploadXlsxPath(fileId)
|
||||||
|
defer os.Remove(path)
|
||||||
|
|
||||||
|
err = saveFile(path, &file)
|
||||||
|
if err != nil {
|
||||||
|
c.ResponseError(err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
affected, err := object.UploadGroups(owner, path)
|
||||||
|
if err != nil {
|
||||||
|
c.ResponseError(err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if affected {
|
||||||
|
c.ResponseOk()
|
||||||
|
} else {
|
||||||
|
c.ResponseError(c.T("general:Failed to import groups"))
|
||||||
|
}
|
||||||
|
}
|
@ -58,6 +58,12 @@ func (c *ApiController) MfaSetupInitiate() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
organization, err := object.GetOrganizationByUser(user)
|
||||||
|
if err != nil {
|
||||||
|
c.ResponseError(err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
mfaProps, err := MfaUtil.Initiate(user.GetId())
|
mfaProps, err := MfaUtil.Initiate(user.GetId())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.ResponseError(err.Error())
|
c.ResponseError(err.Error())
|
||||||
@ -66,6 +72,7 @@ func (c *ApiController) MfaSetupInitiate() {
|
|||||||
|
|
||||||
recoveryCode := uuid.NewString()
|
recoveryCode := uuid.NewString()
|
||||||
mfaProps.RecoveryCodes = []string{recoveryCode}
|
mfaProps.RecoveryCodes = []string{recoveryCode}
|
||||||
|
mfaProps.MfaRememberInHours = organization.MfaRememberInHours
|
||||||
|
|
||||||
resp := mfaProps
|
resp := mfaProps
|
||||||
c.ResponseOk(resp)
|
c.ResponseOk(resp)
|
||||||
|
@ -98,6 +98,10 @@ func (c *ApiController) GetOrganization() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if organization != nil && organization.MfaRememberInHours == 0 {
|
||||||
|
organization.MfaRememberInHours = 12
|
||||||
|
}
|
||||||
|
|
||||||
c.ResponseOk(organization)
|
c.ResponseOk(organization)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,6 +49,6 @@ func (c *ApiController) UploadPermissions() {
|
|||||||
if affected {
|
if affected {
|
||||||
c.ResponseOk()
|
c.ResponseOk()
|
||||||
} else {
|
} else {
|
||||||
c.ResponseError(c.T("user_upload:Failed to import users"))
|
c.ResponseError(c.T("general:Failed to import users"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -182,7 +182,7 @@ func (c *ApiController) BuyProduct() {
|
|||||||
paidUserName := c.Input().Get("userName")
|
paidUserName := c.Input().Get("userName")
|
||||||
owner, _ := util.GetOwnerAndNameFromId(id)
|
owner, _ := util.GetOwnerAndNameFromId(id)
|
||||||
userId := util.GetId(owner, paidUserName)
|
userId := util.GetId(owner, paidUserName)
|
||||||
if paidUserName != "" && !c.IsAdmin() {
|
if paidUserName != "" && paidUserName != c.GetSessionUsername() && !c.IsAdmin() {
|
||||||
c.ResponseError(c.T("general:Only admin user can specify user"))
|
c.ResponseError(c.T("general:Only admin user can specify user"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -49,6 +49,6 @@ func (c *ApiController) UploadRoles() {
|
|||||||
if affected {
|
if affected {
|
||||||
c.ResponseOk()
|
c.ResponseOk()
|
||||||
} else {
|
} else {
|
||||||
c.ResponseError(c.T("user_upload:Failed to import users"))
|
c.ResponseError(c.T("general:Failed to import users"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,7 @@ package controllers
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/beego/beego/utils/pagination"
|
"github.com/beego/beego/utils/pagination"
|
||||||
@ -460,7 +461,18 @@ func (c *ApiController) IntrospectToken() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if token != nil {
|
if token != nil {
|
||||||
|
application, err = object.GetApplication(fmt.Sprintf("%s/%s", token.Owner, token.Application))
|
||||||
|
if err != nil {
|
||||||
|
c.ResponseTokenError(err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if application == nil {
|
||||||
|
c.ResponseError(fmt.Sprintf(c.T("auth:The application: %s does not exist"), token.Application))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
introspectionResponse.TokenType = token.TokenType
|
introspectionResponse.TokenType = token.TokenType
|
||||||
|
introspectionResponse.ClientId = application.ClientId
|
||||||
}
|
}
|
||||||
|
|
||||||
c.Data["json"] = introspectionResponse
|
c.Data["json"] = introspectionResponse
|
||||||
|
@ -197,8 +197,8 @@ func (c *ApiController) GetUser() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var organization *object.Organization
|
||||||
if user != nil {
|
if user != nil {
|
||||||
var organization *object.Organization
|
|
||||||
organization, err = object.GetOrganizationByUser(user)
|
organization, err = object.GetOrganizationByUser(user)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.ResponseError(err.Error())
|
c.ResponseError(err.Error())
|
||||||
@ -237,6 +237,14 @@ func (c *ApiController) GetUser() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if organization != nil && user != nil {
|
||||||
|
user, err = object.GetFilteredUser(user, c.IsAdmin(), c.IsAdminOrSelf(user), organization.AccountItems)
|
||||||
|
if err != nil {
|
||||||
|
c.ResponseError(err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
c.ResponseOk(user)
|
c.ResponseOk(user)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -282,13 +290,6 @@ func (c *ApiController) UpdateUser() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.Input().Get("allowEmpty") == "" {
|
|
||||||
if user.DisplayName == "" {
|
|
||||||
c.ResponseError(c.T("user:Display name cannot be empty"))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if user.MfaEmailEnabled && user.Email == "" {
|
if user.MfaEmailEnabled && user.Email == "" {
|
||||||
c.ResponseError(c.T("user:MFA email is enabled but email is empty"))
|
c.ResponseError(c.T("user:MFA email is enabled but email is empty"))
|
||||||
return
|
return
|
||||||
@ -310,7 +311,8 @@ func (c *ApiController) UpdateUser() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
isAdmin := c.IsAdmin()
|
isAdmin := c.IsAdmin()
|
||||||
if pass, err := object.CheckPermissionForUpdateUser(oldUser, &user, isAdmin, c.GetAcceptLanguage()); !pass {
|
allowDisplayNameEmpty := c.Input().Get("allowEmpty") != ""
|
||||||
|
if pass, err := object.CheckPermissionForUpdateUser(oldUser, &user, isAdmin, allowDisplayNameEmpty, c.GetAcceptLanguage()); !pass {
|
||||||
c.ResponseError(err)
|
c.ResponseError(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -365,7 +367,7 @@ func (c *ApiController) AddUser() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
c.Data["json"] = wrapActionResponse(object.AddUser(&user))
|
c.Data["json"] = wrapActionResponse(object.AddUser(&user, c.GetAcceptLanguage()))
|
||||||
c.ServeJSON()
|
c.ServeJSON()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -545,7 +547,7 @@ func (c *ApiController) SetPassword() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
if organization == nil {
|
if organization == nil {
|
||||||
c.ResponseError(fmt.Sprintf(c.T("the organization: %s is not found"), targetUser.Owner))
|
c.ResponseError(fmt.Sprintf(c.T("auth:the organization: %s is not found"), targetUser.Owner))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -572,7 +574,7 @@ func (c *ApiController) SetPassword() {
|
|||||||
targetUser.LastChangePasswordTime = util.GetCurrentTime()
|
targetUser.LastChangePasswordTime = util.GetCurrentTime()
|
||||||
|
|
||||||
if user.Ldap == "" {
|
if user.Ldap == "" {
|
||||||
_, err = object.UpdateUser(userId, targetUser, []string{"password", "need_update_password", "password_type", "last_change_password_time"}, false)
|
_, err = object.UpdateUser(userId, targetUser, []string{"password", "password_salt", "need_update_password", "password_type", "last_change_password_time"}, false)
|
||||||
} else {
|
} else {
|
||||||
if isAdmin {
|
if isAdmin {
|
||||||
err = object.ResetLdapPassword(targetUser, "", newPassword, c.GetAcceptLanguage())
|
err = object.ResetLdapPassword(targetUser, "", newPassword, c.GetAcceptLanguage())
|
||||||
@ -703,7 +705,7 @@ func (c *ApiController) RemoveUserFromGroup() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
affected, err := object.DeleteGroupForUser(util.GetId(owner, name), groupName)
|
affected, err := object.DeleteGroupForUser(util.GetId(owner, name), util.GetId(owner, groupName))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.ResponseError(err.Error())
|
c.ResponseError(err.Error())
|
||||||
return
|
return
|
||||||
|
@ -67,6 +67,6 @@ func (c *ApiController) UploadUsers() {
|
|||||||
if affected {
|
if affected {
|
||||||
c.ResponseOk()
|
c.ResponseOk()
|
||||||
} else {
|
} else {
|
||||||
c.ResponseError(c.T("user_upload:Failed to import users"))
|
c.ResponseError(c.T("general:Failed to import users"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -160,7 +160,7 @@ func (c *ApiController) SendVerificationCode() {
|
|||||||
if captchaProvider := captcha.GetCaptchaProvider(vform.CaptchaType); captchaProvider == nil {
|
if captchaProvider := captcha.GetCaptchaProvider(vform.CaptchaType); captchaProvider == nil {
|
||||||
c.ResponseError(c.T("general:don't support captchaProvider: ") + vform.CaptchaType)
|
c.ResponseError(c.T("general:don't support captchaProvider: ") + vform.CaptchaType)
|
||||||
return
|
return
|
||||||
} else if isHuman, err := captchaProvider.VerifyCaptcha(vform.CaptchaToken, vform.ClientSecret); err != nil {
|
} else if isHuman, err := captchaProvider.VerifyCaptcha(vform.CaptchaToken, provider.ClientId, vform.ClientSecret, provider.ClientId2); err != nil {
|
||||||
c.ResponseError(err.Error())
|
c.ResponseError(err.Error())
|
||||||
return
|
return
|
||||||
} else if !isHuman {
|
} else if !isHuman {
|
||||||
@ -349,7 +349,7 @@ func (c *ApiController) VerifyCaptcha() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
isValid, err := provider.VerifyCaptcha(vform.CaptchaToken, vform.ClientSecret)
|
isValid, err := provider.VerifyCaptcha(vform.CaptchaToken, captchaProvider.ClientId, vform.ClientSecret, captchaProvider.ClientId2)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.ResponseError(err.Error())
|
c.ResponseError(err.Error())
|
||||||
return
|
return
|
||||||
|
@ -23,7 +23,7 @@ func NewArgon2idCredManager() *Argon2idCredManager {
|
|||||||
return cm
|
return cm
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cm *Argon2idCredManager) GetHashedPassword(password string, userSalt string, organizationSalt string) string {
|
func (cm *Argon2idCredManager) GetHashedPassword(password string, salt string) string {
|
||||||
hash, err := argon2id.CreateHash(password, argon2id.DefaultParams)
|
hash, err := argon2id.CreateHash(password, argon2id.DefaultParams)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return ""
|
return ""
|
||||||
@ -31,7 +31,7 @@ func (cm *Argon2idCredManager) GetHashedPassword(password string, userSalt strin
|
|||||||
return hash
|
return hash
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cm *Argon2idCredManager) IsPasswordCorrect(plainPwd string, hashedPwd string, userSalt string, organizationSalt string) bool {
|
func (cm *Argon2idCredManager) IsPasswordCorrect(plainPwd string, hashedPwd string, salt string) bool {
|
||||||
match, _ := argon2id.ComparePasswordAndHash(plainPwd, hashedPwd)
|
match, _ := argon2id.ComparePasswordAndHash(plainPwd, hashedPwd)
|
||||||
return match
|
return match
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,7 @@ func NewBcryptCredManager() *BcryptCredManager {
|
|||||||
return cm
|
return cm
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cm *BcryptCredManager) GetHashedPassword(password string, userSalt string, organizationSalt string) string {
|
func (cm *BcryptCredManager) GetHashedPassword(password string, salt string) string {
|
||||||
bytes, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
|
bytes, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return ""
|
return ""
|
||||||
@ -17,7 +17,7 @@ func (cm *BcryptCredManager) GetHashedPassword(password string, userSalt string,
|
|||||||
return string(bytes)
|
return string(bytes)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cm *BcryptCredManager) IsPasswordCorrect(plainPwd string, hashedPwd string, userSalt string, organizationSalt string) bool {
|
func (cm *BcryptCredManager) IsPasswordCorrect(plainPwd string, hashedPwd string, salt string) bool {
|
||||||
err := bcrypt.CompareHashAndPassword([]byte(hashedPwd), []byte(plainPwd))
|
err := bcrypt.CompareHashAndPassword([]byte(hashedPwd), []byte(plainPwd))
|
||||||
return err == nil
|
return err == nil
|
||||||
}
|
}
|
||||||
|
@ -15,8 +15,8 @@
|
|||||||
package cred
|
package cred
|
||||||
|
|
||||||
type CredManager interface {
|
type CredManager interface {
|
||||||
GetHashedPassword(password string, userSalt string, organizationSalt string) string
|
GetHashedPassword(password string, salt string) string
|
||||||
IsPasswordCorrect(password string, passwordHash string, userSalt string, organizationSalt string) bool
|
IsPasswordCorrect(password string, passwordHash string, salt string) bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetCredManager(passwordType string) CredManager {
|
func GetCredManager(passwordType string) CredManager {
|
||||||
|
@ -37,14 +37,10 @@ func NewMd5UserSaltCredManager() *Md5UserSaltCredManager {
|
|||||||
return cm
|
return cm
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cm *Md5UserSaltCredManager) GetHashedPassword(password string, userSalt string, organizationSalt string) string {
|
func (cm *Md5UserSaltCredManager) GetHashedPassword(password string, salt string) string {
|
||||||
res := getMd5HexDigest(password)
|
return getMd5HexDigest(getMd5HexDigest(password) + salt)
|
||||||
if userSalt != "" {
|
|
||||||
res = getMd5HexDigest(res + userSalt)
|
|
||||||
}
|
|
||||||
return res
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cm *Md5UserSaltCredManager) IsPasswordCorrect(plainPwd string, hashedPwd string, userSalt string, organizationSalt string) bool {
|
func (cm *Md5UserSaltCredManager) IsPasswordCorrect(plainPwd string, hashedPwd string, salt string) bool {
|
||||||
return hashedPwd == cm.GetHashedPassword(plainPwd, userSalt, organizationSalt)
|
return hashedPwd == cm.GetHashedPassword(plainPwd, salt)
|
||||||
}
|
}
|
||||||
|
@ -28,13 +28,13 @@ func NewPbkdf2SaltCredManager() *Pbkdf2SaltCredManager {
|
|||||||
return cm
|
return cm
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cm *Pbkdf2SaltCredManager) GetHashedPassword(password string, userSalt string, organizationSalt string) string {
|
func (cm *Pbkdf2SaltCredManager) GetHashedPassword(password string, salt string) string {
|
||||||
// https://www.keycloak.org/docs/latest/server_admin/index.html#password-database-compromised
|
// https://www.keycloak.org/docs/latest/server_admin/index.html#password-database-compromised
|
||||||
decodedSalt, _ := base64.StdEncoding.DecodeString(userSalt)
|
decodedSalt, _ := base64.StdEncoding.DecodeString(salt)
|
||||||
res := pbkdf2.Key([]byte(password), decodedSalt, 27500, 64, sha256.New)
|
res := pbkdf2.Key([]byte(password), decodedSalt, 27500, 64, sha256.New)
|
||||||
return base64.StdEncoding.EncodeToString(res)
|
return base64.StdEncoding.EncodeToString(res)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cm *Pbkdf2SaltCredManager) IsPasswordCorrect(plainPwd string, hashedPwd string, userSalt string, organizationSalt string) bool {
|
func (cm *Pbkdf2SaltCredManager) IsPasswordCorrect(plainPwd string, hashedPwd string, salt string) bool {
|
||||||
return hashedPwd == cm.GetHashedPassword(plainPwd, userSalt, organizationSalt)
|
return hashedPwd == cm.GetHashedPassword(plainPwd, salt)
|
||||||
}
|
}
|
||||||
|
@ -32,12 +32,8 @@ func NewPbkdf2DjangoCredManager() *Pbkdf2DjangoCredManager {
|
|||||||
return cm
|
return cm
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Pbkdf2DjangoCredManager) GetHashedPassword(password string, userSalt string, organizationSalt string) string {
|
func (m *Pbkdf2DjangoCredManager) GetHashedPassword(password string, salt string) string {
|
||||||
iterations := 260000
|
iterations := 260000
|
||||||
salt := userSalt
|
|
||||||
if salt == "" {
|
|
||||||
salt = organizationSalt
|
|
||||||
}
|
|
||||||
|
|
||||||
saltBytes := []byte(salt)
|
saltBytes := []byte(salt)
|
||||||
passwordBytes := []byte(password)
|
passwordBytes := []byte(password)
|
||||||
@ -46,7 +42,7 @@ func (m *Pbkdf2DjangoCredManager) GetHashedPassword(password string, userSalt st
|
|||||||
return "pbkdf2_sha256$" + strconv.Itoa(iterations) + "$" + salt + "$" + hashBase64
|
return "pbkdf2_sha256$" + strconv.Itoa(iterations) + "$" + salt + "$" + hashBase64
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Pbkdf2DjangoCredManager) IsPasswordCorrect(password string, passwordHash string, userSalt string, organizationSalt string) bool {
|
func (m *Pbkdf2DjangoCredManager) IsPasswordCorrect(password string, passwordHash string, _salt string) bool {
|
||||||
parts := strings.Split(passwordHash, "$")
|
parts := strings.Split(passwordHash, "$")
|
||||||
if len(parts) != 4 {
|
if len(parts) != 4 {
|
||||||
return false
|
return false
|
||||||
|
@ -21,10 +21,10 @@ func NewPlainCredManager() *PlainCredManager {
|
|||||||
return cm
|
return cm
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cm *PlainCredManager) GetHashedPassword(password string, userSalt string, organizationSalt string) string {
|
func (cm *PlainCredManager) GetHashedPassword(password string, salt string) string {
|
||||||
return password
|
return password
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cm *PlainCredManager) IsPasswordCorrect(plainPwd string, hashedPwd string, userSalt string, organizationSalt string) bool {
|
func (cm *PlainCredManager) IsPasswordCorrect(plainPwd string, hashedPwd string, salt string) bool {
|
||||||
return hashedPwd == plainPwd
|
return hashedPwd == plainPwd
|
||||||
}
|
}
|
||||||
|
@ -37,14 +37,10 @@ func NewSha256SaltCredManager() *Sha256SaltCredManager {
|
|||||||
return cm
|
return cm
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cm *Sha256SaltCredManager) GetHashedPassword(password string, userSalt string, organizationSalt string) string {
|
func (cm *Sha256SaltCredManager) GetHashedPassword(password string, salt string) string {
|
||||||
res := getSha256HexDigest(password)
|
return getSha256HexDigest(getSha256HexDigest(password) + salt)
|
||||||
if organizationSalt != "" {
|
|
||||||
res = getSha256HexDigest(res + organizationSalt)
|
|
||||||
}
|
|
||||||
return res
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cm *Sha256SaltCredManager) IsPasswordCorrect(plainPwd string, hashedPwd string, userSalt string, organizationSalt string) bool {
|
func (cm *Sha256SaltCredManager) IsPasswordCorrect(plainPwd string, hashedPwd string, salt string) bool {
|
||||||
return hashedPwd == cm.GetHashedPassword(plainPwd, userSalt, organizationSalt)
|
return hashedPwd == cm.GetHashedPassword(plainPwd, salt)
|
||||||
}
|
}
|
||||||
|
@ -23,12 +23,12 @@ func TestGetSaltedPassword(t *testing.T) {
|
|||||||
password := "123456"
|
password := "123456"
|
||||||
salt := "123"
|
salt := "123"
|
||||||
cm := NewSha256SaltCredManager()
|
cm := NewSha256SaltCredManager()
|
||||||
fmt.Printf("%s -> %s\n", password, cm.GetHashedPassword(password, "", salt))
|
fmt.Printf("%s -> %s\n", password, cm.GetHashedPassword(password, salt))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetPassword(t *testing.T) {
|
func TestGetPassword(t *testing.T) {
|
||||||
password := "123456"
|
password := "123456"
|
||||||
cm := NewSha256SaltCredManager()
|
cm := NewSha256SaltCredManager()
|
||||||
// https://passwordsgenerator.net/sha256-hash-generator/
|
// https://passwordsgenerator.net/sha256-hash-generator/
|
||||||
fmt.Printf("%s -> %s\n", "8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92", cm.GetHashedPassword(password, "", ""))
|
fmt.Printf("%s -> %s\n", "8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92", cm.GetHashedPassword(password, ""))
|
||||||
}
|
}
|
||||||
|
@ -37,14 +37,10 @@ func NewSha512SaltCredManager() *Sha512SaltCredManager {
|
|||||||
return cm
|
return cm
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cm *Sha512SaltCredManager) GetHashedPassword(password string, userSalt string, organizationSalt string) string {
|
func (cm *Sha512SaltCredManager) GetHashedPassword(password string, salt string) string {
|
||||||
res := getSha512HexDigest(password)
|
return getSha512HexDigest(getSha512HexDigest(password) + salt)
|
||||||
if organizationSalt != "" {
|
|
||||||
res = getSha512HexDigest(res + organizationSalt)
|
|
||||||
}
|
|
||||||
return res
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cm *Sha512SaltCredManager) IsPasswordCorrect(plainPwd string, hashedPwd string, userSalt string, organizationSalt string) bool {
|
func (cm *Sha512SaltCredManager) IsPasswordCorrect(plainPwd string, hashedPwd string, salt string) bool {
|
||||||
return hashedPwd == cm.GetHashedPassword(plainPwd, userSalt, organizationSalt)
|
return hashedPwd == cm.GetHashedPassword(plainPwd, salt)
|
||||||
}
|
}
|
||||||
|
@ -27,8 +27,7 @@ type SmtpEmailProvider struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func NewSmtpEmailProvider(userName string, password string, host string, port int, typ string, disableSsl bool) *SmtpEmailProvider {
|
func NewSmtpEmailProvider(userName string, password string, host string, port int, typ string, disableSsl bool) *SmtpEmailProvider {
|
||||||
dialer := &gomail.Dialer{}
|
dialer := gomail.NewDialer(host, port, userName, password)
|
||||||
dialer = gomail.NewDialer(host, port, userName, password)
|
|
||||||
if typ == "SUBMAIL" {
|
if typ == "SUBMAIL" {
|
||||||
dialer.TLSConfig = &tls.Config{InsecureSkipVerify: true}
|
dialer.TLSConfig = &tls.Config{InsecureSkipVerify: true}
|
||||||
}
|
}
|
||||||
|
@ -61,9 +61,10 @@ type AuthForm struct {
|
|||||||
CaptchaToken string `json:"captchaToken"`
|
CaptchaToken string `json:"captchaToken"`
|
||||||
ClientSecret string `json:"clientSecret"`
|
ClientSecret string `json:"clientSecret"`
|
||||||
|
|
||||||
MfaType string `json:"mfaType"`
|
MfaType string `json:"mfaType"`
|
||||||
Passcode string `json:"passcode"`
|
Passcode string `json:"passcode"`
|
||||||
RecoveryCode string `json:"recoveryCode"`
|
RecoveryCode string `json:"recoveryCode"`
|
||||||
|
EnableMfaRemember bool `json:"enableMfaRemember"`
|
||||||
|
|
||||||
Plan string `json:"plan"`
|
Plan string `json:"plan"`
|
||||||
Pricing string `json:"pricing"`
|
Pricing string `json:"pricing"`
|
||||||
|
24
go.mod
24
go.mod
@ -7,6 +7,7 @@ require (
|
|||||||
github.com/alexedwards/argon2id v0.0.0-20211130144151-3585854a6387
|
github.com/alexedwards/argon2id v0.0.0-20211130144151-3585854a6387
|
||||||
github.com/alibabacloud-go/darabonba-openapi/v2 v2.1.4
|
github.com/alibabacloud-go/darabonba-openapi/v2 v2.1.4
|
||||||
github.com/alibabacloud-go/facebody-20191230/v5 v5.1.2
|
github.com/alibabacloud-go/facebody-20191230/v5 v5.1.2
|
||||||
|
github.com/alibabacloud-go/openapi-util v0.1.0
|
||||||
github.com/alibabacloud-go/tea v1.3.2
|
github.com/alibabacloud-go/tea v1.3.2
|
||||||
github.com/alibabacloud-go/tea-utils/v2 v2.0.7
|
github.com/alibabacloud-go/tea-utils/v2 v2.0.7
|
||||||
github.com/aws/aws-sdk-go v1.45.5
|
github.com/aws/aws-sdk-go v1.45.5
|
||||||
@ -25,7 +26,7 @@ require (
|
|||||||
github.com/elimity-com/scim v0.0.0-20230426070224-941a5eac92f3
|
github.com/elimity-com/scim v0.0.0-20230426070224-941a5eac92f3
|
||||||
github.com/fogleman/gg v1.3.0
|
github.com/fogleman/gg v1.3.0
|
||||||
github.com/go-asn1-ber/asn1-ber v1.5.5
|
github.com/go-asn1-ber/asn1-ber v1.5.5
|
||||||
github.com/go-git/go-git/v5 v5.11.0
|
github.com/go-git/go-git/v5 v5.13.0
|
||||||
github.com/go-ldap/ldap/v3 v3.4.6
|
github.com/go-ldap/ldap/v3 v3.4.6
|
||||||
github.com/go-mysql-org/go-mysql v1.7.0
|
github.com/go-mysql-org/go-mysql v1.7.0
|
||||||
github.com/go-pay/gopay v1.5.72
|
github.com/go-pay/gopay v1.5.72
|
||||||
@ -52,7 +53,7 @@ require (
|
|||||||
github.com/shirou/gopsutil v3.21.11+incompatible
|
github.com/shirou/gopsutil v3.21.11+incompatible
|
||||||
github.com/siddontang/go-log v0.0.0-20190221022429-1e957dd83bed
|
github.com/siddontang/go-log v0.0.0-20190221022429-1e957dd83bed
|
||||||
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e
|
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e
|
||||||
github.com/stretchr/testify v1.9.0
|
github.com/stretchr/testify v1.10.0
|
||||||
github.com/stripe/stripe-go/v74 v74.29.0
|
github.com/stripe/stripe-go/v74 v74.29.0
|
||||||
github.com/tealeg/xlsx v1.0.5
|
github.com/tealeg/xlsx v1.0.5
|
||||||
github.com/thanhpk/randstr v1.0.4
|
github.com/thanhpk/randstr v1.0.4
|
||||||
@ -83,14 +84,13 @@ require (
|
|||||||
github.com/BurntSushi/toml v0.3.1 // indirect
|
github.com/BurntSushi/toml v0.3.1 // indirect
|
||||||
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible // indirect
|
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible // indirect
|
||||||
github.com/Microsoft/go-winio v0.6.1 // indirect
|
github.com/Microsoft/go-winio v0.6.1 // indirect
|
||||||
github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 // indirect
|
github.com/ProtonMail/go-crypto v1.1.3 // indirect
|
||||||
github.com/RocketChat/Rocket.Chat.Go.SDK v0.0.0-20221121042443-a3fd332d56d9 // indirect
|
github.com/RocketChat/Rocket.Chat.Go.SDK v0.0.0-20221121042443-a3fd332d56d9 // indirect
|
||||||
github.com/SherClockHolmes/webpush-go v1.2.0 // indirect
|
github.com/SherClockHolmes/webpush-go v1.2.0 // indirect
|
||||||
github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.5 // indirect
|
github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.5 // indirect
|
||||||
github.com/alibabacloud-go/darabonba-number v1.0.4 // indirect
|
github.com/alibabacloud-go/darabonba-number v1.0.4 // indirect
|
||||||
github.com/alibabacloud-go/debug v1.0.1 // indirect
|
github.com/alibabacloud-go/debug v1.0.1 // indirect
|
||||||
github.com/alibabacloud-go/endpoint-util v1.1.0 // indirect
|
github.com/alibabacloud-go/endpoint-util v1.1.0 // indirect
|
||||||
github.com/alibabacloud-go/openapi-util v0.1.0 // indirect
|
|
||||||
github.com/alibabacloud-go/openplatform-20191219/v2 v2.0.1 // indirect
|
github.com/alibabacloud-go/openplatform-20191219/v2 v2.0.1 // indirect
|
||||||
github.com/alibabacloud-go/tea-fileform v1.1.1 // indirect
|
github.com/alibabacloud-go/tea-fileform v1.1.1 // indirect
|
||||||
github.com/alibabacloud-go/tea-oss-sdk v1.1.3 // indirect
|
github.com/alibabacloud-go/tea-oss-sdk v1.1.3 // indirect
|
||||||
@ -112,9 +112,9 @@ require (
|
|||||||
github.com/cenkalti/backoff/v4 v4.1.3 // indirect
|
github.com/cenkalti/backoff/v4 v4.1.3 // indirect
|
||||||
github.com/cespare/xxhash/v2 v2.2.0 // indirect
|
github.com/cespare/xxhash/v2 v2.2.0 // indirect
|
||||||
github.com/clbanning/mxj/v2 v2.7.0 // indirect
|
github.com/clbanning/mxj/v2 v2.7.0 // indirect
|
||||||
github.com/cloudflare/circl v1.3.3 // indirect
|
github.com/cloudflare/circl v1.3.7 // indirect
|
||||||
github.com/cschomburg/go-pushbullet v0.0.0-20171206132031-67759df45fbb // indirect
|
github.com/cschomburg/go-pushbullet v0.0.0-20171206132031-67759df45fbb // indirect
|
||||||
github.com/cyphar/filepath-securejoin v0.2.4 // indirect
|
github.com/cyphar/filepath-securejoin v0.2.5 // indirect
|
||||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||||
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect
|
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect
|
||||||
github.com/dghubble/oauth1 v0.7.2 // indirect
|
github.com/dghubble/oauth1 v0.7.2 // indirect
|
||||||
@ -126,7 +126,7 @@ require (
|
|||||||
github.com/emirpasic/gods v1.18.1 // indirect
|
github.com/emirpasic/gods v1.18.1 // indirect
|
||||||
github.com/fxamacker/cbor/v2 v2.6.0 // indirect
|
github.com/fxamacker/cbor/v2 v2.6.0 // indirect
|
||||||
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
|
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
|
||||||
github.com/go-git/go-billy/v5 v5.5.0 // indirect
|
github.com/go-git/go-billy/v5 v5.6.0 // indirect
|
||||||
github.com/go-lark/lark v1.9.0 // indirect
|
github.com/go-lark/lark v1.9.0 // indirect
|
||||||
github.com/go-ole/go-ole v1.2.6 // indirect
|
github.com/go-ole/go-ole v1.2.6 // indirect
|
||||||
github.com/go-webauthn/x v0.1.9 // indirect
|
github.com/go-webauthn/x v0.1.9 // indirect
|
||||||
@ -185,12 +185,12 @@ require (
|
|||||||
github.com/rs/zerolog v1.30.0 // indirect
|
github.com/rs/zerolog v1.30.0 // indirect
|
||||||
github.com/scim2/filter-parser/v2 v2.2.0 // indirect
|
github.com/scim2/filter-parser/v2 v2.2.0 // indirect
|
||||||
github.com/sendgrid/rest v2.6.9+incompatible // indirect
|
github.com/sendgrid/rest v2.6.9+incompatible // indirect
|
||||||
github.com/sergi/go-diff v1.1.0 // indirect
|
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect
|
||||||
github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18 // indirect
|
github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18 // indirect
|
||||||
github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24 // indirect
|
github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24 // indirect
|
||||||
github.com/siddontang/go v0.0.0-20180604090527-bdc77568d726 // indirect
|
github.com/siddontang/go v0.0.0-20180604090527-bdc77568d726 // indirect
|
||||||
github.com/sirupsen/logrus v1.9.0 // indirect
|
github.com/sirupsen/logrus v1.9.0 // indirect
|
||||||
github.com/skeema/knownhosts v1.2.1 // indirect
|
github.com/skeema/knownhosts v1.3.0 // indirect
|
||||||
github.com/slack-go/slack v0.12.3 // indirect
|
github.com/slack-go/slack v0.12.3 // indirect
|
||||||
github.com/stretchr/objx v0.5.2 // indirect
|
github.com/stretchr/objx v0.5.2 // indirect
|
||||||
github.com/syndtr/goleveldb v1.0.0 // indirect
|
github.com/syndtr/goleveldb v1.0.0 // indirect
|
||||||
@ -216,13 +216,13 @@ require (
|
|||||||
go.uber.org/atomic v1.9.0 // indirect
|
go.uber.org/atomic v1.9.0 // indirect
|
||||||
go.uber.org/multierr v1.7.0 // indirect
|
go.uber.org/multierr v1.7.0 // indirect
|
||||||
go.uber.org/zap v1.19.1 // indirect
|
go.uber.org/zap v1.19.1 // indirect
|
||||||
golang.org/x/exp v0.0.0-20230810033253-352e893a4cad // indirect
|
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect
|
||||||
golang.org/x/image v0.0.0-20190802002840-cff245a6509b // indirect
|
golang.org/x/image v0.0.0-20190802002840-cff245a6509b // indirect
|
||||||
golang.org/x/mod v0.17.0 // indirect
|
golang.org/x/mod v0.19.0 // indirect
|
||||||
golang.org/x/sync v0.10.0 // indirect
|
golang.org/x/sync v0.10.0 // indirect
|
||||||
golang.org/x/sys v0.29.0 // indirect
|
golang.org/x/sys v0.29.0 // indirect
|
||||||
golang.org/x/time v0.3.0 // indirect
|
golang.org/x/time v0.3.0 // indirect
|
||||||
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect
|
golang.org/x/tools v0.23.0 // indirect
|
||||||
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
|
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
|
||||||
google.golang.org/appengine v1.6.8 // indirect
|
google.golang.org/appengine v1.6.8 // indirect
|
||||||
google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b // indirect
|
google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b // indirect
|
||||||
|
64
go.sum
64
go.sum
@ -79,8 +79,8 @@ github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v
|
|||||||
github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow=
|
github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow=
|
||||||
github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM=
|
github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM=
|
||||||
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
|
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
|
||||||
github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 h1:kkhsdkhsCvIsutKu5zLMgWtgh9YxGCNAw8Ad8hjwfYg=
|
github.com/ProtonMail/go-crypto v1.1.3 h1:nRBOetoydLeUb4nHajyO2bKqMLfWQ/ZPwkXqXxPxCFk=
|
||||||
github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0=
|
github.com/ProtonMail/go-crypto v1.1.3/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE=
|
||||||
github.com/RocketChat/Rocket.Chat.Go.SDK v0.0.0-20221121042443-a3fd332d56d9 h1:vuu1KBsr6l7XU3CHsWESP/4B1SNd+VZkrgeFZsUXrsY=
|
github.com/RocketChat/Rocket.Chat.Go.SDK v0.0.0-20221121042443-a3fd332d56d9 h1:vuu1KBsr6l7XU3CHsWESP/4B1SNd+VZkrgeFZsUXrsY=
|
||||||
github.com/RocketChat/Rocket.Chat.Go.SDK v0.0.0-20221121042443-a3fd332d56d9/go.mod h1:rjP7sIipbZcagro/6TCk6X0ZeFT2eyudH5+fve/cbBA=
|
github.com/RocketChat/Rocket.Chat.Go.SDK v0.0.0-20221121042443-a3fd332d56d9/go.mod h1:rjP7sIipbZcagro/6TCk6X0ZeFT2eyudH5+fve/cbBA=
|
||||||
github.com/SherClockHolmes/webpush-go v1.2.0 h1:sGv0/ZWCvb1HUH+izLqrb2i68HuqD/0Y+AmGQfyqKJA=
|
github.com/SherClockHolmes/webpush-go v1.2.0 h1:sGv0/ZWCvb1HUH+izLqrb2i68HuqD/0Y+AmGQfyqKJA=
|
||||||
@ -219,7 +219,6 @@ github.com/blinkbean/dingtalk v0.0.0-20210905093040-7d935c0f7e19/go.mod h1:9BaLu
|
|||||||
github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc h1:biVzkmvwrH8WK8raXaxBx6fRVTlJILwEwQGL1I/ByEI=
|
github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc h1:biVzkmvwrH8WK8raXaxBx6fRVTlJILwEwQGL1I/ByEI=
|
||||||
github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
|
github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
|
||||||
github.com/bradfitz/gomemcache v0.0.0-20180710155616-bc664df96737/go.mod h1:PmM6Mmwb0LSuEubjR8N7PtNe1KxZLtOUHtbeikc5h60=
|
github.com/bradfitz/gomemcache v0.0.0-20180710155616-bc664df96737/go.mod h1:PmM6Mmwb0LSuEubjR8N7PtNe1KxZLtOUHtbeikc5h60=
|
||||||
github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0=
|
|
||||||
github.com/bwmarrin/discordgo v0.27.1 h1:ib9AIc/dom1E/fSIulrBwnez0CToJE113ZGt4HoliGY=
|
github.com/bwmarrin/discordgo v0.27.1 h1:ib9AIc/dom1E/fSIulrBwnez0CToJE113ZGt4HoliGY=
|
||||||
github.com/bwmarrin/discordgo v0.27.1/go.mod h1:NJZpH+1AfhIcyQsPeuBKsUtYrRnjkyu0kIVMCHkZtRY=
|
github.com/bwmarrin/discordgo v0.27.1/go.mod h1:NJZpH+1AfhIcyQsPeuBKsUtYrRnjkyu0kIVMCHkZtRY=
|
||||||
github.com/casbin/casbin v1.7.0/go.mod h1:c67qKN6Oum3UF5Q1+BByfFxkwKvhwW57ITjqwtzR1KE=
|
github.com/casbin/casbin v1.7.0/go.mod h1:c67qKN6Oum3UF5Q1+BByfFxkwKvhwW57ITjqwtzR1KE=
|
||||||
@ -266,8 +265,8 @@ github.com/clbanning/mxj/v2 v2.5.5/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn
|
|||||||
github.com/clbanning/mxj/v2 v2.7.0 h1:WA/La7UGCanFe5NpHF0Q3DNtnCsVoxbPKuyBNHWRyME=
|
github.com/clbanning/mxj/v2 v2.7.0 h1:WA/La7UGCanFe5NpHF0Q3DNtnCsVoxbPKuyBNHWRyME=
|
||||||
github.com/clbanning/mxj/v2 v2.7.0/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s=
|
github.com/clbanning/mxj/v2 v2.7.0/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s=
|
||||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
||||||
github.com/cloudflare/circl v1.3.3 h1:fE/Qz0QdIGqeWfnwq0RE0R7MI51s0M2E4Ga9kq5AEMs=
|
github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU=
|
||||||
github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA=
|
github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA=
|
||||||
github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58/go.mod h1:EOBUe0h4xcZ5GoxqC5SDxFQ8gwyZPKQoEzownBlhI80=
|
github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58/go.mod h1:EOBUe0h4xcZ5GoxqC5SDxFQ8gwyZPKQoEzownBlhI80=
|
||||||
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
|
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
|
||||||
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
|
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
|
||||||
@ -283,8 +282,8 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3
|
|||||||
github.com/cschomburg/go-pushbullet v0.0.0-20171206132031-67759df45fbb h1:7X9nrm+LNWdxzQOiCjy0G51rNUxbH35IDHCjAMvogyM=
|
github.com/cschomburg/go-pushbullet v0.0.0-20171206132031-67759df45fbb h1:7X9nrm+LNWdxzQOiCjy0G51rNUxbH35IDHCjAMvogyM=
|
||||||
github.com/cschomburg/go-pushbullet v0.0.0-20171206132031-67759df45fbb/go.mod h1:RfQ9wji3fjcSEsQ+uFCtIh3+BXgcZum8Kt3JxvzYzlk=
|
github.com/cschomburg/go-pushbullet v0.0.0-20171206132031-67759df45fbb/go.mod h1:RfQ9wji3fjcSEsQ+uFCtIh3+BXgcZum8Kt3JxvzYzlk=
|
||||||
github.com/cupcake/rdb v0.0.0-20161107195141-43ba34106c76/go.mod h1:vYwsqCOLxGiisLwp9rITslkFNpZD5rz43tf41QFkTWY=
|
github.com/cupcake/rdb v0.0.0-20161107195141-43ba34106c76/go.mod h1:vYwsqCOLxGiisLwp9rITslkFNpZD5rz43tf41QFkTWY=
|
||||||
github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg=
|
github.com/cyphar/filepath-securejoin v0.2.5 h1:6iR5tXJ/e6tJZzzdMc1km3Sa7RRIVBKAK32O2s7AYfo=
|
||||||
github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4=
|
github.com/cyphar/filepath-securejoin v0.2.5/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4=
|
||||||
github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548/go.mod h1:e6NPNENfs9mPDVNRekM7lKScauxd5kXTr1Mfyig6TDM=
|
github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548/go.mod h1:e6NPNENfs9mPDVNRekM7lKScauxd5kXTr1Mfyig6TDM=
|
||||||
github.com/cznic/sortutil v0.0.0-20181122101858-f5f958428db8/go.mod h1:q2w6Bg5jeox1B+QkJ6Wp/+Vn0G/bo3f1uY7Fn3vivIQ=
|
github.com/cznic/sortutil v0.0.0-20181122101858-f5f958428db8/go.mod h1:q2w6Bg5jeox1B+QkJ6Wp/+Vn0G/bo3f1uY7Fn3vivIQ=
|
||||||
github.com/cznic/strutil v0.0.0-20171016134553-529a34b1c186/go.mod h1:AHHPPPXTw0h6pVabbcbyGRK1DckRn7r/STdZEeIDzZc=
|
github.com/cznic/strutil v0.0.0-20171016134553-529a34b1c186/go.mod h1:AHHPPPXTw0h6pVabbcbyGRK1DckRn7r/STdZEeIDzZc=
|
||||||
@ -321,8 +320,8 @@ github.com/elastic/go-elasticsearch/v6 v6.8.5/go.mod h1:UwaDJsD3rWLM5rKNFzv9hgox
|
|||||||
github.com/elazarl/go-bindata-assetfs v1.0.0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4=
|
github.com/elazarl/go-bindata-assetfs v1.0.0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4=
|
||||||
github.com/elazarl/go-bindata-assetfs v1.0.1 h1:m0kkaHRKEu7tUIUFVwhGGGYClXvyl4RE03qmvRTNfbw=
|
github.com/elazarl/go-bindata-assetfs v1.0.1 h1:m0kkaHRKEu7tUIUFVwhGGGYClXvyl4RE03qmvRTNfbw=
|
||||||
github.com/elazarl/go-bindata-assetfs v1.0.1/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4=
|
github.com/elazarl/go-bindata-assetfs v1.0.1/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4=
|
||||||
github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcejNsXKSkQ6lcIaNec2nyfOdlTBR2lU=
|
github.com/elazarl/goproxy v1.2.1 h1:njjgvO6cRG9rIqN2ebkqy6cQz2Njkx7Fsfv/zIZqgug=
|
||||||
github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM=
|
github.com/elazarl/goproxy v1.2.1/go.mod h1:YfEbZtqP4AetfO6d40vWchF3znWX7C7Vd6ZMfdL8z64=
|
||||||
github.com/elimity-com/scim v0.0.0-20230426070224-941a5eac92f3 h1:+zrUtdBUJpY9qptMaaY3CA3T/lBI2+QqfUbzM2uxJss=
|
github.com/elimity-com/scim v0.0.0-20230426070224-941a5eac92f3 h1:+zrUtdBUJpY9qptMaaY3CA3T/lBI2+QqfUbzM2uxJss=
|
||||||
github.com/elimity-com/scim v0.0.0-20230426070224-941a5eac92f3/go.mod h1:JkjcmqbLW+khwt2fmBPJFBhx2zGZ8XobRZ+O0VhlwWo=
|
github.com/elimity-com/scim v0.0.0-20230426070224-941a5eac92f3/go.mod h1:JkjcmqbLW+khwt2fmBPJFBhx2zGZ8XobRZ+O0VhlwWo=
|
||||||
github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=
|
github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=
|
||||||
@ -353,18 +352,18 @@ github.com/fxamacker/cbor/v2 v2.6.0 h1:sU6J2usfADwWlYDAFhZBQ6TnLFBHxgesMrQfQgk1t
|
|||||||
github.com/fxamacker/cbor/v2 v2.6.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
|
github.com/fxamacker/cbor/v2 v2.6.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
|
||||||
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
||||||
github.com/glendc/gopher-json v0.0.0-20170414221815-dc4743023d0c/go.mod h1:Gja1A+xZ9BoviGJNA2E9vFkPjjsl+CoJxSXiQM1UXtw=
|
github.com/glendc/gopher-json v0.0.0-20170414221815-dc4743023d0c/go.mod h1:Gja1A+xZ9BoviGJNA2E9vFkPjjsl+CoJxSXiQM1UXtw=
|
||||||
github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY=
|
github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c=
|
||||||
github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4=
|
github.com/gliderlabs/ssh v0.3.8/go.mod h1:xYoytBv1sV0aL3CavoDuJIQNURXkkfPA/wxQ1pL1fAU=
|
||||||
github.com/go-asn1-ber/asn1-ber v1.5.5 h1:MNHlNMBDgEKD4TcKr36vQN68BA00aDfjIt3/bD50WnA=
|
github.com/go-asn1-ber/asn1-ber v1.5.5 h1:MNHlNMBDgEKD4TcKr36vQN68BA00aDfjIt3/bD50WnA=
|
||||||
github.com/go-asn1-ber/asn1-ber v1.5.5/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0=
|
github.com/go-asn1-ber/asn1-ber v1.5.5/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0=
|
||||||
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI=
|
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI=
|
||||||
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic=
|
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic=
|
||||||
github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU=
|
github.com/go-git/go-billy/v5 v5.6.0 h1:w2hPNtoehvJIxR00Vb4xX94qHQi/ApZfX+nBE2Cjio8=
|
||||||
github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow=
|
github.com/go-git/go-billy/v5 v5.6.0/go.mod h1:sFDq7xD3fn3E0GOwUSZqHo9lrkmx8xJhA0ZrfvjBRGM=
|
||||||
github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4=
|
github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4=
|
||||||
github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII=
|
github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII=
|
||||||
github.com/go-git/go-git/v5 v5.11.0 h1:XIZc1p+8YzypNr34itUfSvYJcv+eYdTnTvOZ2vD3cA4=
|
github.com/go-git/go-git/v5 v5.13.0 h1:vLn5wlGIh/X78El6r3Jr+30W16Blk0CTcxTYcYPWi5E=
|
||||||
github.com/go-git/go-git/v5 v5.11.0/go.mod h1:6GFcX2P3NM7FPBfpePbpLd21XxsgdAt+lKqXmCUiUCY=
|
github.com/go-git/go-git/v5 v5.13.0/go.mod h1:Wjo7/JyVKtQgUNdXYXIepzWfJQkUEIGvkvVkiXRR/zw=
|
||||||
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
|
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
|
||||||
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
||||||
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
||||||
@ -743,8 +742,8 @@ github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7J
|
|||||||
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
|
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
|
||||||
github.com/onsi/gomega v1.10.2/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
|
github.com/onsi/gomega v1.10.2/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
|
||||||
github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY=
|
github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY=
|
||||||
github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI=
|
github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k=
|
||||||
github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M=
|
github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY=
|
||||||
github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk=
|
github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk=
|
||||||
github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
|
github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
|
||||||
github.com/opentracing/opentracing-go v1.2.1-0.20220228012449-10b1cf09e00b h1:FfH+VrHHk6Lxt9HdVS0PXzSXFyS2NbZKXv33FYPol0A=
|
github.com/opentracing/opentracing-go v1.2.1-0.20220228012449-10b1cf09e00b h1:FfH+VrHHk6Lxt9HdVS0PXzSXFyS2NbZKXv33FYPol0A=
|
||||||
@ -845,8 +844,8 @@ github.com/sendgrid/rest v2.6.9+incompatible h1:1EyIcsNdn9KIisLW50MKwmSRSK+ekuei
|
|||||||
github.com/sendgrid/rest v2.6.9+incompatible/go.mod h1:kXX7q3jZtJXK5c5qK83bSGMdV6tsOE70KbHoqJls4lE=
|
github.com/sendgrid/rest v2.6.9+incompatible/go.mod h1:kXX7q3jZtJXK5c5qK83bSGMdV6tsOE70KbHoqJls4lE=
|
||||||
github.com/sendgrid/sendgrid-go v3.14.0+incompatible h1:KDSasSTktAqMJCYClHVE94Fcif2i7P7wzISv1sU6DUA=
|
github.com/sendgrid/sendgrid-go v3.14.0+incompatible h1:KDSasSTktAqMJCYClHVE94Fcif2i7P7wzISv1sU6DUA=
|
||||||
github.com/sendgrid/sendgrid-go v3.14.0+incompatible/go.mod h1:QRQt+LX/NmgVEvmdRw0VT/QgUn499+iza2FnDca9fg8=
|
github.com/sendgrid/sendgrid-go v3.14.0+incompatible/go.mod h1:QRQt+LX/NmgVEvmdRw0VT/QgUn499+iza2FnDca9fg8=
|
||||||
github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0=
|
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8=
|
||||||
github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
|
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4=
|
||||||
github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644/go.mod h1:nkxAfR/5quYxwPZhyDxgasBMnRtBZd0FCEpawpjMUFg=
|
github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644/go.mod h1:nkxAfR/5quYxwPZhyDxgasBMnRtBZd0FCEpawpjMUFg=
|
||||||
github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18 h1:DAYUYH5869yV94zvCES9F51oYtN5oGlwjxJJz7ZCnik=
|
github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18 h1:DAYUYH5869yV94zvCES9F51oYtN5oGlwjxJJz7ZCnik=
|
||||||
github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18/go.mod h1:nkxAfR/5quYxwPZhyDxgasBMnRtBZd0FCEpawpjMUFg=
|
github.com/shiena/ansicolor v0.0.0-20200904210342-c7312218db18/go.mod h1:nkxAfR/5quYxwPZhyDxgasBMnRtBZd0FCEpawpjMUFg=
|
||||||
@ -871,8 +870,8 @@ github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic
|
|||||||
github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
|
github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
|
||||||
github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
|
github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
|
||||||
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
|
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
|
||||||
github.com/skeema/knownhosts v1.2.1 h1:SHWdIUa82uGZz+F+47k8SY4QhhI291cXCpopT1lK2AQ=
|
github.com/skeema/knownhosts v1.3.0 h1:AM+y0rI04VksttfwjkSTNQorvGqmwATnvnAHpSgc0LY=
|
||||||
github.com/skeema/knownhosts v1.2.1/go.mod h1:xYbVRSPxqBZFrdmDyMmsOs+uX1UZC3nTN3ThzgDxUwo=
|
github.com/skeema/knownhosts v1.3.0/go.mod h1:sPINvnADmT/qYH1kfv+ePMmOBTH6Tbl7b5LvTDjFK7M=
|
||||||
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1vwZ3Je0FKVCfqOLp5zO6trqMLYs0=
|
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1vwZ3Je0FKVCfqOLp5zO6trqMLYs0=
|
||||||
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDqSt+GTGFMVlhk3ULuV0y9ZmzeVGR4mloJI3M=
|
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDqSt+GTGFMVlhk3ULuV0y9ZmzeVGR4mloJI3M=
|
||||||
github.com/slack-go/slack v0.12.3 h1:92/dfFU8Q5XP6Wp5rr5/T5JHLM5c5Smtn53fhToAP88=
|
github.com/slack-go/slack v0.12.3 h1:92/dfFU8Q5XP6Wp5rr5/T5JHLM5c5Smtn53fhToAP88=
|
||||||
@ -905,8 +904,9 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
|
|||||||
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
||||||
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
||||||
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
||||||
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
|
|
||||||
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||||
|
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
|
||||||
|
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||||
github.com/stripe/stripe-go/v74 v74.29.0 h1:ffJ+1Ta1Ccg7yDDz+SfjixX0KizEEJ/wNVRoFYkdwFY=
|
github.com/stripe/stripe-go/v74 v74.29.0 h1:ffJ+1Ta1Ccg7yDDz+SfjixX0KizEEJ/wNVRoFYkdwFY=
|
||||||
github.com/stripe/stripe-go/v74 v74.29.0/go.mod h1:f9L6LvaXa35ja7eyvP6GQswoaIPaBRvGAimAO+udbBw=
|
github.com/stripe/stripe-go/v74 v74.29.0/go.mod h1:f9L6LvaXa35ja7eyvP6GQswoaIPaBRvGAimAO+udbBw=
|
||||||
github.com/syndtr/goleveldb v0.0.0-20160425020131-cfa635847112/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0=
|
github.com/syndtr/goleveldb v0.0.0-20160425020131-cfa635847112/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0=
|
||||||
@ -1042,8 +1042,6 @@ golang.org/x/crypto v0.0.0-20211117183948-ae814b36b871/go.mod h1:IxCIyHEi3zRg3s0
|
|||||||
golang.org/x/crypto v0.0.0-20220208233918-bba287dce954/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
golang.org/x/crypto v0.0.0-20220208233918-bba287dce954/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||||
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||||
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||||
golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
|
|
||||||
golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU=
|
|
||||||
golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I=
|
golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I=
|
||||||
golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio=
|
golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio=
|
||||||
golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
|
golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
|
||||||
@ -1069,8 +1067,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0
|
|||||||
golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
|
golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
|
||||||
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
|
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
|
||||||
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
|
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
|
||||||
golang.org/x/exp v0.0.0-20230810033253-352e893a4cad h1:g0bG7Z4uG+OgH2QDODnjp6ggkk1bJDsINcuWmJN1iJU=
|
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8=
|
||||||
golang.org/x/exp v0.0.0-20230810033253-352e893a4cad/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc=
|
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY=
|
||||||
golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
|
golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
|
||||||
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
|
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
|
||||||
golang.org/x/image v0.0.0-20190802002840-cff245a6509b h1:+qEpEAPhDZ1o0x3tHzZTQDArnOixOzGD9HUJfcg0mb4=
|
golang.org/x/image v0.0.0-20190802002840-cff245a6509b h1:+qEpEAPhDZ1o0x3tHzZTQDArnOixOzGD9HUJfcg0mb4=
|
||||||
@ -1099,8 +1097,9 @@ golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91
|
|||||||
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
||||||
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
||||||
golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
|
golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
|
||||||
golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA=
|
|
||||||
golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
|
golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
|
||||||
|
golang.org/x/mod v0.19.0 h1:fEdghXQSo20giMthA7cd28ZC+jts4amQ3YMXiP5oMQ8=
|
||||||
|
golang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
|
||||||
golang.org/x/net v0.0.0-20171115151908-9dfe39835686/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20171115151908-9dfe39835686/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
@ -1150,10 +1149,8 @@ golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/go.mod h1:9nx3DQGgdP8bBQD5qx
|
|||||||
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||||
golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
|
golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
|
||||||
golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
|
|
||||||
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||||
golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||||
golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
|
|
||||||
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
|
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
|
||||||
golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ=
|
golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ=
|
||||||
golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA=
|
golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA=
|
||||||
@ -1266,10 +1263,7 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|
||||||
golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|
||||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|
||||||
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
@ -1287,9 +1281,7 @@ golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXR
|
|||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
|
|
||||||
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||||
golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
|
|
||||||
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
|
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
|
||||||
golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo=
|
golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo=
|
||||||
golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o=
|
golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o=
|
||||||
@ -1313,7 +1305,6 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
|||||||
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
|
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
|
||||||
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||||
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||||
golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
|
|
||||||
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
|
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
|
||||||
golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
|
golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
|
||||||
golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
|
golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
|
||||||
@ -1388,8 +1379,9 @@ golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
|||||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||||
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
|
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
|
||||||
golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
|
golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
|
||||||
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg=
|
|
||||||
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
|
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
|
||||||
|
golang.org/x/tools v0.23.0 h1:SGsXPZ+2l4JsgaCKkx+FQ9YZ5XEtA1GZYuoDjenLjvg=
|
||||||
|
golang.org/x/tools v0.23.0/go.mod h1:pnu6ufv6vQkll6szChhK3C3L/ruaIv5eBeztNG8wtsI=
|
||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
|
@ -84,6 +84,10 @@ func getAllFilePathsInFolder(folder string, fileSuffix string) []string {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if strings.HasSuffix(path, "node_modules") {
|
||||||
|
return filepath.SkipDir
|
||||||
|
}
|
||||||
|
|
||||||
if !strings.HasSuffix(info.Name(), fileSuffix) {
|
if !strings.HasSuffix(info.Name(), fileSuffix) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
},
|
},
|
||||||
"auth": {
|
"auth": {
|
||||||
"Challenge method should be S256": "Challenge method should be S256",
|
"Challenge method should be S256": "Challenge method should be S256",
|
||||||
|
"DeviceCode Invalid": "DeviceCode Invalid",
|
||||||
"Failed to create user, user information is invalid: %s": "Failed to create user, user information is invalid: %s",
|
"Failed to create user, user information is invalid: %s": "Failed to create user, user information is invalid: %s",
|
||||||
"Failed to login in: %s": "Failed to login in: %s",
|
"Failed to login in: %s": "Failed to login in: %s",
|
||||||
"Invalid token": "Invalid token",
|
"Invalid token": "Invalid token",
|
||||||
@ -21,17 +22,24 @@
|
|||||||
"The login method: login with face is not enabled for the application": "The login method: login with face is not enabled for the application",
|
"The login method: login with face is not enabled for the application": "The login method: login with face is not enabled for the application",
|
||||||
"The login method: login with password is not enabled for the application": "The login method: login with password is not enabled for the application",
|
"The login method: login with password is not enabled for the application": "The login method: login with password is not enabled for the application",
|
||||||
"The organization: %s does not exist": "The organization: %s does not exist",
|
"The organization: %s does not exist": "The organization: %s does not exist",
|
||||||
|
"The provider: %s does not exist": "The provider: %s does not exist",
|
||||||
"The provider: %s is not enabled for the application": "The provider: %s is not enabled for the application",
|
"The provider: %s is not enabled for the application": "The provider: %s is not enabled for the application",
|
||||||
"Unauthorized operation": "Unauthorized operation",
|
"Unauthorized operation": "Unauthorized operation",
|
||||||
"Unknown authentication type (not password or provider), form = %s": "Unknown authentication type (not password or provider), form = %s",
|
"Unknown authentication type (not password or provider), form = %s": "Unknown authentication type (not password or provider), form = %s",
|
||||||
"User's tag: %s is not listed in the application's tags": "User's tag: %s is not listed in the application's tags",
|
"User's tag: %s is not listed in the application's tags": "User's tag: %s is not listed in the application's tags",
|
||||||
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing"
|
"UserCode Expired": "UserCode Expired",
|
||||||
|
"UserCode Invalid": "UserCode Invalid",
|
||||||
|
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing",
|
||||||
|
"the application for user %s is not found": "the application for user %s is not found",
|
||||||
|
"the organization: %s is not found": "the organization: %s is not found"
|
||||||
},
|
},
|
||||||
"cas": {
|
"cas": {
|
||||||
"Service %s and %s do not match": "Service %s and %s do not match"
|
"Service %s and %s do not match": "Service %s and %s do not match"
|
||||||
},
|
},
|
||||||
"check": {
|
"check": {
|
||||||
|
"%s does not meet the CIDR format requirements: %s": "%s does not meet the CIDR format requirements: %s",
|
||||||
"Affiliation cannot be blank": "Affiliation cannot be blank",
|
"Affiliation cannot be blank": "Affiliation cannot be blank",
|
||||||
|
"CIDR for IP: %s should not be empty": "CIDR for IP: %s should not be empty",
|
||||||
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
||||||
"DisplayName cannot be blank": "DisplayName cannot be blank",
|
"DisplayName cannot be blank": "DisplayName cannot be blank",
|
||||||
"DisplayName is not valid real name": "DisplayName is not valid real name",
|
"DisplayName is not valid real name": "DisplayName is not valid real name",
|
||||||
@ -41,6 +49,7 @@
|
|||||||
"Empty username.": "Empty username.",
|
"Empty username.": "Empty username.",
|
||||||
"Face data does not exist, cannot log in": "Face data does not exist, cannot log in",
|
"Face data does not exist, cannot log in": "Face data does not exist, cannot log in",
|
||||||
"Face data mismatch": "Face data mismatch",
|
"Face data mismatch": "Face data mismatch",
|
||||||
|
"Failed to parse client IP: %s": "Failed to parse client IP: %s",
|
||||||
"FirstName cannot be blank": "FirstName cannot be blank",
|
"FirstName cannot be blank": "FirstName cannot be blank",
|
||||||
"Invitation code cannot be blank": "Invitation code cannot be blank",
|
"Invitation code cannot be blank": "Invitation code cannot be blank",
|
||||||
"Invitation code exhausted": "Invitation code exhausted",
|
"Invitation code exhausted": "Invitation code exhausted",
|
||||||
@ -50,6 +59,7 @@
|
|||||||
"LastName cannot be blank": "LastName cannot be blank",
|
"LastName cannot be blank": "LastName cannot be blank",
|
||||||
"Multiple accounts with same uid, please check your ldap server": "Multiple accounts with same uid, please check your ldap server",
|
"Multiple accounts with same uid, please check your ldap server": "Multiple accounts with same uid, please check your ldap server",
|
||||||
"Organization does not exist": "Organization does not exist",
|
"Organization does not exist": "Organization does not exist",
|
||||||
|
"Password cannot be empty": "Password cannot be empty",
|
||||||
"Phone already exists": "Phone already exists",
|
"Phone already exists": "Phone already exists",
|
||||||
"Phone cannot be empty": "Phone cannot be empty",
|
"Phone cannot be empty": "Phone cannot be empty",
|
||||||
"Phone number is invalid": "Phone number is invalid",
|
"Phone number is invalid": "Phone number is invalid",
|
||||||
@ -69,17 +79,27 @@
|
|||||||
"Username cannot start with a digit": "Username cannot start with a digit",
|
"Username cannot start with a digit": "Username cannot start with a digit",
|
||||||
"Username is too long (maximum is 255 characters).": "Username is too long (maximum is 255 characters).",
|
"Username is too long (maximum is 255 characters).": "Username is too long (maximum is 255 characters).",
|
||||||
"Username must have at least 2 characters": "Username must have at least 2 characters",
|
"Username must have at least 2 characters": "Username must have at least 2 characters",
|
||||||
|
"Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.": "Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.",
|
||||||
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "You have entered the wrong password or code too many times, please wait for %d minutes and try again",
|
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "You have entered the wrong password or code too many times, please wait for %d minutes and try again",
|
||||||
|
"Your IP address: %s has been banned according to the configuration of: ": "Your IP address: %s has been banned according to the configuration of: ",
|
||||||
|
"Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"": "Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"",
|
||||||
"Your region is not allow to signup by phone": "Your region is not allow to signup by phone",
|
"Your region is not allow to signup by phone": "Your region is not allow to signup by phone",
|
||||||
"password or code is incorrect": "password or code is incorrect",
|
"password or code is incorrect": "password or code is incorrect",
|
||||||
"password or code is incorrect, you have %d remaining chances": "password or code is incorrect, you have %d remaining chances",
|
"password or code is incorrect, you have %d remaining chances": "password or code is incorrect, you have %d remaining chances",
|
||||||
"unsupported password type: %s": "unsupported password type: %s"
|
"unsupported password type: %s": "unsupported password type: %s"
|
||||||
},
|
},
|
||||||
|
"enforcer": {
|
||||||
|
"the adapter: %s is not found": "the adapter: %s is not found"
|
||||||
|
},
|
||||||
"general": {
|
"general": {
|
||||||
|
"Failed to import groups": "Failed to import groups",
|
||||||
|
"Failed to import users": "Failed to import users",
|
||||||
"Missing parameter": "Missing parameter",
|
"Missing parameter": "Missing parameter",
|
||||||
|
"Only admin user can specify user": "Only admin user can specify user",
|
||||||
"Please login first": "Please login first",
|
"Please login first": "Please login first",
|
||||||
"The organization: %s should have one application at least": "The organization: %s should have one application at least",
|
"The organization: %s should have one application at least": "The organization: %s should have one application at least",
|
||||||
"The user: %s doesn't exist": "The user: %s doesn't exist",
|
"The user: %s doesn't exist": "The user: %s doesn't exist",
|
||||||
|
"Wrong userId": "Wrong userId",
|
||||||
"don't support captchaProvider: ": "don't support captchaProvider: ",
|
"don't support captchaProvider: ": "don't support captchaProvider: ",
|
||||||
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
|
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
|
||||||
"this operation requires administrator to perform": "this operation requires administrator to perform"
|
"this operation requires administrator to perform": "this operation requires administrator to perform"
|
||||||
@ -98,7 +118,8 @@
|
|||||||
"organization": {
|
"organization": {
|
||||||
"Only admin can modify the %s.": "Only admin can modify the %s.",
|
"Only admin can modify the %s.": "Only admin can modify the %s.",
|
||||||
"The %s is immutable.": "The %s is immutable.",
|
"The %s is immutable.": "The %s is immutable.",
|
||||||
"Unknown modify rule %s.": "Unknown modify rule %s."
|
"Unknown modify rule %s.": "Unknown modify rule %s.",
|
||||||
|
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
|
||||||
},
|
},
|
||||||
"permission": {
|
"permission": {
|
||||||
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
|
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
|
||||||
@ -126,6 +147,9 @@
|
|||||||
"The objectKey: %s is not allowed": "The objectKey: %s is not allowed",
|
"The objectKey: %s is not allowed": "The objectKey: %s is not allowed",
|
||||||
"The provider type: %s is not supported": "The provider type: %s is not supported"
|
"The provider type: %s is not supported": "The provider type: %s is not supported"
|
||||||
},
|
},
|
||||||
|
"subscription": {
|
||||||
|
"Error": "Error"
|
||||||
|
},
|
||||||
"token": {
|
"token": {
|
||||||
"Grant_type: %s is not supported in this application": "Grant_type: %s is not supported in this application",
|
"Grant_type: %s is not supported in this application": "Grant_type: %s is not supported in this application",
|
||||||
"Invalid application or wrong clientSecret": "Invalid application or wrong clientSecret",
|
"Invalid application or wrong clientSecret": "Invalid application or wrong clientSecret",
|
||||||
@ -135,10 +159,10 @@
|
|||||||
},
|
},
|
||||||
"user": {
|
"user": {
|
||||||
"Display name cannot be empty": "Display name cannot be empty",
|
"Display name cannot be empty": "Display name cannot be empty",
|
||||||
"New password cannot contain blank space.": "New password cannot contain blank space."
|
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
|
||||||
},
|
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
|
||||||
"user_upload": {
|
"New password cannot contain blank space.": "New password cannot contain blank space.",
|
||||||
"Failed to import users": "Failed to import users"
|
"the user's owner and name should not be empty": "the user's owner and name should not be empty"
|
||||||
},
|
},
|
||||||
"util": {
|
"util": {
|
||||||
"No application is found for userId: %s": "No application is found for userId: %s",
|
"No application is found for userId: %s": "No application is found for userId: %s",
|
||||||
@ -148,8 +172,8 @@
|
|||||||
"verification": {
|
"verification": {
|
||||||
"Invalid captcha provider.": "Invalid captcha provider.",
|
"Invalid captcha provider.": "Invalid captcha provider.",
|
||||||
"Phone number is invalid in your region %s": "Phone number is invalid in your region %s",
|
"Phone number is invalid in your region %s": "Phone number is invalid in your region %s",
|
||||||
|
"The verification code has already been used!": "The verification code has already been used!",
|
||||||
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
|
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
|
||||||
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
|
|
||||||
"Turing test failed.": "Turing test failed.",
|
"Turing test failed.": "Turing test failed.",
|
||||||
"Unable to get the email modify rule.": "Unable to get the email modify rule.",
|
"Unable to get the email modify rule.": "Unable to get the email modify rule.",
|
||||||
"Unable to get the phone modify rule.": "Unable to get the phone modify rule.",
|
"Unable to get the phone modify rule.": "Unable to get the phone modify rule.",
|
||||||
@ -161,7 +185,6 @@
|
|||||||
"the user does not exist, please sign up first": "the user does not exist, please sign up first"
|
"the user does not exist, please sign up first": "the user does not exist, please sign up first"
|
||||||
},
|
},
|
||||||
"webauthn": {
|
"webauthn": {
|
||||||
"Found no credentials for this user": "Found no credentials for this user",
|
|
||||||
"Please call WebAuthnSigninBegin first": "Please call WebAuthnSigninBegin first"
|
"Please call WebAuthnSigninBegin first": "Please call WebAuthnSigninBegin first"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
},
|
},
|
||||||
"auth": {
|
"auth": {
|
||||||
"Challenge method should be S256": "Metoda výzvy by měla být S256",
|
"Challenge method should be S256": "Metoda výzvy by měla být S256",
|
||||||
|
"DeviceCode Invalid": "DeviceCode Invalid",
|
||||||
"Failed to create user, user information is invalid: %s": "Nepodařilo se vytvořit uživatele, informace o uživateli jsou neplatné: %s",
|
"Failed to create user, user information is invalid: %s": "Nepodařilo se vytvořit uživatele, informace o uživateli jsou neplatné: %s",
|
||||||
"Failed to login in: %s": "Nepodařilo se přihlásit: %s",
|
"Failed to login in: %s": "Nepodařilo se přihlásit: %s",
|
||||||
"Invalid token": "Neplatný token",
|
"Invalid token": "Neplatný token",
|
||||||
@ -21,17 +22,24 @@
|
|||||||
"The login method: login with face is not enabled for the application": "Metoda přihlášení: přihlášení pomocí obličeje není pro aplikaci povolena",
|
"The login method: login with face is not enabled for the application": "Metoda přihlášení: přihlášení pomocí obličeje není pro aplikaci povolena",
|
||||||
"The login method: login with password is not enabled for the application": "Metoda přihlášení: přihlášení pomocí hesla není pro aplikaci povolena",
|
"The login method: login with password is not enabled for the application": "Metoda přihlášení: přihlášení pomocí hesla není pro aplikaci povolena",
|
||||||
"The organization: %s does not exist": "Organizace: %s neexistuje",
|
"The organization: %s does not exist": "Organizace: %s neexistuje",
|
||||||
|
"The provider: %s does not exist": "The provider: %s does not exist",
|
||||||
"The provider: %s is not enabled for the application": "Poskytovatel: %s není pro aplikaci povolen",
|
"The provider: %s is not enabled for the application": "Poskytovatel: %s není pro aplikaci povolen",
|
||||||
"Unauthorized operation": "Neoprávněná operace",
|
"Unauthorized operation": "Neoprávněná operace",
|
||||||
"Unknown authentication type (not password or provider), form = %s": "Neznámý typ autentizace (není heslo nebo poskytovatel), formulář = %s",
|
"Unknown authentication type (not password or provider), form = %s": "Neznámý typ autentizace (není heslo nebo poskytovatel), formulář = %s",
|
||||||
"User's tag: %s is not listed in the application's tags": "Štítek uživatele: %s není uveden v štítcích aplikace",
|
"User's tag: %s is not listed in the application's tags": "Štítek uživatele: %s není uveden v štítcích aplikace",
|
||||||
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "Placený uživatel %s nemá aktivní nebo čekající předplatné a aplikace: %s nemá výchozí ceny"
|
"UserCode Expired": "UserCode Expired",
|
||||||
|
"UserCode Invalid": "UserCode Invalid",
|
||||||
|
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "Placený uživatel %s nemá aktivní nebo čekající předplatné a aplikace: %s nemá výchozí ceny",
|
||||||
|
"the application for user %s is not found": "the application for user %s is not found",
|
||||||
|
"the organization: %s is not found": "the organization: %s is not found"
|
||||||
},
|
},
|
||||||
"cas": {
|
"cas": {
|
||||||
"Service %s and %s do not match": "Služba %s a %s se neshodují"
|
"Service %s and %s do not match": "Služba %s a %s se neshodují"
|
||||||
},
|
},
|
||||||
"check": {
|
"check": {
|
||||||
|
"%s does not meet the CIDR format requirements: %s": "%s does not meet the CIDR format requirements: %s",
|
||||||
"Affiliation cannot be blank": "Příslušnost nemůže být prázdná",
|
"Affiliation cannot be blank": "Příslušnost nemůže být prázdná",
|
||||||
|
"CIDR for IP: %s should not be empty": "CIDR for IP: %s should not be empty",
|
||||||
"Default code does not match the code's matching rules": "Výchozí kód neodpovídá pravidlům pro shodu kódů",
|
"Default code does not match the code's matching rules": "Výchozí kód neodpovídá pravidlům pro shodu kódů",
|
||||||
"DisplayName cannot be blank": "Zobrazované jméno nemůže být prázdné",
|
"DisplayName cannot be blank": "Zobrazované jméno nemůže být prázdné",
|
||||||
"DisplayName is not valid real name": "Zobrazované jméno není platné skutečné jméno",
|
"DisplayName is not valid real name": "Zobrazované jméno není platné skutečné jméno",
|
||||||
@ -41,6 +49,7 @@
|
|||||||
"Empty username.": "Prázdné uživatelské jméno.",
|
"Empty username.": "Prázdné uživatelské jméno.",
|
||||||
"Face data does not exist, cannot log in": "Data obličeje neexistují, nelze se přihlásit",
|
"Face data does not exist, cannot log in": "Data obličeje neexistují, nelze se přihlásit",
|
||||||
"Face data mismatch": "Neshoda dat obličeje",
|
"Face data mismatch": "Neshoda dat obličeje",
|
||||||
|
"Failed to parse client IP: %s": "Failed to parse client IP: %s",
|
||||||
"FirstName cannot be blank": "Křestní jméno nemůže být prázdné",
|
"FirstName cannot be blank": "Křestní jméno nemůže být prázdné",
|
||||||
"Invitation code cannot be blank": "Pozvánkový kód nemůže být prázdný",
|
"Invitation code cannot be blank": "Pozvánkový kód nemůže být prázdný",
|
||||||
"Invitation code exhausted": "Pozvánkový kód vyčerpán",
|
"Invitation code exhausted": "Pozvánkový kód vyčerpán",
|
||||||
@ -50,6 +59,7 @@
|
|||||||
"LastName cannot be blank": "Příjmení nemůže být prázdné",
|
"LastName cannot be blank": "Příjmení nemůže být prázdné",
|
||||||
"Multiple accounts with same uid, please check your ldap server": "Více účtů se stejným uid, prosím zkontrolujte svůj ldap server",
|
"Multiple accounts with same uid, please check your ldap server": "Více účtů se stejným uid, prosím zkontrolujte svůj ldap server",
|
||||||
"Organization does not exist": "Organizace neexistuje",
|
"Organization does not exist": "Organizace neexistuje",
|
||||||
|
"Password cannot be empty": "Password cannot be empty",
|
||||||
"Phone already exists": "Telefon již existuje",
|
"Phone already exists": "Telefon již existuje",
|
||||||
"Phone cannot be empty": "Telefon nemůže být prázdný",
|
"Phone cannot be empty": "Telefon nemůže být prázdný",
|
||||||
"Phone number is invalid": "Telefonní číslo je neplatné",
|
"Phone number is invalid": "Telefonní číslo je neplatné",
|
||||||
@ -69,17 +79,27 @@
|
|||||||
"Username cannot start with a digit": "Uživatelské jméno nemůže začínat číslicí",
|
"Username cannot start with a digit": "Uživatelské jméno nemůže začínat číslicí",
|
||||||
"Username is too long (maximum is 255 characters).": "Uživatelské jméno je příliš dlouhé (maximálně 255 znaků).",
|
"Username is too long (maximum is 255 characters).": "Uživatelské jméno je příliš dlouhé (maximálně 255 znaků).",
|
||||||
"Username must have at least 2 characters": "Uživatelské jméno musí mít alespoň 2 znaky",
|
"Username must have at least 2 characters": "Uživatelské jméno musí mít alespoň 2 znaky",
|
||||||
|
"Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.": "Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.",
|
||||||
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "Zadali jste špatné heslo nebo kód příliš mnohokrát, prosím počkejte %d minut a zkuste to znovu",
|
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "Zadali jste špatné heslo nebo kód příliš mnohokrát, prosím počkejte %d minut a zkuste to znovu",
|
||||||
|
"Your IP address: %s has been banned according to the configuration of: ": "Your IP address: %s has been banned according to the configuration of: ",
|
||||||
|
"Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"": "Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"",
|
||||||
"Your region is not allow to signup by phone": "Vaše oblast neumožňuje registraci pomocí telefonu",
|
"Your region is not allow to signup by phone": "Vaše oblast neumožňuje registraci pomocí telefonu",
|
||||||
"password or code is incorrect": "heslo nebo kód je nesprávné",
|
"password or code is incorrect": "heslo nebo kód je nesprávné",
|
||||||
"password or code is incorrect, you have %d remaining chances": "heslo nebo kód je nesprávné, máte %d zbývajících pokusů",
|
"password or code is incorrect, you have %d remaining chances": "heslo nebo kód je nesprávné, máte %d zbývajících pokusů",
|
||||||
"unsupported password type: %s": "nepodporovaný typ hesla: %s"
|
"unsupported password type: %s": "nepodporovaný typ hesla: %s"
|
||||||
},
|
},
|
||||||
|
"enforcer": {
|
||||||
|
"the adapter: %s is not found": "the adapter: %s is not found"
|
||||||
|
},
|
||||||
"general": {
|
"general": {
|
||||||
|
"Failed to import groups": "Failed to import groups",
|
||||||
|
"Failed to import users": "Nepodařilo se importovat uživatele",
|
||||||
"Missing parameter": "Chybějící parametr",
|
"Missing parameter": "Chybějící parametr",
|
||||||
|
"Only admin user can specify user": "Only admin user can specify user",
|
||||||
"Please login first": "Prosím, přihlaste se nejprve",
|
"Please login first": "Prosím, přihlaste se nejprve",
|
||||||
"The organization: %s should have one application at least": "Organizace: %s by měla mít alespoň jednu aplikaci",
|
"The organization: %s should have one application at least": "Organizace: %s by měla mít alespoň jednu aplikaci",
|
||||||
"The user: %s doesn't exist": "Uživatel: %s neexistuje",
|
"The user: %s doesn't exist": "Uživatel: %s neexistuje",
|
||||||
|
"Wrong userId": "Wrong userId",
|
||||||
"don't support captchaProvider: ": "nepodporuje captchaProvider: ",
|
"don't support captchaProvider: ": "nepodporuje captchaProvider: ",
|
||||||
"this operation is not allowed in demo mode": "tato operace není povolena v demo režimu",
|
"this operation is not allowed in demo mode": "tato operace není povolena v demo režimu",
|
||||||
"this operation requires administrator to perform": "tato operace vyžaduje administrátora"
|
"this operation requires administrator to perform": "tato operace vyžaduje administrátora"
|
||||||
@ -98,7 +118,8 @@
|
|||||||
"organization": {
|
"organization": {
|
||||||
"Only admin can modify the %s.": "Pouze administrátor může upravit %s.",
|
"Only admin can modify the %s.": "Pouze administrátor může upravit %s.",
|
||||||
"The %s is immutable.": "%s je neměnný.",
|
"The %s is immutable.": "%s je neměnný.",
|
||||||
"Unknown modify rule %s.": "Neznámé pravidlo úpravy %s."
|
"Unknown modify rule %s.": "Neznámé pravidlo úpravy %s.",
|
||||||
|
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
|
||||||
},
|
},
|
||||||
"permission": {
|
"permission": {
|
||||||
"The permission: \\\"%s\\\" doesn't exist": "Oprávnění: \\\"%s\\\" neexistuje"
|
"The permission: \\\"%s\\\" doesn't exist": "Oprávnění: \\\"%s\\\" neexistuje"
|
||||||
@ -126,6 +147,9 @@
|
|||||||
"The objectKey: %s is not allowed": "objectKey: %s není povolen",
|
"The objectKey: %s is not allowed": "objectKey: %s není povolen",
|
||||||
"The provider type: %s is not supported": "typ poskytovatele: %s není podporován"
|
"The provider type: %s is not supported": "typ poskytovatele: %s není podporován"
|
||||||
},
|
},
|
||||||
|
"subscription": {
|
||||||
|
"Error": "Error"
|
||||||
|
},
|
||||||
"token": {
|
"token": {
|
||||||
"Grant_type: %s is not supported in this application": "Grant_type: %s není v této aplikaci podporován",
|
"Grant_type: %s is not supported in this application": "Grant_type: %s není v této aplikaci podporován",
|
||||||
"Invalid application or wrong clientSecret": "Neplatná aplikace nebo špatný clientSecret",
|
"Invalid application or wrong clientSecret": "Neplatná aplikace nebo špatný clientSecret",
|
||||||
@ -135,10 +159,10 @@
|
|||||||
},
|
},
|
||||||
"user": {
|
"user": {
|
||||||
"Display name cannot be empty": "Zobrazované jméno nemůže být prázdné",
|
"Display name cannot be empty": "Zobrazované jméno nemůže být prázdné",
|
||||||
"New password cannot contain blank space.": "Nové heslo nemůže obsahovat prázdné místo."
|
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
|
||||||
},
|
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
|
||||||
"user_upload": {
|
"New password cannot contain blank space.": "Nové heslo nemůže obsahovat prázdné místo.",
|
||||||
"Failed to import users": "Nepodařilo se importovat uživatele"
|
"the user's owner and name should not be empty": "the user's owner and name should not be empty"
|
||||||
},
|
},
|
||||||
"util": {
|
"util": {
|
||||||
"No application is found for userId: %s": "Pro userId: %s nebyla nalezena žádná aplikace",
|
"No application is found for userId: %s": "Pro userId: %s nebyla nalezena žádná aplikace",
|
||||||
@ -148,8 +172,8 @@
|
|||||||
"verification": {
|
"verification": {
|
||||||
"Invalid captcha provider.": "Neplatný poskytovatel captcha.",
|
"Invalid captcha provider.": "Neplatný poskytovatel captcha.",
|
||||||
"Phone number is invalid in your region %s": "Telefonní číslo je ve vaší oblasti %s neplatné",
|
"Phone number is invalid in your region %s": "Telefonní číslo je ve vaší oblasti %s neplatné",
|
||||||
|
"The verification code has already been used!": "The verification code has already been used!",
|
||||||
"The verification code has not been sent yet!": "Ověřovací kód ještě nebyl odeslán!",
|
"The verification code has not been sent yet!": "Ověřovací kód ještě nebyl odeslán!",
|
||||||
"The verification code has not been sent yet, or has already been used!": "Ověřovací kód ještě nebyl odeslán, nebo již byl použit!",
|
|
||||||
"Turing test failed.": "Turingův test selhal.",
|
"Turing test failed.": "Turingův test selhal.",
|
||||||
"Unable to get the email modify rule.": "Nelze získat pravidlo pro úpravu emailu.",
|
"Unable to get the email modify rule.": "Nelze získat pravidlo pro úpravu emailu.",
|
||||||
"Unable to get the phone modify rule.": "Nelze získat pravidlo pro úpravu telefonu.",
|
"Unable to get the phone modify rule.": "Nelze získat pravidlo pro úpravu telefonu.",
|
||||||
@ -161,7 +185,6 @@
|
|||||||
"the user does not exist, please sign up first": "uživatel neexistuje, prosím nejprve se zaregistrujte"
|
"the user does not exist, please sign up first": "uživatel neexistuje, prosím nejprve se zaregistrujte"
|
||||||
},
|
},
|
||||||
"webauthn": {
|
"webauthn": {
|
||||||
"Found no credentials for this user": "Nebyly nalezeny žádné přihlašovací údaje pro tohoto uživatele",
|
|
||||||
"Please call WebAuthnSigninBegin first": "Prosím, nejprve zavolejte WebAuthnSigninBegin"
|
"Please call WebAuthnSigninBegin first": "Prosím, nejprve zavolejte WebAuthnSigninBegin"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
},
|
},
|
||||||
"auth": {
|
"auth": {
|
||||||
"Challenge method should be S256": "Die Challenge-Methode sollte S256 sein",
|
"Challenge method should be S256": "Die Challenge-Methode sollte S256 sein",
|
||||||
|
"DeviceCode Invalid": "DeviceCode Invalid",
|
||||||
"Failed to create user, user information is invalid: %s": "Es konnte kein Benutzer erstellt werden, da die Benutzerinformationen ungültig sind: %s",
|
"Failed to create user, user information is invalid: %s": "Es konnte kein Benutzer erstellt werden, da die Benutzerinformationen ungültig sind: %s",
|
||||||
"Failed to login in: %s": "Konnte nicht anmelden: %s",
|
"Failed to login in: %s": "Konnte nicht anmelden: %s",
|
||||||
"Invalid token": "Ungültiges Token",
|
"Invalid token": "Ungültiges Token",
|
||||||
@ -21,17 +22,24 @@
|
|||||||
"The login method: login with face is not enabled for the application": "The login method: login with face is not enabled for the application",
|
"The login method: login with face is not enabled for the application": "The login method: login with face is not enabled for the application",
|
||||||
"The login method: login with password is not enabled for the application": "Die Anmeldeart \"Anmeldung mit Passwort\" ist für die Anwendung nicht aktiviert",
|
"The login method: login with password is not enabled for the application": "Die Anmeldeart \"Anmeldung mit Passwort\" ist für die Anwendung nicht aktiviert",
|
||||||
"The organization: %s does not exist": "The organization: %s does not exist",
|
"The organization: %s does not exist": "The organization: %s does not exist",
|
||||||
|
"The provider: %s does not exist": "The provider: %s does not exist",
|
||||||
"The provider: %s is not enabled for the application": "Der Anbieter: %s ist nicht für die Anwendung aktiviert",
|
"The provider: %s is not enabled for the application": "Der Anbieter: %s ist nicht für die Anwendung aktiviert",
|
||||||
"Unauthorized operation": "Nicht autorisierte Operation",
|
"Unauthorized operation": "Nicht autorisierte Operation",
|
||||||
"Unknown authentication type (not password or provider), form = %s": "Unbekannter Authentifizierungstyp (nicht Passwort oder Anbieter), Formular = %s",
|
"Unknown authentication type (not password or provider), form = %s": "Unbekannter Authentifizierungstyp (nicht Passwort oder Anbieter), Formular = %s",
|
||||||
"User's tag: %s is not listed in the application's tags": "User's tag: %s is not listed in the application's tags",
|
"User's tag: %s is not listed in the application's tags": "User's tag: %s is not listed in the application's tags",
|
||||||
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing"
|
"UserCode Expired": "UserCode Expired",
|
||||||
|
"UserCode Invalid": "UserCode Invalid",
|
||||||
|
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing",
|
||||||
|
"the application for user %s is not found": "the application for user %s is not found",
|
||||||
|
"the organization: %s is not found": "the organization: %s is not found"
|
||||||
},
|
},
|
||||||
"cas": {
|
"cas": {
|
||||||
"Service %s and %s do not match": "Service %s und %s stimmen nicht überein"
|
"Service %s and %s do not match": "Service %s und %s stimmen nicht überein"
|
||||||
},
|
},
|
||||||
"check": {
|
"check": {
|
||||||
|
"%s does not meet the CIDR format requirements: %s": "%s does not meet the CIDR format requirements: %s",
|
||||||
"Affiliation cannot be blank": "Zugehörigkeit darf nicht leer sein",
|
"Affiliation cannot be blank": "Zugehörigkeit darf nicht leer sein",
|
||||||
|
"CIDR for IP: %s should not be empty": "CIDR for IP: %s should not be empty",
|
||||||
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
||||||
"DisplayName cannot be blank": "Anzeigename kann nicht leer sein",
|
"DisplayName cannot be blank": "Anzeigename kann nicht leer sein",
|
||||||
"DisplayName is not valid real name": "DisplayName ist kein gültiger Vorname",
|
"DisplayName is not valid real name": "DisplayName ist kein gültiger Vorname",
|
||||||
@ -41,6 +49,7 @@
|
|||||||
"Empty username.": "Leerer Benutzername.",
|
"Empty username.": "Leerer Benutzername.",
|
||||||
"Face data does not exist, cannot log in": "Face data does not exist, cannot log in",
|
"Face data does not exist, cannot log in": "Face data does not exist, cannot log in",
|
||||||
"Face data mismatch": "Face data mismatch",
|
"Face data mismatch": "Face data mismatch",
|
||||||
|
"Failed to parse client IP: %s": "Failed to parse client IP: %s",
|
||||||
"FirstName cannot be blank": "Vorname darf nicht leer sein",
|
"FirstName cannot be blank": "Vorname darf nicht leer sein",
|
||||||
"Invitation code cannot be blank": "Invitation code cannot be blank",
|
"Invitation code cannot be blank": "Invitation code cannot be blank",
|
||||||
"Invitation code exhausted": "Invitation code exhausted",
|
"Invitation code exhausted": "Invitation code exhausted",
|
||||||
@ -50,6 +59,7 @@
|
|||||||
"LastName cannot be blank": "Nachname darf nicht leer sein",
|
"LastName cannot be blank": "Nachname darf nicht leer sein",
|
||||||
"Multiple accounts with same uid, please check your ldap server": "Mehrere Konten mit derselben uid, bitte überprüfen Sie Ihren LDAP-Server",
|
"Multiple accounts with same uid, please check your ldap server": "Mehrere Konten mit derselben uid, bitte überprüfen Sie Ihren LDAP-Server",
|
||||||
"Organization does not exist": "Organisation existiert nicht",
|
"Organization does not exist": "Organisation existiert nicht",
|
||||||
|
"Password cannot be empty": "Password cannot be empty",
|
||||||
"Phone already exists": "Telefon existiert bereits",
|
"Phone already exists": "Telefon existiert bereits",
|
||||||
"Phone cannot be empty": "Das Telefon darf nicht leer sein",
|
"Phone cannot be empty": "Das Telefon darf nicht leer sein",
|
||||||
"Phone number is invalid": "Die Telefonnummer ist ungültig",
|
"Phone number is invalid": "Die Telefonnummer ist ungültig",
|
||||||
@ -69,17 +79,27 @@
|
|||||||
"Username cannot start with a digit": "Benutzername darf nicht mit einer Ziffer beginnen",
|
"Username cannot start with a digit": "Benutzername darf nicht mit einer Ziffer beginnen",
|
||||||
"Username is too long (maximum is 255 characters).": "Benutzername ist zu lang (das Maximum beträgt 255 Zeichen).",
|
"Username is too long (maximum is 255 characters).": "Benutzername ist zu lang (das Maximum beträgt 255 Zeichen).",
|
||||||
"Username must have at least 2 characters": "Benutzername muss mindestens 2 Zeichen lang sein",
|
"Username must have at least 2 characters": "Benutzername muss mindestens 2 Zeichen lang sein",
|
||||||
|
"Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.": "Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.",
|
||||||
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "Sie haben zu oft das falsche Passwort oder den falschen Code eingegeben. Bitte warten Sie %d Minuten und versuchen Sie es erneut",
|
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "Sie haben zu oft das falsche Passwort oder den falschen Code eingegeben. Bitte warten Sie %d Minuten und versuchen Sie es erneut",
|
||||||
|
"Your IP address: %s has been banned according to the configuration of: ": "Your IP address: %s has been banned according to the configuration of: ",
|
||||||
|
"Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"": "Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"",
|
||||||
"Your region is not allow to signup by phone": "Ihre Region ist nicht berechtigt, sich telefonisch anzumelden",
|
"Your region is not allow to signup by phone": "Ihre Region ist nicht berechtigt, sich telefonisch anzumelden",
|
||||||
"password or code is incorrect": "password or code is incorrect",
|
"password or code is incorrect": "password or code is incorrect",
|
||||||
"password or code is incorrect, you have %d remaining chances": "Das Passwort oder der Code ist falsch. Du hast noch %d Versuche übrig",
|
"password or code is incorrect, you have %d remaining chances": "Das Passwort oder der Code ist falsch. Du hast noch %d Versuche übrig",
|
||||||
"unsupported password type: %s": "Nicht unterstützter Passworttyp: %s"
|
"unsupported password type: %s": "Nicht unterstützter Passworttyp: %s"
|
||||||
},
|
},
|
||||||
|
"enforcer": {
|
||||||
|
"the adapter: %s is not found": "the adapter: %s is not found"
|
||||||
|
},
|
||||||
"general": {
|
"general": {
|
||||||
|
"Failed to import groups": "Failed to import groups",
|
||||||
|
"Failed to import users": "Fehler beim Importieren von Benutzern",
|
||||||
"Missing parameter": "Fehlender Parameter",
|
"Missing parameter": "Fehlender Parameter",
|
||||||
|
"Only admin user can specify user": "Only admin user can specify user",
|
||||||
"Please login first": "Bitte zuerst einloggen",
|
"Please login first": "Bitte zuerst einloggen",
|
||||||
"The organization: %s should have one application at least": "The organization: %s should have one application at least",
|
"The organization: %s should have one application at least": "The organization: %s should have one application at least",
|
||||||
"The user: %s doesn't exist": "Der Benutzer %s existiert nicht",
|
"The user: %s doesn't exist": "Der Benutzer %s existiert nicht",
|
||||||
|
"Wrong userId": "Wrong userId",
|
||||||
"don't support captchaProvider: ": "Unterstütze captchaProvider nicht:",
|
"don't support captchaProvider: ": "Unterstütze captchaProvider nicht:",
|
||||||
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
|
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
|
||||||
"this operation requires administrator to perform": "this operation requires administrator to perform"
|
"this operation requires administrator to perform": "this operation requires administrator to perform"
|
||||||
@ -98,7 +118,8 @@
|
|||||||
"organization": {
|
"organization": {
|
||||||
"Only admin can modify the %s.": "Nur der Administrator kann das %s ändern.",
|
"Only admin can modify the %s.": "Nur der Administrator kann das %s ändern.",
|
||||||
"The %s is immutable.": "Das %s ist unveränderlich.",
|
"The %s is immutable.": "Das %s ist unveränderlich.",
|
||||||
"Unknown modify rule %s.": "Unbekannte Änderungsregel %s."
|
"Unknown modify rule %s.": "Unbekannte Änderungsregel %s.",
|
||||||
|
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
|
||||||
},
|
},
|
||||||
"permission": {
|
"permission": {
|
||||||
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
|
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
|
||||||
@ -126,6 +147,9 @@
|
|||||||
"The objectKey: %s is not allowed": "Der Objektschlüssel %s ist nicht erlaubt",
|
"The objectKey: %s is not allowed": "Der Objektschlüssel %s ist nicht erlaubt",
|
||||||
"The provider type: %s is not supported": "Der Anbieter-Typ %s wird nicht unterstützt"
|
"The provider type: %s is not supported": "Der Anbieter-Typ %s wird nicht unterstützt"
|
||||||
},
|
},
|
||||||
|
"subscription": {
|
||||||
|
"Error": "Error"
|
||||||
|
},
|
||||||
"token": {
|
"token": {
|
||||||
"Grant_type: %s is not supported in this application": "Grant_type: %s wird von dieser Anwendung nicht unterstützt",
|
"Grant_type: %s is not supported in this application": "Grant_type: %s wird von dieser Anwendung nicht unterstützt",
|
||||||
"Invalid application or wrong clientSecret": "Ungültige Anwendung oder falsches clientSecret",
|
"Invalid application or wrong clientSecret": "Ungültige Anwendung oder falsches clientSecret",
|
||||||
@ -135,10 +159,10 @@
|
|||||||
},
|
},
|
||||||
"user": {
|
"user": {
|
||||||
"Display name cannot be empty": "Anzeigename darf nicht leer sein",
|
"Display name cannot be empty": "Anzeigename darf nicht leer sein",
|
||||||
"New password cannot contain blank space.": "Das neue Passwort darf keine Leerzeichen enthalten."
|
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
|
||||||
},
|
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
|
||||||
"user_upload": {
|
"New password cannot contain blank space.": "Das neue Passwort darf keine Leerzeichen enthalten.",
|
||||||
"Failed to import users": "Fehler beim Importieren von Benutzern"
|
"the user's owner and name should not be empty": "the user's owner and name should not be empty"
|
||||||
},
|
},
|
||||||
"util": {
|
"util": {
|
||||||
"No application is found for userId: %s": "Es wurde keine Anwendung für die Benutzer-ID gefunden: %s",
|
"No application is found for userId: %s": "Es wurde keine Anwendung für die Benutzer-ID gefunden: %s",
|
||||||
@ -148,8 +172,8 @@
|
|||||||
"verification": {
|
"verification": {
|
||||||
"Invalid captcha provider.": "Ungültiger Captcha-Anbieter.",
|
"Invalid captcha provider.": "Ungültiger Captcha-Anbieter.",
|
||||||
"Phone number is invalid in your region %s": "Die Telefonnummer ist in Ihrer Region %s ungültig",
|
"Phone number is invalid in your region %s": "Die Telefonnummer ist in Ihrer Region %s ungültig",
|
||||||
|
"The verification code has already been used!": "The verification code has already been used!",
|
||||||
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
|
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
|
||||||
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
|
|
||||||
"Turing test failed.": "Turing-Test fehlgeschlagen.",
|
"Turing test failed.": "Turing-Test fehlgeschlagen.",
|
||||||
"Unable to get the email modify rule.": "Nicht in der Lage, die E-Mail-Änderungsregel zu erhalten.",
|
"Unable to get the email modify rule.": "Nicht in der Lage, die E-Mail-Änderungsregel zu erhalten.",
|
||||||
"Unable to get the phone modify rule.": "Nicht in der Lage, die Telefon-Änderungsregel zu erhalten.",
|
"Unable to get the phone modify rule.": "Nicht in der Lage, die Telefon-Änderungsregel zu erhalten.",
|
||||||
@ -161,7 +185,6 @@
|
|||||||
"the user does not exist, please sign up first": "Der Benutzer existiert nicht, bitte zuerst anmelden"
|
"the user does not exist, please sign up first": "Der Benutzer existiert nicht, bitte zuerst anmelden"
|
||||||
},
|
},
|
||||||
"webauthn": {
|
"webauthn": {
|
||||||
"Found no credentials for this user": "Es wurden keine Anmeldeinformationen für diesen Benutzer gefunden",
|
|
||||||
"Please call WebAuthnSigninBegin first": "Bitte rufen Sie zuerst WebAuthnSigninBegin auf"
|
"Please call WebAuthnSigninBegin first": "Bitte rufen Sie zuerst WebAuthnSigninBegin auf"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
},
|
},
|
||||||
"auth": {
|
"auth": {
|
||||||
"Challenge method should be S256": "Challenge method should be S256",
|
"Challenge method should be S256": "Challenge method should be S256",
|
||||||
|
"DeviceCode Invalid": "DeviceCode Invalid",
|
||||||
"Failed to create user, user information is invalid: %s": "Failed to create user, user information is invalid: %s",
|
"Failed to create user, user information is invalid: %s": "Failed to create user, user information is invalid: %s",
|
||||||
"Failed to login in: %s": "Failed to login in: %s",
|
"Failed to login in: %s": "Failed to login in: %s",
|
||||||
"Invalid token": "Invalid token",
|
"Invalid token": "Invalid token",
|
||||||
@ -21,17 +22,24 @@
|
|||||||
"The login method: login with face is not enabled for the application": "The login method: login with face is not enabled for the application",
|
"The login method: login with face is not enabled for the application": "The login method: login with face is not enabled for the application",
|
||||||
"The login method: login with password is not enabled for the application": "The login method: login with password is not enabled for the application",
|
"The login method: login with password is not enabled for the application": "The login method: login with password is not enabled for the application",
|
||||||
"The organization: %s does not exist": "The organization: %s does not exist",
|
"The organization: %s does not exist": "The organization: %s does not exist",
|
||||||
|
"The provider: %s does not exist": "The provider: %s does not exist",
|
||||||
"The provider: %s is not enabled for the application": "The provider: %s is not enabled for the application",
|
"The provider: %s is not enabled for the application": "The provider: %s is not enabled for the application",
|
||||||
"Unauthorized operation": "Unauthorized operation",
|
"Unauthorized operation": "Unauthorized operation",
|
||||||
"Unknown authentication type (not password or provider), form = %s": "Unknown authentication type (not password or provider), form = %s",
|
"Unknown authentication type (not password or provider), form = %s": "Unknown authentication type (not password or provider), form = %s",
|
||||||
"User's tag: %s is not listed in the application's tags": "User's tag: %s is not listed in the application's tags",
|
"User's tag: %s is not listed in the application's tags": "User's tag: %s is not listed in the application's tags",
|
||||||
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing"
|
"UserCode Expired": "UserCode Expired",
|
||||||
|
"UserCode Invalid": "UserCode Invalid",
|
||||||
|
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing",
|
||||||
|
"the application for user %s is not found": "the application for user %s is not found",
|
||||||
|
"the organization: %s is not found": "the organization: %s is not found"
|
||||||
},
|
},
|
||||||
"cas": {
|
"cas": {
|
||||||
"Service %s and %s do not match": "Service %s and %s do not match"
|
"Service %s and %s do not match": "Service %s and %s do not match"
|
||||||
},
|
},
|
||||||
"check": {
|
"check": {
|
||||||
|
"%s does not meet the CIDR format requirements: %s": "%s does not meet the CIDR format requirements: %s",
|
||||||
"Affiliation cannot be blank": "Affiliation cannot be blank",
|
"Affiliation cannot be blank": "Affiliation cannot be blank",
|
||||||
|
"CIDR for IP: %s should not be empty": "CIDR for IP: %s should not be empty",
|
||||||
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
||||||
"DisplayName cannot be blank": "DisplayName cannot be blank",
|
"DisplayName cannot be blank": "DisplayName cannot be blank",
|
||||||
"DisplayName is not valid real name": "DisplayName is not valid real name",
|
"DisplayName is not valid real name": "DisplayName is not valid real name",
|
||||||
@ -41,6 +49,7 @@
|
|||||||
"Empty username.": "Empty username.",
|
"Empty username.": "Empty username.",
|
||||||
"Face data does not exist, cannot log in": "Face data does not exist, cannot log in",
|
"Face data does not exist, cannot log in": "Face data does not exist, cannot log in",
|
||||||
"Face data mismatch": "Face data mismatch",
|
"Face data mismatch": "Face data mismatch",
|
||||||
|
"Failed to parse client IP: %s": "Failed to parse client IP: %s",
|
||||||
"FirstName cannot be blank": "FirstName cannot be blank",
|
"FirstName cannot be blank": "FirstName cannot be blank",
|
||||||
"Invitation code cannot be blank": "Invitation code cannot be blank",
|
"Invitation code cannot be blank": "Invitation code cannot be blank",
|
||||||
"Invitation code exhausted": "Invitation code exhausted",
|
"Invitation code exhausted": "Invitation code exhausted",
|
||||||
@ -50,6 +59,7 @@
|
|||||||
"LastName cannot be blank": "LastName cannot be blank",
|
"LastName cannot be blank": "LastName cannot be blank",
|
||||||
"Multiple accounts with same uid, please check your ldap server": "Multiple accounts with same uid, please check your ldap server",
|
"Multiple accounts with same uid, please check your ldap server": "Multiple accounts with same uid, please check your ldap server",
|
||||||
"Organization does not exist": "Organization does not exist",
|
"Organization does not exist": "Organization does not exist",
|
||||||
|
"Password cannot be empty": "Password cannot be empty",
|
||||||
"Phone already exists": "Phone already exists",
|
"Phone already exists": "Phone already exists",
|
||||||
"Phone cannot be empty": "Phone cannot be empty",
|
"Phone cannot be empty": "Phone cannot be empty",
|
||||||
"Phone number is invalid": "Phone number is invalid",
|
"Phone number is invalid": "Phone number is invalid",
|
||||||
@ -69,17 +79,27 @@
|
|||||||
"Username cannot start with a digit": "Username cannot start with a digit",
|
"Username cannot start with a digit": "Username cannot start with a digit",
|
||||||
"Username is too long (maximum is 255 characters).": "Username is too long (maximum is 255 characters).",
|
"Username is too long (maximum is 255 characters).": "Username is too long (maximum is 255 characters).",
|
||||||
"Username must have at least 2 characters": "Username must have at least 2 characters",
|
"Username must have at least 2 characters": "Username must have at least 2 characters",
|
||||||
|
"Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.": "Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.",
|
||||||
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "You have entered the wrong password or code too many times, please wait for %d minutes and try again",
|
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "You have entered the wrong password or code too many times, please wait for %d minutes and try again",
|
||||||
|
"Your IP address: %s has been banned according to the configuration of: ": "Your IP address: %s has been banned according to the configuration of: ",
|
||||||
|
"Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"": "Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"",
|
||||||
"Your region is not allow to signup by phone": "Your region is not allow to signup by phone",
|
"Your region is not allow to signup by phone": "Your region is not allow to signup by phone",
|
||||||
"password or code is incorrect": "password or code is incorrect",
|
"password or code is incorrect": "password or code is incorrect",
|
||||||
"password or code is incorrect, you have %d remaining chances": "password or code is incorrect, you have %d remaining chances",
|
"password or code is incorrect, you have %d remaining chances": "password or code is incorrect, you have %d remaining chances",
|
||||||
"unsupported password type: %s": "unsupported password type: %s"
|
"unsupported password type: %s": "unsupported password type: %s"
|
||||||
},
|
},
|
||||||
|
"enforcer": {
|
||||||
|
"the adapter: %s is not found": "the adapter: %s is not found"
|
||||||
|
},
|
||||||
"general": {
|
"general": {
|
||||||
|
"Failed to import groups": "Failed to import groups",
|
||||||
|
"Failed to import users": "Failed to import users",
|
||||||
"Missing parameter": "Missing parameter",
|
"Missing parameter": "Missing parameter",
|
||||||
|
"Only admin user can specify user": "Only admin user can specify user",
|
||||||
"Please login first": "Please login first",
|
"Please login first": "Please login first",
|
||||||
"The organization: %s should have one application at least": "The organization: %s should have one application at least",
|
"The organization: %s should have one application at least": "The organization: %s should have one application at least",
|
||||||
"The user: %s doesn't exist": "The user: %s doesn't exist",
|
"The user: %s doesn't exist": "The user: %s doesn't exist",
|
||||||
|
"Wrong userId": "Wrong userId",
|
||||||
"don't support captchaProvider: ": "don't support captchaProvider: ",
|
"don't support captchaProvider: ": "don't support captchaProvider: ",
|
||||||
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
|
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
|
||||||
"this operation requires administrator to perform": "this operation requires administrator to perform"
|
"this operation requires administrator to perform": "this operation requires administrator to perform"
|
||||||
@ -98,7 +118,8 @@
|
|||||||
"organization": {
|
"organization": {
|
||||||
"Only admin can modify the %s.": "Only admin can modify the %s.",
|
"Only admin can modify the %s.": "Only admin can modify the %s.",
|
||||||
"The %s is immutable.": "The %s is immutable.",
|
"The %s is immutable.": "The %s is immutable.",
|
||||||
"Unknown modify rule %s.": "Unknown modify rule %s."
|
"Unknown modify rule %s.": "Unknown modify rule %s.",
|
||||||
|
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
|
||||||
},
|
},
|
||||||
"permission": {
|
"permission": {
|
||||||
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
|
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
|
||||||
@ -126,6 +147,9 @@
|
|||||||
"The objectKey: %s is not allowed": "The objectKey: %s is not allowed",
|
"The objectKey: %s is not allowed": "The objectKey: %s is not allowed",
|
||||||
"The provider type: %s is not supported": "The provider type: %s is not supported"
|
"The provider type: %s is not supported": "The provider type: %s is not supported"
|
||||||
},
|
},
|
||||||
|
"subscription": {
|
||||||
|
"Error": "Error"
|
||||||
|
},
|
||||||
"token": {
|
"token": {
|
||||||
"Grant_type: %s is not supported in this application": "Grant_type: %s is not supported in this application",
|
"Grant_type: %s is not supported in this application": "Grant_type: %s is not supported in this application",
|
||||||
"Invalid application or wrong clientSecret": "Invalid application or wrong clientSecret",
|
"Invalid application or wrong clientSecret": "Invalid application or wrong clientSecret",
|
||||||
@ -135,10 +159,10 @@
|
|||||||
},
|
},
|
||||||
"user": {
|
"user": {
|
||||||
"Display name cannot be empty": "Display name cannot be empty",
|
"Display name cannot be empty": "Display name cannot be empty",
|
||||||
"New password cannot contain blank space.": "New password cannot contain blank space."
|
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
|
||||||
},
|
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
|
||||||
"user_upload": {
|
"New password cannot contain blank space.": "New password cannot contain blank space.",
|
||||||
"Failed to import users": "Failed to import users"
|
"the user's owner and name should not be empty": "the user's owner and name should not be empty"
|
||||||
},
|
},
|
||||||
"util": {
|
"util": {
|
||||||
"No application is found for userId: %s": "No application is found for userId: %s",
|
"No application is found for userId: %s": "No application is found for userId: %s",
|
||||||
@ -148,8 +172,8 @@
|
|||||||
"verification": {
|
"verification": {
|
||||||
"Invalid captcha provider.": "Invalid captcha provider.",
|
"Invalid captcha provider.": "Invalid captcha provider.",
|
||||||
"Phone number is invalid in your region %s": "Phone number is invalid in your region %s",
|
"Phone number is invalid in your region %s": "Phone number is invalid in your region %s",
|
||||||
|
"The verification code has already been used!": "The verification code has already been used!",
|
||||||
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
|
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
|
||||||
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
|
|
||||||
"Turing test failed.": "Turing test failed.",
|
"Turing test failed.": "Turing test failed.",
|
||||||
"Unable to get the email modify rule.": "Unable to get the email modify rule.",
|
"Unable to get the email modify rule.": "Unable to get the email modify rule.",
|
||||||
"Unable to get the phone modify rule.": "Unable to get the phone modify rule.",
|
"Unable to get the phone modify rule.": "Unable to get the phone modify rule.",
|
||||||
@ -161,7 +185,6 @@
|
|||||||
"the user does not exist, please sign up first": "the user does not exist, please sign up first"
|
"the user does not exist, please sign up first": "the user does not exist, please sign up first"
|
||||||
},
|
},
|
||||||
"webauthn": {
|
"webauthn": {
|
||||||
"Found no credentials for this user": "Found no credentials for this user",
|
|
||||||
"Please call WebAuthnSigninBegin first": "Please call WebAuthnSigninBegin first"
|
"Please call WebAuthnSigninBegin first": "Please call WebAuthnSigninBegin first"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
},
|
},
|
||||||
"auth": {
|
"auth": {
|
||||||
"Challenge method should be S256": "El método de desafío debe ser S256",
|
"Challenge method should be S256": "El método de desafío debe ser S256",
|
||||||
|
"DeviceCode Invalid": "DeviceCode Invalid",
|
||||||
"Failed to create user, user information is invalid: %s": "No se pudo crear el usuario, la información del usuario es inválida: %s",
|
"Failed to create user, user information is invalid: %s": "No se pudo crear el usuario, la información del usuario es inválida: %s",
|
||||||
"Failed to login in: %s": "No se ha podido iniciar sesión en: %s",
|
"Failed to login in: %s": "No se ha podido iniciar sesión en: %s",
|
||||||
"Invalid token": "Token inválido",
|
"Invalid token": "Token inválido",
|
||||||
@ -21,17 +22,24 @@
|
|||||||
"The login method: login with face is not enabled for the application": "The login method: login with face is not enabled for the application",
|
"The login method: login with face is not enabled for the application": "The login method: login with face is not enabled for the application",
|
||||||
"The login method: login with password is not enabled for the application": "El método de inicio de sesión: inicio de sesión con contraseña no está habilitado para la aplicación",
|
"The login method: login with password is not enabled for the application": "El método de inicio de sesión: inicio de sesión con contraseña no está habilitado para la aplicación",
|
||||||
"The organization: %s does not exist": "The organization: %s does not exist",
|
"The organization: %s does not exist": "The organization: %s does not exist",
|
||||||
|
"The provider: %s does not exist": "The provider: %s does not exist",
|
||||||
"The provider: %s is not enabled for the application": "El proveedor: %s no está habilitado para la aplicación",
|
"The provider: %s is not enabled for the application": "El proveedor: %s no está habilitado para la aplicación",
|
||||||
"Unauthorized operation": "Operación no autorizada",
|
"Unauthorized operation": "Operación no autorizada",
|
||||||
"Unknown authentication type (not password or provider), form = %s": "Tipo de autenticación desconocido (no es contraseña o proveedor), formulario = %s",
|
"Unknown authentication type (not password or provider), form = %s": "Tipo de autenticación desconocido (no es contraseña o proveedor), formulario = %s",
|
||||||
"User's tag: %s is not listed in the application's tags": "User's tag: %s is not listed in the application's tags",
|
"User's tag: %s is not listed in the application's tags": "User's tag: %s is not listed in the application's tags",
|
||||||
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing"
|
"UserCode Expired": "UserCode Expired",
|
||||||
|
"UserCode Invalid": "UserCode Invalid",
|
||||||
|
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing",
|
||||||
|
"the application for user %s is not found": "the application for user %s is not found",
|
||||||
|
"the organization: %s is not found": "the organization: %s is not found"
|
||||||
},
|
},
|
||||||
"cas": {
|
"cas": {
|
||||||
"Service %s and %s do not match": "Los servicios %s y %s no coinciden"
|
"Service %s and %s do not match": "Los servicios %s y %s no coinciden"
|
||||||
},
|
},
|
||||||
"check": {
|
"check": {
|
||||||
|
"%s does not meet the CIDR format requirements: %s": "%s does not meet the CIDR format requirements: %s",
|
||||||
"Affiliation cannot be blank": "Afiliación no puede estar en blanco",
|
"Affiliation cannot be blank": "Afiliación no puede estar en blanco",
|
||||||
|
"CIDR for IP: %s should not be empty": "CIDR for IP: %s should not be empty",
|
||||||
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
||||||
"DisplayName cannot be blank": "El nombre de visualización no puede estar en blanco",
|
"DisplayName cannot be blank": "El nombre de visualización no puede estar en blanco",
|
||||||
"DisplayName is not valid real name": "El nombre de pantalla no es un nombre real válido",
|
"DisplayName is not valid real name": "El nombre de pantalla no es un nombre real válido",
|
||||||
@ -41,6 +49,7 @@
|
|||||||
"Empty username.": "Nombre de usuario vacío.",
|
"Empty username.": "Nombre de usuario vacío.",
|
||||||
"Face data does not exist, cannot log in": "Face data does not exist, cannot log in",
|
"Face data does not exist, cannot log in": "Face data does not exist, cannot log in",
|
||||||
"Face data mismatch": "Face data mismatch",
|
"Face data mismatch": "Face data mismatch",
|
||||||
|
"Failed to parse client IP: %s": "Failed to parse client IP: %s",
|
||||||
"FirstName cannot be blank": "El nombre no puede estar en blanco",
|
"FirstName cannot be blank": "El nombre no puede estar en blanco",
|
||||||
"Invitation code cannot be blank": "Invitation code cannot be blank",
|
"Invitation code cannot be blank": "Invitation code cannot be blank",
|
||||||
"Invitation code exhausted": "Invitation code exhausted",
|
"Invitation code exhausted": "Invitation code exhausted",
|
||||||
@ -50,6 +59,7 @@
|
|||||||
"LastName cannot be blank": "El apellido no puede estar en blanco",
|
"LastName cannot be blank": "El apellido no puede estar en blanco",
|
||||||
"Multiple accounts with same uid, please check your ldap server": "Cuentas múltiples con el mismo uid, por favor revise su servidor ldap",
|
"Multiple accounts with same uid, please check your ldap server": "Cuentas múltiples con el mismo uid, por favor revise su servidor ldap",
|
||||||
"Organization does not exist": "La organización no existe",
|
"Organization does not exist": "La organización no existe",
|
||||||
|
"Password cannot be empty": "Password cannot be empty",
|
||||||
"Phone already exists": "El teléfono ya existe",
|
"Phone already exists": "El teléfono ya existe",
|
||||||
"Phone cannot be empty": "Teléfono no puede estar vacío",
|
"Phone cannot be empty": "Teléfono no puede estar vacío",
|
||||||
"Phone number is invalid": "El número de teléfono no es válido",
|
"Phone number is invalid": "El número de teléfono no es válido",
|
||||||
@ -69,17 +79,27 @@
|
|||||||
"Username cannot start with a digit": "El nombre de usuario no puede empezar con un dígito",
|
"Username cannot start with a digit": "El nombre de usuario no puede empezar con un dígito",
|
||||||
"Username is too long (maximum is 255 characters).": "El nombre de usuario es demasiado largo (el máximo es de 255 caracteres).",
|
"Username is too long (maximum is 255 characters).": "El nombre de usuario es demasiado largo (el máximo es de 255 caracteres).",
|
||||||
"Username must have at least 2 characters": "Nombre de usuario debe tener al menos 2 caracteres",
|
"Username must have at least 2 characters": "Nombre de usuario debe tener al menos 2 caracteres",
|
||||||
|
"Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.": "Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.",
|
||||||
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "Has ingresado la contraseña o código incorrecto demasiadas veces, por favor espera %d minutos e intenta de nuevo",
|
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "Has ingresado la contraseña o código incorrecto demasiadas veces, por favor espera %d minutos e intenta de nuevo",
|
||||||
|
"Your IP address: %s has been banned according to the configuration of: ": "Your IP address: %s has been banned according to the configuration of: ",
|
||||||
|
"Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"": "Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"",
|
||||||
"Your region is not allow to signup by phone": "Tu región no está permitida para registrarse por teléfono",
|
"Your region is not allow to signup by phone": "Tu región no está permitida para registrarse por teléfono",
|
||||||
"password or code is incorrect": "password or code is incorrect",
|
"password or code is incorrect": "password or code is incorrect",
|
||||||
"password or code is incorrect, you have %d remaining chances": "Contraseña o código incorrecto, tienes %d intentos restantes",
|
"password or code is incorrect, you have %d remaining chances": "Contraseña o código incorrecto, tienes %d intentos restantes",
|
||||||
"unsupported password type: %s": "Tipo de contraseña no compatible: %s"
|
"unsupported password type: %s": "Tipo de contraseña no compatible: %s"
|
||||||
},
|
},
|
||||||
|
"enforcer": {
|
||||||
|
"the adapter: %s is not found": "the adapter: %s is not found"
|
||||||
|
},
|
||||||
"general": {
|
"general": {
|
||||||
|
"Failed to import groups": "Failed to import groups",
|
||||||
|
"Failed to import users": "Error al importar usuarios",
|
||||||
"Missing parameter": "Parámetro faltante",
|
"Missing parameter": "Parámetro faltante",
|
||||||
|
"Only admin user can specify user": "Only admin user can specify user",
|
||||||
"Please login first": "Por favor, inicia sesión primero",
|
"Please login first": "Por favor, inicia sesión primero",
|
||||||
"The organization: %s should have one application at least": "The organization: %s should have one application at least",
|
"The organization: %s should have one application at least": "The organization: %s should have one application at least",
|
||||||
"The user: %s doesn't exist": "El usuario: %s no existe",
|
"The user: %s doesn't exist": "El usuario: %s no existe",
|
||||||
|
"Wrong userId": "Wrong userId",
|
||||||
"don't support captchaProvider: ": "No apoyo a captchaProvider",
|
"don't support captchaProvider: ": "No apoyo a captchaProvider",
|
||||||
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
|
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
|
||||||
"this operation requires administrator to perform": "this operation requires administrator to perform"
|
"this operation requires administrator to perform": "this operation requires administrator to perform"
|
||||||
@ -98,7 +118,8 @@
|
|||||||
"organization": {
|
"organization": {
|
||||||
"Only admin can modify the %s.": "Solo el administrador puede modificar los %s.",
|
"Only admin can modify the %s.": "Solo el administrador puede modificar los %s.",
|
||||||
"The %s is immutable.": "El %s es inmutable.",
|
"The %s is immutable.": "El %s es inmutable.",
|
||||||
"Unknown modify rule %s.": "Regla de modificación desconocida %s."
|
"Unknown modify rule %s.": "Regla de modificación desconocida %s.",
|
||||||
|
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
|
||||||
},
|
},
|
||||||
"permission": {
|
"permission": {
|
||||||
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
|
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
|
||||||
@ -126,6 +147,9 @@
|
|||||||
"The objectKey: %s is not allowed": "El objectKey: %s no está permitido",
|
"The objectKey: %s is not allowed": "El objectKey: %s no está permitido",
|
||||||
"The provider type: %s is not supported": "El tipo de proveedor: %s no es compatible"
|
"The provider type: %s is not supported": "El tipo de proveedor: %s no es compatible"
|
||||||
},
|
},
|
||||||
|
"subscription": {
|
||||||
|
"Error": "Error"
|
||||||
|
},
|
||||||
"token": {
|
"token": {
|
||||||
"Grant_type: %s is not supported in this application": "El tipo de subvención: %s no es compatible con esta aplicación",
|
"Grant_type: %s is not supported in this application": "El tipo de subvención: %s no es compatible con esta aplicación",
|
||||||
"Invalid application or wrong clientSecret": "Solicitud inválida o clientSecret incorrecto",
|
"Invalid application or wrong clientSecret": "Solicitud inválida o clientSecret incorrecto",
|
||||||
@ -135,10 +159,10 @@
|
|||||||
},
|
},
|
||||||
"user": {
|
"user": {
|
||||||
"Display name cannot be empty": "El nombre de pantalla no puede estar vacío",
|
"Display name cannot be empty": "El nombre de pantalla no puede estar vacío",
|
||||||
"New password cannot contain blank space.": "La nueva contraseña no puede contener espacios en blanco."
|
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
|
||||||
},
|
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
|
||||||
"user_upload": {
|
"New password cannot contain blank space.": "La nueva contraseña no puede contener espacios en blanco.",
|
||||||
"Failed to import users": "Error al importar usuarios"
|
"the user's owner and name should not be empty": "the user's owner and name should not be empty"
|
||||||
},
|
},
|
||||||
"util": {
|
"util": {
|
||||||
"No application is found for userId: %s": "No se encuentra ninguna aplicación para el Id de usuario: %s",
|
"No application is found for userId: %s": "No se encuentra ninguna aplicación para el Id de usuario: %s",
|
||||||
@ -148,8 +172,8 @@
|
|||||||
"verification": {
|
"verification": {
|
||||||
"Invalid captcha provider.": "Proveedor de captcha no válido.",
|
"Invalid captcha provider.": "Proveedor de captcha no válido.",
|
||||||
"Phone number is invalid in your region %s": "El número de teléfono es inválido en tu región %s",
|
"Phone number is invalid in your region %s": "El número de teléfono es inválido en tu región %s",
|
||||||
|
"The verification code has already been used!": "The verification code has already been used!",
|
||||||
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
|
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
|
||||||
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
|
|
||||||
"Turing test failed.": "El test de Turing falló.",
|
"Turing test failed.": "El test de Turing falló.",
|
||||||
"Unable to get the email modify rule.": "No se puede obtener la regla de modificación de correo electrónico.",
|
"Unable to get the email modify rule.": "No se puede obtener la regla de modificación de correo electrónico.",
|
||||||
"Unable to get the phone modify rule.": "No se pudo obtener la regla de modificación del teléfono.",
|
"Unable to get the phone modify rule.": "No se pudo obtener la regla de modificación del teléfono.",
|
||||||
@ -161,7 +185,6 @@
|
|||||||
"the user does not exist, please sign up first": "El usuario no existe, por favor regístrese primero"
|
"the user does not exist, please sign up first": "El usuario no existe, por favor regístrese primero"
|
||||||
},
|
},
|
||||||
"webauthn": {
|
"webauthn": {
|
||||||
"Found no credentials for this user": "No se encontraron credenciales para este usuario",
|
|
||||||
"Please call WebAuthnSigninBegin first": "Por favor, llama primero a WebAuthnSigninBegin"
|
"Please call WebAuthnSigninBegin first": "Por favor, llama primero a WebAuthnSigninBegin"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
},
|
},
|
||||||
"auth": {
|
"auth": {
|
||||||
"Challenge method should be S256": "روش چالش باید S256 باشد",
|
"Challenge method should be S256": "روش چالش باید S256 باشد",
|
||||||
|
"DeviceCode Invalid": "DeviceCode Invalid",
|
||||||
"Failed to create user, user information is invalid: %s": "عدم موفقیت در ایجاد کاربر، اطلاعات کاربر نامعتبر است: %s",
|
"Failed to create user, user information is invalid: %s": "عدم موفقیت در ایجاد کاربر، اطلاعات کاربر نامعتبر است: %s",
|
||||||
"Failed to login in: %s": "عدم موفقیت در ورود: %s",
|
"Failed to login in: %s": "عدم موفقیت در ورود: %s",
|
||||||
"Invalid token": "توکن نامعتبر",
|
"Invalid token": "توکن نامعتبر",
|
||||||
@ -21,17 +22,24 @@
|
|||||||
"The login method: login with face is not enabled for the application": "روش ورود: ورود با چهره برای برنامه فعال نیست",
|
"The login method: login with face is not enabled for the application": "روش ورود: ورود با چهره برای برنامه فعال نیست",
|
||||||
"The login method: login with password is not enabled for the application": "روش ورود: ورود با رمز عبور برای برنامه فعال نیست",
|
"The login method: login with password is not enabled for the application": "روش ورود: ورود با رمز عبور برای برنامه فعال نیست",
|
||||||
"The organization: %s does not exist": "سازمان: %s وجود ندارد",
|
"The organization: %s does not exist": "سازمان: %s وجود ندارد",
|
||||||
|
"The provider: %s does not exist": "The provider: %s does not exist",
|
||||||
"The provider: %s is not enabled for the application": "ارائهدهنده: %s برای برنامه فعال نیست",
|
"The provider: %s is not enabled for the application": "ارائهدهنده: %s برای برنامه فعال نیست",
|
||||||
"Unauthorized operation": "عملیات غیرمجاز",
|
"Unauthorized operation": "عملیات غیرمجاز",
|
||||||
"Unknown authentication type (not password or provider), form = %s": "نوع احراز هویت ناشناخته (نه رمز عبور و نه ارائهدهنده)، فرم = %s",
|
"Unknown authentication type (not password or provider), form = %s": "نوع احراز هویت ناشناخته (نه رمز عبور و نه ارائهدهنده)، فرم = %s",
|
||||||
"User's tag: %s is not listed in the application's tags": "برچسب کاربر: %s در برچسبهای برنامه فهرست نشده است",
|
"User's tag: %s is not listed in the application's tags": "برچسب کاربر: %s در برچسبهای برنامه فهرست نشده است",
|
||||||
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "کاربر پرداختی %s اشتراک فعال یا در انتظار ندارد و برنامه: %s قیمتگذاری پیشفرض ندارد"
|
"UserCode Expired": "UserCode Expired",
|
||||||
|
"UserCode Invalid": "UserCode Invalid",
|
||||||
|
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "کاربر پرداختی %s اشتراک فعال یا در انتظار ندارد و برنامه: %s قیمتگذاری پیشفرض ندارد",
|
||||||
|
"the application for user %s is not found": "the application for user %s is not found",
|
||||||
|
"the organization: %s is not found": "the organization: %s is not found"
|
||||||
},
|
},
|
||||||
"cas": {
|
"cas": {
|
||||||
"Service %s and %s do not match": "سرویس %s و %s مطابقت ندارند"
|
"Service %s and %s do not match": "سرویس %s و %s مطابقت ندارند"
|
||||||
},
|
},
|
||||||
"check": {
|
"check": {
|
||||||
|
"%s does not meet the CIDR format requirements: %s": "%s does not meet the CIDR format requirements: %s",
|
||||||
"Affiliation cannot be blank": "وابستگی نمیتواند خالی باشد",
|
"Affiliation cannot be blank": "وابستگی نمیتواند خالی باشد",
|
||||||
|
"CIDR for IP: %s should not be empty": "CIDR for IP: %s should not be empty",
|
||||||
"Default code does not match the code's matching rules": "کد پیشفرض با قوانین تطبیق کد مطابقت ندارد",
|
"Default code does not match the code's matching rules": "کد پیشفرض با قوانین تطبیق کد مطابقت ندارد",
|
||||||
"DisplayName cannot be blank": "نام نمایشی نمیتواند خالی باشد",
|
"DisplayName cannot be blank": "نام نمایشی نمیتواند خالی باشد",
|
||||||
"DisplayName is not valid real name": "نام نمایشی یک نام واقعی معتبر نیست",
|
"DisplayName is not valid real name": "نام نمایشی یک نام واقعی معتبر نیست",
|
||||||
@ -41,6 +49,7 @@
|
|||||||
"Empty username.": "نام کاربری خالی است.",
|
"Empty username.": "نام کاربری خالی است.",
|
||||||
"Face data does not exist, cannot log in": "دادههای چهره وجود ندارد، نمیتوان وارد شد",
|
"Face data does not exist, cannot log in": "دادههای چهره وجود ندارد، نمیتوان وارد شد",
|
||||||
"Face data mismatch": "عدم تطابق دادههای چهره",
|
"Face data mismatch": "عدم تطابق دادههای چهره",
|
||||||
|
"Failed to parse client IP: %s": "Failed to parse client IP: %s",
|
||||||
"FirstName cannot be blank": "نام نمیتواند خالی باشد",
|
"FirstName cannot be blank": "نام نمیتواند خالی باشد",
|
||||||
"Invitation code cannot be blank": "کد دعوت نمیتواند خالی باشد",
|
"Invitation code cannot be blank": "کد دعوت نمیتواند خالی باشد",
|
||||||
"Invitation code exhausted": "کد دعوت استفاده شده است",
|
"Invitation code exhausted": "کد دعوت استفاده شده است",
|
||||||
@ -50,6 +59,7 @@
|
|||||||
"LastName cannot be blank": "نام خانوادگی نمیتواند خالی باشد",
|
"LastName cannot be blank": "نام خانوادگی نمیتواند خالی باشد",
|
||||||
"Multiple accounts with same uid, please check your ldap server": "چندین حساب با uid یکسان، لطفاً سرور LDAP خود را بررسی کنید",
|
"Multiple accounts with same uid, please check your ldap server": "چندین حساب با uid یکسان، لطفاً سرور LDAP خود را بررسی کنید",
|
||||||
"Organization does not exist": "سازمان وجود ندارد",
|
"Organization does not exist": "سازمان وجود ندارد",
|
||||||
|
"Password cannot be empty": "Password cannot be empty",
|
||||||
"Phone already exists": "تلفن قبلاً وجود دارد",
|
"Phone already exists": "تلفن قبلاً وجود دارد",
|
||||||
"Phone cannot be empty": "تلفن نمیتواند خالی باشد",
|
"Phone cannot be empty": "تلفن نمیتواند خالی باشد",
|
||||||
"Phone number is invalid": "شماره تلفن نامعتبر است",
|
"Phone number is invalid": "شماره تلفن نامعتبر است",
|
||||||
@ -61,25 +71,35 @@
|
|||||||
"The user is forbidden to sign in, please contact the administrator": "ورود کاربر ممنوع است، لطفاً با مدیر تماس بگیرید",
|
"The user is forbidden to sign in, please contact the administrator": "ورود کاربر ممنوع است، لطفاً با مدیر تماس بگیرید",
|
||||||
"The user: %s doesn't exist in LDAP server": "کاربر: %s در سرور LDAP وجود ندارد",
|
"The user: %s doesn't exist in LDAP server": "کاربر: %s در سرور LDAP وجود ندارد",
|
||||||
"The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline.": "نام کاربری فقط میتواند حاوی کاراکترهای الفبایی عددی، زیرخط یا خط تیره باشد، نمیتواند خط تیره یا زیرخط متوالی داشته باشد، و نمیتواند با خط تیره یا زیرخط شروع یا پایان یابد.",
|
"The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline.": "نام کاربری فقط میتواند حاوی کاراکترهای الفبایی عددی، زیرخط یا خط تیره باشد، نمیتواند خط تیره یا زیرخط متوالی داشته باشد، و نمیتواند با خط تیره یا زیرخط شروع یا پایان یابد.",
|
||||||
"The value \"%s\" for account field \"%s\" doesn't match the account item regex": "مقدار \"%s\" برای فیلد حساب \"%s\" با عبارت منظم مورد حساب مطابقت ندارد",
|
"The value \\\"%s\\\" for account field \\\"%s\\\" doesn't match the account item regex": "The value \\\"%s\\\" for account field \\\"%s\\\" doesn't match the account item regex",
|
||||||
"The value \"%s\" for signup field \"%s\" doesn't match the signup item regex of the application \"%s\"": "مقدار \"%s\" برای فیلد ثبتنام \"%s\" با عبارت منظم مورد ثبتنام برنامه \"%s\" مطابقت ندارد",
|
"The value \\\"%s\\\" for signup field \\\"%s\\\" doesn't match the signup item regex of the application \\\"%s\\\"": "The value \\\"%s\\\" for signup field \\\"%s\\\" doesn't match the signup item regex of the application \\\"%s\\\"",
|
||||||
"Username already exists": "نام کاربری قبلاً وجود دارد",
|
"Username already exists": "نام کاربری قبلاً وجود دارد",
|
||||||
"Username cannot be an email address": "نام کاربری نمیتواند یک آدرس ایمیل باشد",
|
"Username cannot be an email address": "نام کاربری نمیتواند یک آدرس ایمیل باشد",
|
||||||
"Username cannot contain white spaces": "نام کاربری نمیتواند حاوی فاصله باشد",
|
"Username cannot contain white spaces": "نام کاربری نمیتواند حاوی فاصله باشد",
|
||||||
"Username cannot start with a digit": "نام کاربری نمیتواند با یک رقم شروع شود",
|
"Username cannot start with a digit": "نام کاربری نمیتواند با یک رقم شروع شود",
|
||||||
"Username is too long (maximum is 255 characters).": "نام کاربری بیش از حد طولانی است (حداکثر ۳۹ کاراکتر).",
|
"Username is too long (maximum is 255 characters).": "نام کاربری بیش از حد طولانی است (حداکثر ۳۹ کاراکتر).",
|
||||||
"Username must have at least 2 characters": "نام کاربری باید حداقل ۲ کاراکتر داشته باشد",
|
"Username must have at least 2 characters": "نام کاربری باید حداقل ۲ کاراکتر داشته باشد",
|
||||||
|
"Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.": "Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.",
|
||||||
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "شما رمز عبور یا کد اشتباه را بیش از حد وارد کردهاید، لطفاً %d دقیقه صبر کنید و دوباره تلاش کنید",
|
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "شما رمز عبور یا کد اشتباه را بیش از حد وارد کردهاید، لطفاً %d دقیقه صبر کنید و دوباره تلاش کنید",
|
||||||
|
"Your IP address: %s has been banned according to the configuration of: ": "Your IP address: %s has been banned according to the configuration of: ",
|
||||||
|
"Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"": "Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"",
|
||||||
"Your region is not allow to signup by phone": "منطقه شما اجازه ثبتنام با تلفن را ندارد",
|
"Your region is not allow to signup by phone": "منطقه شما اجازه ثبتنام با تلفن را ندارد",
|
||||||
"password or code is incorrect": "رمز عبور یا کد نادرست است",
|
"password or code is incorrect": "رمز عبور یا کد نادرست است",
|
||||||
"password or code is incorrect, you have %d remaining chances": "رمز عبور یا کد نادرست است، شما %d فرصت باقیمانده دارید",
|
"password or code is incorrect, you have %d remaining chances": "رمز عبور یا کد نادرست است، شما %d فرصت باقیمانده دارید",
|
||||||
"unsupported password type: %s": "نوع رمز عبور پشتیبانی نشده: %s"
|
"unsupported password type: %s": "نوع رمز عبور پشتیبانی نشده: %s"
|
||||||
},
|
},
|
||||||
|
"enforcer": {
|
||||||
|
"the adapter: %s is not found": "the adapter: %s is not found"
|
||||||
|
},
|
||||||
"general": {
|
"general": {
|
||||||
|
"Failed to import groups": "Failed to import groups",
|
||||||
|
"Failed to import users": "عدم موفقیت در وارد کردن کاربران",
|
||||||
"Missing parameter": "پارامتر گمشده",
|
"Missing parameter": "پارامتر گمشده",
|
||||||
|
"Only admin user can specify user": "Only admin user can specify user",
|
||||||
"Please login first": "لطفاً ابتدا وارد شوید",
|
"Please login first": "لطفاً ابتدا وارد شوید",
|
||||||
"The organization: %s should have one application at least": "سازمان: %s باید حداقل یک برنامه داشته باشد",
|
"The organization: %s should have one application at least": "سازمان: %s باید حداقل یک برنامه داشته باشد",
|
||||||
"The user: %s doesn't exist": "کاربر: %s وجود ندارد",
|
"The user: %s doesn't exist": "کاربر: %s وجود ندارد",
|
||||||
|
"Wrong userId": "Wrong userId",
|
||||||
"don't support captchaProvider: ": "از captchaProvider پشتیبانی نمیشود: ",
|
"don't support captchaProvider: ": "از captchaProvider پشتیبانی نمیشود: ",
|
||||||
"this operation is not allowed in demo mode": "این عملیات در حالت دمو مجاز نیست",
|
"this operation is not allowed in demo mode": "این عملیات در حالت دمو مجاز نیست",
|
||||||
"this operation requires administrator to perform": "این عملیات نیاز به مدیر برای انجام دارد"
|
"this operation requires administrator to perform": "این عملیات نیاز به مدیر برای انجام دارد"
|
||||||
@ -98,10 +118,11 @@
|
|||||||
"organization": {
|
"organization": {
|
||||||
"Only admin can modify the %s.": "فقط مدیر میتواند %s را تغییر دهد.",
|
"Only admin can modify the %s.": "فقط مدیر میتواند %s را تغییر دهد.",
|
||||||
"The %s is immutable.": "%s غیرقابل تغییر است.",
|
"The %s is immutable.": "%s غیرقابل تغییر است.",
|
||||||
"Unknown modify rule %s.": "قانون تغییر ناشناخته %s."
|
"Unknown modify rule %s.": "قانون تغییر ناشناخته %s.",
|
||||||
|
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
|
||||||
},
|
},
|
||||||
"permission": {
|
"permission": {
|
||||||
"The permission: \"%s\" doesn't exist": "مجوز: \"%s\" وجود ندارد"
|
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
|
||||||
},
|
},
|
||||||
"provider": {
|
"provider": {
|
||||||
"Invalid application id": "شناسه برنامه نامعتبر",
|
"Invalid application id": "شناسه برنامه نامعتبر",
|
||||||
@ -126,6 +147,9 @@
|
|||||||
"The objectKey: %s is not allowed": "objectKey: %s مجاز نیست",
|
"The objectKey: %s is not allowed": "objectKey: %s مجاز نیست",
|
||||||
"The provider type: %s is not supported": "نوع ارائهدهنده: %s پشتیبانی نمیشود"
|
"The provider type: %s is not supported": "نوع ارائهدهنده: %s پشتیبانی نمیشود"
|
||||||
},
|
},
|
||||||
|
"subscription": {
|
||||||
|
"Error": "Error"
|
||||||
|
},
|
||||||
"token": {
|
"token": {
|
||||||
"Grant_type: %s is not supported in this application": "grant_type: %s در این برنامه پشتیبانی نمیشود",
|
"Grant_type: %s is not supported in this application": "grant_type: %s در این برنامه پشتیبانی نمیشود",
|
||||||
"Invalid application or wrong clientSecret": "برنامه نامعتبر یا clientSecret نادرست",
|
"Invalid application or wrong clientSecret": "برنامه نامعتبر یا clientSecret نادرست",
|
||||||
@ -135,10 +159,10 @@
|
|||||||
},
|
},
|
||||||
"user": {
|
"user": {
|
||||||
"Display name cannot be empty": "نام نمایشی نمیتواند خالی باشد",
|
"Display name cannot be empty": "نام نمایشی نمیتواند خالی باشد",
|
||||||
"New password cannot contain blank space.": "رمز عبور جدید نمیتواند حاوی فاصله خالی باشد."
|
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
|
||||||
},
|
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
|
||||||
"user_upload": {
|
"New password cannot contain blank space.": "رمز عبور جدید نمیتواند حاوی فاصله خالی باشد.",
|
||||||
"Failed to import users": "عدم موفقیت در وارد کردن کاربران"
|
"the user's owner and name should not be empty": "the user's owner and name should not be empty"
|
||||||
},
|
},
|
||||||
"util": {
|
"util": {
|
||||||
"No application is found for userId: %s": "هیچ برنامهای برای userId: %s یافت نشد",
|
"No application is found for userId: %s": "هیچ برنامهای برای userId: %s یافت نشد",
|
||||||
@ -148,20 +172,19 @@
|
|||||||
"verification": {
|
"verification": {
|
||||||
"Invalid captcha provider.": "ارائهدهنده کپچا نامعتبر.",
|
"Invalid captcha provider.": "ارائهدهنده کپچا نامعتبر.",
|
||||||
"Phone number is invalid in your region %s": "شماره تلفن در منطقه شما نامعتبر است %s",
|
"Phone number is invalid in your region %s": "شماره تلفن در منطقه شما نامعتبر است %s",
|
||||||
|
"The verification code has already been used!": "The verification code has already been used!",
|
||||||
"The verification code has not been sent yet!": "کد تأیید هنوز ارسال نشده است!",
|
"The verification code has not been sent yet!": "کد تأیید هنوز ارسال نشده است!",
|
||||||
"The verification code has not been sent yet, or has already been used!": "کد تأیید هنوز ارسال نشده است، یا قبلاً استفاده شده است!",
|
|
||||||
"Turing test failed.": "تست تورینگ ناموفق بود.",
|
"Turing test failed.": "تست تورینگ ناموفق بود.",
|
||||||
"Unable to get the email modify rule.": "عدم توانایی در دریافت قانون تغییر ایمیل.",
|
"Unable to get the email modify rule.": "عدم توانایی در دریافت قانون تغییر ایمیل.",
|
||||||
"Unable to get the phone modify rule.": "عدم توانایی در دریافت قانون تغییر تلفن.",
|
"Unable to get the phone modify rule.": "عدم توانایی در دریافت قانون تغییر تلفن.",
|
||||||
"Unknown type": "نوع ناشناخته",
|
"Unknown type": "نوع ناشناخته",
|
||||||
"Wrong verification code!": "کد تأیید اشتباه!",
|
"Wrong verification code!": "کد تأیید اشتباه!",
|
||||||
"You should verify your code in %d min!": "شما باید کد خود را در %d دقیقه تأیید کنید!",
|
"You should verify your code in %d min!": "شما باید کد خود را در %d دقیقه تأیید کنید!",
|
||||||
"please add a SMS provider to the \"Providers\" list for the application: %s": "لطفاً یک ارائهدهنده پیامک به لیست \"ارائهدهندگان\" برای برنامه: %s اضافه کنید",
|
"please add a SMS provider to the \\\"Providers\\\" list for the application: %s": "please add a SMS provider to the \\\"Providers\\\" list for the application: %s",
|
||||||
"please add an Email provider to the \"Providers\" list for the application: %s": "لطفاً یک ارائهدهنده ایمیل به لیست \"ارائهدهندگان\" برای برنامه: %s اضافه کنید",
|
"please add an Email provider to the \\\"Providers\\\" list for the application: %s": "please add an Email provider to the \\\"Providers\\\" list for the application: %s",
|
||||||
"the user does not exist, please sign up first": "کاربر وجود ندارد، لطفاً ابتدا ثبتنام کنید"
|
"the user does not exist, please sign up first": "کاربر وجود ندارد، لطفاً ابتدا ثبتنام کنید"
|
||||||
},
|
},
|
||||||
"webauthn": {
|
"webauthn": {
|
||||||
"Found no credentials for this user": "هیچ اعتباری برای این کاربر یافت نشد",
|
|
||||||
"Please call WebAuthnSigninBegin first": "لطفاً ابتدا WebAuthnSigninBegin را فراخوانی کنید"
|
"Please call WebAuthnSigninBegin first": "لطفاً ابتدا WebAuthnSigninBegin را فراخوانی کنید"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
},
|
},
|
||||||
"auth": {
|
"auth": {
|
||||||
"Challenge method should be S256": "Challenge method should be S256",
|
"Challenge method should be S256": "Challenge method should be S256",
|
||||||
|
"DeviceCode Invalid": "DeviceCode Invalid",
|
||||||
"Failed to create user, user information is invalid: %s": "Failed to create user, user information is invalid: %s",
|
"Failed to create user, user information is invalid: %s": "Failed to create user, user information is invalid: %s",
|
||||||
"Failed to login in: %s": "Failed to login in: %s",
|
"Failed to login in: %s": "Failed to login in: %s",
|
||||||
"Invalid token": "Invalid token",
|
"Invalid token": "Invalid token",
|
||||||
@ -21,17 +22,24 @@
|
|||||||
"The login method: login with face is not enabled for the application": "The login method: login with face is not enabled for the application",
|
"The login method: login with face is not enabled for the application": "The login method: login with face is not enabled for the application",
|
||||||
"The login method: login with password is not enabled for the application": "The login method: login with password is not enabled for the application",
|
"The login method: login with password is not enabled for the application": "The login method: login with password is not enabled for the application",
|
||||||
"The organization: %s does not exist": "The organization: %s does not exist",
|
"The organization: %s does not exist": "The organization: %s does not exist",
|
||||||
|
"The provider: %s does not exist": "The provider: %s does not exist",
|
||||||
"The provider: %s is not enabled for the application": "The provider: %s is not enabled for the application",
|
"The provider: %s is not enabled for the application": "The provider: %s is not enabled for the application",
|
||||||
"Unauthorized operation": "Unauthorized operation",
|
"Unauthorized operation": "Unauthorized operation",
|
||||||
"Unknown authentication type (not password or provider), form = %s": "Unknown authentication type (not password or provider), form = %s",
|
"Unknown authentication type (not password or provider), form = %s": "Unknown authentication type (not password or provider), form = %s",
|
||||||
"User's tag: %s is not listed in the application's tags": "User's tag: %s is not listed in the application's tags",
|
"User's tag: %s is not listed in the application's tags": "User's tag: %s is not listed in the application's tags",
|
||||||
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing"
|
"UserCode Expired": "UserCode Expired",
|
||||||
|
"UserCode Invalid": "UserCode Invalid",
|
||||||
|
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing",
|
||||||
|
"the application for user %s is not found": "the application for user %s is not found",
|
||||||
|
"the organization: %s is not found": "the organization: %s is not found"
|
||||||
},
|
},
|
||||||
"cas": {
|
"cas": {
|
||||||
"Service %s and %s do not match": "Service %s and %s do not match"
|
"Service %s and %s do not match": "Service %s and %s do not match"
|
||||||
},
|
},
|
||||||
"check": {
|
"check": {
|
||||||
|
"%s does not meet the CIDR format requirements: %s": "%s does not meet the CIDR format requirements: %s",
|
||||||
"Affiliation cannot be blank": "Affiliation cannot be blank",
|
"Affiliation cannot be blank": "Affiliation cannot be blank",
|
||||||
|
"CIDR for IP: %s should not be empty": "CIDR for IP: %s should not be empty",
|
||||||
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
||||||
"DisplayName cannot be blank": "DisplayName cannot be blank",
|
"DisplayName cannot be blank": "DisplayName cannot be blank",
|
||||||
"DisplayName is not valid real name": "DisplayName is not valid real name",
|
"DisplayName is not valid real name": "DisplayName is not valid real name",
|
||||||
@ -41,6 +49,7 @@
|
|||||||
"Empty username.": "Empty username.",
|
"Empty username.": "Empty username.",
|
||||||
"Face data does not exist, cannot log in": "Face data does not exist, cannot log in",
|
"Face data does not exist, cannot log in": "Face data does not exist, cannot log in",
|
||||||
"Face data mismatch": "Face data mismatch",
|
"Face data mismatch": "Face data mismatch",
|
||||||
|
"Failed to parse client IP: %s": "Failed to parse client IP: %s",
|
||||||
"FirstName cannot be blank": "FirstName cannot be blank",
|
"FirstName cannot be blank": "FirstName cannot be blank",
|
||||||
"Invitation code cannot be blank": "Invitation code cannot be blank",
|
"Invitation code cannot be blank": "Invitation code cannot be blank",
|
||||||
"Invitation code exhausted": "Invitation code exhausted",
|
"Invitation code exhausted": "Invitation code exhausted",
|
||||||
@ -50,6 +59,7 @@
|
|||||||
"LastName cannot be blank": "LastName cannot be blank",
|
"LastName cannot be blank": "LastName cannot be blank",
|
||||||
"Multiple accounts with same uid, please check your ldap server": "Multiple accounts with same uid, please check your ldap server",
|
"Multiple accounts with same uid, please check your ldap server": "Multiple accounts with same uid, please check your ldap server",
|
||||||
"Organization does not exist": "Organization does not exist",
|
"Organization does not exist": "Organization does not exist",
|
||||||
|
"Password cannot be empty": "Password cannot be empty",
|
||||||
"Phone already exists": "Phone already exists",
|
"Phone already exists": "Phone already exists",
|
||||||
"Phone cannot be empty": "Phone cannot be empty",
|
"Phone cannot be empty": "Phone cannot be empty",
|
||||||
"Phone number is invalid": "Phone number is invalid",
|
"Phone number is invalid": "Phone number is invalid",
|
||||||
@ -69,17 +79,27 @@
|
|||||||
"Username cannot start with a digit": "Username cannot start with a digit",
|
"Username cannot start with a digit": "Username cannot start with a digit",
|
||||||
"Username is too long (maximum is 255 characters).": "Username is too long (maximum is 255 characters).",
|
"Username is too long (maximum is 255 characters).": "Username is too long (maximum is 255 characters).",
|
||||||
"Username must have at least 2 characters": "Username must have at least 2 characters",
|
"Username must have at least 2 characters": "Username must have at least 2 characters",
|
||||||
|
"Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.": "Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.",
|
||||||
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "You have entered the wrong password or code too many times, please wait for %d minutes and try again",
|
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "You have entered the wrong password or code too many times, please wait for %d minutes and try again",
|
||||||
|
"Your IP address: %s has been banned according to the configuration of: ": "Your IP address: %s has been banned according to the configuration of: ",
|
||||||
|
"Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"": "Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"",
|
||||||
"Your region is not allow to signup by phone": "Your region is not allow to signup by phone",
|
"Your region is not allow to signup by phone": "Your region is not allow to signup by phone",
|
||||||
"password or code is incorrect": "password or code is incorrect",
|
"password or code is incorrect": "password or code is incorrect",
|
||||||
"password or code is incorrect, you have %d remaining chances": "password or code is incorrect, you have %d remaining chances",
|
"password or code is incorrect, you have %d remaining chances": "password or code is incorrect, you have %d remaining chances",
|
||||||
"unsupported password type: %s": "unsupported password type: %s"
|
"unsupported password type: %s": "unsupported password type: %s"
|
||||||
},
|
},
|
||||||
|
"enforcer": {
|
||||||
|
"the adapter: %s is not found": "the adapter: %s is not found"
|
||||||
|
},
|
||||||
"general": {
|
"general": {
|
||||||
|
"Failed to import groups": "Failed to import groups",
|
||||||
|
"Failed to import users": "Failed to import users",
|
||||||
"Missing parameter": "Missing parameter",
|
"Missing parameter": "Missing parameter",
|
||||||
|
"Only admin user can specify user": "Only admin user can specify user",
|
||||||
"Please login first": "Please login first",
|
"Please login first": "Please login first",
|
||||||
"The organization: %s should have one application at least": "The organization: %s should have one application at least",
|
"The organization: %s should have one application at least": "The organization: %s should have one application at least",
|
||||||
"The user: %s doesn't exist": "The user: %s doesn't exist",
|
"The user: %s doesn't exist": "The user: %s doesn't exist",
|
||||||
|
"Wrong userId": "Wrong userId",
|
||||||
"don't support captchaProvider: ": "don't support captchaProvider: ",
|
"don't support captchaProvider: ": "don't support captchaProvider: ",
|
||||||
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
|
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
|
||||||
"this operation requires administrator to perform": "this operation requires administrator to perform"
|
"this operation requires administrator to perform": "this operation requires administrator to perform"
|
||||||
@ -98,7 +118,8 @@
|
|||||||
"organization": {
|
"organization": {
|
||||||
"Only admin can modify the %s.": "Only admin can modify the %s.",
|
"Only admin can modify the %s.": "Only admin can modify the %s.",
|
||||||
"The %s is immutable.": "The %s is immutable.",
|
"The %s is immutable.": "The %s is immutable.",
|
||||||
"Unknown modify rule %s.": "Unknown modify rule %s."
|
"Unknown modify rule %s.": "Unknown modify rule %s.",
|
||||||
|
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
|
||||||
},
|
},
|
||||||
"permission": {
|
"permission": {
|
||||||
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
|
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
|
||||||
@ -126,6 +147,9 @@
|
|||||||
"The objectKey: %s is not allowed": "The objectKey: %s is not allowed",
|
"The objectKey: %s is not allowed": "The objectKey: %s is not allowed",
|
||||||
"The provider type: %s is not supported": "The provider type: %s is not supported"
|
"The provider type: %s is not supported": "The provider type: %s is not supported"
|
||||||
},
|
},
|
||||||
|
"subscription": {
|
||||||
|
"Error": "Error"
|
||||||
|
},
|
||||||
"token": {
|
"token": {
|
||||||
"Grant_type: %s is not supported in this application": "Grant_type: %s is not supported in this application",
|
"Grant_type: %s is not supported in this application": "Grant_type: %s is not supported in this application",
|
||||||
"Invalid application or wrong clientSecret": "Invalid application or wrong clientSecret",
|
"Invalid application or wrong clientSecret": "Invalid application or wrong clientSecret",
|
||||||
@ -135,10 +159,10 @@
|
|||||||
},
|
},
|
||||||
"user": {
|
"user": {
|
||||||
"Display name cannot be empty": "Display name cannot be empty",
|
"Display name cannot be empty": "Display name cannot be empty",
|
||||||
"New password cannot contain blank space.": "New password cannot contain blank space."
|
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
|
||||||
},
|
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
|
||||||
"user_upload": {
|
"New password cannot contain blank space.": "New password cannot contain blank space.",
|
||||||
"Failed to import users": "Failed to import users"
|
"the user's owner and name should not be empty": "the user's owner and name should not be empty"
|
||||||
},
|
},
|
||||||
"util": {
|
"util": {
|
||||||
"No application is found for userId: %s": "No application is found for userId: %s",
|
"No application is found for userId: %s": "No application is found for userId: %s",
|
||||||
@ -148,8 +172,8 @@
|
|||||||
"verification": {
|
"verification": {
|
||||||
"Invalid captcha provider.": "Invalid captcha provider.",
|
"Invalid captcha provider.": "Invalid captcha provider.",
|
||||||
"Phone number is invalid in your region %s": "Phone number is invalid in your region %s",
|
"Phone number is invalid in your region %s": "Phone number is invalid in your region %s",
|
||||||
|
"The verification code has already been used!": "The verification code has already been used!",
|
||||||
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
|
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
|
||||||
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
|
|
||||||
"Turing test failed.": "Turing test failed.",
|
"Turing test failed.": "Turing test failed.",
|
||||||
"Unable to get the email modify rule.": "Unable to get the email modify rule.",
|
"Unable to get the email modify rule.": "Unable to get the email modify rule.",
|
||||||
"Unable to get the phone modify rule.": "Unable to get the phone modify rule.",
|
"Unable to get the phone modify rule.": "Unable to get the phone modify rule.",
|
||||||
@ -161,7 +185,6 @@
|
|||||||
"the user does not exist, please sign up first": "the user does not exist, please sign up first"
|
"the user does not exist, please sign up first": "the user does not exist, please sign up first"
|
||||||
},
|
},
|
||||||
"webauthn": {
|
"webauthn": {
|
||||||
"Found no credentials for this user": "Found no credentials for this user",
|
|
||||||
"Please call WebAuthnSigninBegin first": "Please call WebAuthnSigninBegin first"
|
"Please call WebAuthnSigninBegin first": "Please call WebAuthnSigninBegin first"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
},
|
},
|
||||||
"auth": {
|
"auth": {
|
||||||
"Challenge method should be S256": "La méthode de défi doit être S256",
|
"Challenge method should be S256": "La méthode de défi doit être S256",
|
||||||
|
"DeviceCode Invalid": "DeviceCode Invalid",
|
||||||
"Failed to create user, user information is invalid: %s": "Échec de la création de l'utilisateur, les informations utilisateur sont invalides : %s",
|
"Failed to create user, user information is invalid: %s": "Échec de la création de l'utilisateur, les informations utilisateur sont invalides : %s",
|
||||||
"Failed to login in: %s": "Échec de la connexion : %s",
|
"Failed to login in: %s": "Échec de la connexion : %s",
|
||||||
"Invalid token": "Jeton invalide",
|
"Invalid token": "Jeton invalide",
|
||||||
@ -21,17 +22,24 @@
|
|||||||
"The login method: login with face is not enabled for the application": "The login method: login with face is not enabled for the application",
|
"The login method: login with face is not enabled for the application": "The login method: login with face is not enabled for the application",
|
||||||
"The login method: login with password is not enabled for the application": "La méthode de connexion : connexion avec mot de passe n'est pas activée pour l'application",
|
"The login method: login with password is not enabled for the application": "La méthode de connexion : connexion avec mot de passe n'est pas activée pour l'application",
|
||||||
"The organization: %s does not exist": "The organization: %s does not exist",
|
"The organization: %s does not exist": "The organization: %s does not exist",
|
||||||
|
"The provider: %s does not exist": "The provider: %s does not exist",
|
||||||
"The provider: %s is not enabled for the application": "Le fournisseur :%s n'est pas activé pour l'application",
|
"The provider: %s is not enabled for the application": "Le fournisseur :%s n'est pas activé pour l'application",
|
||||||
"Unauthorized operation": "Opération non autorisée",
|
"Unauthorized operation": "Opération non autorisée",
|
||||||
"Unknown authentication type (not password or provider), form = %s": "Type d'authentification inconnu (pas de mot de passe ou de fournisseur), formulaire = %s",
|
"Unknown authentication type (not password or provider), form = %s": "Type d'authentification inconnu (pas de mot de passe ou de fournisseur), formulaire = %s",
|
||||||
"User's tag: %s is not listed in the application's tags": "Le tag de l’utilisateur %s n’est pas répertorié dans les tags de l’application",
|
"User's tag: %s is not listed in the application's tags": "Le tag de l’utilisateur %s n’est pas répertorié dans les tags de l’application",
|
||||||
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing"
|
"UserCode Expired": "UserCode Expired",
|
||||||
|
"UserCode Invalid": "UserCode Invalid",
|
||||||
|
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing",
|
||||||
|
"the application for user %s is not found": "the application for user %s is not found",
|
||||||
|
"the organization: %s is not found": "the organization: %s is not found"
|
||||||
},
|
},
|
||||||
"cas": {
|
"cas": {
|
||||||
"Service %s and %s do not match": "Les services %s et %s ne correspondent pas"
|
"Service %s and %s do not match": "Les services %s et %s ne correspondent pas"
|
||||||
},
|
},
|
||||||
"check": {
|
"check": {
|
||||||
|
"%s does not meet the CIDR format requirements: %s": "%s does not meet the CIDR format requirements: %s",
|
||||||
"Affiliation cannot be blank": "Affiliation ne peut pas être vide",
|
"Affiliation cannot be blank": "Affiliation ne peut pas être vide",
|
||||||
|
"CIDR for IP: %s should not be empty": "CIDR for IP: %s should not be empty",
|
||||||
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
||||||
"DisplayName cannot be blank": "Le nom d'affichage ne peut pas être vide",
|
"DisplayName cannot be blank": "Le nom d'affichage ne peut pas être vide",
|
||||||
"DisplayName is not valid real name": "DisplayName n'est pas un nom réel valide",
|
"DisplayName is not valid real name": "DisplayName n'est pas un nom réel valide",
|
||||||
@ -41,6 +49,7 @@
|
|||||||
"Empty username.": "Nom d'utilisateur vide.",
|
"Empty username.": "Nom d'utilisateur vide.",
|
||||||
"Face data does not exist, cannot log in": "Face data does not exist, cannot log in",
|
"Face data does not exist, cannot log in": "Face data does not exist, cannot log in",
|
||||||
"Face data mismatch": "Face data mismatch",
|
"Face data mismatch": "Face data mismatch",
|
||||||
|
"Failed to parse client IP: %s": "Failed to parse client IP: %s",
|
||||||
"FirstName cannot be blank": "Le prénom ne peut pas être laissé vide",
|
"FirstName cannot be blank": "Le prénom ne peut pas être laissé vide",
|
||||||
"Invitation code cannot be blank": "Invitation code cannot be blank",
|
"Invitation code cannot be blank": "Invitation code cannot be blank",
|
||||||
"Invitation code exhausted": "Invitation code exhausted",
|
"Invitation code exhausted": "Invitation code exhausted",
|
||||||
@ -50,6 +59,7 @@
|
|||||||
"LastName cannot be blank": "Le nom de famille ne peut pas être vide",
|
"LastName cannot be blank": "Le nom de famille ne peut pas être vide",
|
||||||
"Multiple accounts with same uid, please check your ldap server": "Plusieurs comptes avec le même identifiant d'utilisateur, veuillez vérifier votre serveur LDAP",
|
"Multiple accounts with same uid, please check your ldap server": "Plusieurs comptes avec le même identifiant d'utilisateur, veuillez vérifier votre serveur LDAP",
|
||||||
"Organization does not exist": "L'organisation n'existe pas",
|
"Organization does not exist": "L'organisation n'existe pas",
|
||||||
|
"Password cannot be empty": "Password cannot be empty",
|
||||||
"Phone already exists": "Le téléphone existe déjà",
|
"Phone already exists": "Le téléphone existe déjà",
|
||||||
"Phone cannot be empty": "Le téléphone ne peut pas être vide",
|
"Phone cannot be empty": "Le téléphone ne peut pas être vide",
|
||||||
"Phone number is invalid": "Le numéro de téléphone est invalide",
|
"Phone number is invalid": "Le numéro de téléphone est invalide",
|
||||||
@ -69,17 +79,27 @@
|
|||||||
"Username cannot start with a digit": "Nom d'utilisateur ne peut pas commencer par un chiffre",
|
"Username cannot start with a digit": "Nom d'utilisateur ne peut pas commencer par un chiffre",
|
||||||
"Username is too long (maximum is 255 characters).": "Nom d'utilisateur est trop long (maximum de 255 caractères).",
|
"Username is too long (maximum is 255 characters).": "Nom d'utilisateur est trop long (maximum de 255 caractères).",
|
||||||
"Username must have at least 2 characters": "Le nom d'utilisateur doit comporter au moins 2 caractères",
|
"Username must have at least 2 characters": "Le nom d'utilisateur doit comporter au moins 2 caractères",
|
||||||
|
"Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.": "Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.",
|
||||||
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "Vous avez entré le mauvais mot de passe ou code plusieurs fois, veuillez attendre %d minutes et réessayer",
|
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "Vous avez entré le mauvais mot de passe ou code plusieurs fois, veuillez attendre %d minutes et réessayer",
|
||||||
|
"Your IP address: %s has been banned according to the configuration of: ": "Your IP address: %s has been banned according to the configuration of: ",
|
||||||
|
"Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"": "Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"",
|
||||||
"Your region is not allow to signup by phone": "Votre région n'est pas autorisée à s'inscrire par téléphone",
|
"Your region is not allow to signup by phone": "Votre région n'est pas autorisée à s'inscrire par téléphone",
|
||||||
"password or code is incorrect": "mot de passe ou code invalide",
|
"password or code is incorrect": "mot de passe ou code invalide",
|
||||||
"password or code is incorrect, you have %d remaining chances": "Le mot de passe ou le code est incorrect, il vous reste %d chances",
|
"password or code is incorrect, you have %d remaining chances": "Le mot de passe ou le code est incorrect, il vous reste %d chances",
|
||||||
"unsupported password type: %s": "Type de mot de passe non pris en charge : %s"
|
"unsupported password type: %s": "Type de mot de passe non pris en charge : %s"
|
||||||
},
|
},
|
||||||
|
"enforcer": {
|
||||||
|
"the adapter: %s is not found": "the adapter: %s is not found"
|
||||||
|
},
|
||||||
"general": {
|
"general": {
|
||||||
|
"Failed to import groups": "Failed to import groups",
|
||||||
|
"Failed to import users": "Échec de l'importation des utilisateurs",
|
||||||
"Missing parameter": "Paramètre manquant",
|
"Missing parameter": "Paramètre manquant",
|
||||||
|
"Only admin user can specify user": "Only admin user can specify user",
|
||||||
"Please login first": "Veuillez d'abord vous connecter",
|
"Please login first": "Veuillez d'abord vous connecter",
|
||||||
"The organization: %s should have one application at least": "The organization: %s should have one application at least",
|
"The organization: %s should have one application at least": "The organization: %s should have one application at least",
|
||||||
"The user: %s doesn't exist": "L'utilisateur : %s n'existe pas",
|
"The user: %s doesn't exist": "L'utilisateur : %s n'existe pas",
|
||||||
|
"Wrong userId": "Wrong userId",
|
||||||
"don't support captchaProvider: ": "ne prend pas en charge captchaProvider: ",
|
"don't support captchaProvider: ": "ne prend pas en charge captchaProvider: ",
|
||||||
"this operation is not allowed in demo mode": "cette opération n’est pas autorisée en mode démo",
|
"this operation is not allowed in demo mode": "cette opération n’est pas autorisée en mode démo",
|
||||||
"this operation requires administrator to perform": "this operation requires administrator to perform"
|
"this operation requires administrator to perform": "this operation requires administrator to perform"
|
||||||
@ -98,7 +118,8 @@
|
|||||||
"organization": {
|
"organization": {
|
||||||
"Only admin can modify the %s.": "Seul l'administrateur peut modifier le %s.",
|
"Only admin can modify the %s.": "Seul l'administrateur peut modifier le %s.",
|
||||||
"The %s is immutable.": "Le %s est immuable.",
|
"The %s is immutable.": "Le %s est immuable.",
|
||||||
"Unknown modify rule %s.": "Règle de modification inconnue %s."
|
"Unknown modify rule %s.": "Règle de modification inconnue %s.",
|
||||||
|
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
|
||||||
},
|
},
|
||||||
"permission": {
|
"permission": {
|
||||||
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
|
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
|
||||||
@ -126,6 +147,9 @@
|
|||||||
"The objectKey: %s is not allowed": "La clé d'objet : %s n'est pas autorisée",
|
"The objectKey: %s is not allowed": "La clé d'objet : %s n'est pas autorisée",
|
||||||
"The provider type: %s is not supported": "Le type de fournisseur : %s n'est pas pris en charge"
|
"The provider type: %s is not supported": "Le type de fournisseur : %s n'est pas pris en charge"
|
||||||
},
|
},
|
||||||
|
"subscription": {
|
||||||
|
"Error": "Error"
|
||||||
|
},
|
||||||
"token": {
|
"token": {
|
||||||
"Grant_type: %s is not supported in this application": "Type_de_subvention : %s n'est pas pris en charge dans cette application",
|
"Grant_type: %s is not supported in this application": "Type_de_subvention : %s n'est pas pris en charge dans cette application",
|
||||||
"Invalid application or wrong clientSecret": "Application invalide ou clientSecret incorrect",
|
"Invalid application or wrong clientSecret": "Application invalide ou clientSecret incorrect",
|
||||||
@ -135,10 +159,10 @@
|
|||||||
},
|
},
|
||||||
"user": {
|
"user": {
|
||||||
"Display name cannot be empty": "Le nom d'affichage ne peut pas être vide",
|
"Display name cannot be empty": "Le nom d'affichage ne peut pas être vide",
|
||||||
"New password cannot contain blank space.": "Le nouveau mot de passe ne peut pas contenir d'espace."
|
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
|
||||||
},
|
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
|
||||||
"user_upload": {
|
"New password cannot contain blank space.": "Le nouveau mot de passe ne peut pas contenir d'espace.",
|
||||||
"Failed to import users": "Échec de l'importation des utilisateurs"
|
"the user's owner and name should not be empty": "the user's owner and name should not be empty"
|
||||||
},
|
},
|
||||||
"util": {
|
"util": {
|
||||||
"No application is found for userId: %s": "Aucune application n'a été trouvée pour l'identifiant d'utilisateur : %s",
|
"No application is found for userId: %s": "Aucune application n'a été trouvée pour l'identifiant d'utilisateur : %s",
|
||||||
@ -148,8 +172,8 @@
|
|||||||
"verification": {
|
"verification": {
|
||||||
"Invalid captcha provider.": "Fournisseur de captcha invalide.",
|
"Invalid captcha provider.": "Fournisseur de captcha invalide.",
|
||||||
"Phone number is invalid in your region %s": "Le numéro de téléphone n'est pas valide dans votre région %s",
|
"Phone number is invalid in your region %s": "Le numéro de téléphone n'est pas valide dans votre région %s",
|
||||||
|
"The verification code has already been used!": "The verification code has already been used!",
|
||||||
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
|
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
|
||||||
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
|
|
||||||
"Turing test failed.": "Le test de Turing a échoué.",
|
"Turing test failed.": "Le test de Turing a échoué.",
|
||||||
"Unable to get the email modify rule.": "Incapable d'obtenir la règle de modification de courriel.",
|
"Unable to get the email modify rule.": "Incapable d'obtenir la règle de modification de courriel.",
|
||||||
"Unable to get the phone modify rule.": "Impossible d'obtenir la règle de modification de téléphone.",
|
"Unable to get the phone modify rule.": "Impossible d'obtenir la règle de modification de téléphone.",
|
||||||
@ -161,7 +185,6 @@
|
|||||||
"the user does not exist, please sign up first": "L'utilisateur n'existe pas, veuillez vous inscrire d'abord"
|
"the user does not exist, please sign up first": "L'utilisateur n'existe pas, veuillez vous inscrire d'abord"
|
||||||
},
|
},
|
||||||
"webauthn": {
|
"webauthn": {
|
||||||
"Found no credentials for this user": "Aucune référence trouvée pour cet utilisateur",
|
|
||||||
"Please call WebAuthnSigninBegin first": "Veuillez d'abord appeler WebAuthnSigninBegin"
|
"Please call WebAuthnSigninBegin first": "Veuillez d'abord appeler WebAuthnSigninBegin"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
},
|
},
|
||||||
"auth": {
|
"auth": {
|
||||||
"Challenge method should be S256": "Challenge method should be S256",
|
"Challenge method should be S256": "Challenge method should be S256",
|
||||||
|
"DeviceCode Invalid": "DeviceCode Invalid",
|
||||||
"Failed to create user, user information is invalid: %s": "Failed to create user, user information is invalid: %s",
|
"Failed to create user, user information is invalid: %s": "Failed to create user, user information is invalid: %s",
|
||||||
"Failed to login in: %s": "Failed to login in: %s",
|
"Failed to login in: %s": "Failed to login in: %s",
|
||||||
"Invalid token": "Invalid token",
|
"Invalid token": "Invalid token",
|
||||||
@ -21,17 +22,24 @@
|
|||||||
"The login method: login with face is not enabled for the application": "The login method: login with face is not enabled for the application",
|
"The login method: login with face is not enabled for the application": "The login method: login with face is not enabled for the application",
|
||||||
"The login method: login with password is not enabled for the application": "The login method: login with password is not enabled for the application",
|
"The login method: login with password is not enabled for the application": "The login method: login with password is not enabled for the application",
|
||||||
"The organization: %s does not exist": "The organization: %s does not exist",
|
"The organization: %s does not exist": "The organization: %s does not exist",
|
||||||
|
"The provider: %s does not exist": "The provider: %s does not exist",
|
||||||
"The provider: %s is not enabled for the application": "The provider: %s is not enabled for the application",
|
"The provider: %s is not enabled for the application": "The provider: %s is not enabled for the application",
|
||||||
"Unauthorized operation": "Unauthorized operation",
|
"Unauthorized operation": "Unauthorized operation",
|
||||||
"Unknown authentication type (not password or provider), form = %s": "Unknown authentication type (not password or provider), form = %s",
|
"Unknown authentication type (not password or provider), form = %s": "Unknown authentication type (not password or provider), form = %s",
|
||||||
"User's tag: %s is not listed in the application's tags": "User's tag: %s is not listed in the application's tags",
|
"User's tag: %s is not listed in the application's tags": "User's tag: %s is not listed in the application's tags",
|
||||||
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing"
|
"UserCode Expired": "UserCode Expired",
|
||||||
|
"UserCode Invalid": "UserCode Invalid",
|
||||||
|
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing",
|
||||||
|
"the application for user %s is not found": "the application for user %s is not found",
|
||||||
|
"the organization: %s is not found": "the organization: %s is not found"
|
||||||
},
|
},
|
||||||
"cas": {
|
"cas": {
|
||||||
"Service %s and %s do not match": "Service %s and %s do not match"
|
"Service %s and %s do not match": "Service %s and %s do not match"
|
||||||
},
|
},
|
||||||
"check": {
|
"check": {
|
||||||
|
"%s does not meet the CIDR format requirements: %s": "%s does not meet the CIDR format requirements: %s",
|
||||||
"Affiliation cannot be blank": "Affiliation cannot be blank",
|
"Affiliation cannot be blank": "Affiliation cannot be blank",
|
||||||
|
"CIDR for IP: %s should not be empty": "CIDR for IP: %s should not be empty",
|
||||||
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
||||||
"DisplayName cannot be blank": "DisplayName cannot be blank",
|
"DisplayName cannot be blank": "DisplayName cannot be blank",
|
||||||
"DisplayName is not valid real name": "DisplayName is not valid real name",
|
"DisplayName is not valid real name": "DisplayName is not valid real name",
|
||||||
@ -41,6 +49,7 @@
|
|||||||
"Empty username.": "Empty username.",
|
"Empty username.": "Empty username.",
|
||||||
"Face data does not exist, cannot log in": "Face data does not exist, cannot log in",
|
"Face data does not exist, cannot log in": "Face data does not exist, cannot log in",
|
||||||
"Face data mismatch": "Face data mismatch",
|
"Face data mismatch": "Face data mismatch",
|
||||||
|
"Failed to parse client IP: %s": "Failed to parse client IP: %s",
|
||||||
"FirstName cannot be blank": "FirstName cannot be blank",
|
"FirstName cannot be blank": "FirstName cannot be blank",
|
||||||
"Invitation code cannot be blank": "Invitation code cannot be blank",
|
"Invitation code cannot be blank": "Invitation code cannot be blank",
|
||||||
"Invitation code exhausted": "Invitation code exhausted",
|
"Invitation code exhausted": "Invitation code exhausted",
|
||||||
@ -50,6 +59,7 @@
|
|||||||
"LastName cannot be blank": "LastName cannot be blank",
|
"LastName cannot be blank": "LastName cannot be blank",
|
||||||
"Multiple accounts with same uid, please check your ldap server": "Multiple accounts with same uid, please check your ldap server",
|
"Multiple accounts with same uid, please check your ldap server": "Multiple accounts with same uid, please check your ldap server",
|
||||||
"Organization does not exist": "Organization does not exist",
|
"Organization does not exist": "Organization does not exist",
|
||||||
|
"Password cannot be empty": "Password cannot be empty",
|
||||||
"Phone already exists": "Phone already exists",
|
"Phone already exists": "Phone already exists",
|
||||||
"Phone cannot be empty": "Phone cannot be empty",
|
"Phone cannot be empty": "Phone cannot be empty",
|
||||||
"Phone number is invalid": "Phone number is invalid",
|
"Phone number is invalid": "Phone number is invalid",
|
||||||
@ -69,17 +79,27 @@
|
|||||||
"Username cannot start with a digit": "Username cannot start with a digit",
|
"Username cannot start with a digit": "Username cannot start with a digit",
|
||||||
"Username is too long (maximum is 255 characters).": "Username is too long (maximum is 255 characters).",
|
"Username is too long (maximum is 255 characters).": "Username is too long (maximum is 255 characters).",
|
||||||
"Username must have at least 2 characters": "Username must have at least 2 characters",
|
"Username must have at least 2 characters": "Username must have at least 2 characters",
|
||||||
|
"Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.": "Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.",
|
||||||
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "You have entered the wrong password or code too many times, please wait for %d minutes and try again",
|
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "You have entered the wrong password or code too many times, please wait for %d minutes and try again",
|
||||||
|
"Your IP address: %s has been banned according to the configuration of: ": "Your IP address: %s has been banned according to the configuration of: ",
|
||||||
|
"Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"": "Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"",
|
||||||
"Your region is not allow to signup by phone": "Your region is not allow to signup by phone",
|
"Your region is not allow to signup by phone": "Your region is not allow to signup by phone",
|
||||||
"password or code is incorrect": "password or code is incorrect",
|
"password or code is incorrect": "password or code is incorrect",
|
||||||
"password or code is incorrect, you have %d remaining chances": "password or code is incorrect, you have %d remaining chances",
|
"password or code is incorrect, you have %d remaining chances": "password or code is incorrect, you have %d remaining chances",
|
||||||
"unsupported password type: %s": "unsupported password type: %s"
|
"unsupported password type: %s": "unsupported password type: %s"
|
||||||
},
|
},
|
||||||
|
"enforcer": {
|
||||||
|
"the adapter: %s is not found": "the adapter: %s is not found"
|
||||||
|
},
|
||||||
"general": {
|
"general": {
|
||||||
|
"Failed to import groups": "Failed to import groups",
|
||||||
|
"Failed to import users": "Failed to import users",
|
||||||
"Missing parameter": "Missing parameter",
|
"Missing parameter": "Missing parameter",
|
||||||
|
"Only admin user can specify user": "Only admin user can specify user",
|
||||||
"Please login first": "Please login first",
|
"Please login first": "Please login first",
|
||||||
"The organization: %s should have one application at least": "The organization: %s should have one application at least",
|
"The organization: %s should have one application at least": "The organization: %s should have one application at least",
|
||||||
"The user: %s doesn't exist": "The user: %s doesn't exist",
|
"The user: %s doesn't exist": "The user: %s doesn't exist",
|
||||||
|
"Wrong userId": "Wrong userId",
|
||||||
"don't support captchaProvider: ": "don't support captchaProvider: ",
|
"don't support captchaProvider: ": "don't support captchaProvider: ",
|
||||||
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
|
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
|
||||||
"this operation requires administrator to perform": "this operation requires administrator to perform"
|
"this operation requires administrator to perform": "this operation requires administrator to perform"
|
||||||
@ -98,7 +118,8 @@
|
|||||||
"organization": {
|
"organization": {
|
||||||
"Only admin can modify the %s.": "Only admin can modify the %s.",
|
"Only admin can modify the %s.": "Only admin can modify the %s.",
|
||||||
"The %s is immutable.": "The %s is immutable.",
|
"The %s is immutable.": "The %s is immutable.",
|
||||||
"Unknown modify rule %s.": "Unknown modify rule %s."
|
"Unknown modify rule %s.": "Unknown modify rule %s.",
|
||||||
|
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
|
||||||
},
|
},
|
||||||
"permission": {
|
"permission": {
|
||||||
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
|
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
|
||||||
@ -126,6 +147,9 @@
|
|||||||
"The objectKey: %s is not allowed": "The objectKey: %s is not allowed",
|
"The objectKey: %s is not allowed": "The objectKey: %s is not allowed",
|
||||||
"The provider type: %s is not supported": "The provider type: %s is not supported"
|
"The provider type: %s is not supported": "The provider type: %s is not supported"
|
||||||
},
|
},
|
||||||
|
"subscription": {
|
||||||
|
"Error": "Error"
|
||||||
|
},
|
||||||
"token": {
|
"token": {
|
||||||
"Grant_type: %s is not supported in this application": "Grant_type: %s is not supported in this application",
|
"Grant_type: %s is not supported in this application": "Grant_type: %s is not supported in this application",
|
||||||
"Invalid application or wrong clientSecret": "Invalid application or wrong clientSecret",
|
"Invalid application or wrong clientSecret": "Invalid application or wrong clientSecret",
|
||||||
@ -135,10 +159,10 @@
|
|||||||
},
|
},
|
||||||
"user": {
|
"user": {
|
||||||
"Display name cannot be empty": "Display name cannot be empty",
|
"Display name cannot be empty": "Display name cannot be empty",
|
||||||
"New password cannot contain blank space.": "New password cannot contain blank space."
|
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
|
||||||
},
|
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
|
||||||
"user_upload": {
|
"New password cannot contain blank space.": "New password cannot contain blank space.",
|
||||||
"Failed to import users": "Failed to import users"
|
"the user's owner and name should not be empty": "the user's owner and name should not be empty"
|
||||||
},
|
},
|
||||||
"util": {
|
"util": {
|
||||||
"No application is found for userId: %s": "No application is found for userId: %s",
|
"No application is found for userId: %s": "No application is found for userId: %s",
|
||||||
@ -148,8 +172,8 @@
|
|||||||
"verification": {
|
"verification": {
|
||||||
"Invalid captcha provider.": "Invalid captcha provider.",
|
"Invalid captcha provider.": "Invalid captcha provider.",
|
||||||
"Phone number is invalid in your region %s": "Phone number is invalid in your region %s",
|
"Phone number is invalid in your region %s": "Phone number is invalid in your region %s",
|
||||||
|
"The verification code has already been used!": "The verification code has already been used!",
|
||||||
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
|
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
|
||||||
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
|
|
||||||
"Turing test failed.": "Turing test failed.",
|
"Turing test failed.": "Turing test failed.",
|
||||||
"Unable to get the email modify rule.": "Unable to get the email modify rule.",
|
"Unable to get the email modify rule.": "Unable to get the email modify rule.",
|
||||||
"Unable to get the phone modify rule.": "Unable to get the phone modify rule.",
|
"Unable to get the phone modify rule.": "Unable to get the phone modify rule.",
|
||||||
@ -161,7 +185,6 @@
|
|||||||
"the user does not exist, please sign up first": "the user does not exist, please sign up first"
|
"the user does not exist, please sign up first": "the user does not exist, please sign up first"
|
||||||
},
|
},
|
||||||
"webauthn": {
|
"webauthn": {
|
||||||
"Found no credentials for this user": "Found no credentials for this user",
|
|
||||||
"Please call WebAuthnSigninBegin first": "Please call WebAuthnSigninBegin first"
|
"Please call WebAuthnSigninBegin first": "Please call WebAuthnSigninBegin first"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
},
|
},
|
||||||
"auth": {
|
"auth": {
|
||||||
"Challenge method should be S256": "Metode tantangan harus S256",
|
"Challenge method should be S256": "Metode tantangan harus S256",
|
||||||
|
"DeviceCode Invalid": "DeviceCode Invalid",
|
||||||
"Failed to create user, user information is invalid: %s": "Gagal membuat pengguna, informasi pengguna tidak valid: %s",
|
"Failed to create user, user information is invalid: %s": "Gagal membuat pengguna, informasi pengguna tidak valid: %s",
|
||||||
"Failed to login in: %s": "Gagal masuk: %s",
|
"Failed to login in: %s": "Gagal masuk: %s",
|
||||||
"Invalid token": "Token tidak valid",
|
"Invalid token": "Token tidak valid",
|
||||||
@ -21,17 +22,24 @@
|
|||||||
"The login method: login with face is not enabled for the application": "The login method: login with face is not enabled for the application",
|
"The login method: login with face is not enabled for the application": "The login method: login with face is not enabled for the application",
|
||||||
"The login method: login with password is not enabled for the application": "Metode login: login dengan sandi tidak diaktifkan untuk aplikasi tersebut",
|
"The login method: login with password is not enabled for the application": "Metode login: login dengan sandi tidak diaktifkan untuk aplikasi tersebut",
|
||||||
"The organization: %s does not exist": "The organization: %s does not exist",
|
"The organization: %s does not exist": "The organization: %s does not exist",
|
||||||
|
"The provider: %s does not exist": "The provider: %s does not exist",
|
||||||
"The provider: %s is not enabled for the application": "Penyedia: %s tidak diaktifkan untuk aplikasi ini",
|
"The provider: %s is not enabled for the application": "Penyedia: %s tidak diaktifkan untuk aplikasi ini",
|
||||||
"Unauthorized operation": "Operasi tidak sah",
|
"Unauthorized operation": "Operasi tidak sah",
|
||||||
"Unknown authentication type (not password or provider), form = %s": "Jenis otentikasi tidak diketahui (bukan sandi atau penyedia), formulir = %s",
|
"Unknown authentication type (not password or provider), form = %s": "Jenis otentikasi tidak diketahui (bukan sandi atau penyedia), formulir = %s",
|
||||||
"User's tag: %s is not listed in the application's tags": "User's tag: %s is not listed in the application's tags",
|
"User's tag: %s is not listed in the application's tags": "User's tag: %s is not listed in the application's tags",
|
||||||
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing"
|
"UserCode Expired": "UserCode Expired",
|
||||||
|
"UserCode Invalid": "UserCode Invalid",
|
||||||
|
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing",
|
||||||
|
"the application for user %s is not found": "the application for user %s is not found",
|
||||||
|
"the organization: %s is not found": "the organization: %s is not found"
|
||||||
},
|
},
|
||||||
"cas": {
|
"cas": {
|
||||||
"Service %s and %s do not match": "Layanan %s dan %s tidak cocok"
|
"Service %s and %s do not match": "Layanan %s dan %s tidak cocok"
|
||||||
},
|
},
|
||||||
"check": {
|
"check": {
|
||||||
|
"%s does not meet the CIDR format requirements: %s": "%s does not meet the CIDR format requirements: %s",
|
||||||
"Affiliation cannot be blank": "Keterkaitan tidak boleh kosong",
|
"Affiliation cannot be blank": "Keterkaitan tidak boleh kosong",
|
||||||
|
"CIDR for IP: %s should not be empty": "CIDR for IP: %s should not be empty",
|
||||||
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
||||||
"DisplayName cannot be blank": "Nama Pengguna tidak boleh kosong",
|
"DisplayName cannot be blank": "Nama Pengguna tidak boleh kosong",
|
||||||
"DisplayName is not valid real name": "DisplayName bukanlah nama asli yang valid",
|
"DisplayName is not valid real name": "DisplayName bukanlah nama asli yang valid",
|
||||||
@ -41,6 +49,7 @@
|
|||||||
"Empty username.": "Nama pengguna kosong.",
|
"Empty username.": "Nama pengguna kosong.",
|
||||||
"Face data does not exist, cannot log in": "Data wajah tidak ada, tidak bisa login",
|
"Face data does not exist, cannot log in": "Data wajah tidak ada, tidak bisa login",
|
||||||
"Face data mismatch": "Ketidakcocokan data wajah",
|
"Face data mismatch": "Ketidakcocokan data wajah",
|
||||||
|
"Failed to parse client IP: %s": "Failed to parse client IP: %s",
|
||||||
"FirstName cannot be blank": "Nama depan tidak boleh kosong",
|
"FirstName cannot be blank": "Nama depan tidak boleh kosong",
|
||||||
"Invitation code cannot be blank": "Kode undangan tidak boleh kosong",
|
"Invitation code cannot be blank": "Kode undangan tidak boleh kosong",
|
||||||
"Invitation code exhausted": "Kode undangan habis",
|
"Invitation code exhausted": "Kode undangan habis",
|
||||||
@ -50,6 +59,7 @@
|
|||||||
"LastName cannot be blank": "Nama belakang tidak boleh kosong",
|
"LastName cannot be blank": "Nama belakang tidak boleh kosong",
|
||||||
"Multiple accounts with same uid, please check your ldap server": "Beberapa akun dengan uid yang sama, harap periksa server LDAP Anda",
|
"Multiple accounts with same uid, please check your ldap server": "Beberapa akun dengan uid yang sama, harap periksa server LDAP Anda",
|
||||||
"Organization does not exist": "Organisasi tidak ada",
|
"Organization does not exist": "Organisasi tidak ada",
|
||||||
|
"Password cannot be empty": "Password cannot be empty",
|
||||||
"Phone already exists": "Telepon sudah ada",
|
"Phone already exists": "Telepon sudah ada",
|
||||||
"Phone cannot be empty": "Telepon tidak boleh kosong",
|
"Phone cannot be empty": "Telepon tidak boleh kosong",
|
||||||
"Phone number is invalid": "Nomor telepon tidak valid",
|
"Phone number is invalid": "Nomor telepon tidak valid",
|
||||||
@ -69,17 +79,27 @@
|
|||||||
"Username cannot start with a digit": "Username tidak dapat dimulai dengan angka",
|
"Username cannot start with a digit": "Username tidak dapat dimulai dengan angka",
|
||||||
"Username is too long (maximum is 255 characters).": "Nama pengguna terlalu panjang (maksimum 255 karakter).",
|
"Username is too long (maximum is 255 characters).": "Nama pengguna terlalu panjang (maksimum 255 karakter).",
|
||||||
"Username must have at least 2 characters": "Nama pengguna harus memiliki setidaknya 2 karakter",
|
"Username must have at least 2 characters": "Nama pengguna harus memiliki setidaknya 2 karakter",
|
||||||
|
"Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.": "Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.",
|
||||||
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "Anda telah memasukkan sandi atau kode yang salah terlalu sering, mohon tunggu selama %d menit lalu coba kembali",
|
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "Anda telah memasukkan sandi atau kode yang salah terlalu sering, mohon tunggu selama %d menit lalu coba kembali",
|
||||||
|
"Your IP address: %s has been banned according to the configuration of: ": "Your IP address: %s has been banned according to the configuration of: ",
|
||||||
|
"Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"": "Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"",
|
||||||
"Your region is not allow to signup by phone": "Wilayah Anda tidak diizinkan untuk mendaftar melalui telepon",
|
"Your region is not allow to signup by phone": "Wilayah Anda tidak diizinkan untuk mendaftar melalui telepon",
|
||||||
"password or code is incorrect": "kata sandi atau kode salah",
|
"password or code is incorrect": "kata sandi atau kode salah",
|
||||||
"password or code is incorrect, you have %d remaining chances": "Sandi atau kode salah, Anda memiliki %d kesempatan tersisa",
|
"password or code is incorrect, you have %d remaining chances": "Sandi atau kode salah, Anda memiliki %d kesempatan tersisa",
|
||||||
"unsupported password type: %s": "jenis sandi tidak didukung: %s"
|
"unsupported password type: %s": "jenis sandi tidak didukung: %s"
|
||||||
},
|
},
|
||||||
|
"enforcer": {
|
||||||
|
"the adapter: %s is not found": "the adapter: %s is not found"
|
||||||
|
},
|
||||||
"general": {
|
"general": {
|
||||||
|
"Failed to import groups": "Failed to import groups",
|
||||||
|
"Failed to import users": "Gagal mengimpor pengguna",
|
||||||
"Missing parameter": "Parameter hilang",
|
"Missing parameter": "Parameter hilang",
|
||||||
|
"Only admin user can specify user": "Only admin user can specify user",
|
||||||
"Please login first": "Silahkan login terlebih dahulu",
|
"Please login first": "Silahkan login terlebih dahulu",
|
||||||
"The organization: %s should have one application at least": "Organisasi: %s setidaknya harus memiliki satu aplikasi",
|
"The organization: %s should have one application at least": "Organisasi: %s setidaknya harus memiliki satu aplikasi",
|
||||||
"The user: %s doesn't exist": "Pengguna: %s tidak ada",
|
"The user: %s doesn't exist": "Pengguna: %s tidak ada",
|
||||||
|
"Wrong userId": "Wrong userId",
|
||||||
"don't support captchaProvider: ": "Jangan mendukung captchaProvider:",
|
"don't support captchaProvider: ": "Jangan mendukung captchaProvider:",
|
||||||
"this operation is not allowed in demo mode": "tindakan ini tidak diizinkan pada mode demo",
|
"this operation is not allowed in demo mode": "tindakan ini tidak diizinkan pada mode demo",
|
||||||
"this operation requires administrator to perform": "tindakan ini membutuhkan peran administrator"
|
"this operation requires administrator to perform": "tindakan ini membutuhkan peran administrator"
|
||||||
@ -98,7 +118,8 @@
|
|||||||
"organization": {
|
"organization": {
|
||||||
"Only admin can modify the %s.": "Hanya admin yang dapat memodifikasi %s.",
|
"Only admin can modify the %s.": "Hanya admin yang dapat memodifikasi %s.",
|
||||||
"The %s is immutable.": "%s tidak dapat diubah.",
|
"The %s is immutable.": "%s tidak dapat diubah.",
|
||||||
"Unknown modify rule %s.": "Aturan modifikasi tidak diketahui %s."
|
"Unknown modify rule %s.": "Aturan modifikasi tidak diketahui %s.",
|
||||||
|
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
|
||||||
},
|
},
|
||||||
"permission": {
|
"permission": {
|
||||||
"The permission: \\\"%s\\\" doesn't exist": "Izin: \\\"%s\\\" tidak ada"
|
"The permission: \\\"%s\\\" doesn't exist": "Izin: \\\"%s\\\" tidak ada"
|
||||||
@ -126,6 +147,9 @@
|
|||||||
"The objectKey: %s is not allowed": "Kunci objek: %s tidak diizinkan",
|
"The objectKey: %s is not allowed": "Kunci objek: %s tidak diizinkan",
|
||||||
"The provider type: %s is not supported": "Jenis penyedia: %s tidak didukung"
|
"The provider type: %s is not supported": "Jenis penyedia: %s tidak didukung"
|
||||||
},
|
},
|
||||||
|
"subscription": {
|
||||||
|
"Error": "Error"
|
||||||
|
},
|
||||||
"token": {
|
"token": {
|
||||||
"Grant_type: %s is not supported in this application": "Jenis grant (grant_type) %s tidak didukung dalam aplikasi ini",
|
"Grant_type: %s is not supported in this application": "Jenis grant (grant_type) %s tidak didukung dalam aplikasi ini",
|
||||||
"Invalid application or wrong clientSecret": "Aplikasi tidak valid atau clientSecret salah",
|
"Invalid application or wrong clientSecret": "Aplikasi tidak valid atau clientSecret salah",
|
||||||
@ -135,10 +159,10 @@
|
|||||||
},
|
},
|
||||||
"user": {
|
"user": {
|
||||||
"Display name cannot be empty": "Nama tampilan tidak boleh kosong",
|
"Display name cannot be empty": "Nama tampilan tidak boleh kosong",
|
||||||
"New password cannot contain blank space.": "Sandi baru tidak boleh mengandung spasi kosong."
|
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
|
||||||
},
|
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
|
||||||
"user_upload": {
|
"New password cannot contain blank space.": "Sandi baru tidak boleh mengandung spasi kosong.",
|
||||||
"Failed to import users": "Gagal mengimpor pengguna"
|
"the user's owner and name should not be empty": "the user's owner and name should not be empty"
|
||||||
},
|
},
|
||||||
"util": {
|
"util": {
|
||||||
"No application is found for userId: %s": "Tidak ditemukan aplikasi untuk userId: %s",
|
"No application is found for userId: %s": "Tidak ditemukan aplikasi untuk userId: %s",
|
||||||
@ -148,8 +172,8 @@
|
|||||||
"verification": {
|
"verification": {
|
||||||
"Invalid captcha provider.": "Penyedia captcha tidak valid.",
|
"Invalid captcha provider.": "Penyedia captcha tidak valid.",
|
||||||
"Phone number is invalid in your region %s": "Nomor telepon tidak valid di wilayah anda %s",
|
"Phone number is invalid in your region %s": "Nomor telepon tidak valid di wilayah anda %s",
|
||||||
|
"The verification code has already been used!": "The verification code has already been used!",
|
||||||
"The verification code has not been sent yet!": "Kode verifikasi belum terkirim!",
|
"The verification code has not been sent yet!": "Kode verifikasi belum terkirim!",
|
||||||
"The verification code has not been sent yet, or has already been used!": "Kode verifikasi belum dikirim atau telah digunakan!",
|
|
||||||
"Turing test failed.": "Tes Turing gagal.",
|
"Turing test failed.": "Tes Turing gagal.",
|
||||||
"Unable to get the email modify rule.": "Tidak dapat memperoleh aturan modifikasi email.",
|
"Unable to get the email modify rule.": "Tidak dapat memperoleh aturan modifikasi email.",
|
||||||
"Unable to get the phone modify rule.": "Tidak dapat memodifikasi aturan telepon.",
|
"Unable to get the phone modify rule.": "Tidak dapat memodifikasi aturan telepon.",
|
||||||
@ -161,7 +185,6 @@
|
|||||||
"the user does not exist, please sign up first": "Pengguna tidak ada, silakan daftar terlebih dahulu"
|
"the user does not exist, please sign up first": "Pengguna tidak ada, silakan daftar terlebih dahulu"
|
||||||
},
|
},
|
||||||
"webauthn": {
|
"webauthn": {
|
||||||
"Found no credentials for this user": "Tidak ditemukan kredensial untuk pengguna ini",
|
|
||||||
"Please call WebAuthnSigninBegin first": "Harap panggil WebAuthnSigninBegin terlebih dahulu"
|
"Please call WebAuthnSigninBegin first": "Harap panggil WebAuthnSigninBegin terlebih dahulu"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
},
|
},
|
||||||
"auth": {
|
"auth": {
|
||||||
"Challenge method should be S256": "Challenge method should be S256",
|
"Challenge method should be S256": "Challenge method should be S256",
|
||||||
|
"DeviceCode Invalid": "DeviceCode Invalid",
|
||||||
"Failed to create user, user information is invalid: %s": "Failed to create user, user information is invalid: %s",
|
"Failed to create user, user information is invalid: %s": "Failed to create user, user information is invalid: %s",
|
||||||
"Failed to login in: %s": "Failed to login in: %s",
|
"Failed to login in: %s": "Failed to login in: %s",
|
||||||
"Invalid token": "Invalid token",
|
"Invalid token": "Invalid token",
|
||||||
@ -21,17 +22,24 @@
|
|||||||
"The login method: login with face is not enabled for the application": "The login method: login with face is not enabled for the application",
|
"The login method: login with face is not enabled for the application": "The login method: login with face is not enabled for the application",
|
||||||
"The login method: login with password is not enabled for the application": "The login method: login with password is not enabled for the application",
|
"The login method: login with password is not enabled for the application": "The login method: login with password is not enabled for the application",
|
||||||
"The organization: %s does not exist": "The organization: %s does not exist",
|
"The organization: %s does not exist": "The organization: %s does not exist",
|
||||||
|
"The provider: %s does not exist": "The provider: %s does not exist",
|
||||||
"The provider: %s is not enabled for the application": "The provider: %s is not enabled for the application",
|
"The provider: %s is not enabled for the application": "The provider: %s is not enabled for the application",
|
||||||
"Unauthorized operation": "Unauthorized operation",
|
"Unauthorized operation": "Unauthorized operation",
|
||||||
"Unknown authentication type (not password or provider), form = %s": "Unknown authentication type (not password or provider), form = %s",
|
"Unknown authentication type (not password or provider), form = %s": "Unknown authentication type (not password or provider), form = %s",
|
||||||
"User's tag: %s is not listed in the application's tags": "User's tag: %s is not listed in the application's tags",
|
"User's tag: %s is not listed in the application's tags": "User's tag: %s is not listed in the application's tags",
|
||||||
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing"
|
"UserCode Expired": "UserCode Expired",
|
||||||
|
"UserCode Invalid": "UserCode Invalid",
|
||||||
|
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing",
|
||||||
|
"the application for user %s is not found": "the application for user %s is not found",
|
||||||
|
"the organization: %s is not found": "the organization: %s is not found"
|
||||||
},
|
},
|
||||||
"cas": {
|
"cas": {
|
||||||
"Service %s and %s do not match": "Service %s and %s do not match"
|
"Service %s and %s do not match": "Service %s and %s do not match"
|
||||||
},
|
},
|
||||||
"check": {
|
"check": {
|
||||||
|
"%s does not meet the CIDR format requirements: %s": "%s does not meet the CIDR format requirements: %s",
|
||||||
"Affiliation cannot be blank": "Affiliation cannot be blank",
|
"Affiliation cannot be blank": "Affiliation cannot be blank",
|
||||||
|
"CIDR for IP: %s should not be empty": "CIDR for IP: %s should not be empty",
|
||||||
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
||||||
"DisplayName cannot be blank": "DisplayName cannot be blank",
|
"DisplayName cannot be blank": "DisplayName cannot be blank",
|
||||||
"DisplayName is not valid real name": "DisplayName is not valid real name",
|
"DisplayName is not valid real name": "DisplayName is not valid real name",
|
||||||
@ -41,6 +49,7 @@
|
|||||||
"Empty username.": "Empty username.",
|
"Empty username.": "Empty username.",
|
||||||
"Face data does not exist, cannot log in": "Face data does not exist, cannot log in",
|
"Face data does not exist, cannot log in": "Face data does not exist, cannot log in",
|
||||||
"Face data mismatch": "Face data mismatch",
|
"Face data mismatch": "Face data mismatch",
|
||||||
|
"Failed to parse client IP: %s": "Failed to parse client IP: %s",
|
||||||
"FirstName cannot be blank": "FirstName cannot be blank",
|
"FirstName cannot be blank": "FirstName cannot be blank",
|
||||||
"Invitation code cannot be blank": "Invitation code cannot be blank",
|
"Invitation code cannot be blank": "Invitation code cannot be blank",
|
||||||
"Invitation code exhausted": "Invitation code exhausted",
|
"Invitation code exhausted": "Invitation code exhausted",
|
||||||
@ -50,6 +59,7 @@
|
|||||||
"LastName cannot be blank": "LastName cannot be blank",
|
"LastName cannot be blank": "LastName cannot be blank",
|
||||||
"Multiple accounts with same uid, please check your ldap server": "Multiple accounts with same uid, please check your ldap server",
|
"Multiple accounts with same uid, please check your ldap server": "Multiple accounts with same uid, please check your ldap server",
|
||||||
"Organization does not exist": "Organization does not exist",
|
"Organization does not exist": "Organization does not exist",
|
||||||
|
"Password cannot be empty": "Password cannot be empty",
|
||||||
"Phone already exists": "Phone already exists",
|
"Phone already exists": "Phone already exists",
|
||||||
"Phone cannot be empty": "Phone cannot be empty",
|
"Phone cannot be empty": "Phone cannot be empty",
|
||||||
"Phone number is invalid": "Phone number is invalid",
|
"Phone number is invalid": "Phone number is invalid",
|
||||||
@ -69,17 +79,27 @@
|
|||||||
"Username cannot start with a digit": "Username cannot start with a digit",
|
"Username cannot start with a digit": "Username cannot start with a digit",
|
||||||
"Username is too long (maximum is 255 characters).": "Username is too long (maximum is 255 characters).",
|
"Username is too long (maximum is 255 characters).": "Username is too long (maximum is 255 characters).",
|
||||||
"Username must have at least 2 characters": "Username must have at least 2 characters",
|
"Username must have at least 2 characters": "Username must have at least 2 characters",
|
||||||
|
"Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.": "Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.",
|
||||||
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "You have entered the wrong password or code too many times, please wait for %d minutes and try again",
|
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "You have entered the wrong password or code too many times, please wait for %d minutes and try again",
|
||||||
|
"Your IP address: %s has been banned according to the configuration of: ": "Your IP address: %s has been banned according to the configuration of: ",
|
||||||
|
"Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"": "Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"",
|
||||||
"Your region is not allow to signup by phone": "Your region is not allow to signup by phone",
|
"Your region is not allow to signup by phone": "Your region is not allow to signup by phone",
|
||||||
"password or code is incorrect": "password or code is incorrect",
|
"password or code is incorrect": "password or code is incorrect",
|
||||||
"password or code is incorrect, you have %d remaining chances": "password or code is incorrect, you have %d remaining chances",
|
"password or code is incorrect, you have %d remaining chances": "password or code is incorrect, you have %d remaining chances",
|
||||||
"unsupported password type: %s": "unsupported password type: %s"
|
"unsupported password type: %s": "unsupported password type: %s"
|
||||||
},
|
},
|
||||||
|
"enforcer": {
|
||||||
|
"the adapter: %s is not found": "the adapter: %s is not found"
|
||||||
|
},
|
||||||
"general": {
|
"general": {
|
||||||
|
"Failed to import groups": "Failed to import groups",
|
||||||
|
"Failed to import users": "Failed to import users",
|
||||||
"Missing parameter": "Missing parameter",
|
"Missing parameter": "Missing parameter",
|
||||||
|
"Only admin user can specify user": "Only admin user can specify user",
|
||||||
"Please login first": "Please login first",
|
"Please login first": "Please login first",
|
||||||
"The organization: %s should have one application at least": "The organization: %s should have one application at least",
|
"The organization: %s should have one application at least": "The organization: %s should have one application at least",
|
||||||
"The user: %s doesn't exist": "The user: %s doesn't exist",
|
"The user: %s doesn't exist": "The user: %s doesn't exist",
|
||||||
|
"Wrong userId": "Wrong userId",
|
||||||
"don't support captchaProvider: ": "don't support captchaProvider: ",
|
"don't support captchaProvider: ": "don't support captchaProvider: ",
|
||||||
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
|
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
|
||||||
"this operation requires administrator to perform": "this operation requires administrator to perform"
|
"this operation requires administrator to perform": "this operation requires administrator to perform"
|
||||||
@ -98,7 +118,8 @@
|
|||||||
"organization": {
|
"organization": {
|
||||||
"Only admin can modify the %s.": "Only admin can modify the %s.",
|
"Only admin can modify the %s.": "Only admin can modify the %s.",
|
||||||
"The %s is immutable.": "The %s is immutable.",
|
"The %s is immutable.": "The %s is immutable.",
|
||||||
"Unknown modify rule %s.": "Unknown modify rule %s."
|
"Unknown modify rule %s.": "Unknown modify rule %s.",
|
||||||
|
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
|
||||||
},
|
},
|
||||||
"permission": {
|
"permission": {
|
||||||
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
|
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
|
||||||
@ -126,6 +147,9 @@
|
|||||||
"The objectKey: %s is not allowed": "The objectKey: %s is not allowed",
|
"The objectKey: %s is not allowed": "The objectKey: %s is not allowed",
|
||||||
"The provider type: %s is not supported": "The provider type: %s is not supported"
|
"The provider type: %s is not supported": "The provider type: %s is not supported"
|
||||||
},
|
},
|
||||||
|
"subscription": {
|
||||||
|
"Error": "Error"
|
||||||
|
},
|
||||||
"token": {
|
"token": {
|
||||||
"Grant_type: %s is not supported in this application": "Grant_type: %s is not supported in this application",
|
"Grant_type: %s is not supported in this application": "Grant_type: %s is not supported in this application",
|
||||||
"Invalid application or wrong clientSecret": "Invalid application or wrong clientSecret",
|
"Invalid application or wrong clientSecret": "Invalid application or wrong clientSecret",
|
||||||
@ -135,10 +159,10 @@
|
|||||||
},
|
},
|
||||||
"user": {
|
"user": {
|
||||||
"Display name cannot be empty": "Display name cannot be empty",
|
"Display name cannot be empty": "Display name cannot be empty",
|
||||||
"New password cannot contain blank space.": "New password cannot contain blank space."
|
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
|
||||||
},
|
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
|
||||||
"user_upload": {
|
"New password cannot contain blank space.": "New password cannot contain blank space.",
|
||||||
"Failed to import users": "Failed to import users"
|
"the user's owner and name should not be empty": "the user's owner and name should not be empty"
|
||||||
},
|
},
|
||||||
"util": {
|
"util": {
|
||||||
"No application is found for userId: %s": "No application is found for userId: %s",
|
"No application is found for userId: %s": "No application is found for userId: %s",
|
||||||
@ -148,8 +172,8 @@
|
|||||||
"verification": {
|
"verification": {
|
||||||
"Invalid captcha provider.": "Invalid captcha provider.",
|
"Invalid captcha provider.": "Invalid captcha provider.",
|
||||||
"Phone number is invalid in your region %s": "Phone number is invalid in your region %s",
|
"Phone number is invalid in your region %s": "Phone number is invalid in your region %s",
|
||||||
|
"The verification code has already been used!": "The verification code has already been used!",
|
||||||
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
|
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
|
||||||
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
|
|
||||||
"Turing test failed.": "Turing test failed.",
|
"Turing test failed.": "Turing test failed.",
|
||||||
"Unable to get the email modify rule.": "Unable to get the email modify rule.",
|
"Unable to get the email modify rule.": "Unable to get the email modify rule.",
|
||||||
"Unable to get the phone modify rule.": "Unable to get the phone modify rule.",
|
"Unable to get the phone modify rule.": "Unable to get the phone modify rule.",
|
||||||
@ -161,7 +185,6 @@
|
|||||||
"the user does not exist, please sign up first": "the user does not exist, please sign up first"
|
"the user does not exist, please sign up first": "the user does not exist, please sign up first"
|
||||||
},
|
},
|
||||||
"webauthn": {
|
"webauthn": {
|
||||||
"Found no credentials for this user": "Found no credentials for this user",
|
|
||||||
"Please call WebAuthnSigninBegin first": "Please call WebAuthnSigninBegin first"
|
"Please call WebAuthnSigninBegin first": "Please call WebAuthnSigninBegin first"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
},
|
},
|
||||||
"auth": {
|
"auth": {
|
||||||
"Challenge method should be S256": "チャレンジメソッドはS256である必要があります",
|
"Challenge method should be S256": "チャレンジメソッドはS256である必要があります",
|
||||||
|
"DeviceCode Invalid": "DeviceCode Invalid",
|
||||||
"Failed to create user, user information is invalid: %s": "ユーザーの作成に失敗しました。ユーザー情報が無効です:%s",
|
"Failed to create user, user information is invalid: %s": "ユーザーの作成に失敗しました。ユーザー情報が無効です:%s",
|
||||||
"Failed to login in: %s": "ログインできませんでした:%s",
|
"Failed to login in: %s": "ログインできませんでした:%s",
|
||||||
"Invalid token": "無効なトークン",
|
"Invalid token": "無効なトークン",
|
||||||
@ -21,17 +22,24 @@
|
|||||||
"The login method: login with face is not enabled for the application": "The login method: login with face is not enabled for the application",
|
"The login method: login with face is not enabled for the application": "The login method: login with face is not enabled for the application",
|
||||||
"The login method: login with password is not enabled for the application": "ログイン方法:パスワードでのログインはアプリケーションで有効になっていません",
|
"The login method: login with password is not enabled for the application": "ログイン方法:パスワードでのログインはアプリケーションで有効になっていません",
|
||||||
"The organization: %s does not exist": "The organization: %s does not exist",
|
"The organization: %s does not exist": "The organization: %s does not exist",
|
||||||
|
"The provider: %s does not exist": "The provider: %s does not exist",
|
||||||
"The provider: %s is not enabled for the application": "プロバイダー:%sはアプリケーションでは有効化されていません",
|
"The provider: %s is not enabled for the application": "プロバイダー:%sはアプリケーションでは有効化されていません",
|
||||||
"Unauthorized operation": "不正操作",
|
"Unauthorized operation": "不正操作",
|
||||||
"Unknown authentication type (not password or provider), form = %s": "不明な認証タイプ(パスワードまたはプロバイダーではない)フォーム=%s",
|
"Unknown authentication type (not password or provider), form = %s": "不明な認証タイプ(パスワードまたはプロバイダーではない)フォーム=%s",
|
||||||
"User's tag: %s is not listed in the application's tags": "User's tag: %s is not listed in the application's tags",
|
"User's tag: %s is not listed in the application's tags": "User's tag: %s is not listed in the application's tags",
|
||||||
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing"
|
"UserCode Expired": "UserCode Expired",
|
||||||
|
"UserCode Invalid": "UserCode Invalid",
|
||||||
|
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing",
|
||||||
|
"the application for user %s is not found": "the application for user %s is not found",
|
||||||
|
"the organization: %s is not found": "the organization: %s is not found"
|
||||||
},
|
},
|
||||||
"cas": {
|
"cas": {
|
||||||
"Service %s and %s do not match": "サービス%sと%sは一致しません"
|
"Service %s and %s do not match": "サービス%sと%sは一致しません"
|
||||||
},
|
},
|
||||||
"check": {
|
"check": {
|
||||||
|
"%s does not meet the CIDR format requirements: %s": "%s does not meet the CIDR format requirements: %s",
|
||||||
"Affiliation cannot be blank": "所属は空白にできません",
|
"Affiliation cannot be blank": "所属は空白にできません",
|
||||||
|
"CIDR for IP: %s should not be empty": "CIDR for IP: %s should not be empty",
|
||||||
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
||||||
"DisplayName cannot be blank": "表示名は空白にできません",
|
"DisplayName cannot be blank": "表示名は空白にできません",
|
||||||
"DisplayName is not valid real name": "表示名は有効な実名ではありません",
|
"DisplayName is not valid real name": "表示名は有効な実名ではありません",
|
||||||
@ -41,6 +49,7 @@
|
|||||||
"Empty username.": "空のユーザー名。",
|
"Empty username.": "空のユーザー名。",
|
||||||
"Face data does not exist, cannot log in": "Face data does not exist, cannot log in",
|
"Face data does not exist, cannot log in": "Face data does not exist, cannot log in",
|
||||||
"Face data mismatch": "Face data mismatch",
|
"Face data mismatch": "Face data mismatch",
|
||||||
|
"Failed to parse client IP: %s": "Failed to parse client IP: %s",
|
||||||
"FirstName cannot be blank": "ファーストネームは空白にできません",
|
"FirstName cannot be blank": "ファーストネームは空白にできません",
|
||||||
"Invitation code cannot be blank": "Invitation code cannot be blank",
|
"Invitation code cannot be blank": "Invitation code cannot be blank",
|
||||||
"Invitation code exhausted": "Invitation code exhausted",
|
"Invitation code exhausted": "Invitation code exhausted",
|
||||||
@ -50,6 +59,7 @@
|
|||||||
"LastName cannot be blank": "姓は空白にできません",
|
"LastName cannot be blank": "姓は空白にできません",
|
||||||
"Multiple accounts with same uid, please check your ldap server": "同じuidを持つ複数のアカウントがあります。あなたのLDAPサーバーを確認してください",
|
"Multiple accounts with same uid, please check your ldap server": "同じuidを持つ複数のアカウントがあります。あなたのLDAPサーバーを確認してください",
|
||||||
"Organization does not exist": "組織は存在しません",
|
"Organization does not exist": "組織は存在しません",
|
||||||
|
"Password cannot be empty": "Password cannot be empty",
|
||||||
"Phone already exists": "電話はすでに存在しています",
|
"Phone already exists": "電話はすでに存在しています",
|
||||||
"Phone cannot be empty": "電話は空っぽにできません",
|
"Phone cannot be empty": "電話は空っぽにできません",
|
||||||
"Phone number is invalid": "電話番号が無効です",
|
"Phone number is invalid": "電話番号が無効です",
|
||||||
@ -69,17 +79,27 @@
|
|||||||
"Username cannot start with a digit": "ユーザー名は数字で始めることはできません",
|
"Username cannot start with a digit": "ユーザー名は数字で始めることはできません",
|
||||||
"Username is too long (maximum is 255 characters).": "ユーザー名が長すぎます(最大255文字)。",
|
"Username is too long (maximum is 255 characters).": "ユーザー名が長すぎます(最大255文字)。",
|
||||||
"Username must have at least 2 characters": "ユーザー名は少なくとも2文字必要です",
|
"Username must have at least 2 characters": "ユーザー名は少なくとも2文字必要です",
|
||||||
|
"Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.": "Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.",
|
||||||
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "あなたは間違ったパスワードまたはコードを何度も入力しました。%d 分間待ってから再度お試しください",
|
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "あなたは間違ったパスワードまたはコードを何度も入力しました。%d 分間待ってから再度お試しください",
|
||||||
|
"Your IP address: %s has been banned according to the configuration of: ": "Your IP address: %s has been banned according to the configuration of: ",
|
||||||
|
"Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"": "Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"",
|
||||||
"Your region is not allow to signup by phone": "あなたの地域は電話でサインアップすることができません",
|
"Your region is not allow to signup by phone": "あなたの地域は電話でサインアップすることができません",
|
||||||
"password or code is incorrect": "password or code is incorrect",
|
"password or code is incorrect": "password or code is incorrect",
|
||||||
"password or code is incorrect, you have %d remaining chances": "パスワードまたはコードが間違っています。あと%d回の試行機会があります",
|
"password or code is incorrect, you have %d remaining chances": "パスワードまたはコードが間違っています。あと%d回の試行機会があります",
|
||||||
"unsupported password type: %s": "サポートされていないパスワードタイプ:%s"
|
"unsupported password type: %s": "サポートされていないパスワードタイプ:%s"
|
||||||
},
|
},
|
||||||
|
"enforcer": {
|
||||||
|
"the adapter: %s is not found": "the adapter: %s is not found"
|
||||||
|
},
|
||||||
"general": {
|
"general": {
|
||||||
|
"Failed to import groups": "Failed to import groups",
|
||||||
|
"Failed to import users": "ユーザーのインポートに失敗しました",
|
||||||
"Missing parameter": "不足しているパラメーター",
|
"Missing parameter": "不足しているパラメーター",
|
||||||
|
"Only admin user can specify user": "Only admin user can specify user",
|
||||||
"Please login first": "最初にログインしてください",
|
"Please login first": "最初にログインしてください",
|
||||||
"The organization: %s should have one application at least": "The organization: %s should have one application at least",
|
"The organization: %s should have one application at least": "The organization: %s should have one application at least",
|
||||||
"The user: %s doesn't exist": "そのユーザー:%sは存在しません",
|
"The user: %s doesn't exist": "そのユーザー:%sは存在しません",
|
||||||
|
"Wrong userId": "Wrong userId",
|
||||||
"don't support captchaProvider: ": "captchaProviderをサポートしないでください",
|
"don't support captchaProvider: ": "captchaProviderをサポートしないでください",
|
||||||
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
|
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
|
||||||
"this operation requires administrator to perform": "this operation requires administrator to perform"
|
"this operation requires administrator to perform": "this operation requires administrator to perform"
|
||||||
@ -98,7 +118,8 @@
|
|||||||
"organization": {
|
"organization": {
|
||||||
"Only admin can modify the %s.": "管理者のみが%sを変更できます。",
|
"Only admin can modify the %s.": "管理者のみが%sを変更できます。",
|
||||||
"The %s is immutable.": "%sは不変です。",
|
"The %s is immutable.": "%sは不変です。",
|
||||||
"Unknown modify rule %s.": "未知の変更ルール%s。"
|
"Unknown modify rule %s.": "未知の変更ルール%s。",
|
||||||
|
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
|
||||||
},
|
},
|
||||||
"permission": {
|
"permission": {
|
||||||
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
|
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
|
||||||
@ -126,6 +147,9 @@
|
|||||||
"The objectKey: %s is not allowed": "オブジェクトキー %s は許可されていません",
|
"The objectKey: %s is not allowed": "オブジェクトキー %s は許可されていません",
|
||||||
"The provider type: %s is not supported": "プロバイダータイプ:%sはサポートされていません"
|
"The provider type: %s is not supported": "プロバイダータイプ:%sはサポートされていません"
|
||||||
},
|
},
|
||||||
|
"subscription": {
|
||||||
|
"Error": "Error"
|
||||||
|
},
|
||||||
"token": {
|
"token": {
|
||||||
"Grant_type: %s is not supported in this application": "grant_type:%sはこのアプリケーションでサポートされていません",
|
"Grant_type: %s is not supported in this application": "grant_type:%sはこのアプリケーションでサポートされていません",
|
||||||
"Invalid application or wrong clientSecret": "無効なアプリケーションまたは誤ったクライアントシークレットです",
|
"Invalid application or wrong clientSecret": "無効なアプリケーションまたは誤ったクライアントシークレットです",
|
||||||
@ -135,10 +159,10 @@
|
|||||||
},
|
},
|
||||||
"user": {
|
"user": {
|
||||||
"Display name cannot be empty": "表示名は空にできません",
|
"Display name cannot be empty": "表示名は空にできません",
|
||||||
"New password cannot contain blank space.": "新しいパスワードにはスペースを含めることはできません。"
|
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
|
||||||
},
|
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
|
||||||
"user_upload": {
|
"New password cannot contain blank space.": "新しいパスワードにはスペースを含めることはできません。",
|
||||||
"Failed to import users": "ユーザーのインポートに失敗しました"
|
"the user's owner and name should not be empty": "the user's owner and name should not be empty"
|
||||||
},
|
},
|
||||||
"util": {
|
"util": {
|
||||||
"No application is found for userId: %s": "ユーザーIDに対するアプリケーションが見つかりません: %s",
|
"No application is found for userId: %s": "ユーザーIDに対するアプリケーションが見つかりません: %s",
|
||||||
@ -148,8 +172,8 @@
|
|||||||
"verification": {
|
"verification": {
|
||||||
"Invalid captcha provider.": "無効なCAPTCHAプロバイダー。",
|
"Invalid captcha provider.": "無効なCAPTCHAプロバイダー。",
|
||||||
"Phone number is invalid in your region %s": "電話番号はあなたの地域で無効です %s",
|
"Phone number is invalid in your region %s": "電話番号はあなたの地域で無効です %s",
|
||||||
|
"The verification code has already been used!": "The verification code has already been used!",
|
||||||
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
|
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
|
||||||
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
|
|
||||||
"Turing test failed.": "チューリングテストは失敗しました。",
|
"Turing test failed.": "チューリングテストは失敗しました。",
|
||||||
"Unable to get the email modify rule.": "電子メール変更規則を取得できません。",
|
"Unable to get the email modify rule.": "電子メール変更規則を取得できません。",
|
||||||
"Unable to get the phone modify rule.": "電話の変更ルールを取得できません。",
|
"Unable to get the phone modify rule.": "電話の変更ルールを取得できません。",
|
||||||
@ -161,7 +185,6 @@
|
|||||||
"the user does not exist, please sign up first": "ユーザーは存在しません。まず登録してください"
|
"the user does not exist, please sign up first": "ユーザーは存在しません。まず登録してください"
|
||||||
},
|
},
|
||||||
"webauthn": {
|
"webauthn": {
|
||||||
"Found no credentials for this user": "このユーザーの資格情報が見つかりませんでした",
|
|
||||||
"Please call WebAuthnSigninBegin first": "最初にWebAuthnSigninBeginを呼び出してください"
|
"Please call WebAuthnSigninBegin first": "最初にWebAuthnSigninBeginを呼び出してください"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
},
|
},
|
||||||
"auth": {
|
"auth": {
|
||||||
"Challenge method should be S256": "Challenge method should be S256",
|
"Challenge method should be S256": "Challenge method should be S256",
|
||||||
|
"DeviceCode Invalid": "DeviceCode Invalid",
|
||||||
"Failed to create user, user information is invalid: %s": "Failed to create user, user information is invalid: %s",
|
"Failed to create user, user information is invalid: %s": "Failed to create user, user information is invalid: %s",
|
||||||
"Failed to login in: %s": "Failed to login in: %s",
|
"Failed to login in: %s": "Failed to login in: %s",
|
||||||
"Invalid token": "Invalid token",
|
"Invalid token": "Invalid token",
|
||||||
@ -21,17 +22,24 @@
|
|||||||
"The login method: login with face is not enabled for the application": "The login method: login with face is not enabled for the application",
|
"The login method: login with face is not enabled for the application": "The login method: login with face is not enabled for the application",
|
||||||
"The login method: login with password is not enabled for the application": "The login method: login with password is not enabled for the application",
|
"The login method: login with password is not enabled for the application": "The login method: login with password is not enabled for the application",
|
||||||
"The organization: %s does not exist": "The organization: %s does not exist",
|
"The organization: %s does not exist": "The organization: %s does not exist",
|
||||||
|
"The provider: %s does not exist": "The provider: %s does not exist",
|
||||||
"The provider: %s is not enabled for the application": "The provider: %s is not enabled for the application",
|
"The provider: %s is not enabled for the application": "The provider: %s is not enabled for the application",
|
||||||
"Unauthorized operation": "Unauthorized operation",
|
"Unauthorized operation": "Unauthorized operation",
|
||||||
"Unknown authentication type (not password or provider), form = %s": "Unknown authentication type (not password or provider), form = %s",
|
"Unknown authentication type (not password or provider), form = %s": "Unknown authentication type (not password or provider), form = %s",
|
||||||
"User's tag: %s is not listed in the application's tags": "User's tag: %s is not listed in the application's tags",
|
"User's tag: %s is not listed in the application's tags": "User's tag: %s is not listed in the application's tags",
|
||||||
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing"
|
"UserCode Expired": "UserCode Expired",
|
||||||
|
"UserCode Invalid": "UserCode Invalid",
|
||||||
|
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing",
|
||||||
|
"the application for user %s is not found": "the application for user %s is not found",
|
||||||
|
"the organization: %s is not found": "the organization: %s is not found"
|
||||||
},
|
},
|
||||||
"cas": {
|
"cas": {
|
||||||
"Service %s and %s do not match": "Service %s and %s do not match"
|
"Service %s and %s do not match": "Service %s and %s do not match"
|
||||||
},
|
},
|
||||||
"check": {
|
"check": {
|
||||||
|
"%s does not meet the CIDR format requirements: %s": "%s does not meet the CIDR format requirements: %s",
|
||||||
"Affiliation cannot be blank": "Affiliation cannot be blank",
|
"Affiliation cannot be blank": "Affiliation cannot be blank",
|
||||||
|
"CIDR for IP: %s should not be empty": "CIDR for IP: %s should not be empty",
|
||||||
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
||||||
"DisplayName cannot be blank": "DisplayName cannot be blank",
|
"DisplayName cannot be blank": "DisplayName cannot be blank",
|
||||||
"DisplayName is not valid real name": "DisplayName is not valid real name",
|
"DisplayName is not valid real name": "DisplayName is not valid real name",
|
||||||
@ -41,6 +49,7 @@
|
|||||||
"Empty username.": "Empty username.",
|
"Empty username.": "Empty username.",
|
||||||
"Face data does not exist, cannot log in": "Face data does not exist, cannot log in",
|
"Face data does not exist, cannot log in": "Face data does not exist, cannot log in",
|
||||||
"Face data mismatch": "Face data mismatch",
|
"Face data mismatch": "Face data mismatch",
|
||||||
|
"Failed to parse client IP: %s": "Failed to parse client IP: %s",
|
||||||
"FirstName cannot be blank": "FirstName cannot be blank",
|
"FirstName cannot be blank": "FirstName cannot be blank",
|
||||||
"Invitation code cannot be blank": "Invitation code cannot be blank",
|
"Invitation code cannot be blank": "Invitation code cannot be blank",
|
||||||
"Invitation code exhausted": "Invitation code exhausted",
|
"Invitation code exhausted": "Invitation code exhausted",
|
||||||
@ -50,6 +59,7 @@
|
|||||||
"LastName cannot be blank": "LastName cannot be blank",
|
"LastName cannot be blank": "LastName cannot be blank",
|
||||||
"Multiple accounts with same uid, please check your ldap server": "Multiple accounts with same uid, please check your ldap server",
|
"Multiple accounts with same uid, please check your ldap server": "Multiple accounts with same uid, please check your ldap server",
|
||||||
"Organization does not exist": "Organization does not exist",
|
"Organization does not exist": "Organization does not exist",
|
||||||
|
"Password cannot be empty": "Password cannot be empty",
|
||||||
"Phone already exists": "Phone already exists",
|
"Phone already exists": "Phone already exists",
|
||||||
"Phone cannot be empty": "Phone cannot be empty",
|
"Phone cannot be empty": "Phone cannot be empty",
|
||||||
"Phone number is invalid": "Phone number is invalid",
|
"Phone number is invalid": "Phone number is invalid",
|
||||||
@ -69,17 +79,27 @@
|
|||||||
"Username cannot start with a digit": "Username cannot start with a digit",
|
"Username cannot start with a digit": "Username cannot start with a digit",
|
||||||
"Username is too long (maximum is 255 characters).": "Username is too long (maximum is 255 characters).",
|
"Username is too long (maximum is 255 characters).": "Username is too long (maximum is 255 characters).",
|
||||||
"Username must have at least 2 characters": "Username must have at least 2 characters",
|
"Username must have at least 2 characters": "Username must have at least 2 characters",
|
||||||
|
"Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.": "Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.",
|
||||||
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "You have entered the wrong password or code too many times, please wait for %d minutes and try again",
|
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "You have entered the wrong password or code too many times, please wait for %d minutes and try again",
|
||||||
|
"Your IP address: %s has been banned according to the configuration of: ": "Your IP address: %s has been banned according to the configuration of: ",
|
||||||
|
"Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"": "Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"",
|
||||||
"Your region is not allow to signup by phone": "Your region is not allow to signup by phone",
|
"Your region is not allow to signup by phone": "Your region is not allow to signup by phone",
|
||||||
"password or code is incorrect": "password or code is incorrect",
|
"password or code is incorrect": "password or code is incorrect",
|
||||||
"password or code is incorrect, you have %d remaining chances": "password or code is incorrect, you have %d remaining chances",
|
"password or code is incorrect, you have %d remaining chances": "password or code is incorrect, you have %d remaining chances",
|
||||||
"unsupported password type: %s": "unsupported password type: %s"
|
"unsupported password type: %s": "unsupported password type: %s"
|
||||||
},
|
},
|
||||||
|
"enforcer": {
|
||||||
|
"the adapter: %s is not found": "the adapter: %s is not found"
|
||||||
|
},
|
||||||
"general": {
|
"general": {
|
||||||
|
"Failed to import groups": "Failed to import groups",
|
||||||
|
"Failed to import users": "Failed to import users",
|
||||||
"Missing parameter": "Missing parameter",
|
"Missing parameter": "Missing parameter",
|
||||||
|
"Only admin user can specify user": "Only admin user can specify user",
|
||||||
"Please login first": "Please login first",
|
"Please login first": "Please login first",
|
||||||
"The organization: %s should have one application at least": "The organization: %s should have one application at least",
|
"The organization: %s should have one application at least": "The organization: %s should have one application at least",
|
||||||
"The user: %s doesn't exist": "The user: %s doesn't exist",
|
"The user: %s doesn't exist": "The user: %s doesn't exist",
|
||||||
|
"Wrong userId": "Wrong userId",
|
||||||
"don't support captchaProvider: ": "don't support captchaProvider: ",
|
"don't support captchaProvider: ": "don't support captchaProvider: ",
|
||||||
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
|
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
|
||||||
"this operation requires administrator to perform": "this operation requires administrator to perform"
|
"this operation requires administrator to perform": "this operation requires administrator to perform"
|
||||||
@ -98,7 +118,8 @@
|
|||||||
"organization": {
|
"organization": {
|
||||||
"Only admin can modify the %s.": "Only admin can modify the %s.",
|
"Only admin can modify the %s.": "Only admin can modify the %s.",
|
||||||
"The %s is immutable.": "The %s is immutable.",
|
"The %s is immutable.": "The %s is immutable.",
|
||||||
"Unknown modify rule %s.": "Unknown modify rule %s."
|
"Unknown modify rule %s.": "Unknown modify rule %s.",
|
||||||
|
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
|
||||||
},
|
},
|
||||||
"permission": {
|
"permission": {
|
||||||
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
|
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
|
||||||
@ -126,6 +147,9 @@
|
|||||||
"The objectKey: %s is not allowed": "The objectKey: %s is not allowed",
|
"The objectKey: %s is not allowed": "The objectKey: %s is not allowed",
|
||||||
"The provider type: %s is not supported": "The provider type: %s is not supported"
|
"The provider type: %s is not supported": "The provider type: %s is not supported"
|
||||||
},
|
},
|
||||||
|
"subscription": {
|
||||||
|
"Error": "Error"
|
||||||
|
},
|
||||||
"token": {
|
"token": {
|
||||||
"Grant_type: %s is not supported in this application": "Grant_type: %s is not supported in this application",
|
"Grant_type: %s is not supported in this application": "Grant_type: %s is not supported in this application",
|
||||||
"Invalid application or wrong clientSecret": "Invalid application or wrong clientSecret",
|
"Invalid application or wrong clientSecret": "Invalid application or wrong clientSecret",
|
||||||
@ -135,10 +159,10 @@
|
|||||||
},
|
},
|
||||||
"user": {
|
"user": {
|
||||||
"Display name cannot be empty": "Display name cannot be empty",
|
"Display name cannot be empty": "Display name cannot be empty",
|
||||||
"New password cannot contain blank space.": "New password cannot contain blank space."
|
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
|
||||||
},
|
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
|
||||||
"user_upload": {
|
"New password cannot contain blank space.": "New password cannot contain blank space.",
|
||||||
"Failed to import users": "Failed to import users"
|
"the user's owner and name should not be empty": "the user's owner and name should not be empty"
|
||||||
},
|
},
|
||||||
"util": {
|
"util": {
|
||||||
"No application is found for userId: %s": "No application is found for userId: %s",
|
"No application is found for userId: %s": "No application is found for userId: %s",
|
||||||
@ -148,8 +172,8 @@
|
|||||||
"verification": {
|
"verification": {
|
||||||
"Invalid captcha provider.": "Invalid captcha provider.",
|
"Invalid captcha provider.": "Invalid captcha provider.",
|
||||||
"Phone number is invalid in your region %s": "Phone number is invalid in your region %s",
|
"Phone number is invalid in your region %s": "Phone number is invalid in your region %s",
|
||||||
|
"The verification code has already been used!": "The verification code has already been used!",
|
||||||
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
|
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
|
||||||
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
|
|
||||||
"Turing test failed.": "Turing test failed.",
|
"Turing test failed.": "Turing test failed.",
|
||||||
"Unable to get the email modify rule.": "Unable to get the email modify rule.",
|
"Unable to get the email modify rule.": "Unable to get the email modify rule.",
|
||||||
"Unable to get the phone modify rule.": "Unable to get the phone modify rule.",
|
"Unable to get the phone modify rule.": "Unable to get the phone modify rule.",
|
||||||
@ -161,7 +185,6 @@
|
|||||||
"the user does not exist, please sign up first": "the user does not exist, please sign up first"
|
"the user does not exist, please sign up first": "the user does not exist, please sign up first"
|
||||||
},
|
},
|
||||||
"webauthn": {
|
"webauthn": {
|
||||||
"Found no credentials for this user": "Found no credentials for this user",
|
|
||||||
"Please call WebAuthnSigninBegin first": "Please call WebAuthnSigninBegin first"
|
"Please call WebAuthnSigninBegin first": "Please call WebAuthnSigninBegin first"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
},
|
},
|
||||||
"auth": {
|
"auth": {
|
||||||
"Challenge method should be S256": "도전 방식은 S256이어야 합니다",
|
"Challenge method should be S256": "도전 방식은 S256이어야 합니다",
|
||||||
|
"DeviceCode Invalid": "DeviceCode Invalid",
|
||||||
"Failed to create user, user information is invalid: %s": "사용자를 만들지 못했습니다. 사용자 정보가 잘못되었습니다: %s",
|
"Failed to create user, user information is invalid: %s": "사용자를 만들지 못했습니다. 사용자 정보가 잘못되었습니다: %s",
|
||||||
"Failed to login in: %s": "로그인에 실패했습니다.: %s",
|
"Failed to login in: %s": "로그인에 실패했습니다.: %s",
|
||||||
"Invalid token": "유효하지 않은 토큰",
|
"Invalid token": "유효하지 않은 토큰",
|
||||||
@ -21,17 +22,24 @@
|
|||||||
"The login method: login with face is not enabled for the application": "The login method: login with face is not enabled for the application",
|
"The login method: login with face is not enabled for the application": "The login method: login with face is not enabled for the application",
|
||||||
"The login method: login with password is not enabled for the application": "어플리케이션에서는 암호를 사용한 로그인 방법이 활성화되어 있지 않습니다",
|
"The login method: login with password is not enabled for the application": "어플리케이션에서는 암호를 사용한 로그인 방법이 활성화되어 있지 않습니다",
|
||||||
"The organization: %s does not exist": "The organization: %s does not exist",
|
"The organization: %s does not exist": "The organization: %s does not exist",
|
||||||
|
"The provider: %s does not exist": "The provider: %s does not exist",
|
||||||
"The provider: %s is not enabled for the application": "제공자 %s은(는) 응용 프로그램에서 활성화되어 있지 않습니다",
|
"The provider: %s is not enabled for the application": "제공자 %s은(는) 응용 프로그램에서 활성화되어 있지 않습니다",
|
||||||
"Unauthorized operation": "무단 조작",
|
"Unauthorized operation": "무단 조작",
|
||||||
"Unknown authentication type (not password or provider), form = %s": "알 수 없는 인증 유형(암호 또는 공급자가 아님), 폼 = %s",
|
"Unknown authentication type (not password or provider), form = %s": "알 수 없는 인증 유형(암호 또는 공급자가 아님), 폼 = %s",
|
||||||
"User's tag: %s is not listed in the application's tags": "User's tag: %s is not listed in the application's tags",
|
"User's tag: %s is not listed in the application's tags": "User's tag: %s is not listed in the application's tags",
|
||||||
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing"
|
"UserCode Expired": "UserCode Expired",
|
||||||
|
"UserCode Invalid": "UserCode Invalid",
|
||||||
|
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing",
|
||||||
|
"the application for user %s is not found": "the application for user %s is not found",
|
||||||
|
"the organization: %s is not found": "the organization: %s is not found"
|
||||||
},
|
},
|
||||||
"cas": {
|
"cas": {
|
||||||
"Service %s and %s do not match": "서비스 %s와 %s는 일치하지 않습니다"
|
"Service %s and %s do not match": "서비스 %s와 %s는 일치하지 않습니다"
|
||||||
},
|
},
|
||||||
"check": {
|
"check": {
|
||||||
|
"%s does not meet the CIDR format requirements: %s": "%s does not meet the CIDR format requirements: %s",
|
||||||
"Affiliation cannot be blank": "소속은 비워 둘 수 없습니다",
|
"Affiliation cannot be blank": "소속은 비워 둘 수 없습니다",
|
||||||
|
"CIDR for IP: %s should not be empty": "CIDR for IP: %s should not be empty",
|
||||||
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
||||||
"DisplayName cannot be blank": "DisplayName는 비어 있을 수 없습니다",
|
"DisplayName cannot be blank": "DisplayName는 비어 있을 수 없습니다",
|
||||||
"DisplayName is not valid real name": "DisplayName는 유효한 실제 이름이 아닙니다",
|
"DisplayName is not valid real name": "DisplayName는 유효한 실제 이름이 아닙니다",
|
||||||
@ -41,6 +49,7 @@
|
|||||||
"Empty username.": "빈 사용자 이름.",
|
"Empty username.": "빈 사용자 이름.",
|
||||||
"Face data does not exist, cannot log in": "Face data does not exist, cannot log in",
|
"Face data does not exist, cannot log in": "Face data does not exist, cannot log in",
|
||||||
"Face data mismatch": "Face data mismatch",
|
"Face data mismatch": "Face data mismatch",
|
||||||
|
"Failed to parse client IP: %s": "Failed to parse client IP: %s",
|
||||||
"FirstName cannot be blank": "이름은 공백일 수 없습니다",
|
"FirstName cannot be blank": "이름은 공백일 수 없습니다",
|
||||||
"Invitation code cannot be blank": "Invitation code cannot be blank",
|
"Invitation code cannot be blank": "Invitation code cannot be blank",
|
||||||
"Invitation code exhausted": "Invitation code exhausted",
|
"Invitation code exhausted": "Invitation code exhausted",
|
||||||
@ -50,6 +59,7 @@
|
|||||||
"LastName cannot be blank": "성은 비어 있을 수 없습니다",
|
"LastName cannot be blank": "성은 비어 있을 수 없습니다",
|
||||||
"Multiple accounts with same uid, please check your ldap server": "동일한 UID를 가진 여러 계정이 있습니다. LDAP 서버를 확인해주세요",
|
"Multiple accounts with same uid, please check your ldap server": "동일한 UID를 가진 여러 계정이 있습니다. LDAP 서버를 확인해주세요",
|
||||||
"Organization does not exist": "조직은 존재하지 않습니다",
|
"Organization does not exist": "조직은 존재하지 않습니다",
|
||||||
|
"Password cannot be empty": "Password cannot be empty",
|
||||||
"Phone already exists": "전화기는 이미 존재합니다",
|
"Phone already exists": "전화기는 이미 존재합니다",
|
||||||
"Phone cannot be empty": "전화는 비워 둘 수 없습니다",
|
"Phone cannot be empty": "전화는 비워 둘 수 없습니다",
|
||||||
"Phone number is invalid": "전화번호가 유효하지 않습니다",
|
"Phone number is invalid": "전화번호가 유효하지 않습니다",
|
||||||
@ -69,17 +79,27 @@
|
|||||||
"Username cannot start with a digit": "사용자 이름은 숫자로 시작할 수 없습니다",
|
"Username cannot start with a digit": "사용자 이름은 숫자로 시작할 수 없습니다",
|
||||||
"Username is too long (maximum is 255 characters).": "사용자 이름이 너무 깁니다 (최대 255자).",
|
"Username is too long (maximum is 255 characters).": "사용자 이름이 너무 깁니다 (최대 255자).",
|
||||||
"Username must have at least 2 characters": "사용자 이름은 적어도 2개의 문자가 있어야 합니다",
|
"Username must have at least 2 characters": "사용자 이름은 적어도 2개의 문자가 있어야 합니다",
|
||||||
|
"Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.": "Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.",
|
||||||
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "올바르지 않은 비밀번호나 코드를 여러 번 입력했습니다. %d분 동안 기다리신 후 다시 시도해주세요",
|
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "올바르지 않은 비밀번호나 코드를 여러 번 입력했습니다. %d분 동안 기다리신 후 다시 시도해주세요",
|
||||||
|
"Your IP address: %s has been banned according to the configuration of: ": "Your IP address: %s has been banned according to the configuration of: ",
|
||||||
|
"Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"": "Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"",
|
||||||
"Your region is not allow to signup by phone": "당신의 지역은 전화로 가입할 수 없습니다",
|
"Your region is not allow to signup by phone": "당신의 지역은 전화로 가입할 수 없습니다",
|
||||||
"password or code is incorrect": "password or code is incorrect",
|
"password or code is incorrect": "password or code is incorrect",
|
||||||
"password or code is incorrect, you have %d remaining chances": "암호 또는 코드가 올바르지 않습니다. %d번의 기회가 남아 있습니다",
|
"password or code is incorrect, you have %d remaining chances": "암호 또는 코드가 올바르지 않습니다. %d번의 기회가 남아 있습니다",
|
||||||
"unsupported password type: %s": "지원되지 않는 암호 유형: %s"
|
"unsupported password type: %s": "지원되지 않는 암호 유형: %s"
|
||||||
},
|
},
|
||||||
|
"enforcer": {
|
||||||
|
"the adapter: %s is not found": "the adapter: %s is not found"
|
||||||
|
},
|
||||||
"general": {
|
"general": {
|
||||||
|
"Failed to import groups": "Failed to import groups",
|
||||||
|
"Failed to import users": "사용자 가져오기를 실패했습니다",
|
||||||
"Missing parameter": "누락된 매개변수",
|
"Missing parameter": "누락된 매개변수",
|
||||||
|
"Only admin user can specify user": "Only admin user can specify user",
|
||||||
"Please login first": "먼저 로그인 하십시오",
|
"Please login first": "먼저 로그인 하십시오",
|
||||||
"The organization: %s should have one application at least": "The organization: %s should have one application at least",
|
"The organization: %s should have one application at least": "The organization: %s should have one application at least",
|
||||||
"The user: %s doesn't exist": "사용자 %s는 존재하지 않습니다",
|
"The user: %s doesn't exist": "사용자 %s는 존재하지 않습니다",
|
||||||
|
"Wrong userId": "Wrong userId",
|
||||||
"don't support captchaProvider: ": "CaptchaProvider를 지원하지 마세요",
|
"don't support captchaProvider: ": "CaptchaProvider를 지원하지 마세요",
|
||||||
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
|
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
|
||||||
"this operation requires administrator to perform": "this operation requires administrator to perform"
|
"this operation requires administrator to perform": "this operation requires administrator to perform"
|
||||||
@ -98,7 +118,8 @@
|
|||||||
"organization": {
|
"organization": {
|
||||||
"Only admin can modify the %s.": "관리자만 %s을(를) 수정할 수 있습니다.",
|
"Only admin can modify the %s.": "관리자만 %s을(를) 수정할 수 있습니다.",
|
||||||
"The %s is immutable.": "%s 는 변경할 수 없습니다.",
|
"The %s is immutable.": "%s 는 변경할 수 없습니다.",
|
||||||
"Unknown modify rule %s.": "미확인 수정 규칙 %s."
|
"Unknown modify rule %s.": "미확인 수정 규칙 %s.",
|
||||||
|
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
|
||||||
},
|
},
|
||||||
"permission": {
|
"permission": {
|
||||||
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
|
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
|
||||||
@ -126,6 +147,9 @@
|
|||||||
"The objectKey: %s is not allowed": "객체 키 : %s 는 허용되지 않습니다",
|
"The objectKey: %s is not allowed": "객체 키 : %s 는 허용되지 않습니다",
|
||||||
"The provider type: %s is not supported": "제공자 유형: %s은/는 지원되지 않습니다"
|
"The provider type: %s is not supported": "제공자 유형: %s은/는 지원되지 않습니다"
|
||||||
},
|
},
|
||||||
|
"subscription": {
|
||||||
|
"Error": "Error"
|
||||||
|
},
|
||||||
"token": {
|
"token": {
|
||||||
"Grant_type: %s is not supported in this application": "그랜트 유형: %s은(는) 이 어플리케이션에서 지원되지 않습니다",
|
"Grant_type: %s is not supported in this application": "그랜트 유형: %s은(는) 이 어플리케이션에서 지원되지 않습니다",
|
||||||
"Invalid application or wrong clientSecret": "잘못된 어플리케이션 또는 올바르지 않은 클라이언트 시크릿입니다",
|
"Invalid application or wrong clientSecret": "잘못된 어플리케이션 또는 올바르지 않은 클라이언트 시크릿입니다",
|
||||||
@ -135,10 +159,10 @@
|
|||||||
},
|
},
|
||||||
"user": {
|
"user": {
|
||||||
"Display name cannot be empty": "디스플레이 이름은 비어 있을 수 없습니다",
|
"Display name cannot be empty": "디스플레이 이름은 비어 있을 수 없습니다",
|
||||||
"New password cannot contain blank space.": "새 비밀번호에는 공백이 포함될 수 없습니다."
|
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
|
||||||
},
|
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
|
||||||
"user_upload": {
|
"New password cannot contain blank space.": "새 비밀번호에는 공백이 포함될 수 없습니다.",
|
||||||
"Failed to import users": "사용자 가져오기를 실패했습니다"
|
"the user's owner and name should not be empty": "the user's owner and name should not be empty"
|
||||||
},
|
},
|
||||||
"util": {
|
"util": {
|
||||||
"No application is found for userId: %s": "어플리케이션을 찾을 수 없습니다. userId: %s",
|
"No application is found for userId: %s": "어플리케이션을 찾을 수 없습니다. userId: %s",
|
||||||
@ -148,8 +172,8 @@
|
|||||||
"verification": {
|
"verification": {
|
||||||
"Invalid captcha provider.": "잘못된 captcha 제공자입니다.",
|
"Invalid captcha provider.": "잘못된 captcha 제공자입니다.",
|
||||||
"Phone number is invalid in your region %s": "전화 번호가 당신의 지역 %s에서 유효하지 않습니다",
|
"Phone number is invalid in your region %s": "전화 번호가 당신의 지역 %s에서 유효하지 않습니다",
|
||||||
|
"The verification code has already been used!": "The verification code has already been used!",
|
||||||
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
|
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
|
||||||
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
|
|
||||||
"Turing test failed.": "튜링 테스트 실패.",
|
"Turing test failed.": "튜링 테스트 실패.",
|
||||||
"Unable to get the email modify rule.": "이메일 수정 규칙을 가져올 수 없습니다.",
|
"Unable to get the email modify rule.": "이메일 수정 규칙을 가져올 수 없습니다.",
|
||||||
"Unable to get the phone modify rule.": "전화 수정 규칙을 가져올 수 없습니다.",
|
"Unable to get the phone modify rule.": "전화 수정 규칙을 가져올 수 없습니다.",
|
||||||
@ -161,7 +185,6 @@
|
|||||||
"the user does not exist, please sign up first": "사용자가 존재하지 않습니다. 먼저 회원 가입 해주세요"
|
"the user does not exist, please sign up first": "사용자가 존재하지 않습니다. 먼저 회원 가입 해주세요"
|
||||||
},
|
},
|
||||||
"webauthn": {
|
"webauthn": {
|
||||||
"Found no credentials for this user": "이 사용자의 자격 증명을 찾을 수 없습니다",
|
|
||||||
"Please call WebAuthnSigninBegin first": "WebAuthnSigninBegin을 먼저 호출해주세요"
|
"Please call WebAuthnSigninBegin first": "WebAuthnSigninBegin을 먼저 호출해주세요"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
},
|
},
|
||||||
"auth": {
|
"auth": {
|
||||||
"Challenge method should be S256": "Challenge method should be S256",
|
"Challenge method should be S256": "Challenge method should be S256",
|
||||||
|
"DeviceCode Invalid": "DeviceCode Invalid",
|
||||||
"Failed to create user, user information is invalid: %s": "Failed to create user, user information is invalid: %s",
|
"Failed to create user, user information is invalid: %s": "Failed to create user, user information is invalid: %s",
|
||||||
"Failed to login in: %s": "Failed to login in: %s",
|
"Failed to login in: %s": "Failed to login in: %s",
|
||||||
"Invalid token": "Invalid token",
|
"Invalid token": "Invalid token",
|
||||||
@ -21,17 +22,24 @@
|
|||||||
"The login method: login with face is not enabled for the application": "The login method: login with face is not enabled for the application",
|
"The login method: login with face is not enabled for the application": "The login method: login with face is not enabled for the application",
|
||||||
"The login method: login with password is not enabled for the application": "The login method: login with password is not enabled for the application",
|
"The login method: login with password is not enabled for the application": "The login method: login with password is not enabled for the application",
|
||||||
"The organization: %s does not exist": "The organization: %s does not exist",
|
"The organization: %s does not exist": "The organization: %s does not exist",
|
||||||
|
"The provider: %s does not exist": "The provider: %s does not exist",
|
||||||
"The provider: %s is not enabled for the application": "The provider: %s is not enabled for the application",
|
"The provider: %s is not enabled for the application": "The provider: %s is not enabled for the application",
|
||||||
"Unauthorized operation": "Unauthorized operation",
|
"Unauthorized operation": "Unauthorized operation",
|
||||||
"Unknown authentication type (not password or provider), form = %s": "Unknown authentication type (not password or provider), form = %s",
|
"Unknown authentication type (not password or provider), form = %s": "Unknown authentication type (not password or provider), form = %s",
|
||||||
"User's tag: %s is not listed in the application's tags": "User's tag: %s is not listed in the application's tags",
|
"User's tag: %s is not listed in the application's tags": "User's tag: %s is not listed in the application's tags",
|
||||||
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing"
|
"UserCode Expired": "UserCode Expired",
|
||||||
|
"UserCode Invalid": "UserCode Invalid",
|
||||||
|
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing",
|
||||||
|
"the application for user %s is not found": "the application for user %s is not found",
|
||||||
|
"the organization: %s is not found": "the organization: %s is not found"
|
||||||
},
|
},
|
||||||
"cas": {
|
"cas": {
|
||||||
"Service %s and %s do not match": "Service %s and %s do not match"
|
"Service %s and %s do not match": "Service %s and %s do not match"
|
||||||
},
|
},
|
||||||
"check": {
|
"check": {
|
||||||
|
"%s does not meet the CIDR format requirements: %s": "%s does not meet the CIDR format requirements: %s",
|
||||||
"Affiliation cannot be blank": "Affiliation cannot be blank",
|
"Affiliation cannot be blank": "Affiliation cannot be blank",
|
||||||
|
"CIDR for IP: %s should not be empty": "CIDR for IP: %s should not be empty",
|
||||||
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
||||||
"DisplayName cannot be blank": "DisplayName cannot be blank",
|
"DisplayName cannot be blank": "DisplayName cannot be blank",
|
||||||
"DisplayName is not valid real name": "DisplayName is not valid real name",
|
"DisplayName is not valid real name": "DisplayName is not valid real name",
|
||||||
@ -41,6 +49,7 @@
|
|||||||
"Empty username.": "Empty username.",
|
"Empty username.": "Empty username.",
|
||||||
"Face data does not exist, cannot log in": "Face data does not exist, cannot log in",
|
"Face data does not exist, cannot log in": "Face data does not exist, cannot log in",
|
||||||
"Face data mismatch": "Face data mismatch",
|
"Face data mismatch": "Face data mismatch",
|
||||||
|
"Failed to parse client IP: %s": "Failed to parse client IP: %s",
|
||||||
"FirstName cannot be blank": "FirstName cannot be blank",
|
"FirstName cannot be blank": "FirstName cannot be blank",
|
||||||
"Invitation code cannot be blank": "Invitation code cannot be blank",
|
"Invitation code cannot be blank": "Invitation code cannot be blank",
|
||||||
"Invitation code exhausted": "Invitation code exhausted",
|
"Invitation code exhausted": "Invitation code exhausted",
|
||||||
@ -50,6 +59,7 @@
|
|||||||
"LastName cannot be blank": "LastName cannot be blank",
|
"LastName cannot be blank": "LastName cannot be blank",
|
||||||
"Multiple accounts with same uid, please check your ldap server": "Multiple accounts with same uid, please check your ldap server",
|
"Multiple accounts with same uid, please check your ldap server": "Multiple accounts with same uid, please check your ldap server",
|
||||||
"Organization does not exist": "Organization does not exist",
|
"Organization does not exist": "Organization does not exist",
|
||||||
|
"Password cannot be empty": "Password cannot be empty",
|
||||||
"Phone already exists": "Phone already exists",
|
"Phone already exists": "Phone already exists",
|
||||||
"Phone cannot be empty": "Phone cannot be empty",
|
"Phone cannot be empty": "Phone cannot be empty",
|
||||||
"Phone number is invalid": "Phone number is invalid",
|
"Phone number is invalid": "Phone number is invalid",
|
||||||
@ -69,17 +79,27 @@
|
|||||||
"Username cannot start with a digit": "Username cannot start with a digit",
|
"Username cannot start with a digit": "Username cannot start with a digit",
|
||||||
"Username is too long (maximum is 255 characters).": "Username is too long (maximum is 255 characters).",
|
"Username is too long (maximum is 255 characters).": "Username is too long (maximum is 255 characters).",
|
||||||
"Username must have at least 2 characters": "Username must have at least 2 characters",
|
"Username must have at least 2 characters": "Username must have at least 2 characters",
|
||||||
|
"Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.": "Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.",
|
||||||
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "You have entered the wrong password or code too many times, please wait for %d minutes and try again",
|
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "You have entered the wrong password or code too many times, please wait for %d minutes and try again",
|
||||||
|
"Your IP address: %s has been banned according to the configuration of: ": "Your IP address: %s has been banned according to the configuration of: ",
|
||||||
|
"Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"": "Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"",
|
||||||
"Your region is not allow to signup by phone": "Your region is not allow to signup by phone",
|
"Your region is not allow to signup by phone": "Your region is not allow to signup by phone",
|
||||||
"password or code is incorrect": "password or code is incorrect",
|
"password or code is incorrect": "password or code is incorrect",
|
||||||
"password or code is incorrect, you have %d remaining chances": "password or code is incorrect, you have %d remaining chances",
|
"password or code is incorrect, you have %d remaining chances": "password or code is incorrect, you have %d remaining chances",
|
||||||
"unsupported password type: %s": "unsupported password type: %s"
|
"unsupported password type: %s": "unsupported password type: %s"
|
||||||
},
|
},
|
||||||
|
"enforcer": {
|
||||||
|
"the adapter: %s is not found": "the adapter: %s is not found"
|
||||||
|
},
|
||||||
"general": {
|
"general": {
|
||||||
|
"Failed to import groups": "Failed to import groups",
|
||||||
|
"Failed to import users": "Failed to import users",
|
||||||
"Missing parameter": "Missing parameter",
|
"Missing parameter": "Missing parameter",
|
||||||
|
"Only admin user can specify user": "Only admin user can specify user",
|
||||||
"Please login first": "Please login first",
|
"Please login first": "Please login first",
|
||||||
"The organization: %s should have one application at least": "The organization: %s should have one application at least",
|
"The organization: %s should have one application at least": "The organization: %s should have one application at least",
|
||||||
"The user: %s doesn't exist": "The user: %s doesn't exist",
|
"The user: %s doesn't exist": "The user: %s doesn't exist",
|
||||||
|
"Wrong userId": "Wrong userId",
|
||||||
"don't support captchaProvider: ": "don't support captchaProvider: ",
|
"don't support captchaProvider: ": "don't support captchaProvider: ",
|
||||||
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
|
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
|
||||||
"this operation requires administrator to perform": "this operation requires administrator to perform"
|
"this operation requires administrator to perform": "this operation requires administrator to perform"
|
||||||
@ -98,7 +118,8 @@
|
|||||||
"organization": {
|
"organization": {
|
||||||
"Only admin can modify the %s.": "Only admin can modify the %s.",
|
"Only admin can modify the %s.": "Only admin can modify the %s.",
|
||||||
"The %s is immutable.": "The %s is immutable.",
|
"The %s is immutable.": "The %s is immutable.",
|
||||||
"Unknown modify rule %s.": "Unknown modify rule %s."
|
"Unknown modify rule %s.": "Unknown modify rule %s.",
|
||||||
|
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
|
||||||
},
|
},
|
||||||
"permission": {
|
"permission": {
|
||||||
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
|
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
|
||||||
@ -126,6 +147,9 @@
|
|||||||
"The objectKey: %s is not allowed": "The objectKey: %s is not allowed",
|
"The objectKey: %s is not allowed": "The objectKey: %s is not allowed",
|
||||||
"The provider type: %s is not supported": "The provider type: %s is not supported"
|
"The provider type: %s is not supported": "The provider type: %s is not supported"
|
||||||
},
|
},
|
||||||
|
"subscription": {
|
||||||
|
"Error": "Error"
|
||||||
|
},
|
||||||
"token": {
|
"token": {
|
||||||
"Grant_type: %s is not supported in this application": "Grant_type: %s is not supported in this application",
|
"Grant_type: %s is not supported in this application": "Grant_type: %s is not supported in this application",
|
||||||
"Invalid application or wrong clientSecret": "Invalid application or wrong clientSecret",
|
"Invalid application or wrong clientSecret": "Invalid application or wrong clientSecret",
|
||||||
@ -135,10 +159,10 @@
|
|||||||
},
|
},
|
||||||
"user": {
|
"user": {
|
||||||
"Display name cannot be empty": "Display name cannot be empty",
|
"Display name cannot be empty": "Display name cannot be empty",
|
||||||
"New password cannot contain blank space.": "New password cannot contain blank space."
|
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
|
||||||
},
|
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
|
||||||
"user_upload": {
|
"New password cannot contain blank space.": "New password cannot contain blank space.",
|
||||||
"Failed to import users": "Failed to import users"
|
"the user's owner and name should not be empty": "the user's owner and name should not be empty"
|
||||||
},
|
},
|
||||||
"util": {
|
"util": {
|
||||||
"No application is found for userId: %s": "No application is found for userId: %s",
|
"No application is found for userId: %s": "No application is found for userId: %s",
|
||||||
@ -148,8 +172,8 @@
|
|||||||
"verification": {
|
"verification": {
|
||||||
"Invalid captcha provider.": "Invalid captcha provider.",
|
"Invalid captcha provider.": "Invalid captcha provider.",
|
||||||
"Phone number is invalid in your region %s": "Phone number is invalid in your region %s",
|
"Phone number is invalid in your region %s": "Phone number is invalid in your region %s",
|
||||||
|
"The verification code has already been used!": "The verification code has already been used!",
|
||||||
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
|
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
|
||||||
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
|
|
||||||
"Turing test failed.": "Turing test failed.",
|
"Turing test failed.": "Turing test failed.",
|
||||||
"Unable to get the email modify rule.": "Unable to get the email modify rule.",
|
"Unable to get the email modify rule.": "Unable to get the email modify rule.",
|
||||||
"Unable to get the phone modify rule.": "Unable to get the phone modify rule.",
|
"Unable to get the phone modify rule.": "Unable to get the phone modify rule.",
|
||||||
@ -161,7 +185,6 @@
|
|||||||
"the user does not exist, please sign up first": "the user does not exist, please sign up first"
|
"the user does not exist, please sign up first": "the user does not exist, please sign up first"
|
||||||
},
|
},
|
||||||
"webauthn": {
|
"webauthn": {
|
||||||
"Found no credentials for this user": "Found no credentials for this user",
|
|
||||||
"Please call WebAuthnSigninBegin first": "Please call WebAuthnSigninBegin first"
|
"Please call WebAuthnSigninBegin first": "Please call WebAuthnSigninBegin first"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
},
|
},
|
||||||
"auth": {
|
"auth": {
|
||||||
"Challenge method should be S256": "Challenge method should be S256",
|
"Challenge method should be S256": "Challenge method should be S256",
|
||||||
|
"DeviceCode Invalid": "DeviceCode Invalid",
|
||||||
"Failed to create user, user information is invalid: %s": "Failed to create user, user information is invalid: %s",
|
"Failed to create user, user information is invalid: %s": "Failed to create user, user information is invalid: %s",
|
||||||
"Failed to login in: %s": "Failed to login in: %s",
|
"Failed to login in: %s": "Failed to login in: %s",
|
||||||
"Invalid token": "Invalid token",
|
"Invalid token": "Invalid token",
|
||||||
@ -21,17 +22,24 @@
|
|||||||
"The login method: login with face is not enabled for the application": "The login method: login with face is not enabled for the application",
|
"The login method: login with face is not enabled for the application": "The login method: login with face is not enabled for the application",
|
||||||
"The login method: login with password is not enabled for the application": "The login method: login with password is not enabled for the application",
|
"The login method: login with password is not enabled for the application": "The login method: login with password is not enabled for the application",
|
||||||
"The organization: %s does not exist": "The organization: %s does not exist",
|
"The organization: %s does not exist": "The organization: %s does not exist",
|
||||||
|
"The provider: %s does not exist": "The provider: %s does not exist",
|
||||||
"The provider: %s is not enabled for the application": "The provider: %s is not enabled for the application",
|
"The provider: %s is not enabled for the application": "The provider: %s is not enabled for the application",
|
||||||
"Unauthorized operation": "Unauthorized operation",
|
"Unauthorized operation": "Unauthorized operation",
|
||||||
"Unknown authentication type (not password or provider), form = %s": "Unknown authentication type (not password or provider), form = %s",
|
"Unknown authentication type (not password or provider), form = %s": "Unknown authentication type (not password or provider), form = %s",
|
||||||
"User's tag: %s is not listed in the application's tags": "User's tag: %s is not listed in the application's tags",
|
"User's tag: %s is not listed in the application's tags": "User's tag: %s is not listed in the application's tags",
|
||||||
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing"
|
"UserCode Expired": "UserCode Expired",
|
||||||
|
"UserCode Invalid": "UserCode Invalid",
|
||||||
|
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing",
|
||||||
|
"the application for user %s is not found": "the application for user %s is not found",
|
||||||
|
"the organization: %s is not found": "the organization: %s is not found"
|
||||||
},
|
},
|
||||||
"cas": {
|
"cas": {
|
||||||
"Service %s and %s do not match": "Service %s and %s do not match"
|
"Service %s and %s do not match": "Service %s and %s do not match"
|
||||||
},
|
},
|
||||||
"check": {
|
"check": {
|
||||||
|
"%s does not meet the CIDR format requirements: %s": "%s does not meet the CIDR format requirements: %s",
|
||||||
"Affiliation cannot be blank": "Affiliation cannot be blank",
|
"Affiliation cannot be blank": "Affiliation cannot be blank",
|
||||||
|
"CIDR for IP: %s should not be empty": "CIDR for IP: %s should not be empty",
|
||||||
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
||||||
"DisplayName cannot be blank": "DisplayName cannot be blank",
|
"DisplayName cannot be blank": "DisplayName cannot be blank",
|
||||||
"DisplayName is not valid real name": "DisplayName is not valid real name",
|
"DisplayName is not valid real name": "DisplayName is not valid real name",
|
||||||
@ -41,6 +49,7 @@
|
|||||||
"Empty username.": "Empty username.",
|
"Empty username.": "Empty username.",
|
||||||
"Face data does not exist, cannot log in": "Face data does not exist, cannot log in",
|
"Face data does not exist, cannot log in": "Face data does not exist, cannot log in",
|
||||||
"Face data mismatch": "Face data mismatch",
|
"Face data mismatch": "Face data mismatch",
|
||||||
|
"Failed to parse client IP: %s": "Failed to parse client IP: %s",
|
||||||
"FirstName cannot be blank": "FirstName cannot be blank",
|
"FirstName cannot be blank": "FirstName cannot be blank",
|
||||||
"Invitation code cannot be blank": "Invitation code cannot be blank",
|
"Invitation code cannot be blank": "Invitation code cannot be blank",
|
||||||
"Invitation code exhausted": "Invitation code exhausted",
|
"Invitation code exhausted": "Invitation code exhausted",
|
||||||
@ -50,6 +59,7 @@
|
|||||||
"LastName cannot be blank": "LastName cannot be blank",
|
"LastName cannot be blank": "LastName cannot be blank",
|
||||||
"Multiple accounts with same uid, please check your ldap server": "Multiple accounts with same uid, please check your ldap server",
|
"Multiple accounts with same uid, please check your ldap server": "Multiple accounts with same uid, please check your ldap server",
|
||||||
"Organization does not exist": "Organization does not exist",
|
"Organization does not exist": "Organization does not exist",
|
||||||
|
"Password cannot be empty": "Password cannot be empty",
|
||||||
"Phone already exists": "Phone already exists",
|
"Phone already exists": "Phone already exists",
|
||||||
"Phone cannot be empty": "Phone cannot be empty",
|
"Phone cannot be empty": "Phone cannot be empty",
|
||||||
"Phone number is invalid": "Phone number is invalid",
|
"Phone number is invalid": "Phone number is invalid",
|
||||||
@ -69,17 +79,27 @@
|
|||||||
"Username cannot start with a digit": "Username cannot start with a digit",
|
"Username cannot start with a digit": "Username cannot start with a digit",
|
||||||
"Username is too long (maximum is 255 characters).": "Username is too long (maximum is 255 characters).",
|
"Username is too long (maximum is 255 characters).": "Username is too long (maximum is 255 characters).",
|
||||||
"Username must have at least 2 characters": "Username must have at least 2 characters",
|
"Username must have at least 2 characters": "Username must have at least 2 characters",
|
||||||
|
"Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.": "Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.",
|
||||||
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "You have entered the wrong password or code too many times, please wait for %d minutes and try again",
|
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "You have entered the wrong password or code too many times, please wait for %d minutes and try again",
|
||||||
|
"Your IP address: %s has been banned according to the configuration of: ": "Your IP address: %s has been banned according to the configuration of: ",
|
||||||
|
"Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"": "Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"",
|
||||||
"Your region is not allow to signup by phone": "Your region is not allow to signup by phone",
|
"Your region is not allow to signup by phone": "Your region is not allow to signup by phone",
|
||||||
"password or code is incorrect": "password or code is incorrect",
|
"password or code is incorrect": "password or code is incorrect",
|
||||||
"password or code is incorrect, you have %d remaining chances": "password or code is incorrect, you have %d remaining chances",
|
"password or code is incorrect, you have %d remaining chances": "password or code is incorrect, you have %d remaining chances",
|
||||||
"unsupported password type: %s": "unsupported password type: %s"
|
"unsupported password type: %s": "unsupported password type: %s"
|
||||||
},
|
},
|
||||||
|
"enforcer": {
|
||||||
|
"the adapter: %s is not found": "the adapter: %s is not found"
|
||||||
|
},
|
||||||
"general": {
|
"general": {
|
||||||
|
"Failed to import groups": "Failed to import groups",
|
||||||
|
"Failed to import users": "Failed to import users",
|
||||||
"Missing parameter": "Missing parameter",
|
"Missing parameter": "Missing parameter",
|
||||||
|
"Only admin user can specify user": "Only admin user can specify user",
|
||||||
"Please login first": "Please login first",
|
"Please login first": "Please login first",
|
||||||
"The organization: %s should have one application at least": "The organization: %s should have one application at least",
|
"The organization: %s should have one application at least": "The organization: %s should have one application at least",
|
||||||
"The user: %s doesn't exist": "The user: %s doesn't exist",
|
"The user: %s doesn't exist": "The user: %s doesn't exist",
|
||||||
|
"Wrong userId": "Wrong userId",
|
||||||
"don't support captchaProvider: ": "don't support captchaProvider: ",
|
"don't support captchaProvider: ": "don't support captchaProvider: ",
|
||||||
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
|
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
|
||||||
"this operation requires administrator to perform": "this operation requires administrator to perform"
|
"this operation requires administrator to perform": "this operation requires administrator to perform"
|
||||||
@ -98,7 +118,8 @@
|
|||||||
"organization": {
|
"organization": {
|
||||||
"Only admin can modify the %s.": "Only admin can modify the %s.",
|
"Only admin can modify the %s.": "Only admin can modify the %s.",
|
||||||
"The %s is immutable.": "The %s is immutable.",
|
"The %s is immutable.": "The %s is immutable.",
|
||||||
"Unknown modify rule %s.": "Unknown modify rule %s."
|
"Unknown modify rule %s.": "Unknown modify rule %s.",
|
||||||
|
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
|
||||||
},
|
},
|
||||||
"permission": {
|
"permission": {
|
||||||
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
|
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
|
||||||
@ -126,6 +147,9 @@
|
|||||||
"The objectKey: %s is not allowed": "The objectKey: %s is not allowed",
|
"The objectKey: %s is not allowed": "The objectKey: %s is not allowed",
|
||||||
"The provider type: %s is not supported": "The provider type: %s is not supported"
|
"The provider type: %s is not supported": "The provider type: %s is not supported"
|
||||||
},
|
},
|
||||||
|
"subscription": {
|
||||||
|
"Error": "Error"
|
||||||
|
},
|
||||||
"token": {
|
"token": {
|
||||||
"Grant_type: %s is not supported in this application": "Grant_type: %s is not supported in this application",
|
"Grant_type: %s is not supported in this application": "Grant_type: %s is not supported in this application",
|
||||||
"Invalid application or wrong clientSecret": "Invalid application or wrong clientSecret",
|
"Invalid application or wrong clientSecret": "Invalid application or wrong clientSecret",
|
||||||
@ -135,10 +159,10 @@
|
|||||||
},
|
},
|
||||||
"user": {
|
"user": {
|
||||||
"Display name cannot be empty": "Display name cannot be empty",
|
"Display name cannot be empty": "Display name cannot be empty",
|
||||||
"New password cannot contain blank space.": "New password cannot contain blank space."
|
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
|
||||||
},
|
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
|
||||||
"user_upload": {
|
"New password cannot contain blank space.": "New password cannot contain blank space.",
|
||||||
"Failed to import users": "Failed to import users"
|
"the user's owner and name should not be empty": "the user's owner and name should not be empty"
|
||||||
},
|
},
|
||||||
"util": {
|
"util": {
|
||||||
"No application is found for userId: %s": "No application is found for userId: %s",
|
"No application is found for userId: %s": "No application is found for userId: %s",
|
||||||
@ -148,8 +172,8 @@
|
|||||||
"verification": {
|
"verification": {
|
||||||
"Invalid captcha provider.": "Invalid captcha provider.",
|
"Invalid captcha provider.": "Invalid captcha provider.",
|
||||||
"Phone number is invalid in your region %s": "Phone number is invalid in your region %s",
|
"Phone number is invalid in your region %s": "Phone number is invalid in your region %s",
|
||||||
|
"The verification code has already been used!": "The verification code has already been used!",
|
||||||
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
|
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
|
||||||
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
|
|
||||||
"Turing test failed.": "Turing test failed.",
|
"Turing test failed.": "Turing test failed.",
|
||||||
"Unable to get the email modify rule.": "Unable to get the email modify rule.",
|
"Unable to get the email modify rule.": "Unable to get the email modify rule.",
|
||||||
"Unable to get the phone modify rule.": "Unable to get the phone modify rule.",
|
"Unable to get the phone modify rule.": "Unable to get the phone modify rule.",
|
||||||
@ -161,7 +185,6 @@
|
|||||||
"the user does not exist, please sign up first": "the user does not exist, please sign up first"
|
"the user does not exist, please sign up first": "the user does not exist, please sign up first"
|
||||||
},
|
},
|
||||||
"webauthn": {
|
"webauthn": {
|
||||||
"Found no credentials for this user": "Found no credentials for this user",
|
|
||||||
"Please call WebAuthnSigninBegin first": "Please call WebAuthnSigninBegin first"
|
"Please call WebAuthnSigninBegin first": "Please call WebAuthnSigninBegin first"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
},
|
},
|
||||||
"auth": {
|
"auth": {
|
||||||
"Challenge method should be S256": "Challenge method should be S256",
|
"Challenge method should be S256": "Challenge method should be S256",
|
||||||
|
"DeviceCode Invalid": "DeviceCode Invalid",
|
||||||
"Failed to create user, user information is invalid: %s": "Failed to create user, user information is invalid: %s",
|
"Failed to create user, user information is invalid: %s": "Failed to create user, user information is invalid: %s",
|
||||||
"Failed to login in: %s": "Failed to login in: %s",
|
"Failed to login in: %s": "Failed to login in: %s",
|
||||||
"Invalid token": "Invalid token",
|
"Invalid token": "Invalid token",
|
||||||
@ -21,17 +22,24 @@
|
|||||||
"The login method: login with face is not enabled for the application": "The login method: login with face is not enabled for the application",
|
"The login method: login with face is not enabled for the application": "The login method: login with face is not enabled for the application",
|
||||||
"The login method: login with password is not enabled for the application": "The login method: login with password is not enabled for the application",
|
"The login method: login with password is not enabled for the application": "The login method: login with password is not enabled for the application",
|
||||||
"The organization: %s does not exist": "The organization: %s does not exist",
|
"The organization: %s does not exist": "The organization: %s does not exist",
|
||||||
|
"The provider: %s does not exist": "The provider: %s does not exist",
|
||||||
"The provider: %s is not enabled for the application": "The provider: %s is not enabled for the application",
|
"The provider: %s is not enabled for the application": "The provider: %s is not enabled for the application",
|
||||||
"Unauthorized operation": "Unauthorized operation",
|
"Unauthorized operation": "Unauthorized operation",
|
||||||
"Unknown authentication type (not password or provider), form = %s": "Unknown authentication type (not password or provider), form = %s",
|
"Unknown authentication type (not password or provider), form = %s": "Unknown authentication type (not password or provider), form = %s",
|
||||||
"User's tag: %s is not listed in the application's tags": "User's tag: %s is not listed in the application's tags",
|
"User's tag: %s is not listed in the application's tags": "User's tag: %s is not listed in the application's tags",
|
||||||
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing"
|
"UserCode Expired": "UserCode Expired",
|
||||||
|
"UserCode Invalid": "UserCode Invalid",
|
||||||
|
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing",
|
||||||
|
"the application for user %s is not found": "the application for user %s is not found",
|
||||||
|
"the organization: %s is not found": "the organization: %s is not found"
|
||||||
},
|
},
|
||||||
"cas": {
|
"cas": {
|
||||||
"Service %s and %s do not match": "Service %s and %s do not match"
|
"Service %s and %s do not match": "Service %s and %s do not match"
|
||||||
},
|
},
|
||||||
"check": {
|
"check": {
|
||||||
|
"%s does not meet the CIDR format requirements: %s": "%s does not meet the CIDR format requirements: %s",
|
||||||
"Affiliation cannot be blank": "Affiliation cannot be blank",
|
"Affiliation cannot be blank": "Affiliation cannot be blank",
|
||||||
|
"CIDR for IP: %s should not be empty": "CIDR for IP: %s should not be empty",
|
||||||
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
||||||
"DisplayName cannot be blank": "DisplayName cannot be blank",
|
"DisplayName cannot be blank": "DisplayName cannot be blank",
|
||||||
"DisplayName is not valid real name": "DisplayName is not valid real name",
|
"DisplayName is not valid real name": "DisplayName is not valid real name",
|
||||||
@ -41,6 +49,7 @@
|
|||||||
"Empty username.": "Empty username.",
|
"Empty username.": "Empty username.",
|
||||||
"Face data does not exist, cannot log in": "Face data does not exist, cannot log in",
|
"Face data does not exist, cannot log in": "Face data does not exist, cannot log in",
|
||||||
"Face data mismatch": "Face data mismatch",
|
"Face data mismatch": "Face data mismatch",
|
||||||
|
"Failed to parse client IP: %s": "Failed to parse client IP: %s",
|
||||||
"FirstName cannot be blank": "FirstName cannot be blank",
|
"FirstName cannot be blank": "FirstName cannot be blank",
|
||||||
"Invitation code cannot be blank": "Invitation code cannot be blank",
|
"Invitation code cannot be blank": "Invitation code cannot be blank",
|
||||||
"Invitation code exhausted": "Invitation code exhausted",
|
"Invitation code exhausted": "Invitation code exhausted",
|
||||||
@ -50,6 +59,7 @@
|
|||||||
"LastName cannot be blank": "LastName cannot be blank",
|
"LastName cannot be blank": "LastName cannot be blank",
|
||||||
"Multiple accounts with same uid, please check your ldap server": "Multiple accounts with same uid, please check your ldap server",
|
"Multiple accounts with same uid, please check your ldap server": "Multiple accounts with same uid, please check your ldap server",
|
||||||
"Organization does not exist": "Organization does not exist",
|
"Organization does not exist": "Organization does not exist",
|
||||||
|
"Password cannot be empty": "Password cannot be empty",
|
||||||
"Phone already exists": "Phone already exists",
|
"Phone already exists": "Phone already exists",
|
||||||
"Phone cannot be empty": "Phone cannot be empty",
|
"Phone cannot be empty": "Phone cannot be empty",
|
||||||
"Phone number is invalid": "Phone number is invalid",
|
"Phone number is invalid": "Phone number is invalid",
|
||||||
@ -69,17 +79,27 @@
|
|||||||
"Username cannot start with a digit": "Username cannot start with a digit",
|
"Username cannot start with a digit": "Username cannot start with a digit",
|
||||||
"Username is too long (maximum is 255 characters).": "Username is too long (maximum is 255 characters).",
|
"Username is too long (maximum is 255 characters).": "Username is too long (maximum is 255 characters).",
|
||||||
"Username must have at least 2 characters": "Username must have at least 2 characters",
|
"Username must have at least 2 characters": "Username must have at least 2 characters",
|
||||||
|
"Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.": "Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.",
|
||||||
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "You have entered the wrong password or code too many times, please wait for %d minutes and try again",
|
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "You have entered the wrong password or code too many times, please wait for %d minutes and try again",
|
||||||
|
"Your IP address: %s has been banned according to the configuration of: ": "Your IP address: %s has been banned according to the configuration of: ",
|
||||||
|
"Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"": "Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"",
|
||||||
"Your region is not allow to signup by phone": "Your region is not allow to signup by phone",
|
"Your region is not allow to signup by phone": "Your region is not allow to signup by phone",
|
||||||
"password or code is incorrect": "password or code is incorrect",
|
"password or code is incorrect": "password or code is incorrect",
|
||||||
"password or code is incorrect, you have %d remaining chances": "password or code is incorrect, you have %d remaining chances",
|
"password or code is incorrect, you have %d remaining chances": "password or code is incorrect, you have %d remaining chances",
|
||||||
"unsupported password type: %s": "unsupported password type: %s"
|
"unsupported password type: %s": "unsupported password type: %s"
|
||||||
},
|
},
|
||||||
|
"enforcer": {
|
||||||
|
"the adapter: %s is not found": "the adapter: %s is not found"
|
||||||
|
},
|
||||||
"general": {
|
"general": {
|
||||||
|
"Failed to import groups": "Failed to import groups",
|
||||||
|
"Failed to import users": "Failed to import users",
|
||||||
"Missing parameter": "Missing parameter",
|
"Missing parameter": "Missing parameter",
|
||||||
|
"Only admin user can specify user": "Only admin user can specify user",
|
||||||
"Please login first": "Please login first",
|
"Please login first": "Please login first",
|
||||||
"The organization: %s should have one application at least": "The organization: %s should have one application at least",
|
"The organization: %s should have one application at least": "The organization: %s should have one application at least",
|
||||||
"The user: %s doesn't exist": "The user: %s doesn't exist",
|
"The user: %s doesn't exist": "The user: %s doesn't exist",
|
||||||
|
"Wrong userId": "Wrong userId",
|
||||||
"don't support captchaProvider: ": "don't support captchaProvider: ",
|
"don't support captchaProvider: ": "don't support captchaProvider: ",
|
||||||
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
|
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
|
||||||
"this operation requires administrator to perform": "this operation requires administrator to perform"
|
"this operation requires administrator to perform": "this operation requires administrator to perform"
|
||||||
@ -98,7 +118,8 @@
|
|||||||
"organization": {
|
"organization": {
|
||||||
"Only admin can modify the %s.": "Only admin can modify the %s.",
|
"Only admin can modify the %s.": "Only admin can modify the %s.",
|
||||||
"The %s is immutable.": "The %s is immutable.",
|
"The %s is immutable.": "The %s is immutable.",
|
||||||
"Unknown modify rule %s.": "Unknown modify rule %s."
|
"Unknown modify rule %s.": "Unknown modify rule %s.",
|
||||||
|
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
|
||||||
},
|
},
|
||||||
"permission": {
|
"permission": {
|
||||||
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
|
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
|
||||||
@ -126,6 +147,9 @@
|
|||||||
"The objectKey: %s is not allowed": "The objectKey: %s is not allowed",
|
"The objectKey: %s is not allowed": "The objectKey: %s is not allowed",
|
||||||
"The provider type: %s is not supported": "The provider type: %s is not supported"
|
"The provider type: %s is not supported": "The provider type: %s is not supported"
|
||||||
},
|
},
|
||||||
|
"subscription": {
|
||||||
|
"Error": "Error"
|
||||||
|
},
|
||||||
"token": {
|
"token": {
|
||||||
"Grant_type: %s is not supported in this application": "Grant_type: %s is not supported in this application",
|
"Grant_type: %s is not supported in this application": "Grant_type: %s is not supported in this application",
|
||||||
"Invalid application or wrong clientSecret": "Invalid application or wrong clientSecret",
|
"Invalid application or wrong clientSecret": "Invalid application or wrong clientSecret",
|
||||||
@ -135,10 +159,10 @@
|
|||||||
},
|
},
|
||||||
"user": {
|
"user": {
|
||||||
"Display name cannot be empty": "Display name cannot be empty",
|
"Display name cannot be empty": "Display name cannot be empty",
|
||||||
"New password cannot contain blank space.": "New password cannot contain blank space."
|
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
|
||||||
},
|
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
|
||||||
"user_upload": {
|
"New password cannot contain blank space.": "New password cannot contain blank space.",
|
||||||
"Failed to import users": "Failed to import users"
|
"the user's owner and name should not be empty": "the user's owner and name should not be empty"
|
||||||
},
|
},
|
||||||
"util": {
|
"util": {
|
||||||
"No application is found for userId: %s": "No application is found for userId: %s",
|
"No application is found for userId: %s": "No application is found for userId: %s",
|
||||||
@ -148,8 +172,8 @@
|
|||||||
"verification": {
|
"verification": {
|
||||||
"Invalid captcha provider.": "Invalid captcha provider.",
|
"Invalid captcha provider.": "Invalid captcha provider.",
|
||||||
"Phone number is invalid in your region %s": "Phone number is invalid in your region %s",
|
"Phone number is invalid in your region %s": "Phone number is invalid in your region %s",
|
||||||
|
"The verification code has already been used!": "The verification code has already been used!",
|
||||||
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
|
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
|
||||||
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
|
|
||||||
"Turing test failed.": "Turing test failed.",
|
"Turing test failed.": "Turing test failed.",
|
||||||
"Unable to get the email modify rule.": "Unable to get the email modify rule.",
|
"Unable to get the email modify rule.": "Unable to get the email modify rule.",
|
||||||
"Unable to get the phone modify rule.": "Unable to get the phone modify rule.",
|
"Unable to get the phone modify rule.": "Unable to get the phone modify rule.",
|
||||||
@ -161,7 +185,6 @@
|
|||||||
"the user does not exist, please sign up first": "the user does not exist, please sign up first"
|
"the user does not exist, please sign up first": "the user does not exist, please sign up first"
|
||||||
},
|
},
|
||||||
"webauthn": {
|
"webauthn": {
|
||||||
"Found no credentials for this user": "Found no credentials for this user",
|
|
||||||
"Please call WebAuthnSigninBegin first": "Please call WebAuthnSigninBegin first"
|
"Please call WebAuthnSigninBegin first": "Please call WebAuthnSigninBegin first"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
},
|
},
|
||||||
"auth": {
|
"auth": {
|
||||||
"Challenge method should be S256": "Método de desafio deve ser S256",
|
"Challenge method should be S256": "Método de desafio deve ser S256",
|
||||||
|
"DeviceCode Invalid": "DeviceCode Invalid",
|
||||||
"Failed to create user, user information is invalid: %s": "Falha ao criar usuário, informação do usuário inválida: %s",
|
"Failed to create user, user information is invalid: %s": "Falha ao criar usuário, informação do usuário inválida: %s",
|
||||||
"Failed to login in: %s": "Falha ao entrar em: %s",
|
"Failed to login in: %s": "Falha ao entrar em: %s",
|
||||||
"Invalid token": "Token inválido",
|
"Invalid token": "Token inválido",
|
||||||
@ -21,17 +22,24 @@
|
|||||||
"The login method: login with face is not enabled for the application": "The login method: login with face is not enabled for the application",
|
"The login method: login with face is not enabled for the application": "The login method: login with face is not enabled for the application",
|
||||||
"The login method: login with password is not enabled for the application": "The login method: login with password is not enabled for the application",
|
"The login method: login with password is not enabled for the application": "The login method: login with password is not enabled for the application",
|
||||||
"The organization: %s does not exist": "The organization: %s does not exist",
|
"The organization: %s does not exist": "The organization: %s does not exist",
|
||||||
|
"The provider: %s does not exist": "The provider: %s does not exist",
|
||||||
"The provider: %s is not enabled for the application": "The provider: %s is not enabled for the application",
|
"The provider: %s is not enabled for the application": "The provider: %s is not enabled for the application",
|
||||||
"Unauthorized operation": "Unauthorized operation",
|
"Unauthorized operation": "Unauthorized operation",
|
||||||
"Unknown authentication type (not password or provider), form = %s": "Unknown authentication type (not password or provider), form = %s",
|
"Unknown authentication type (not password or provider), form = %s": "Unknown authentication type (not password or provider), form = %s",
|
||||||
"User's tag: %s is not listed in the application's tags": "User's tag: %s is not listed in the application's tags",
|
"User's tag: %s is not listed in the application's tags": "User's tag: %s is not listed in the application's tags",
|
||||||
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing"
|
"UserCode Expired": "UserCode Expired",
|
||||||
|
"UserCode Invalid": "UserCode Invalid",
|
||||||
|
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing",
|
||||||
|
"the application for user %s is not found": "the application for user %s is not found",
|
||||||
|
"the organization: %s is not found": "the organization: %s is not found"
|
||||||
},
|
},
|
||||||
"cas": {
|
"cas": {
|
||||||
"Service %s and %s do not match": "Service %s and %s do not match"
|
"Service %s and %s do not match": "Service %s and %s do not match"
|
||||||
},
|
},
|
||||||
"check": {
|
"check": {
|
||||||
|
"%s does not meet the CIDR format requirements: %s": "%s does not meet the CIDR format requirements: %s",
|
||||||
"Affiliation cannot be blank": "Affiliation cannot be blank",
|
"Affiliation cannot be blank": "Affiliation cannot be blank",
|
||||||
|
"CIDR for IP: %s should not be empty": "CIDR for IP: %s should not be empty",
|
||||||
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
||||||
"DisplayName cannot be blank": "DisplayName cannot be blank",
|
"DisplayName cannot be blank": "DisplayName cannot be blank",
|
||||||
"DisplayName is not valid real name": "DisplayName is not valid real name",
|
"DisplayName is not valid real name": "DisplayName is not valid real name",
|
||||||
@ -41,6 +49,7 @@
|
|||||||
"Empty username.": "Empty username.",
|
"Empty username.": "Empty username.",
|
||||||
"Face data does not exist, cannot log in": "Face data does not exist, cannot log in",
|
"Face data does not exist, cannot log in": "Face data does not exist, cannot log in",
|
||||||
"Face data mismatch": "Face data mismatch",
|
"Face data mismatch": "Face data mismatch",
|
||||||
|
"Failed to parse client IP: %s": "Failed to parse client IP: %s",
|
||||||
"FirstName cannot be blank": "FirstName cannot be blank",
|
"FirstName cannot be blank": "FirstName cannot be blank",
|
||||||
"Invitation code cannot be blank": "Invitation code cannot be blank",
|
"Invitation code cannot be blank": "Invitation code cannot be blank",
|
||||||
"Invitation code exhausted": "Invitation code exhausted",
|
"Invitation code exhausted": "Invitation code exhausted",
|
||||||
@ -50,6 +59,7 @@
|
|||||||
"LastName cannot be blank": "LastName cannot be blank",
|
"LastName cannot be blank": "LastName cannot be blank",
|
||||||
"Multiple accounts with same uid, please check your ldap server": "Multiple accounts with same uid, please check your ldap server",
|
"Multiple accounts with same uid, please check your ldap server": "Multiple accounts with same uid, please check your ldap server",
|
||||||
"Organization does not exist": "Organization does not exist",
|
"Organization does not exist": "Organization does not exist",
|
||||||
|
"Password cannot be empty": "Password cannot be empty",
|
||||||
"Phone already exists": "Phone already exists",
|
"Phone already exists": "Phone already exists",
|
||||||
"Phone cannot be empty": "Phone cannot be empty",
|
"Phone cannot be empty": "Phone cannot be empty",
|
||||||
"Phone number is invalid": "Phone number is invalid",
|
"Phone number is invalid": "Phone number is invalid",
|
||||||
@ -69,17 +79,27 @@
|
|||||||
"Username cannot start with a digit": "O nome de usuário não pode começar com um dígito",
|
"Username cannot start with a digit": "O nome de usuário não pode começar com um dígito",
|
||||||
"Username is too long (maximum is 255 characters).": "Nome de usuário é muito longo (máximo é 255 caracteres).",
|
"Username is too long (maximum is 255 characters).": "Nome de usuário é muito longo (máximo é 255 caracteres).",
|
||||||
"Username must have at least 2 characters": "Nome de usuário deve ter pelo menos 2 caracteres",
|
"Username must have at least 2 characters": "Nome de usuário deve ter pelo menos 2 caracteres",
|
||||||
|
"Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.": "Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.",
|
||||||
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "You have entered the wrong password or code too many times, please wait for %d minutes and try again",
|
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "You have entered the wrong password or code too many times, please wait for %d minutes and try again",
|
||||||
|
"Your IP address: %s has been banned according to the configuration of: ": "Your IP address: %s has been banned according to the configuration of: ",
|
||||||
|
"Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"": "Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"",
|
||||||
"Your region is not allow to signup by phone": "Your region is not allow to signup by phone",
|
"Your region is not allow to signup by phone": "Your region is not allow to signup by phone",
|
||||||
"password or code is incorrect": "senha ou código incorreto",
|
"password or code is incorrect": "senha ou código incorreto",
|
||||||
"password or code is incorrect, you have %d remaining chances": "password or code is incorrect, you have %d remaining chances",
|
"password or code is incorrect, you have %d remaining chances": "password or code is incorrect, you have %d remaining chances",
|
||||||
"unsupported password type: %s": "unsupported password type: %s"
|
"unsupported password type: %s": "unsupported password type: %s"
|
||||||
},
|
},
|
||||||
|
"enforcer": {
|
||||||
|
"the adapter: %s is not found": "the adapter: %s is not found"
|
||||||
|
},
|
||||||
"general": {
|
"general": {
|
||||||
|
"Failed to import groups": "Failed to import groups",
|
||||||
|
"Failed to import users": "Falha ao importar usuários",
|
||||||
"Missing parameter": "Missing parameter",
|
"Missing parameter": "Missing parameter",
|
||||||
|
"Only admin user can specify user": "Only admin user can specify user",
|
||||||
"Please login first": "Please login first",
|
"Please login first": "Please login first",
|
||||||
"The organization: %s should have one application at least": "The organization: %s should have one application at least",
|
"The organization: %s should have one application at least": "The organization: %s should have one application at least",
|
||||||
"The user: %s doesn't exist": "The user: %s doesn't exist",
|
"The user: %s doesn't exist": "The user: %s doesn't exist",
|
||||||
|
"Wrong userId": "Wrong userId",
|
||||||
"don't support captchaProvider: ": "don't support captchaProvider: ",
|
"don't support captchaProvider: ": "don't support captchaProvider: ",
|
||||||
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
|
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
|
||||||
"this operation requires administrator to perform": "this operation requires administrator to perform"
|
"this operation requires administrator to perform": "this operation requires administrator to perform"
|
||||||
@ -98,7 +118,8 @@
|
|||||||
"organization": {
|
"organization": {
|
||||||
"Only admin can modify the %s.": "Only admin can modify the %s.",
|
"Only admin can modify the %s.": "Only admin can modify the %s.",
|
||||||
"The %s is immutable.": "O %s é imutável.",
|
"The %s is immutable.": "O %s é imutável.",
|
||||||
"Unknown modify rule %s.": "Regra de modificação %s desconhecida."
|
"Unknown modify rule %s.": "Regra de modificação %s desconhecida.",
|
||||||
|
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
|
||||||
},
|
},
|
||||||
"permission": {
|
"permission": {
|
||||||
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
|
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
|
||||||
@ -126,6 +147,9 @@
|
|||||||
"The objectKey: %s is not allowed": "The objectKey: %s is not allowed",
|
"The objectKey: %s is not allowed": "The objectKey: %s is not allowed",
|
||||||
"The provider type: %s is not supported": "The provider type: %s is not supported"
|
"The provider type: %s is not supported": "The provider type: %s is not supported"
|
||||||
},
|
},
|
||||||
|
"subscription": {
|
||||||
|
"Error": "Error"
|
||||||
|
},
|
||||||
"token": {
|
"token": {
|
||||||
"Grant_type: %s is not supported in this application": "Grant_type: %s is not supported in this application",
|
"Grant_type: %s is not supported in this application": "Grant_type: %s is not supported in this application",
|
||||||
"Invalid application or wrong clientSecret": "Aplicativo inválido ou clientSecret errado",
|
"Invalid application or wrong clientSecret": "Aplicativo inválido ou clientSecret errado",
|
||||||
@ -135,10 +159,10 @@
|
|||||||
},
|
},
|
||||||
"user": {
|
"user": {
|
||||||
"Display name cannot be empty": "Nome de exibição não pode ser vazio",
|
"Display name cannot be empty": "Nome de exibição não pode ser vazio",
|
||||||
"New password cannot contain blank space.": "New password cannot contain blank space."
|
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
|
||||||
},
|
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
|
||||||
"user_upload": {
|
"New password cannot contain blank space.": "New password cannot contain blank space.",
|
||||||
"Failed to import users": "Falha ao importar usuários"
|
"the user's owner and name should not be empty": "the user's owner and name should not be empty"
|
||||||
},
|
},
|
||||||
"util": {
|
"util": {
|
||||||
"No application is found for userId: %s": "No application is found for userId: %s",
|
"No application is found for userId: %s": "No application is found for userId: %s",
|
||||||
@ -148,8 +172,8 @@
|
|||||||
"verification": {
|
"verification": {
|
||||||
"Invalid captcha provider.": "Invalid captcha provider.",
|
"Invalid captcha provider.": "Invalid captcha provider.",
|
||||||
"Phone number is invalid in your region %s": "Phone number is invalid in your region %s",
|
"Phone number is invalid in your region %s": "Phone number is invalid in your region %s",
|
||||||
|
"The verification code has already been used!": "The verification code has already been used!",
|
||||||
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
|
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
|
||||||
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
|
|
||||||
"Turing test failed.": "Turing test failed.",
|
"Turing test failed.": "Turing test failed.",
|
||||||
"Unable to get the email modify rule.": "Unable to get the email modify rule.",
|
"Unable to get the email modify rule.": "Unable to get the email modify rule.",
|
||||||
"Unable to get the phone modify rule.": "Unable to get the phone modify rule.",
|
"Unable to get the phone modify rule.": "Unable to get the phone modify rule.",
|
||||||
@ -161,7 +185,6 @@
|
|||||||
"the user does not exist, please sign up first": "the user does not exist, please sign up first"
|
"the user does not exist, please sign up first": "the user does not exist, please sign up first"
|
||||||
},
|
},
|
||||||
"webauthn": {
|
"webauthn": {
|
||||||
"Found no credentials for this user": "Found no credentials for this user",
|
|
||||||
"Please call WebAuthnSigninBegin first": "Please call WebAuthnSigninBegin first"
|
"Please call WebAuthnSigninBegin first": "Please call WebAuthnSigninBegin first"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
},
|
},
|
||||||
"auth": {
|
"auth": {
|
||||||
"Challenge method should be S256": "Метод проверки должен быть S256",
|
"Challenge method should be S256": "Метод проверки должен быть S256",
|
||||||
|
"DeviceCode Invalid": "DeviceCode Invalid",
|
||||||
"Failed to create user, user information is invalid: %s": "Не удалось создать пользователя, информация о пользователе недействительна: %s",
|
"Failed to create user, user information is invalid: %s": "Не удалось создать пользователя, информация о пользователе недействительна: %s",
|
||||||
"Failed to login in: %s": "Не удалось войти в систему: %s",
|
"Failed to login in: %s": "Не удалось войти в систему: %s",
|
||||||
"Invalid token": "Недействительный токен",
|
"Invalid token": "Недействительный токен",
|
||||||
@ -21,17 +22,24 @@
|
|||||||
"The login method: login with face is not enabled for the application": "Метод входа: вход с помощью лица не включен для приложения",
|
"The login method: login with face is not enabled for the application": "Метод входа: вход с помощью лица не включен для приложения",
|
||||||
"The login method: login with password is not enabled for the application": "Метод входа: вход с паролем не включен для приложения",
|
"The login method: login with password is not enabled for the application": "Метод входа: вход с паролем не включен для приложения",
|
||||||
"The organization: %s does not exist": "The organization: %s does not exist",
|
"The organization: %s does not exist": "The organization: %s does not exist",
|
||||||
|
"The provider: %s does not exist": "The provider: %s does not exist",
|
||||||
"The provider: %s is not enabled for the application": "Провайдер: %s не включен для приложения",
|
"The provider: %s is not enabled for the application": "Провайдер: %s не включен для приложения",
|
||||||
"Unauthorized operation": "Несанкционированная операция",
|
"Unauthorized operation": "Несанкционированная операция",
|
||||||
"Unknown authentication type (not password or provider), form = %s": "Неизвестный тип аутентификации (не пароль и не провайдер), форма = %s",
|
"Unknown authentication type (not password or provider), form = %s": "Неизвестный тип аутентификации (не пароль и не провайдер), форма = %s",
|
||||||
"User's tag: %s is not listed in the application's tags": "Тег пользователя: %s не указан в тэгах приложения",
|
"User's tag: %s is not listed in the application's tags": "Тег пользователя: %s не указан в тэгах приложения",
|
||||||
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing"
|
"UserCode Expired": "UserCode Expired",
|
||||||
|
"UserCode Invalid": "UserCode Invalid",
|
||||||
|
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing",
|
||||||
|
"the application for user %s is not found": "the application for user %s is not found",
|
||||||
|
"the organization: %s is not found": "the organization: %s is not found"
|
||||||
},
|
},
|
||||||
"cas": {
|
"cas": {
|
||||||
"Service %s and %s do not match": "Сервисы %s и %s не совпадают"
|
"Service %s and %s do not match": "Сервисы %s и %s не совпадают"
|
||||||
},
|
},
|
||||||
"check": {
|
"check": {
|
||||||
|
"%s does not meet the CIDR format requirements: %s": "%s does not meet the CIDR format requirements: %s",
|
||||||
"Affiliation cannot be blank": "Принадлежность не может быть пустым значением",
|
"Affiliation cannot be blank": "Принадлежность не может быть пустым значением",
|
||||||
|
"CIDR for IP: %s should not be empty": "CIDR for IP: %s should not be empty",
|
||||||
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
||||||
"DisplayName cannot be blank": "Имя отображения не может быть пустым",
|
"DisplayName cannot be blank": "Имя отображения не может быть пустым",
|
||||||
"DisplayName is not valid real name": "DisplayName не является действительным именем",
|
"DisplayName is not valid real name": "DisplayName не является действительным именем",
|
||||||
@ -41,6 +49,7 @@
|
|||||||
"Empty username.": "Пустое имя пользователя.",
|
"Empty username.": "Пустое имя пользователя.",
|
||||||
"Face data does not exist, cannot log in": "Face data does not exist, cannot log in",
|
"Face data does not exist, cannot log in": "Face data does not exist, cannot log in",
|
||||||
"Face data mismatch": "Face data mismatch",
|
"Face data mismatch": "Face data mismatch",
|
||||||
|
"Failed to parse client IP: %s": "Failed to parse client IP: %s",
|
||||||
"FirstName cannot be blank": "Имя не может быть пустым",
|
"FirstName cannot be blank": "Имя не может быть пустым",
|
||||||
"Invitation code cannot be blank": "Invitation code cannot be blank",
|
"Invitation code cannot be blank": "Invitation code cannot be blank",
|
||||||
"Invitation code exhausted": "Invitation code exhausted",
|
"Invitation code exhausted": "Invitation code exhausted",
|
||||||
@ -50,6 +59,7 @@
|
|||||||
"LastName cannot be blank": "Фамилия не может быть пустой",
|
"LastName cannot be blank": "Фамилия не может быть пустой",
|
||||||
"Multiple accounts with same uid, please check your ldap server": "Множественные учетные записи с тем же UID. Пожалуйста, проверьте свой сервер LDAP",
|
"Multiple accounts with same uid, please check your ldap server": "Множественные учетные записи с тем же UID. Пожалуйста, проверьте свой сервер LDAP",
|
||||||
"Organization does not exist": "Организация не существует",
|
"Organization does not exist": "Организация не существует",
|
||||||
|
"Password cannot be empty": "Password cannot be empty",
|
||||||
"Phone already exists": "Телефон уже существует",
|
"Phone already exists": "Телефон уже существует",
|
||||||
"Phone cannot be empty": "Телефон не может быть пустым",
|
"Phone cannot be empty": "Телефон не может быть пустым",
|
||||||
"Phone number is invalid": "Номер телефона является недействительным",
|
"Phone number is invalid": "Номер телефона является недействительным",
|
||||||
@ -69,17 +79,27 @@
|
|||||||
"Username cannot start with a digit": "Имя пользователя не может начинаться с цифры",
|
"Username cannot start with a digit": "Имя пользователя не может начинаться с цифры",
|
||||||
"Username is too long (maximum is 255 characters).": "Имя пользователя слишком длинное (максимальная длина - 255 символов).",
|
"Username is too long (maximum is 255 characters).": "Имя пользователя слишком длинное (максимальная длина - 255 символов).",
|
||||||
"Username must have at least 2 characters": "Имя пользователя должно содержать не менее 2 символов",
|
"Username must have at least 2 characters": "Имя пользователя должно содержать не менее 2 символов",
|
||||||
|
"Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.": "Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.",
|
||||||
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "Вы ввели неправильный пароль или код слишком много раз, пожалуйста, подождите %d минут и попробуйте снова",
|
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "Вы ввели неправильный пароль или код слишком много раз, пожалуйста, подождите %d минут и попробуйте снова",
|
||||||
|
"Your IP address: %s has been banned according to the configuration of: ": "Your IP address: %s has been banned according to the configuration of: ",
|
||||||
|
"Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"": "Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"",
|
||||||
"Your region is not allow to signup by phone": "Ваш регион не разрешает регистрацию по телефону",
|
"Your region is not allow to signup by phone": "Ваш регион не разрешает регистрацию по телефону",
|
||||||
"password or code is incorrect": "неправильный пароль или код",
|
"password or code is incorrect": "неправильный пароль или код",
|
||||||
"password or code is incorrect, you have %d remaining chances": "Неправильный пароль или код, у вас осталось %d попыток",
|
"password or code is incorrect, you have %d remaining chances": "Неправильный пароль или код, у вас осталось %d попыток",
|
||||||
"unsupported password type: %s": "неподдерживаемый тип пароля: %s"
|
"unsupported password type: %s": "неподдерживаемый тип пароля: %s"
|
||||||
},
|
},
|
||||||
|
"enforcer": {
|
||||||
|
"the adapter: %s is not found": "the adapter: %s is not found"
|
||||||
|
},
|
||||||
"general": {
|
"general": {
|
||||||
|
"Failed to import groups": "Failed to import groups",
|
||||||
|
"Failed to import users": "Не удалось импортировать пользователей",
|
||||||
"Missing parameter": "Отсутствующий параметр",
|
"Missing parameter": "Отсутствующий параметр",
|
||||||
|
"Only admin user can specify user": "Only admin user can specify user",
|
||||||
"Please login first": "Пожалуйста, сначала войдите в систему",
|
"Please login first": "Пожалуйста, сначала войдите в систему",
|
||||||
"The organization: %s should have one application at least": "Организация: %s должна иметь хотя бы одно приложение",
|
"The organization: %s should have one application at least": "Организация: %s должна иметь хотя бы одно приложение",
|
||||||
"The user: %s doesn't exist": "Пользователь %s не существует",
|
"The user: %s doesn't exist": "Пользователь %s не существует",
|
||||||
|
"Wrong userId": "Wrong userId",
|
||||||
"don't support captchaProvider: ": "неподдерживаемый captchaProvider: ",
|
"don't support captchaProvider: ": "неподдерживаемый captchaProvider: ",
|
||||||
"this operation is not allowed in demo mode": "эта операция не разрешена в демо-режиме",
|
"this operation is not allowed in demo mode": "эта операция не разрешена в демо-режиме",
|
||||||
"this operation requires administrator to perform": "для выполнения этой операции требуется администратор"
|
"this operation requires administrator to perform": "для выполнения этой операции требуется администратор"
|
||||||
@ -98,7 +118,8 @@
|
|||||||
"organization": {
|
"organization": {
|
||||||
"Only admin can modify the %s.": "Только администратор может изменять %s.",
|
"Only admin can modify the %s.": "Только администратор может изменять %s.",
|
||||||
"The %s is immutable.": "%s неизменяемый.",
|
"The %s is immutable.": "%s неизменяемый.",
|
||||||
"Unknown modify rule %s.": "Неизвестное изменение правила %s."
|
"Unknown modify rule %s.": "Неизвестное изменение правила %s.",
|
||||||
|
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
|
||||||
},
|
},
|
||||||
"permission": {
|
"permission": {
|
||||||
"The permission: \\\"%s\\\" doesn't exist": "Разрешение: \\\"%s\\\" не существует"
|
"The permission: \\\"%s\\\" doesn't exist": "Разрешение: \\\"%s\\\" не существует"
|
||||||
@ -126,6 +147,9 @@
|
|||||||
"The objectKey: %s is not allowed": "Объект «objectKey: %s» не разрешен",
|
"The objectKey: %s is not allowed": "Объект «objectKey: %s» не разрешен",
|
||||||
"The provider type: %s is not supported": "Тип провайдера: %s не поддерживается"
|
"The provider type: %s is not supported": "Тип провайдера: %s не поддерживается"
|
||||||
},
|
},
|
||||||
|
"subscription": {
|
||||||
|
"Error": "Error"
|
||||||
|
},
|
||||||
"token": {
|
"token": {
|
||||||
"Grant_type: %s is not supported in this application": "Тип предоставления: %s не поддерживается в данном приложении",
|
"Grant_type: %s is not supported in this application": "Тип предоставления: %s не поддерживается в данном приложении",
|
||||||
"Invalid application or wrong clientSecret": "Недействительное приложение или неправильный clientSecret",
|
"Invalid application or wrong clientSecret": "Недействительное приложение или неправильный clientSecret",
|
||||||
@ -135,10 +159,10 @@
|
|||||||
},
|
},
|
||||||
"user": {
|
"user": {
|
||||||
"Display name cannot be empty": "Отображаемое имя не может быть пустым",
|
"Display name cannot be empty": "Отображаемое имя не может быть пустым",
|
||||||
"New password cannot contain blank space.": "Новый пароль не может содержать пробелы."
|
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
|
||||||
},
|
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
|
||||||
"user_upload": {
|
"New password cannot contain blank space.": "Новый пароль не может содержать пробелы.",
|
||||||
"Failed to import users": "Не удалось импортировать пользователей"
|
"the user's owner and name should not be empty": "the user's owner and name should not be empty"
|
||||||
},
|
},
|
||||||
"util": {
|
"util": {
|
||||||
"No application is found for userId: %s": "Не найдено заявки для пользователя с идентификатором: %s",
|
"No application is found for userId: %s": "Не найдено заявки для пользователя с идентификатором: %s",
|
||||||
@ -148,8 +172,8 @@
|
|||||||
"verification": {
|
"verification": {
|
||||||
"Invalid captcha provider.": "Недействительный поставщик CAPTCHA.",
|
"Invalid captcha provider.": "Недействительный поставщик CAPTCHA.",
|
||||||
"Phone number is invalid in your region %s": "Номер телефона недействителен в вашем регионе %s",
|
"Phone number is invalid in your region %s": "Номер телефона недействителен в вашем регионе %s",
|
||||||
|
"The verification code has already been used!": "The verification code has already been used!",
|
||||||
"The verification code has not been sent yet!": "Код проверки еще не отправлен!",
|
"The verification code has not been sent yet!": "Код проверки еще не отправлен!",
|
||||||
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
|
|
||||||
"Turing test failed.": "Тест Тьюринга не удался.",
|
"Turing test failed.": "Тест Тьюринга не удался.",
|
||||||
"Unable to get the email modify rule.": "Невозможно получить правило изменения электронной почты.",
|
"Unable to get the email modify rule.": "Невозможно получить правило изменения электронной почты.",
|
||||||
"Unable to get the phone modify rule.": "Невозможно получить правило изменения телефона.",
|
"Unable to get the phone modify rule.": "Невозможно получить правило изменения телефона.",
|
||||||
@ -161,7 +185,6 @@
|
|||||||
"the user does not exist, please sign up first": "Пользователь не существует, пожалуйста, сначала зарегистрируйтесь"
|
"the user does not exist, please sign up first": "Пользователь не существует, пожалуйста, сначала зарегистрируйтесь"
|
||||||
},
|
},
|
||||||
"webauthn": {
|
"webauthn": {
|
||||||
"Found no credentials for this user": "Не найдено учетных данных для этого пользователя",
|
|
||||||
"Please call WebAuthnSigninBegin first": "Пожалуйста, сначала вызовите WebAuthnSigninBegin"
|
"Please call WebAuthnSigninBegin first": "Пожалуйста, сначала вызовите WebAuthnSigninBegin"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
},
|
},
|
||||||
"auth": {
|
"auth": {
|
||||||
"Challenge method should be S256": "Metóda výzvy by mala byť S256",
|
"Challenge method should be S256": "Metóda výzvy by mala byť S256",
|
||||||
|
"DeviceCode Invalid": "DeviceCode Invalid",
|
||||||
"Failed to create user, user information is invalid: %s": "Nepodarilo sa vytvoriť používateľa, informácie o používateľovi sú neplatné: %s",
|
"Failed to create user, user information is invalid: %s": "Nepodarilo sa vytvoriť používateľa, informácie o používateľovi sú neplatné: %s",
|
||||||
"Failed to login in: %s": "Prihlásenie zlyhalo: %s",
|
"Failed to login in: %s": "Prihlásenie zlyhalo: %s",
|
||||||
"Invalid token": "Neplatný token",
|
"Invalid token": "Neplatný token",
|
||||||
@ -21,17 +22,24 @@
|
|||||||
"The login method: login with face is not enabled for the application": "Metóda prihlásenia: prihlásenie pomocou tváre nie je pre aplikáciu povolená",
|
"The login method: login with face is not enabled for the application": "Metóda prihlásenia: prihlásenie pomocou tváre nie je pre aplikáciu povolená",
|
||||||
"The login method: login with password is not enabled for the application": "Metóda prihlásenia: prihlásenie pomocou hesla nie je pre aplikáciu povolená",
|
"The login method: login with password is not enabled for the application": "Metóda prihlásenia: prihlásenie pomocou hesla nie je pre aplikáciu povolená",
|
||||||
"The organization: %s does not exist": "Organizácia: %s neexistuje",
|
"The organization: %s does not exist": "Organizácia: %s neexistuje",
|
||||||
|
"The provider: %s does not exist": "The provider: %s does not exist",
|
||||||
"The provider: %s is not enabled for the application": "Poskytovateľ: %s nie je pre aplikáciu povolený",
|
"The provider: %s is not enabled for the application": "Poskytovateľ: %s nie je pre aplikáciu povolený",
|
||||||
"Unauthorized operation": "Neautorizovaná operácia",
|
"Unauthorized operation": "Neautorizovaná operácia",
|
||||||
"Unknown authentication type (not password or provider), form = %s": "Neznámy typ autentifikácie (nie heslo alebo poskytovateľ), forma = %s",
|
"Unknown authentication type (not password or provider), form = %s": "Neznámy typ autentifikácie (nie heslo alebo poskytovateľ), forma = %s",
|
||||||
"User's tag: %s is not listed in the application's tags": "Štítok používateľa: %s nie je uvedený v štítkoch aplikácie",
|
"User's tag: %s is not listed in the application's tags": "Štítok používateľa: %s nie je uvedený v štítkoch aplikácie",
|
||||||
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "platiaci používateľ %s nemá aktívne alebo čakajúce predplatné a aplikácia: %s nemá predvolenú cenovú politiku"
|
"UserCode Expired": "UserCode Expired",
|
||||||
|
"UserCode Invalid": "UserCode Invalid",
|
||||||
|
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "platiaci používateľ %s nemá aktívne alebo čakajúce predplatné a aplikácia: %s nemá predvolenú cenovú politiku",
|
||||||
|
"the application for user %s is not found": "the application for user %s is not found",
|
||||||
|
"the organization: %s is not found": "the organization: %s is not found"
|
||||||
},
|
},
|
||||||
"cas": {
|
"cas": {
|
||||||
"Service %s and %s do not match": "Služba %s a %s sa nezhodujú"
|
"Service %s and %s do not match": "Služba %s a %s sa nezhodujú"
|
||||||
},
|
},
|
||||||
"check": {
|
"check": {
|
||||||
|
"%s does not meet the CIDR format requirements: %s": "%s does not meet the CIDR format requirements: %s",
|
||||||
"Affiliation cannot be blank": "Príslušnosť nemôže byť prázdna",
|
"Affiliation cannot be blank": "Príslušnosť nemôže byť prázdna",
|
||||||
|
"CIDR for IP: %s should not be empty": "CIDR for IP: %s should not be empty",
|
||||||
"Default code does not match the code's matching rules": "Predvolený kód nezodpovedá pravidlám zodpovedania kódu",
|
"Default code does not match the code's matching rules": "Predvolený kód nezodpovedá pravidlám zodpovedania kódu",
|
||||||
"DisplayName cannot be blank": "Zobrazované meno nemôže byť prázdne",
|
"DisplayName cannot be blank": "Zobrazované meno nemôže byť prázdne",
|
||||||
"DisplayName is not valid real name": "Zobrazované meno nie je platné skutočné meno",
|
"DisplayName is not valid real name": "Zobrazované meno nie je platné skutočné meno",
|
||||||
@ -41,6 +49,7 @@
|
|||||||
"Empty username.": "Prázdne používateľské meno.",
|
"Empty username.": "Prázdne používateľské meno.",
|
||||||
"Face data does not exist, cannot log in": "Dáta o tvári neexistujú, nemožno sa prihlásiť",
|
"Face data does not exist, cannot log in": "Dáta o tvári neexistujú, nemožno sa prihlásiť",
|
||||||
"Face data mismatch": "Nesúlad dát o tvári",
|
"Face data mismatch": "Nesúlad dát o tvári",
|
||||||
|
"Failed to parse client IP: %s": "Failed to parse client IP: %s",
|
||||||
"FirstName cannot be blank": "Meno nemôže byť prázdne",
|
"FirstName cannot be blank": "Meno nemôže byť prázdne",
|
||||||
"Invitation code cannot be blank": "Kód pozvania nemôže byť prázdny",
|
"Invitation code cannot be blank": "Kód pozvania nemôže byť prázdny",
|
||||||
"Invitation code exhausted": "Kód pozvania bol vyčerpaný",
|
"Invitation code exhausted": "Kód pozvania bol vyčerpaný",
|
||||||
@ -50,11 +59,12 @@
|
|||||||
"LastName cannot be blank": "Priezvisko nemôže byť prázdne",
|
"LastName cannot be blank": "Priezvisko nemôže byť prázdne",
|
||||||
"Multiple accounts with same uid, please check your ldap server": "Viacero účtov s rovnakým uid, skontrolujte svoj ldap server",
|
"Multiple accounts with same uid, please check your ldap server": "Viacero účtov s rovnakým uid, skontrolujte svoj ldap server",
|
||||||
"Organization does not exist": "Organizácia neexistuje",
|
"Organization does not exist": "Organizácia neexistuje",
|
||||||
|
"Password cannot be empty": "Password cannot be empty",
|
||||||
"Phone already exists": "Telefón už existuje",
|
"Phone already exists": "Telefón už existuje",
|
||||||
"Phone cannot be empty": "Telefón nemôže byť prázdny",
|
"Phone cannot be empty": "Telefón nemôže byť prázdny",
|
||||||
"Phone number is invalid": "Telefónne číslo je neplatné",
|
"Phone number is invalid": "Telefónne číslo je neplatné",
|
||||||
"Please register using the email corresponding to the invitation code": "Prosím, zaregistrujte sa pomocou e-mailu zodpovedajúceho kódu pozvania",
|
"Please register using the email corresponding to the invitation code": "Prosím, zaregistrujte sa pomocou e-mailu zodpovedajúceho kódu pozvania",
|
||||||
"Please register using the phone corresponding to the invitation code": "Prosím, zaregistrujte sa pomocou telefónu zodpovedajúceho kódu pozvania",
|
"Please register using the phone corresponding to the invitation code": "Prosím zaregistrujte se pomocí telefonu odpovídajícího pozvánkovému kódu",
|
||||||
"Please register using the username corresponding to the invitation code": "Prosím, zaregistrujte sa pomocou používateľského mena zodpovedajúceho kódu pozvania",
|
"Please register using the username corresponding to the invitation code": "Prosím, zaregistrujte sa pomocou používateľského mena zodpovedajúceho kódu pozvania",
|
||||||
"Session outdated, please login again": "Relácia je zastaraná, prosím, prihláste sa znova",
|
"Session outdated, please login again": "Relácia je zastaraná, prosím, prihláste sa znova",
|
||||||
"The invitation code has already been used": "Kód pozvania už bol použitý",
|
"The invitation code has already been used": "Kód pozvania už bol použitý",
|
||||||
@ -69,17 +79,27 @@
|
|||||||
"Username cannot start with a digit": "Používateľské meno nemôže začínať číslicou",
|
"Username cannot start with a digit": "Používateľské meno nemôže začínať číslicou",
|
||||||
"Username is too long (maximum is 255 characters).": "Používateľské meno je príliš dlhé (maximum je 255 znakov).",
|
"Username is too long (maximum is 255 characters).": "Používateľské meno je príliš dlhé (maximum je 255 znakov).",
|
||||||
"Username must have at least 2 characters": "Používateľské meno musí mať aspoň 2 znaky",
|
"Username must have at least 2 characters": "Používateľské meno musí mať aspoň 2 znaky",
|
||||||
|
"Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.": "Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.",
|
||||||
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "Zadali ste nesprávne heslo alebo kód príliš veľa krát, prosím, počkajte %d minút a skúste to znova",
|
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "Zadali ste nesprávne heslo alebo kód príliš veľa krát, prosím, počkajte %d minút a skúste to znova",
|
||||||
|
"Your IP address: %s has been banned according to the configuration of: ": "Your IP address: %s has been banned according to the configuration of: ",
|
||||||
|
"Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"": "Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"",
|
||||||
"Your region is not allow to signup by phone": "Váš región neumožňuje registráciu cez telefón",
|
"Your region is not allow to signup by phone": "Váš región neumožňuje registráciu cez telefón",
|
||||||
"password or code is incorrect": "heslo alebo kód je nesprávne",
|
"password or code is incorrect": "heslo alebo kód je nesprávne",
|
||||||
"password or code is incorrect, you have %d remaining chances": "heslo alebo kód je nesprávne, máte %d zostávajúcich pokusov",
|
"password or code is incorrect, you have %d remaining chances": "heslo alebo kód je nesprávne, máte %d zostávajúcich pokusov",
|
||||||
"unsupported password type: %s": "nepodporovaný typ hesla: %s"
|
"unsupported password type: %s": "nepodporovaný typ hesla: %s"
|
||||||
},
|
},
|
||||||
|
"enforcer": {
|
||||||
|
"the adapter: %s is not found": "the adapter: %s is not found"
|
||||||
|
},
|
||||||
"general": {
|
"general": {
|
||||||
|
"Failed to import groups": "Failed to import groups",
|
||||||
|
"Failed to import users": "Nepodarilo sa importovať používateľov",
|
||||||
"Missing parameter": "Chýbajúci parameter",
|
"Missing parameter": "Chýbajúci parameter",
|
||||||
|
"Only admin user can specify user": "Only admin user can specify user",
|
||||||
"Please login first": "Najskôr sa prosím prihláste",
|
"Please login first": "Najskôr sa prosím prihláste",
|
||||||
"The organization: %s should have one application at least": "Organizácia: %s by mala mať aspoň jednu aplikáciu",
|
"The organization: %s should have one application at least": "Organizácia: %s by mala mať aspoň jednu aplikáciu",
|
||||||
"The user: %s doesn't exist": "Používateľ: %s neexistuje",
|
"The user: %s doesn't exist": "Používateľ: %s neexistuje",
|
||||||
|
"Wrong userId": "Wrong userId",
|
||||||
"don't support captchaProvider: ": "nepodporuje captchaProvider: ",
|
"don't support captchaProvider: ": "nepodporuje captchaProvider: ",
|
||||||
"this operation is not allowed in demo mode": "táto operácia nie je povolená v demo režime",
|
"this operation is not allowed in demo mode": "táto operácia nie je povolená v demo režime",
|
||||||
"this operation requires administrator to perform": "táto operácia vyžaduje vykonanie administrátorom"
|
"this operation requires administrator to perform": "táto operácia vyžaduje vykonanie administrátorom"
|
||||||
@ -98,7 +118,8 @@
|
|||||||
"organization": {
|
"organization": {
|
||||||
"Only admin can modify the %s.": "Len administrátor môže upravovať %s.",
|
"Only admin can modify the %s.": "Len administrátor môže upravovať %s.",
|
||||||
"The %s is immutable.": "%s je nemenný.",
|
"The %s is immutable.": "%s je nemenný.",
|
||||||
"Unknown modify rule %s.": "Neznáme pravidlo úprav %s."
|
"Unknown modify rule %s.": "Neznáme pravidlo úprav %s.",
|
||||||
|
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
|
||||||
},
|
},
|
||||||
"permission": {
|
"permission": {
|
||||||
"The permission: \\\"%s\\\" doesn't exist": "Povolenie: \\\"%s\\\" neexistuje"
|
"The permission: \\\"%s\\\" doesn't exist": "Povolenie: \\\"%s\\\" neexistuje"
|
||||||
@ -126,6 +147,9 @@
|
|||||||
"The objectKey: %s is not allowed": "objectKey: %s nie je povolený",
|
"The objectKey: %s is not allowed": "objectKey: %s nie je povolený",
|
||||||
"The provider type: %s is not supported": "Typ poskytovateľa: %s nie je podporovaný"
|
"The provider type: %s is not supported": "Typ poskytovateľa: %s nie je podporovaný"
|
||||||
},
|
},
|
||||||
|
"subscription": {
|
||||||
|
"Error": "Error"
|
||||||
|
},
|
||||||
"token": {
|
"token": {
|
||||||
"Grant_type: %s is not supported in this application": "Grant_type: %s nie je podporovaný v tejto aplikácii",
|
"Grant_type: %s is not supported in this application": "Grant_type: %s nie je podporovaný v tejto aplikácii",
|
||||||
"Invalid application or wrong clientSecret": "Neplatná aplikácia alebo nesprávny clientSecret",
|
"Invalid application or wrong clientSecret": "Neplatná aplikácia alebo nesprávny clientSecret",
|
||||||
@ -135,10 +159,10 @@
|
|||||||
},
|
},
|
||||||
"user": {
|
"user": {
|
||||||
"Display name cannot be empty": "Zobrazované meno nemôže byť prázdne",
|
"Display name cannot be empty": "Zobrazované meno nemôže byť prázdne",
|
||||||
"New password cannot contain blank space.": "Nové heslo nemôže obsahovať medzery."
|
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
|
||||||
},
|
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
|
||||||
"user_upload": {
|
"New password cannot contain blank space.": "Nové heslo nemôže obsahovať medzery.",
|
||||||
"Failed to import users": "Nepodarilo sa importovať používateľov"
|
"the user's owner and name should not be empty": "the user's owner and name should not be empty"
|
||||||
},
|
},
|
||||||
"util": {
|
"util": {
|
||||||
"No application is found for userId: %s": "Nebola nájdená žiadna aplikácia pre userId: %s",
|
"No application is found for userId: %s": "Nebola nájdená žiadna aplikácia pre userId: %s",
|
||||||
@ -148,8 +172,8 @@
|
|||||||
"verification": {
|
"verification": {
|
||||||
"Invalid captcha provider.": "Neplatný captcha poskytovateľ.",
|
"Invalid captcha provider.": "Neplatný captcha poskytovateľ.",
|
||||||
"Phone number is invalid in your region %s": "Telefónne číslo je neplatné vo vašom regióne %s",
|
"Phone number is invalid in your region %s": "Telefónne číslo je neplatné vo vašom regióne %s",
|
||||||
|
"The verification code has already been used!": "The verification code has already been used!",
|
||||||
"The verification code has not been sent yet!": "Overovací kód ešte nebol odoslaný!",
|
"The verification code has not been sent yet!": "Overovací kód ešte nebol odoslaný!",
|
||||||
"The verification code has not been sent yet, or has already been used!": "Overovací kód ešte nebol odoslaný, alebo bol už použitý!",
|
|
||||||
"Turing test failed.": "Test Turinga zlyhal.",
|
"Turing test failed.": "Test Turinga zlyhal.",
|
||||||
"Unable to get the email modify rule.": "Nepodarilo sa získať pravidlo úpravy e-mailu.",
|
"Unable to get the email modify rule.": "Nepodarilo sa získať pravidlo úpravy e-mailu.",
|
||||||
"Unable to get the phone modify rule.": "Nepodarilo sa získať pravidlo úpravy telefónu.",
|
"Unable to get the phone modify rule.": "Nepodarilo sa získať pravidlo úpravy telefónu.",
|
||||||
@ -161,7 +185,6 @@
|
|||||||
"the user does not exist, please sign up first": "používateľ neexistuje, prosím, zaregistrujte sa najskôr"
|
"the user does not exist, please sign up first": "používateľ neexistuje, prosím, zaregistrujte sa najskôr"
|
||||||
},
|
},
|
||||||
"webauthn": {
|
"webauthn": {
|
||||||
"Found no credentials for this user": "Nenašli sa žiadne prihlasovacie údaje pre tohto používateľa",
|
|
||||||
"Please call WebAuthnSigninBegin first": "Najskôr prosím zavolajte WebAuthnSigninBegin"
|
"Please call WebAuthnSigninBegin first": "Najskôr prosím zavolajte WebAuthnSigninBegin"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
},
|
},
|
||||||
"auth": {
|
"auth": {
|
||||||
"Challenge method should be S256": "Challenge method should be S256",
|
"Challenge method should be S256": "Challenge method should be S256",
|
||||||
|
"DeviceCode Invalid": "DeviceCode Invalid",
|
||||||
"Failed to create user, user information is invalid: %s": "Failed to create user, user information is invalid: %s",
|
"Failed to create user, user information is invalid: %s": "Failed to create user, user information is invalid: %s",
|
||||||
"Failed to login in: %s": "Failed to login in: %s",
|
"Failed to login in: %s": "Failed to login in: %s",
|
||||||
"Invalid token": "Invalid token",
|
"Invalid token": "Invalid token",
|
||||||
@ -21,17 +22,24 @@
|
|||||||
"The login method: login with face is not enabled for the application": "The login method: login with face is not enabled for the application",
|
"The login method: login with face is not enabled for the application": "The login method: login with face is not enabled for the application",
|
||||||
"The login method: login with password is not enabled for the application": "The login method: login with password is not enabled for the application",
|
"The login method: login with password is not enabled for the application": "The login method: login with password is not enabled for the application",
|
||||||
"The organization: %s does not exist": "The organization: %s does not exist",
|
"The organization: %s does not exist": "The organization: %s does not exist",
|
||||||
|
"The provider: %s does not exist": "The provider: %s does not exist",
|
||||||
"The provider: %s is not enabled for the application": "The provider: %s is not enabled for the application",
|
"The provider: %s is not enabled for the application": "The provider: %s is not enabled for the application",
|
||||||
"Unauthorized operation": "Unauthorized operation",
|
"Unauthorized operation": "Unauthorized operation",
|
||||||
"Unknown authentication type (not password or provider), form = %s": "Unknown authentication type (not password or provider), form = %s",
|
"Unknown authentication type (not password or provider), form = %s": "Unknown authentication type (not password or provider), form = %s",
|
||||||
"User's tag: %s is not listed in the application's tags": "User's tag: %s is not listed in the application's tags",
|
"User's tag: %s is not listed in the application's tags": "User's tag: %s is not listed in the application's tags",
|
||||||
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing"
|
"UserCode Expired": "UserCode Expired",
|
||||||
|
"UserCode Invalid": "UserCode Invalid",
|
||||||
|
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing",
|
||||||
|
"the application for user %s is not found": "the application for user %s is not found",
|
||||||
|
"the organization: %s is not found": "the organization: %s is not found"
|
||||||
},
|
},
|
||||||
"cas": {
|
"cas": {
|
||||||
"Service %s and %s do not match": "Service %s and %s do not match"
|
"Service %s and %s do not match": "Service %s and %s do not match"
|
||||||
},
|
},
|
||||||
"check": {
|
"check": {
|
||||||
|
"%s does not meet the CIDR format requirements: %s": "%s does not meet the CIDR format requirements: %s",
|
||||||
"Affiliation cannot be blank": "Affiliation cannot be blank",
|
"Affiliation cannot be blank": "Affiliation cannot be blank",
|
||||||
|
"CIDR for IP: %s should not be empty": "CIDR for IP: %s should not be empty",
|
||||||
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
||||||
"DisplayName cannot be blank": "DisplayName cannot be blank",
|
"DisplayName cannot be blank": "DisplayName cannot be blank",
|
||||||
"DisplayName is not valid real name": "DisplayName is not valid real name",
|
"DisplayName is not valid real name": "DisplayName is not valid real name",
|
||||||
@ -41,6 +49,7 @@
|
|||||||
"Empty username.": "Empty username.",
|
"Empty username.": "Empty username.",
|
||||||
"Face data does not exist, cannot log in": "Face data does not exist, cannot log in",
|
"Face data does not exist, cannot log in": "Face data does not exist, cannot log in",
|
||||||
"Face data mismatch": "Face data mismatch",
|
"Face data mismatch": "Face data mismatch",
|
||||||
|
"Failed to parse client IP: %s": "Failed to parse client IP: %s",
|
||||||
"FirstName cannot be blank": "FirstName cannot be blank",
|
"FirstName cannot be blank": "FirstName cannot be blank",
|
||||||
"Invitation code cannot be blank": "Invitation code cannot be blank",
|
"Invitation code cannot be blank": "Invitation code cannot be blank",
|
||||||
"Invitation code exhausted": "Invitation code exhausted",
|
"Invitation code exhausted": "Invitation code exhausted",
|
||||||
@ -50,6 +59,7 @@
|
|||||||
"LastName cannot be blank": "LastName cannot be blank",
|
"LastName cannot be blank": "LastName cannot be blank",
|
||||||
"Multiple accounts with same uid, please check your ldap server": "Multiple accounts with same uid, please check your ldap server",
|
"Multiple accounts with same uid, please check your ldap server": "Multiple accounts with same uid, please check your ldap server",
|
||||||
"Organization does not exist": "Organization does not exist",
|
"Organization does not exist": "Organization does not exist",
|
||||||
|
"Password cannot be empty": "Password cannot be empty",
|
||||||
"Phone already exists": "Phone already exists",
|
"Phone already exists": "Phone already exists",
|
||||||
"Phone cannot be empty": "Phone cannot be empty",
|
"Phone cannot be empty": "Phone cannot be empty",
|
||||||
"Phone number is invalid": "Phone number is invalid",
|
"Phone number is invalid": "Phone number is invalid",
|
||||||
@ -69,17 +79,27 @@
|
|||||||
"Username cannot start with a digit": "Username cannot start with a digit",
|
"Username cannot start with a digit": "Username cannot start with a digit",
|
||||||
"Username is too long (maximum is 255 characters).": "Username is too long (maximum is 255 characters).",
|
"Username is too long (maximum is 255 characters).": "Username is too long (maximum is 255 characters).",
|
||||||
"Username must have at least 2 characters": "Username must have at least 2 characters",
|
"Username must have at least 2 characters": "Username must have at least 2 characters",
|
||||||
|
"Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.": "Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.",
|
||||||
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "You have entered the wrong password or code too many times, please wait for %d minutes and try again",
|
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "You have entered the wrong password or code too many times, please wait for %d minutes and try again",
|
||||||
|
"Your IP address: %s has been banned according to the configuration of: ": "Your IP address: %s has been banned according to the configuration of: ",
|
||||||
|
"Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"": "Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"",
|
||||||
"Your region is not allow to signup by phone": "Your region is not allow to signup by phone",
|
"Your region is not allow to signup by phone": "Your region is not allow to signup by phone",
|
||||||
"password or code is incorrect": "password or code is incorrect",
|
"password or code is incorrect": "password or code is incorrect",
|
||||||
"password or code is incorrect, you have %d remaining chances": "password or code is incorrect, you have %d remaining chances",
|
"password or code is incorrect, you have %d remaining chances": "password or code is incorrect, you have %d remaining chances",
|
||||||
"unsupported password type: %s": "unsupported password type: %s"
|
"unsupported password type: %s": "unsupported password type: %s"
|
||||||
},
|
},
|
||||||
|
"enforcer": {
|
||||||
|
"the adapter: %s is not found": "the adapter: %s is not found"
|
||||||
|
},
|
||||||
"general": {
|
"general": {
|
||||||
|
"Failed to import groups": "Failed to import groups",
|
||||||
|
"Failed to import users": "Failed to import users",
|
||||||
"Missing parameter": "Missing parameter",
|
"Missing parameter": "Missing parameter",
|
||||||
|
"Only admin user can specify user": "Only admin user can specify user",
|
||||||
"Please login first": "Please login first",
|
"Please login first": "Please login first",
|
||||||
"The organization: %s should have one application at least": "The organization: %s should have one application at least",
|
"The organization: %s should have one application at least": "The organization: %s should have one application at least",
|
||||||
"The user: %s doesn't exist": "The user: %s doesn't exist",
|
"The user: %s doesn't exist": "The user: %s doesn't exist",
|
||||||
|
"Wrong userId": "Wrong userId",
|
||||||
"don't support captchaProvider: ": "don't support captchaProvider: ",
|
"don't support captchaProvider: ": "don't support captchaProvider: ",
|
||||||
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
|
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
|
||||||
"this operation requires administrator to perform": "this operation requires administrator to perform"
|
"this operation requires administrator to perform": "this operation requires administrator to perform"
|
||||||
@ -98,7 +118,8 @@
|
|||||||
"organization": {
|
"organization": {
|
||||||
"Only admin can modify the %s.": "Only admin can modify the %s.",
|
"Only admin can modify the %s.": "Only admin can modify the %s.",
|
||||||
"The %s is immutable.": "The %s is immutable.",
|
"The %s is immutable.": "The %s is immutable.",
|
||||||
"Unknown modify rule %s.": "Unknown modify rule %s."
|
"Unknown modify rule %s.": "Unknown modify rule %s.",
|
||||||
|
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
|
||||||
},
|
},
|
||||||
"permission": {
|
"permission": {
|
||||||
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
|
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
|
||||||
@ -126,6 +147,9 @@
|
|||||||
"The objectKey: %s is not allowed": "The objectKey: %s is not allowed",
|
"The objectKey: %s is not allowed": "The objectKey: %s is not allowed",
|
||||||
"The provider type: %s is not supported": "The provider type: %s is not supported"
|
"The provider type: %s is not supported": "The provider type: %s is not supported"
|
||||||
},
|
},
|
||||||
|
"subscription": {
|
||||||
|
"Error": "Error"
|
||||||
|
},
|
||||||
"token": {
|
"token": {
|
||||||
"Grant_type: %s is not supported in this application": "Grant_type: %s is not supported in this application",
|
"Grant_type: %s is not supported in this application": "Grant_type: %s is not supported in this application",
|
||||||
"Invalid application or wrong clientSecret": "Invalid application or wrong clientSecret",
|
"Invalid application or wrong clientSecret": "Invalid application or wrong clientSecret",
|
||||||
@ -135,10 +159,10 @@
|
|||||||
},
|
},
|
||||||
"user": {
|
"user": {
|
||||||
"Display name cannot be empty": "Display name cannot be empty",
|
"Display name cannot be empty": "Display name cannot be empty",
|
||||||
"New password cannot contain blank space.": "New password cannot contain blank space."
|
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
|
||||||
},
|
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
|
||||||
"user_upload": {
|
"New password cannot contain blank space.": "New password cannot contain blank space.",
|
||||||
"Failed to import users": "Failed to import users"
|
"the user's owner and name should not be empty": "the user's owner and name should not be empty"
|
||||||
},
|
},
|
||||||
"util": {
|
"util": {
|
||||||
"No application is found for userId: %s": "No application is found for userId: %s",
|
"No application is found for userId: %s": "No application is found for userId: %s",
|
||||||
@ -148,8 +172,8 @@
|
|||||||
"verification": {
|
"verification": {
|
||||||
"Invalid captcha provider.": "Invalid captcha provider.",
|
"Invalid captcha provider.": "Invalid captcha provider.",
|
||||||
"Phone number is invalid in your region %s": "Phone number is invalid in your region %s",
|
"Phone number is invalid in your region %s": "Phone number is invalid in your region %s",
|
||||||
|
"The verification code has already been used!": "The verification code has already been used!",
|
||||||
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
|
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
|
||||||
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
|
|
||||||
"Turing test failed.": "Turing test failed.",
|
"Turing test failed.": "Turing test failed.",
|
||||||
"Unable to get the email modify rule.": "Unable to get the email modify rule.",
|
"Unable to get the email modify rule.": "Unable to get the email modify rule.",
|
||||||
"Unable to get the phone modify rule.": "Unable to get the phone modify rule.",
|
"Unable to get the phone modify rule.": "Unable to get the phone modify rule.",
|
||||||
@ -161,7 +185,6 @@
|
|||||||
"the user does not exist, please sign up first": "the user does not exist, please sign up first"
|
"the user does not exist, please sign up first": "the user does not exist, please sign up first"
|
||||||
},
|
},
|
||||||
"webauthn": {
|
"webauthn": {
|
||||||
"Found no credentials for this user": "Found no credentials for this user",
|
|
||||||
"Please call WebAuthnSigninBegin first": "Please call WebAuthnSigninBegin first"
|
"Please call WebAuthnSigninBegin first": "Please call WebAuthnSigninBegin first"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
},
|
},
|
||||||
"auth": {
|
"auth": {
|
||||||
"Challenge method should be S256": "Challenge method should be S256",
|
"Challenge method should be S256": "Challenge method should be S256",
|
||||||
|
"DeviceCode Invalid": "DeviceCode Invalid",
|
||||||
"Failed to create user, user information is invalid: %s": "Failed to create user, user information is invalid: %s",
|
"Failed to create user, user information is invalid: %s": "Failed to create user, user information is invalid: %s",
|
||||||
"Failed to login in: %s": "Failed to login in: %s",
|
"Failed to login in: %s": "Failed to login in: %s",
|
||||||
"Invalid token": "Invalid token",
|
"Invalid token": "Invalid token",
|
||||||
@ -21,17 +22,24 @@
|
|||||||
"The login method: login with face is not enabled for the application": "The login method: login with face is not enabled for the application",
|
"The login method: login with face is not enabled for the application": "The login method: login with face is not enabled for the application",
|
||||||
"The login method: login with password is not enabled for the application": "The login method: login with password is not enabled for the application",
|
"The login method: login with password is not enabled for the application": "The login method: login with password is not enabled for the application",
|
||||||
"The organization: %s does not exist": "The organization: %s does not exist",
|
"The organization: %s does not exist": "The organization: %s does not exist",
|
||||||
|
"The provider: %s does not exist": "The provider: %s does not exist",
|
||||||
"The provider: %s is not enabled for the application": "The provider: %s is not enabled for the application",
|
"The provider: %s is not enabled for the application": "The provider: %s is not enabled for the application",
|
||||||
"Unauthorized operation": "Unauthorized operation",
|
"Unauthorized operation": "Unauthorized operation",
|
||||||
"Unknown authentication type (not password or provider), form = %s": "Unknown authentication type (not password or provider), form = %s",
|
"Unknown authentication type (not password or provider), form = %s": "Unknown authentication type (not password or provider), form = %s",
|
||||||
"User's tag: %s is not listed in the application's tags": "User's tag: %s is not listed in the application's tags",
|
"User's tag: %s is not listed in the application's tags": "User's tag: %s is not listed in the application's tags",
|
||||||
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing"
|
"UserCode Expired": "UserCode Expired",
|
||||||
|
"UserCode Invalid": "UserCode Invalid",
|
||||||
|
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing",
|
||||||
|
"the application for user %s is not found": "the application for user %s is not found",
|
||||||
|
"the organization: %s is not found": "the organization: %s is not found"
|
||||||
},
|
},
|
||||||
"cas": {
|
"cas": {
|
||||||
"Service %s and %s do not match": "Service %s and %s do not match"
|
"Service %s and %s do not match": "Service %s and %s do not match"
|
||||||
},
|
},
|
||||||
"check": {
|
"check": {
|
||||||
|
"%s does not meet the CIDR format requirements: %s": "%s does not meet the CIDR format requirements: %s",
|
||||||
"Affiliation cannot be blank": "Affiliation cannot be blank",
|
"Affiliation cannot be blank": "Affiliation cannot be blank",
|
||||||
|
"CIDR for IP: %s should not be empty": "CIDR for IP: %s should not be empty",
|
||||||
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
||||||
"DisplayName cannot be blank": "DisplayName cannot be blank",
|
"DisplayName cannot be blank": "DisplayName cannot be blank",
|
||||||
"DisplayName is not valid real name": "DisplayName is not valid real name",
|
"DisplayName is not valid real name": "DisplayName is not valid real name",
|
||||||
@ -41,6 +49,7 @@
|
|||||||
"Empty username.": "Empty username.",
|
"Empty username.": "Empty username.",
|
||||||
"Face data does not exist, cannot log in": "Face data does not exist, cannot log in",
|
"Face data does not exist, cannot log in": "Face data does not exist, cannot log in",
|
||||||
"Face data mismatch": "Face data mismatch",
|
"Face data mismatch": "Face data mismatch",
|
||||||
|
"Failed to parse client IP: %s": "Failed to parse client IP: %s",
|
||||||
"FirstName cannot be blank": "FirstName cannot be blank",
|
"FirstName cannot be blank": "FirstName cannot be blank",
|
||||||
"Invitation code cannot be blank": "Invitation code cannot be blank",
|
"Invitation code cannot be blank": "Invitation code cannot be blank",
|
||||||
"Invitation code exhausted": "Invitation code exhausted",
|
"Invitation code exhausted": "Invitation code exhausted",
|
||||||
@ -50,6 +59,7 @@
|
|||||||
"LastName cannot be blank": "LastName cannot be blank",
|
"LastName cannot be blank": "LastName cannot be blank",
|
||||||
"Multiple accounts with same uid, please check your ldap server": "Multiple accounts with same uid, please check your ldap server",
|
"Multiple accounts with same uid, please check your ldap server": "Multiple accounts with same uid, please check your ldap server",
|
||||||
"Organization does not exist": "Organization does not exist",
|
"Organization does not exist": "Organization does not exist",
|
||||||
|
"Password cannot be empty": "Password cannot be empty",
|
||||||
"Phone already exists": "Telefon numarası zaten mevcut",
|
"Phone already exists": "Telefon numarası zaten mevcut",
|
||||||
"Phone cannot be empty": "Telefon numarası boş olamaz",
|
"Phone cannot be empty": "Telefon numarası boş olamaz",
|
||||||
"Phone number is invalid": "Telefon numarası geçersiz",
|
"Phone number is invalid": "Telefon numarası geçersiz",
|
||||||
@ -69,17 +79,27 @@
|
|||||||
"Username cannot start with a digit": "Kullanıcı adı rakamla başlayamaz",
|
"Username cannot start with a digit": "Kullanıcı adı rakamla başlayamaz",
|
||||||
"Username is too long (maximum is 255 characters).": "Kullanıcı adı çok uzun (en fazla 255 karakter olmalı).",
|
"Username is too long (maximum is 255 characters).": "Kullanıcı adı çok uzun (en fazla 255 karakter olmalı).",
|
||||||
"Username must have at least 2 characters": "Kullanıcı adı en az iki karakterden oluşmalı",
|
"Username must have at least 2 characters": "Kullanıcı adı en az iki karakterden oluşmalı",
|
||||||
|
"Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.": "Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.",
|
||||||
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "Çok fazla hatalı şifre denemesi yaptınız. %d dakika kadar bekleyip yeniden giriş yapmayı deneyebilirsiniz.",
|
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "Çok fazla hatalı şifre denemesi yaptınız. %d dakika kadar bekleyip yeniden giriş yapmayı deneyebilirsiniz.",
|
||||||
|
"Your IP address: %s has been banned according to the configuration of: ": "Your IP address: %s has been banned according to the configuration of: ",
|
||||||
|
"Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"": "Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"",
|
||||||
"Your region is not allow to signup by phone": "Your region is not allow to signup by phone",
|
"Your region is not allow to signup by phone": "Your region is not allow to signup by phone",
|
||||||
"password or code is incorrect": "şifre veya kod hatalı",
|
"password or code is incorrect": "şifre veya kod hatalı",
|
||||||
"password or code is incorrect, you have %d remaining chances": "password or code is incorrect, you have %d remaining chances",
|
"password or code is incorrect, you have %d remaining chances": "password or code is incorrect, you have %d remaining chances",
|
||||||
"unsupported password type: %s": "unsupported password type: %s"
|
"unsupported password type: %s": "unsupported password type: %s"
|
||||||
},
|
},
|
||||||
|
"enforcer": {
|
||||||
|
"the adapter: %s is not found": "the adapter: %s is not found"
|
||||||
|
},
|
||||||
"general": {
|
"general": {
|
||||||
|
"Failed to import groups": "Failed to import groups",
|
||||||
|
"Failed to import users": "Failed to import users",
|
||||||
"Missing parameter": "Missing parameter",
|
"Missing parameter": "Missing parameter",
|
||||||
|
"Only admin user can specify user": "Only admin user can specify user",
|
||||||
"Please login first": "Please login first",
|
"Please login first": "Please login first",
|
||||||
"The organization: %s should have one application at least": "The organization: %s should have one application at least",
|
"The organization: %s should have one application at least": "The organization: %s should have one application at least",
|
||||||
"The user: %s doesn't exist": "The user: %s doesn't exist",
|
"The user: %s doesn't exist": "The user: %s doesn't exist",
|
||||||
|
"Wrong userId": "Wrong userId",
|
||||||
"don't support captchaProvider: ": "don't support captchaProvider: ",
|
"don't support captchaProvider: ": "don't support captchaProvider: ",
|
||||||
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
|
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
|
||||||
"this operation requires administrator to perform": "this operation requires administrator to perform"
|
"this operation requires administrator to perform": "this operation requires administrator to perform"
|
||||||
@ -98,7 +118,8 @@
|
|||||||
"organization": {
|
"organization": {
|
||||||
"Only admin can modify the %s.": "Only admin can modify the %s.",
|
"Only admin can modify the %s.": "Only admin can modify the %s.",
|
||||||
"The %s is immutable.": "The %s is immutable.",
|
"The %s is immutable.": "The %s is immutable.",
|
||||||
"Unknown modify rule %s.": "Unknown modify rule %s."
|
"Unknown modify rule %s.": "Unknown modify rule %s.",
|
||||||
|
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
|
||||||
},
|
},
|
||||||
"permission": {
|
"permission": {
|
||||||
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
|
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
|
||||||
@ -126,6 +147,9 @@
|
|||||||
"The objectKey: %s is not allowed": "The objectKey: %s is not allowed",
|
"The objectKey: %s is not allowed": "The objectKey: %s is not allowed",
|
||||||
"The provider type: %s is not supported": "The provider type: %s is not supported"
|
"The provider type: %s is not supported": "The provider type: %s is not supported"
|
||||||
},
|
},
|
||||||
|
"subscription": {
|
||||||
|
"Error": "Error"
|
||||||
|
},
|
||||||
"token": {
|
"token": {
|
||||||
"Grant_type: %s is not supported in this application": "Grant_type: %s is not supported in this application",
|
"Grant_type: %s is not supported in this application": "Grant_type: %s is not supported in this application",
|
||||||
"Invalid application or wrong clientSecret": "Invalid application or wrong clientSecret",
|
"Invalid application or wrong clientSecret": "Invalid application or wrong clientSecret",
|
||||||
@ -135,10 +159,10 @@
|
|||||||
},
|
},
|
||||||
"user": {
|
"user": {
|
||||||
"Display name cannot be empty": "Görünen ad boş olamaz",
|
"Display name cannot be empty": "Görünen ad boş olamaz",
|
||||||
"New password cannot contain blank space.": "Yeni şifreniz boşluk karakteri içeremez."
|
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
|
||||||
},
|
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
|
||||||
"user_upload": {
|
"New password cannot contain blank space.": "Yeni şifreniz boşluk karakteri içeremez.",
|
||||||
"Failed to import users": "Failed to import users"
|
"the user's owner and name should not be empty": "the user's owner and name should not be empty"
|
||||||
},
|
},
|
||||||
"util": {
|
"util": {
|
||||||
"No application is found for userId: %s": "No application is found for userId: %s",
|
"No application is found for userId: %s": "No application is found for userId: %s",
|
||||||
@ -148,8 +172,8 @@
|
|||||||
"verification": {
|
"verification": {
|
||||||
"Invalid captcha provider.": "Invalid captcha provider.",
|
"Invalid captcha provider.": "Invalid captcha provider.",
|
||||||
"Phone number is invalid in your region %s": "Telefon numaranızın bulunduğu bölgeye hizmet veremiyoruz",
|
"Phone number is invalid in your region %s": "Telefon numaranızın bulunduğu bölgeye hizmet veremiyoruz",
|
||||||
|
"The verification code has already been used!": "The verification code has already been used!",
|
||||||
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
|
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
|
||||||
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
|
|
||||||
"Turing test failed.": "Turing test failed.",
|
"Turing test failed.": "Turing test failed.",
|
||||||
"Unable to get the email modify rule.": "Unable to get the email modify rule.",
|
"Unable to get the email modify rule.": "Unable to get the email modify rule.",
|
||||||
"Unable to get the phone modify rule.": "Unable to get the phone modify rule.",
|
"Unable to get the phone modify rule.": "Unable to get the phone modify rule.",
|
||||||
@ -161,7 +185,6 @@
|
|||||||
"the user does not exist, please sign up first": "the user does not exist, please sign up first"
|
"the user does not exist, please sign up first": "the user does not exist, please sign up first"
|
||||||
},
|
},
|
||||||
"webauthn": {
|
"webauthn": {
|
||||||
"Found no credentials for this user": "Found no credentials for this user",
|
|
||||||
"Please call WebAuthnSigninBegin first": "Please call WebAuthnSigninBegin first"
|
"Please call WebAuthnSigninBegin first": "Please call WebAuthnSigninBegin first"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
},
|
},
|
||||||
"auth": {
|
"auth": {
|
||||||
"Challenge method should be S256": "Challenge method should be S256",
|
"Challenge method should be S256": "Challenge method should be S256",
|
||||||
|
"DeviceCode Invalid": "DeviceCode Invalid",
|
||||||
"Failed to create user, user information is invalid: %s": "Failed to create user, user information is invalid: %s",
|
"Failed to create user, user information is invalid: %s": "Failed to create user, user information is invalid: %s",
|
||||||
"Failed to login in: %s": "Failed to login in: %s",
|
"Failed to login in: %s": "Failed to login in: %s",
|
||||||
"Invalid token": "Invalid token",
|
"Invalid token": "Invalid token",
|
||||||
@ -21,17 +22,24 @@
|
|||||||
"The login method: login with face is not enabled for the application": "The login method: login with face is not enabled for the application",
|
"The login method: login with face is not enabled for the application": "The login method: login with face is not enabled for the application",
|
||||||
"The login method: login with password is not enabled for the application": "The login method: login with password is not enabled for the application",
|
"The login method: login with password is not enabled for the application": "The login method: login with password is not enabled for the application",
|
||||||
"The organization: %s does not exist": "The organization: %s does not exist",
|
"The organization: %s does not exist": "The organization: %s does not exist",
|
||||||
|
"The provider: %s does not exist": "The provider: %s does not exist",
|
||||||
"The provider: %s is not enabled for the application": "The provider: %s is not enabled for the application",
|
"The provider: %s is not enabled for the application": "The provider: %s is not enabled for the application",
|
||||||
"Unauthorized operation": "Unauthorized operation",
|
"Unauthorized operation": "Unauthorized operation",
|
||||||
"Unknown authentication type (not password or provider), form = %s": "Unknown authentication type (not password or provider), form = %s",
|
"Unknown authentication type (not password or provider), form = %s": "Unknown authentication type (not password or provider), form = %s",
|
||||||
"User's tag: %s is not listed in the application's tags": "User's tag: %s is not listed in the application's tags",
|
"User's tag: %s is not listed in the application's tags": "User's tag: %s is not listed in the application's tags",
|
||||||
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing"
|
"UserCode Expired": "UserCode Expired",
|
||||||
|
"UserCode Invalid": "UserCode Invalid",
|
||||||
|
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing",
|
||||||
|
"the application for user %s is not found": "the application for user %s is not found",
|
||||||
|
"the organization: %s is not found": "the organization: %s is not found"
|
||||||
},
|
},
|
||||||
"cas": {
|
"cas": {
|
||||||
"Service %s and %s do not match": "Service %s and %s do not match"
|
"Service %s and %s do not match": "Service %s and %s do not match"
|
||||||
},
|
},
|
||||||
"check": {
|
"check": {
|
||||||
|
"%s does not meet the CIDR format requirements: %s": "%s does not meet the CIDR format requirements: %s",
|
||||||
"Affiliation cannot be blank": "Affiliation cannot be blank",
|
"Affiliation cannot be blank": "Affiliation cannot be blank",
|
||||||
|
"CIDR for IP: %s should not be empty": "CIDR for IP: %s should not be empty",
|
||||||
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
||||||
"DisplayName cannot be blank": "DisplayName cannot be blank",
|
"DisplayName cannot be blank": "DisplayName cannot be blank",
|
||||||
"DisplayName is not valid real name": "DisplayName is not valid real name",
|
"DisplayName is not valid real name": "DisplayName is not valid real name",
|
||||||
@ -41,6 +49,7 @@
|
|||||||
"Empty username.": "Empty username.",
|
"Empty username.": "Empty username.",
|
||||||
"Face data does not exist, cannot log in": "Face data does not exist, cannot log in",
|
"Face data does not exist, cannot log in": "Face data does not exist, cannot log in",
|
||||||
"Face data mismatch": "Face data mismatch",
|
"Face data mismatch": "Face data mismatch",
|
||||||
|
"Failed to parse client IP: %s": "Failed to parse client IP: %s",
|
||||||
"FirstName cannot be blank": "FirstName cannot be blank",
|
"FirstName cannot be blank": "FirstName cannot be blank",
|
||||||
"Invitation code cannot be blank": "Invitation code cannot be blank",
|
"Invitation code cannot be blank": "Invitation code cannot be blank",
|
||||||
"Invitation code exhausted": "Invitation code exhausted",
|
"Invitation code exhausted": "Invitation code exhausted",
|
||||||
@ -50,6 +59,7 @@
|
|||||||
"LastName cannot be blank": "LastName cannot be blank",
|
"LastName cannot be blank": "LastName cannot be blank",
|
||||||
"Multiple accounts with same uid, please check your ldap server": "Multiple accounts with same uid, please check your ldap server",
|
"Multiple accounts with same uid, please check your ldap server": "Multiple accounts with same uid, please check your ldap server",
|
||||||
"Organization does not exist": "Organization does not exist",
|
"Organization does not exist": "Organization does not exist",
|
||||||
|
"Password cannot be empty": "Password cannot be empty",
|
||||||
"Phone already exists": "Phone already exists",
|
"Phone already exists": "Phone already exists",
|
||||||
"Phone cannot be empty": "Phone cannot be empty",
|
"Phone cannot be empty": "Phone cannot be empty",
|
||||||
"Phone number is invalid": "Phone number is invalid",
|
"Phone number is invalid": "Phone number is invalid",
|
||||||
@ -69,17 +79,27 @@
|
|||||||
"Username cannot start with a digit": "Username cannot start with a digit",
|
"Username cannot start with a digit": "Username cannot start with a digit",
|
||||||
"Username is too long (maximum is 255 characters).": "Username is too long (maximum is 255 characters).",
|
"Username is too long (maximum is 255 characters).": "Username is too long (maximum is 255 characters).",
|
||||||
"Username must have at least 2 characters": "Username must have at least 2 characters",
|
"Username must have at least 2 characters": "Username must have at least 2 characters",
|
||||||
|
"Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.": "Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.",
|
||||||
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "You have entered the wrong password or code too many times, please wait for %d minutes and try again",
|
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "You have entered the wrong password or code too many times, please wait for %d minutes and try again",
|
||||||
|
"Your IP address: %s has been banned according to the configuration of: ": "Your IP address: %s has been banned according to the configuration of: ",
|
||||||
|
"Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"": "Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"",
|
||||||
"Your region is not allow to signup by phone": "Your region is not allow to signup by phone",
|
"Your region is not allow to signup by phone": "Your region is not allow to signup by phone",
|
||||||
"password or code is incorrect": "password or code is incorrect",
|
"password or code is incorrect": "password or code is incorrect",
|
||||||
"password or code is incorrect, you have %d remaining chances": "password or code is incorrect, you have %d remaining chances",
|
"password or code is incorrect, you have %d remaining chances": "password or code is incorrect, you have %d remaining chances",
|
||||||
"unsupported password type: %s": "unsupported password type: %s"
|
"unsupported password type: %s": "unsupported password type: %s"
|
||||||
},
|
},
|
||||||
|
"enforcer": {
|
||||||
|
"the adapter: %s is not found": "the adapter: %s is not found"
|
||||||
|
},
|
||||||
"general": {
|
"general": {
|
||||||
|
"Failed to import groups": "Failed to import groups",
|
||||||
|
"Failed to import users": "Failed to import users",
|
||||||
"Missing parameter": "Missing parameter",
|
"Missing parameter": "Missing parameter",
|
||||||
|
"Only admin user can specify user": "Only admin user can specify user",
|
||||||
"Please login first": "Please login first",
|
"Please login first": "Please login first",
|
||||||
"The organization: %s should have one application at least": "The organization: %s should have one application at least",
|
"The organization: %s should have one application at least": "The organization: %s should have one application at least",
|
||||||
"The user: %s doesn't exist": "The user: %s doesn't exist",
|
"The user: %s doesn't exist": "The user: %s doesn't exist",
|
||||||
|
"Wrong userId": "Wrong userId",
|
||||||
"don't support captchaProvider: ": "don't support captchaProvider: ",
|
"don't support captchaProvider: ": "don't support captchaProvider: ",
|
||||||
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
|
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
|
||||||
"this operation requires administrator to perform": "this operation requires administrator to perform"
|
"this operation requires administrator to perform": "this operation requires administrator to perform"
|
||||||
@ -98,7 +118,8 @@
|
|||||||
"organization": {
|
"organization": {
|
||||||
"Only admin can modify the %s.": "Only admin can modify the %s.",
|
"Only admin can modify the %s.": "Only admin can modify the %s.",
|
||||||
"The %s is immutable.": "The %s is immutable.",
|
"The %s is immutable.": "The %s is immutable.",
|
||||||
"Unknown modify rule %s.": "Unknown modify rule %s."
|
"Unknown modify rule %s.": "Unknown modify rule %s.",
|
||||||
|
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
|
||||||
},
|
},
|
||||||
"permission": {
|
"permission": {
|
||||||
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
|
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
|
||||||
@ -126,6 +147,9 @@
|
|||||||
"The objectKey: %s is not allowed": "The objectKey: %s is not allowed",
|
"The objectKey: %s is not allowed": "The objectKey: %s is not allowed",
|
||||||
"The provider type: %s is not supported": "The provider type: %s is not supported"
|
"The provider type: %s is not supported": "The provider type: %s is not supported"
|
||||||
},
|
},
|
||||||
|
"subscription": {
|
||||||
|
"Error": "Error"
|
||||||
|
},
|
||||||
"token": {
|
"token": {
|
||||||
"Grant_type: %s is not supported in this application": "Grant_type: %s is not supported in this application",
|
"Grant_type: %s is not supported in this application": "Grant_type: %s is not supported in this application",
|
||||||
"Invalid application or wrong clientSecret": "Invalid application or wrong clientSecret",
|
"Invalid application or wrong clientSecret": "Invalid application or wrong clientSecret",
|
||||||
@ -135,10 +159,10 @@
|
|||||||
},
|
},
|
||||||
"user": {
|
"user": {
|
||||||
"Display name cannot be empty": "Display name cannot be empty",
|
"Display name cannot be empty": "Display name cannot be empty",
|
||||||
"New password cannot contain blank space.": "New password cannot contain blank space."
|
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
|
||||||
},
|
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
|
||||||
"user_upload": {
|
"New password cannot contain blank space.": "New password cannot contain blank space.",
|
||||||
"Failed to import users": "Failed to import users"
|
"the user's owner and name should not be empty": "the user's owner and name should not be empty"
|
||||||
},
|
},
|
||||||
"util": {
|
"util": {
|
||||||
"No application is found for userId: %s": "No application is found for userId: %s",
|
"No application is found for userId: %s": "No application is found for userId: %s",
|
||||||
@ -148,8 +172,8 @@
|
|||||||
"verification": {
|
"verification": {
|
||||||
"Invalid captcha provider.": "Invalid captcha provider.",
|
"Invalid captcha provider.": "Invalid captcha provider.",
|
||||||
"Phone number is invalid in your region %s": "Phone number is invalid in your region %s",
|
"Phone number is invalid in your region %s": "Phone number is invalid in your region %s",
|
||||||
|
"The verification code has already been used!": "The verification code has already been used!",
|
||||||
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
|
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
|
||||||
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
|
|
||||||
"Turing test failed.": "Turing test failed.",
|
"Turing test failed.": "Turing test failed.",
|
||||||
"Unable to get the email modify rule.": "Unable to get the email modify rule.",
|
"Unable to get the email modify rule.": "Unable to get the email modify rule.",
|
||||||
"Unable to get the phone modify rule.": "Unable to get the phone modify rule.",
|
"Unable to get the phone modify rule.": "Unable to get the phone modify rule.",
|
||||||
@ -161,7 +185,6 @@
|
|||||||
"the user does not exist, please sign up first": "the user does not exist, please sign up first"
|
"the user does not exist, please sign up first": "the user does not exist, please sign up first"
|
||||||
},
|
},
|
||||||
"webauthn": {
|
"webauthn": {
|
||||||
"Found no credentials for this user": "Found no credentials for this user",
|
|
||||||
"Please call WebAuthnSigninBegin first": "Please call WebAuthnSigninBegin first"
|
"Please call WebAuthnSigninBegin first": "Please call WebAuthnSigninBegin first"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
},
|
},
|
||||||
"auth": {
|
"auth": {
|
||||||
"Challenge method should be S256": "Phương pháp thách thức nên là S256",
|
"Challenge method should be S256": "Phương pháp thách thức nên là S256",
|
||||||
|
"DeviceCode Invalid": "DeviceCode Invalid",
|
||||||
"Failed to create user, user information is invalid: %s": "Không thể tạo người dùng, thông tin người dùng không hợp lệ: %s",
|
"Failed to create user, user information is invalid: %s": "Không thể tạo người dùng, thông tin người dùng không hợp lệ: %s",
|
||||||
"Failed to login in: %s": "Đăng nhập không thành công: %s",
|
"Failed to login in: %s": "Đăng nhập không thành công: %s",
|
||||||
"Invalid token": "Mã thông báo không hợp lệ",
|
"Invalid token": "Mã thông báo không hợp lệ",
|
||||||
@ -21,17 +22,24 @@
|
|||||||
"The login method: login with face is not enabled for the application": "The login method: login with face is not enabled for the application",
|
"The login method: login with face is not enabled for the application": "The login method: login with face is not enabled for the application",
|
||||||
"The login method: login with password is not enabled for the application": "Phương thức đăng nhập: đăng nhập bằng mật khẩu không được kích hoạt cho ứng dụng",
|
"The login method: login with password is not enabled for the application": "Phương thức đăng nhập: đăng nhập bằng mật khẩu không được kích hoạt cho ứng dụng",
|
||||||
"The organization: %s does not exist": "The organization: %s does not exist",
|
"The organization: %s does not exist": "The organization: %s does not exist",
|
||||||
|
"The provider: %s does not exist": "The provider: %s does not exist",
|
||||||
"The provider: %s is not enabled for the application": "Nhà cung cấp: %s không được kích hoạt cho ứng dụng",
|
"The provider: %s is not enabled for the application": "Nhà cung cấp: %s không được kích hoạt cho ứng dụng",
|
||||||
"Unauthorized operation": "Hoạt động không được ủy quyền",
|
"Unauthorized operation": "Hoạt động không được ủy quyền",
|
||||||
"Unknown authentication type (not password or provider), form = %s": "Loại xác thực không xác định (không phải mật khẩu hoặc nhà cung cấp), biểu mẫu = %s",
|
"Unknown authentication type (not password or provider), form = %s": "Loại xác thực không xác định (không phải mật khẩu hoặc nhà cung cấp), biểu mẫu = %s",
|
||||||
"User's tag: %s is not listed in the application's tags": "User's tag: %s is not listed in the application's tags",
|
"User's tag: %s is not listed in the application's tags": "User's tag: %s is not listed in the application's tags",
|
||||||
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing"
|
"UserCode Expired": "UserCode Expired",
|
||||||
|
"UserCode Invalid": "UserCode Invalid",
|
||||||
|
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s does not have active or pending subscription and the application: %s does not have default pricing",
|
||||||
|
"the application for user %s is not found": "the application for user %s is not found",
|
||||||
|
"the organization: %s is not found": "the organization: %s is not found"
|
||||||
},
|
},
|
||||||
"cas": {
|
"cas": {
|
||||||
"Service %s and %s do not match": "Dịch sang tiếng Việt: Dịch vụ %s và %s không khớp"
|
"Service %s and %s do not match": "Dịch sang tiếng Việt: Dịch vụ %s và %s không khớp"
|
||||||
},
|
},
|
||||||
"check": {
|
"check": {
|
||||||
|
"%s does not meet the CIDR format requirements: %s": "%s does not meet the CIDR format requirements: %s",
|
||||||
"Affiliation cannot be blank": "Tình trạng liên kết không thể để trống",
|
"Affiliation cannot be blank": "Tình trạng liên kết không thể để trống",
|
||||||
|
"CIDR for IP: %s should not be empty": "CIDR for IP: %s should not be empty",
|
||||||
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
"Default code does not match the code's matching rules": "Default code does not match the code's matching rules",
|
||||||
"DisplayName cannot be blank": "Tên hiển thị không thể để trống",
|
"DisplayName cannot be blank": "Tên hiển thị không thể để trống",
|
||||||
"DisplayName is not valid real name": "DisplayName không phải là tên thật hợp lệ",
|
"DisplayName is not valid real name": "DisplayName không phải là tên thật hợp lệ",
|
||||||
@ -41,6 +49,7 @@
|
|||||||
"Empty username.": "Tên đăng nhập trống.",
|
"Empty username.": "Tên đăng nhập trống.",
|
||||||
"Face data does not exist, cannot log in": "Face data does not exist, cannot log in",
|
"Face data does not exist, cannot log in": "Face data does not exist, cannot log in",
|
||||||
"Face data mismatch": "Face data mismatch",
|
"Face data mismatch": "Face data mismatch",
|
||||||
|
"Failed to parse client IP: %s": "Failed to parse client IP: %s",
|
||||||
"FirstName cannot be blank": "Tên không được để trống",
|
"FirstName cannot be blank": "Tên không được để trống",
|
||||||
"Invitation code cannot be blank": "Invitation code cannot be blank",
|
"Invitation code cannot be blank": "Invitation code cannot be blank",
|
||||||
"Invitation code exhausted": "Invitation code exhausted",
|
"Invitation code exhausted": "Invitation code exhausted",
|
||||||
@ -50,6 +59,7 @@
|
|||||||
"LastName cannot be blank": "Họ không thể để trống",
|
"LastName cannot be blank": "Họ không thể để trống",
|
||||||
"Multiple accounts with same uid, please check your ldap server": "Nhiều tài khoản với cùng một uid, vui lòng kiểm tra máy chủ ldap của bạn",
|
"Multiple accounts with same uid, please check your ldap server": "Nhiều tài khoản với cùng một uid, vui lòng kiểm tra máy chủ ldap của bạn",
|
||||||
"Organization does not exist": "Tổ chức không tồn tại",
|
"Organization does not exist": "Tổ chức không tồn tại",
|
||||||
|
"Password cannot be empty": "Password cannot be empty",
|
||||||
"Phone already exists": "Điện thoại đã tồn tại",
|
"Phone already exists": "Điện thoại đã tồn tại",
|
||||||
"Phone cannot be empty": "Điện thoại không thể để trống",
|
"Phone cannot be empty": "Điện thoại không thể để trống",
|
||||||
"Phone number is invalid": "Số điện thoại không hợp lệ",
|
"Phone number is invalid": "Số điện thoại không hợp lệ",
|
||||||
@ -69,17 +79,27 @@
|
|||||||
"Username cannot start with a digit": "Tên người dùng không thể bắt đầu bằng chữ số",
|
"Username cannot start with a digit": "Tên người dùng không thể bắt đầu bằng chữ số",
|
||||||
"Username is too long (maximum is 255 characters).": "Tên đăng nhập quá dài (tối đa là 255 ký tự).",
|
"Username is too long (maximum is 255 characters).": "Tên đăng nhập quá dài (tối đa là 255 ký tự).",
|
||||||
"Username must have at least 2 characters": "Tên đăng nhập phải có ít nhất 2 ký tự",
|
"Username must have at least 2 characters": "Tên đăng nhập phải có ít nhất 2 ký tự",
|
||||||
|
"Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.": "Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.",
|
||||||
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "Bạn đã nhập sai mật khẩu hoặc mã quá nhiều lần, vui lòng đợi %d phút và thử lại",
|
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "Bạn đã nhập sai mật khẩu hoặc mã quá nhiều lần, vui lòng đợi %d phút và thử lại",
|
||||||
|
"Your IP address: %s has been banned according to the configuration of: ": "Your IP address: %s has been banned according to the configuration of: ",
|
||||||
|
"Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"": "Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"",
|
||||||
"Your region is not allow to signup by phone": "Vùng của bạn không được phép đăng ký bằng điện thoại",
|
"Your region is not allow to signup by phone": "Vùng của bạn không được phép đăng ký bằng điện thoại",
|
||||||
"password or code is incorrect": "password or code is incorrect",
|
"password or code is incorrect": "password or code is incorrect",
|
||||||
"password or code is incorrect, you have %d remaining chances": "Mật khẩu hoặc mã không chính xác, bạn còn %d lần cơ hội",
|
"password or code is incorrect, you have %d remaining chances": "Mật khẩu hoặc mã không chính xác, bạn còn %d lần cơ hội",
|
||||||
"unsupported password type: %s": "Loại mật khẩu không được hỗ trợ: %s"
|
"unsupported password type: %s": "Loại mật khẩu không được hỗ trợ: %s"
|
||||||
},
|
},
|
||||||
|
"enforcer": {
|
||||||
|
"the adapter: %s is not found": "the adapter: %s is not found"
|
||||||
|
},
|
||||||
"general": {
|
"general": {
|
||||||
|
"Failed to import groups": "Failed to import groups",
|
||||||
|
"Failed to import users": "Không thể nhập người dùng",
|
||||||
"Missing parameter": "Thiếu tham số",
|
"Missing parameter": "Thiếu tham số",
|
||||||
|
"Only admin user can specify user": "Only admin user can specify user",
|
||||||
"Please login first": "Vui lòng đăng nhập trước",
|
"Please login first": "Vui lòng đăng nhập trước",
|
||||||
"The organization: %s should have one application at least": "The organization: %s should have one application at least",
|
"The organization: %s should have one application at least": "The organization: %s should have one application at least",
|
||||||
"The user: %s doesn't exist": "Người dùng: %s không tồn tại",
|
"The user: %s doesn't exist": "Người dùng: %s không tồn tại",
|
||||||
|
"Wrong userId": "Wrong userId",
|
||||||
"don't support captchaProvider: ": "không hỗ trợ captchaProvider: ",
|
"don't support captchaProvider: ": "không hỗ trợ captchaProvider: ",
|
||||||
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
|
"this operation is not allowed in demo mode": "this operation is not allowed in demo mode",
|
||||||
"this operation requires administrator to perform": "this operation requires administrator to perform"
|
"this operation requires administrator to perform": "this operation requires administrator to perform"
|
||||||
@ -98,7 +118,8 @@
|
|||||||
"organization": {
|
"organization": {
|
||||||
"Only admin can modify the %s.": "Chỉ những người quản trị mới có thể sửa đổi %s.",
|
"Only admin can modify the %s.": "Chỉ những người quản trị mới có thể sửa đổi %s.",
|
||||||
"The %s is immutable.": "%s không thể thay đổi được.",
|
"The %s is immutable.": "%s không thể thay đổi được.",
|
||||||
"Unknown modify rule %s.": "Quy tắc thay đổi không xác định %s."
|
"Unknown modify rule %s.": "Quy tắc thay đổi không xác định %s.",
|
||||||
|
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."
|
||||||
},
|
},
|
||||||
"permission": {
|
"permission": {
|
||||||
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
|
"The permission: \\\"%s\\\" doesn't exist": "The permission: \\\"%s\\\" doesn't exist"
|
||||||
@ -126,6 +147,9 @@
|
|||||||
"The objectKey: %s is not allowed": "Khóa đối tượng: %s không được phép",
|
"The objectKey: %s is not allowed": "Khóa đối tượng: %s không được phép",
|
||||||
"The provider type: %s is not supported": "Loại nhà cung cấp: %s không được hỗ trợ"
|
"The provider type: %s is not supported": "Loại nhà cung cấp: %s không được hỗ trợ"
|
||||||
},
|
},
|
||||||
|
"subscription": {
|
||||||
|
"Error": "Error"
|
||||||
|
},
|
||||||
"token": {
|
"token": {
|
||||||
"Grant_type: %s is not supported in this application": "Loại cấp phép: %s không được hỗ trợ trong ứng dụng này",
|
"Grant_type: %s is not supported in this application": "Loại cấp phép: %s không được hỗ trợ trong ứng dụng này",
|
||||||
"Invalid application or wrong clientSecret": "Đơn đăng ký không hợp lệ hoặc sai clientSecret",
|
"Invalid application or wrong clientSecret": "Đơn đăng ký không hợp lệ hoặc sai clientSecret",
|
||||||
@ -135,10 +159,10 @@
|
|||||||
},
|
},
|
||||||
"user": {
|
"user": {
|
||||||
"Display name cannot be empty": "Tên hiển thị không thể trống",
|
"Display name cannot be empty": "Tên hiển thị không thể trống",
|
||||||
"New password cannot contain blank space.": "Mật khẩu mới không thể chứa dấu trắng."
|
"MFA email is enabled but email is empty": "MFA email is enabled but email is empty",
|
||||||
},
|
"MFA phone is enabled but phone number is empty": "MFA phone is enabled but phone number is empty",
|
||||||
"user_upload": {
|
"New password cannot contain blank space.": "Mật khẩu mới không thể chứa dấu trắng.",
|
||||||
"Failed to import users": "Không thể nhập người dùng"
|
"the user's owner and name should not be empty": "the user's owner and name should not be empty"
|
||||||
},
|
},
|
||||||
"util": {
|
"util": {
|
||||||
"No application is found for userId: %s": "Không tìm thấy ứng dụng cho ID người dùng: %s",
|
"No application is found for userId: %s": "Không tìm thấy ứng dụng cho ID người dùng: %s",
|
||||||
@ -148,8 +172,8 @@
|
|||||||
"verification": {
|
"verification": {
|
||||||
"Invalid captcha provider.": "Nhà cung cấp captcha không hợp lệ.",
|
"Invalid captcha provider.": "Nhà cung cấp captcha không hợp lệ.",
|
||||||
"Phone number is invalid in your region %s": "Số điện thoại không hợp lệ trong vùng của bạn %s",
|
"Phone number is invalid in your region %s": "Số điện thoại không hợp lệ trong vùng của bạn %s",
|
||||||
|
"The verification code has already been used!": "The verification code has already been used!",
|
||||||
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
|
"The verification code has not been sent yet!": "The verification code has not been sent yet!",
|
||||||
"The verification code has not been sent yet, or has already been used!": "The verification code has not been sent yet, or has already been used!",
|
|
||||||
"Turing test failed.": "Kiểm định Turing thất bại.",
|
"Turing test failed.": "Kiểm định Turing thất bại.",
|
||||||
"Unable to get the email modify rule.": "Không thể lấy quy tắc sửa đổi email.",
|
"Unable to get the email modify rule.": "Không thể lấy quy tắc sửa đổi email.",
|
||||||
"Unable to get the phone modify rule.": "Không thể thay đổi quy tắc trên điện thoại.",
|
"Unable to get the phone modify rule.": "Không thể thay đổi quy tắc trên điện thoại.",
|
||||||
@ -161,7 +185,6 @@
|
|||||||
"the user does not exist, please sign up first": "Người dùng không tồn tại, vui lòng đăng ký trước"
|
"the user does not exist, please sign up first": "Người dùng không tồn tại, vui lòng đăng ký trước"
|
||||||
},
|
},
|
||||||
"webauthn": {
|
"webauthn": {
|
||||||
"Found no credentials for this user": "Không tìm thấy thông tin xác thực cho người dùng này",
|
|
||||||
"Please call WebAuthnSigninBegin first": "Vui lòng gọi WebAuthnSigninBegin trước"
|
"Please call WebAuthnSigninBegin first": "Vui lòng gọi WebAuthnSigninBegin trước"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
},
|
},
|
||||||
"auth": {
|
"auth": {
|
||||||
"Challenge method should be S256": "Challenge方法应该为S256",
|
"Challenge method should be S256": "Challenge方法应该为S256",
|
||||||
|
"DeviceCode Invalid": "DeviceCode 无效",
|
||||||
"Failed to create user, user information is invalid: %s": "创建用户失败,用户信息无效: %s",
|
"Failed to create user, user information is invalid: %s": "创建用户失败,用户信息无效: %s",
|
||||||
"Failed to login in: %s": "登录失败: %s",
|
"Failed to login in: %s": "登录失败: %s",
|
||||||
"Invalid token": "无效token",
|
"Invalid token": "无效token",
|
||||||
@ -21,17 +22,24 @@
|
|||||||
"The login method: login with face is not enabled for the application": "该应用禁止采用人脸登录",
|
"The login method: login with face is not enabled for the application": "该应用禁止采用人脸登录",
|
||||||
"The login method: login with password is not enabled for the application": "该应用禁止采用密码登录方式",
|
"The login method: login with password is not enabled for the application": "该应用禁止采用密码登录方式",
|
||||||
"The organization: %s does not exist": "组织: %s 不存在",
|
"The organization: %s does not exist": "组织: %s 不存在",
|
||||||
|
"The provider: %s does not exist": "提供商: %s 不存在",
|
||||||
"The provider: %s is not enabled for the application": "该应用的提供商: %s未被启用",
|
"The provider: %s is not enabled for the application": "该应用的提供商: %s未被启用",
|
||||||
"Unauthorized operation": "未授权的操作",
|
"Unauthorized operation": "未授权的操作",
|
||||||
"Unknown authentication type (not password or provider), form = %s": "未知的认证类型(非密码或第三方提供商):%s",
|
"Unknown authentication type (not password or provider), form = %s": "未知的认证类型(非密码或第三方提供商):%s",
|
||||||
"User's tag: %s is not listed in the application's tags": "用户的标签: %s不在该应用的标签列表中",
|
"User's tag: %s is not listed in the application's tags": "用户的标签: %s不在该应用的标签列表中",
|
||||||
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s 没有激活或正在等待订阅并且应用: %s 没有默认值"
|
"UserCode Expired": "UserCode Expired",
|
||||||
|
"UserCode Invalid": "UserCode Invalid",
|
||||||
|
"paid-user %s does not have active or pending subscription and the application: %s does not have default pricing": "paid-user %s 没有激活或正在等待订阅并且应用: %s 没有默认值",
|
||||||
|
"the application for user %s is not found": "未找到用户 %s 的应用程序",
|
||||||
|
"the organization: %s is not found": "组织: %s 不存在"
|
||||||
},
|
},
|
||||||
"cas": {
|
"cas": {
|
||||||
"Service %s and %s do not match": "服务%s与%s不匹配"
|
"Service %s and %s do not match": "服务%s与%s不匹配"
|
||||||
},
|
},
|
||||||
"check": {
|
"check": {
|
||||||
|
"%s does not meet the CIDR format requirements: %s": "%s 不符合 CIDR 的格式要求: %s",
|
||||||
"Affiliation cannot be blank": "工作单位不可为空",
|
"Affiliation cannot be blank": "工作单位不可为空",
|
||||||
|
"CIDR for IP: %s should not be empty": "IP 的 CIDR 格式:%s 不能为空",
|
||||||
"Default code does not match the code's matching rules": "邀请码默认值和邀请码规则不匹配",
|
"Default code does not match the code's matching rules": "邀请码默认值和邀请码规则不匹配",
|
||||||
"DisplayName cannot be blank": "显示名称不可为空",
|
"DisplayName cannot be blank": "显示名称不可为空",
|
||||||
"DisplayName is not valid real name": "显示名称必须是真实姓名",
|
"DisplayName is not valid real name": "显示名称必须是真实姓名",
|
||||||
@ -41,6 +49,7 @@
|
|||||||
"Empty username.": "用户名不可为空",
|
"Empty username.": "用户名不可为空",
|
||||||
"Face data does not exist, cannot log in": "未录入人脸数据,无法登录",
|
"Face data does not exist, cannot log in": "未录入人脸数据,无法登录",
|
||||||
"Face data mismatch": "人脸不匹配",
|
"Face data mismatch": "人脸不匹配",
|
||||||
|
"Failed to parse client IP: %s": "无法解析客户端 IP 地址: %s",
|
||||||
"FirstName cannot be blank": "名不可以为空",
|
"FirstName cannot be blank": "名不可以为空",
|
||||||
"Invitation code cannot be blank": "邀请码不能为空",
|
"Invitation code cannot be blank": "邀请码不能为空",
|
||||||
"Invitation code exhausted": "邀请码使用次数已耗尽",
|
"Invitation code exhausted": "邀请码使用次数已耗尽",
|
||||||
@ -50,6 +59,7 @@
|
|||||||
"LastName cannot be blank": "姓不可以为空",
|
"LastName cannot be blank": "姓不可以为空",
|
||||||
"Multiple accounts with same uid, please check your ldap server": "多个帐户具有相同的uid,请检查您的 LDAP 服务器",
|
"Multiple accounts with same uid, please check your ldap server": "多个帐户具有相同的uid,请检查您的 LDAP 服务器",
|
||||||
"Organization does not exist": "组织不存在",
|
"Organization does not exist": "组织不存在",
|
||||||
|
"Password cannot be empty": "密码不能为空",
|
||||||
"Phone already exists": "该手机号已存在",
|
"Phone already exists": "该手机号已存在",
|
||||||
"Phone cannot be empty": "手机号不可为空",
|
"Phone cannot be empty": "手机号不可为空",
|
||||||
"Phone number is invalid": "无效手机号",
|
"Phone number is invalid": "无效手机号",
|
||||||
@ -69,17 +79,27 @@
|
|||||||
"Username cannot start with a digit": "用户名禁止使用数字开头",
|
"Username cannot start with a digit": "用户名禁止使用数字开头",
|
||||||
"Username is too long (maximum is 255 characters).": "用户名过长(最大允许长度为255个字符)",
|
"Username is too long (maximum is 255 characters).": "用户名过长(最大允许长度为255个字符)",
|
||||||
"Username must have at least 2 characters": "用户名至少要有2个字符",
|
"Username must have at least 2 characters": "用户名至少要有2个字符",
|
||||||
|
"Username supports email format. Also The username may only contain alphanumeric characters, underlines or hyphens, cannot have consecutive hyphens or underlines, and cannot begin or end with a hyphen or underline. Also pay attention to the email format.": "用户名支持电子邮件格式。此外,用户名只能包含字母数字字符、下划线或连字符,不能包含连续的连字符或下划线,也不能以连字符或下划线开头或结尾。同时请注意电子邮件格式。",
|
||||||
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "密码错误次数已达上限,请在 %d 分后重试",
|
"You have entered the wrong password or code too many times, please wait for %d minutes and try again": "密码错误次数已达上限,请在 %d 分后重试",
|
||||||
|
"Your IP address: %s has been banned according to the configuration of: ": "您的IP地址:%s 根据以下配置已被禁止: ",
|
||||||
|
"Your password has expired. Please reset your password by clicking \\\"Forgot password\\\"": "您的密码已过期。请点击 \\\"忘记密码\\\" 以重置密码",
|
||||||
"Your region is not allow to signup by phone": "所在地区不支持手机号注册",
|
"Your region is not allow to signup by phone": "所在地区不支持手机号注册",
|
||||||
"password or code is incorrect": "密码错误",
|
"password or code is incorrect": "密码错误",
|
||||||
"password or code is incorrect, you have %d remaining chances": "密码错误,您还有 %d 次尝试的机会",
|
"password or code is incorrect, you have %d remaining chances": "密码错误,您还有 %d 次尝试的机会",
|
||||||
"unsupported password type: %s": "不支持的密码类型: %s"
|
"unsupported password type: %s": "不支持的密码类型: %s"
|
||||||
},
|
},
|
||||||
|
"enforcer": {
|
||||||
|
"the adapter: %s is not found": "适配器: %s 未找到"
|
||||||
|
},
|
||||||
"general": {
|
"general": {
|
||||||
|
"Failed to import groups": "导入群组失败",
|
||||||
|
"Failed to import users": "导入用户失败",
|
||||||
"Missing parameter": "缺少参数",
|
"Missing parameter": "缺少参数",
|
||||||
|
"Only admin user can specify user": "仅管理员用户可以指定用户",
|
||||||
"Please login first": "请先登录",
|
"Please login first": "请先登录",
|
||||||
"The organization: %s should have one application at least": "组织: %s 应该拥有至少一个应用",
|
"The organization: %s should have one application at least": "组织: %s 应该拥有至少一个应用",
|
||||||
"The user: %s doesn't exist": "用户: %s不存在",
|
"The user: %s doesn't exist": "用户: %s不存在",
|
||||||
|
"Wrong userId": "错误的 userId",
|
||||||
"don't support captchaProvider: ": "不支持验证码提供商: ",
|
"don't support captchaProvider: ": "不支持验证码提供商: ",
|
||||||
"this operation is not allowed in demo mode": "demo模式下不允许该操作",
|
"this operation is not allowed in demo mode": "demo模式下不允许该操作",
|
||||||
"this operation requires administrator to perform": "只有管理员才能进行此操作"
|
"this operation requires administrator to perform": "只有管理员才能进行此操作"
|
||||||
@ -98,7 +118,8 @@
|
|||||||
"organization": {
|
"organization": {
|
||||||
"Only admin can modify the %s.": "仅允许管理员可以修改%s",
|
"Only admin can modify the %s.": "仅允许管理员可以修改%s",
|
||||||
"The %s is immutable.": "%s 是不可变的",
|
"The %s is immutable.": "%s 是不可变的",
|
||||||
"Unknown modify rule %s.": "未知的修改规则: %s"
|
"Unknown modify rule %s.": "未知的修改规则: %s",
|
||||||
|
"adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option.": "目前,向'built-in'组织添加新用户的功能已禁用。请注意:'built-in'组织中的所有用户均为Casdoor的全局管理员。请参阅文档:https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself。如果您仍希望为built-in组织创建用户,请转到该组织的设置页面并启用“特权同意”选项。"
|
||||||
},
|
},
|
||||||
"permission": {
|
"permission": {
|
||||||
"The permission: \\\"%s\\\" doesn't exist": "权限: \\\"%s\\\" 不存在"
|
"The permission: \\\"%s\\\" doesn't exist": "权限: \\\"%s\\\" 不存在"
|
||||||
@ -126,6 +147,9 @@
|
|||||||
"The objectKey: %s is not allowed": "objectKey: %s被禁止",
|
"The objectKey: %s is not allowed": "objectKey: %s被禁止",
|
||||||
"The provider type: %s is not supported": "不支持的提供商类型: %s"
|
"The provider type: %s is not supported": "不支持的提供商类型: %s"
|
||||||
},
|
},
|
||||||
|
"subscription": {
|
||||||
|
"Error": "错误"
|
||||||
|
},
|
||||||
"token": {
|
"token": {
|
||||||
"Grant_type: %s is not supported in this application": "该应用不支持Grant_type: %s",
|
"Grant_type: %s is not supported in this application": "该应用不支持Grant_type: %s",
|
||||||
"Invalid application or wrong clientSecret": "无效应用或错误的clientSecret",
|
"Invalid application or wrong clientSecret": "无效应用或错误的clientSecret",
|
||||||
@ -135,10 +159,10 @@
|
|||||||
},
|
},
|
||||||
"user": {
|
"user": {
|
||||||
"Display name cannot be empty": "显示名称不可为空",
|
"Display name cannot be empty": "显示名称不可为空",
|
||||||
"New password cannot contain blank space.": "新密码不可以包含空格"
|
"MFA email is enabled but email is empty": "MFA 电子邮件已启用,但电子邮件为空",
|
||||||
},
|
"MFA phone is enabled but phone number is empty": "MFA 电话已启用,但电话号码为空",
|
||||||
"user_upload": {
|
"New password cannot contain blank space.": "新密码不可以包含空格",
|
||||||
"Failed to import users": "导入用户失败"
|
"the user's owner and name should not be empty": "用户的组织和名称不能为空"
|
||||||
},
|
},
|
||||||
"util": {
|
"util": {
|
||||||
"No application is found for userId: %s": "未找到用户: %s的应用",
|
"No application is found for userId: %s": "未找到用户: %s的应用",
|
||||||
@ -148,8 +172,8 @@
|
|||||||
"verification": {
|
"verification": {
|
||||||
"Invalid captcha provider.": "非法的验证码提供商",
|
"Invalid captcha provider.": "非法的验证码提供商",
|
||||||
"Phone number is invalid in your region %s": "您所在地区的电话号码无效 %s",
|
"Phone number is invalid in your region %s": "您所在地区的电话号码无效 %s",
|
||||||
|
"The verification code has already been used!": "验证码已使用过!",
|
||||||
"The verification code has not been sent yet!": "验证码未发送!",
|
"The verification code has not been sent yet!": "验证码未发送!",
|
||||||
"The verification code has not been sent yet, or has already been used!": "验证码未发送或已被使用!",
|
|
||||||
"Turing test failed.": "验证码还未发送",
|
"Turing test failed.": "验证码还未发送",
|
||||||
"Unable to get the email modify rule.": "无法获取邮箱修改规则",
|
"Unable to get the email modify rule.": "无法获取邮箱修改规则",
|
||||||
"Unable to get the phone modify rule.": "无法获取手机号修改规则",
|
"Unable to get the phone modify rule.": "无法获取手机号修改规则",
|
||||||
@ -161,7 +185,6 @@
|
|||||||
"the user does not exist, please sign up first": "用户不存在,请先注册"
|
"the user does not exist, please sign up first": "用户不存在,请先注册"
|
||||||
},
|
},
|
||||||
"webauthn": {
|
"webauthn": {
|
||||||
"Found no credentials for this user": "该用户没有 WebAuthn 凭据",
|
|
||||||
"Please call WebAuthnSigninBegin first": "请先调用WebAuthnSigninBegin函数"
|
"Please call WebAuthnSigninBegin first": "请先调用WebAuthnSigninBegin函数"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -190,7 +190,7 @@ func (idp *DouyinIdProvider) GetUserInfo(token *oauth2.Token) (*UserInfo, error)
|
|||||||
|
|
||||||
userInfo := UserInfo{
|
userInfo := UserInfo{
|
||||||
Id: douyinUserInfo.Data.OpenId,
|
Id: douyinUserInfo.Data.OpenId,
|
||||||
Username: douyinUserInfo.Data.Nickname,
|
Username: douyinUserInfo.Data.OpenId,
|
||||||
DisplayName: douyinUserInfo.Data.Nickname,
|
DisplayName: douyinUserInfo.Data.Nickname,
|
||||||
AvatarUrl: douyinUserInfo.Data.Avatar,
|
AvatarUrl: douyinUserInfo.Data.Avatar,
|
||||||
}
|
}
|
||||||
|
13
idp/goth.go
13
idp/goth.go
@ -278,9 +278,16 @@ func NewGothIdProvider(providerType string, clientId string, clientSecret string
|
|||||||
Session: &naver.Session{},
|
Session: &naver.Session{},
|
||||||
}
|
}
|
||||||
case "Nextcloud":
|
case "Nextcloud":
|
||||||
idp = GothIdProvider{
|
if hostUrl != "" {
|
||||||
Provider: nextcloud.New(clientId, clientSecret, redirectUrl),
|
idp = GothIdProvider{
|
||||||
Session: &nextcloud.Session{},
|
Provider: nextcloud.NewCustomisedDNS(clientId, clientSecret, redirectUrl, hostUrl),
|
||||||
|
Session: &nextcloud.Session{},
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
idp = GothIdProvider{
|
||||||
|
Provider: nextcloud.New(clientId, clientSecret, redirectUrl),
|
||||||
|
Session: &nextcloud.Session{},
|
||||||
|
}
|
||||||
}
|
}
|
||||||
case "OneDrive":
|
case "OneDrive":
|
||||||
idp = GothIdProvider{
|
idp = GothIdProvider{
|
||||||
|
2
main.go
2
main.go
@ -45,6 +45,7 @@ func main() {
|
|||||||
object.InitUserManager()
|
object.InitUserManager()
|
||||||
object.InitFromFile()
|
object.InitFromFile()
|
||||||
object.InitCasvisorConfig()
|
object.InitCasvisorConfig()
|
||||||
|
object.InitCleanupTokens()
|
||||||
|
|
||||||
util.SafeGoroutine(func() { object.RunSyncUsersJob() })
|
util.SafeGoroutine(func() { object.RunSyncUsersJob() })
|
||||||
util.SafeGoroutine(func() { controllers.InitCLIDownloader() })
|
util.SafeGoroutine(func() { controllers.InitCLIDownloader() })
|
||||||
@ -63,6 +64,7 @@ func main() {
|
|||||||
beego.InsertFilter("*", beego.BeforeRouter, routers.ApiFilter)
|
beego.InsertFilter("*", beego.BeforeRouter, routers.ApiFilter)
|
||||||
beego.InsertFilter("*", beego.BeforeRouter, routers.PrometheusFilter)
|
beego.InsertFilter("*", beego.BeforeRouter, routers.PrometheusFilter)
|
||||||
beego.InsertFilter("*", beego.BeforeRouter, routers.RecordMessage)
|
beego.InsertFilter("*", beego.BeforeRouter, routers.RecordMessage)
|
||||||
|
beego.InsertFilter("*", beego.BeforeRouter, routers.FieldValidationFilter)
|
||||||
beego.InsertFilter("*", beego.AfterExec, routers.AfterRecordMessage, false)
|
beego.InsertFilter("*", beego.AfterExec, routers.AfterRecordMessage, false)
|
||||||
|
|
||||||
beego.BConfig.WebConfig.Session.SessionOn = true
|
beego.BConfig.WebConfig.Session.SessionOn = true
|
||||||
|
@ -220,10 +220,15 @@ func checkSigninErrorTimes(user *User, lang string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func CheckPassword(user *User, password string, lang string, options ...bool) error {
|
func CheckPassword(user *User, password string, lang string, options ...bool) error {
|
||||||
|
if password == "" {
|
||||||
|
return fmt.Errorf(i18n.Translate(lang, "check:Password cannot be empty"))
|
||||||
|
}
|
||||||
|
|
||||||
enableCaptcha := false
|
enableCaptcha := false
|
||||||
if len(options) > 0 {
|
if len(options) > 0 {
|
||||||
enableCaptcha = options[0]
|
enableCaptcha = options[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
// check the login error times
|
// check the login error times
|
||||||
if !enableCaptcha {
|
if !enableCaptcha {
|
||||||
err := checkSigninErrorTimes(user, lang)
|
err := checkSigninErrorTimes(user, lang)
|
||||||
@ -236,35 +241,31 @@ func CheckPassword(user *User, password string, lang string, options ...bool) er
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if organization == nil {
|
if organization == nil {
|
||||||
return fmt.Errorf(i18n.Translate(lang, "check:Organization does not exist"))
|
return fmt.Errorf(i18n.Translate(lang, "check:Organization does not exist"))
|
||||||
}
|
}
|
||||||
|
|
||||||
if password == "" {
|
|
||||||
return fmt.Errorf(i18n.Translate(lang, "check:Password cannot be empty"))
|
|
||||||
}
|
|
||||||
|
|
||||||
passwordType := user.PasswordType
|
passwordType := user.PasswordType
|
||||||
if passwordType == "" {
|
if passwordType == "" {
|
||||||
passwordType = organization.PasswordType
|
passwordType = organization.PasswordType
|
||||||
}
|
}
|
||||||
|
|
||||||
credManager := cred.GetCredManager(passwordType)
|
credManager := cred.GetCredManager(passwordType)
|
||||||
if credManager != nil {
|
if credManager == nil {
|
||||||
if organization.MasterPassword != "" {
|
|
||||||
if password == organization.MasterPassword || credManager.IsPasswordCorrect(password, organization.MasterPassword, "", organization.PasswordSalt) {
|
|
||||||
return resetUserSigninErrorTimes(user)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if credManager.IsPasswordCorrect(password, user.Password, user.PasswordSalt, organization.PasswordSalt) {
|
|
||||||
return resetUserSigninErrorTimes(user)
|
|
||||||
}
|
|
||||||
|
|
||||||
return recordSigninErrorInfo(user, lang, enableCaptcha)
|
|
||||||
} else {
|
|
||||||
return fmt.Errorf(i18n.Translate(lang, "check:unsupported password type: %s"), organization.PasswordType)
|
return fmt.Errorf(i18n.Translate(lang, "check:unsupported password type: %s"), organization.PasswordType)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if organization.MasterPassword != "" {
|
||||||
|
if password == organization.MasterPassword || credManager.IsPasswordCorrect(password, organization.MasterPassword, organization.PasswordSalt) {
|
||||||
|
return resetUserSigninErrorTimes(user)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if !credManager.IsPasswordCorrect(password, user.Password, organization.PasswordSalt) && !credManager.IsPasswordCorrect(password, user.Password, user.PasswordSalt) {
|
||||||
|
return recordSigninErrorInfo(user, lang, enableCaptcha)
|
||||||
|
}
|
||||||
|
|
||||||
|
return resetUserSigninErrorTimes(user)
|
||||||
}
|
}
|
||||||
|
|
||||||
func CheckPasswordComplexityByOrg(organization *Organization, password string) string {
|
func CheckPasswordComplexityByOrg(organization *Organization, password string) string {
|
||||||
@ -593,31 +594,41 @@ func CheckUpdateUser(oldUser, user *User, lang string) string {
|
|||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
func CheckToEnableCaptcha(application *Application, organization, username string) (bool, error) {
|
func CheckToEnableCaptcha(application *Application, organization, username string, clientIp string) (bool, error) {
|
||||||
if len(application.Providers) == 0 {
|
if len(application.Providers) == 0 {
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, providerItem := range application.Providers {
|
for _, providerItem := range application.Providers {
|
||||||
if providerItem.Provider == nil {
|
if providerItem.Provider == nil || providerItem.Provider.Category != "Captcha" {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if providerItem.Provider.Category == "Captcha" {
|
|
||||||
if providerItem.Rule == "Dynamic" {
|
if providerItem.Rule == "Internet-Only" {
|
||||||
user, err := GetUserByFields(organization, username)
|
if util.IsInternetIp(clientIp) {
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if providerItem.Rule == "Dynamic" {
|
||||||
|
user, err := GetUserByFields(organization, username)
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if user != nil {
|
||||||
|
failedSigninLimit, _, err := GetFailedSigninConfigByUser(user)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
failedSigninLimit := application.FailedSigninLimit
|
return user.SigninWrongTimes >= failedSigninLimit, nil
|
||||||
if failedSigninLimit == 0 {
|
|
||||||
failedSigninLimit = DefaultFailedSigninLimit
|
|
||||||
}
|
|
||||||
|
|
||||||
return user != nil && user.SigninWrongTimes >= failedSigninLimit, nil
|
|
||||||
}
|
}
|
||||||
return providerItem.Rule == "Always", nil
|
|
||||||
|
return false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return providerItem.Rule == "Always", nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return false, nil
|
return false, nil
|
||||||
|
@ -103,7 +103,7 @@ func GetDashboard(owner string) (*map[string][]int64, error) {
|
|||||||
func countCreatedBefore(dashboardMapItem DashboardMapItem, before time.Time) int64 {
|
func countCreatedBefore(dashboardMapItem DashboardMapItem, before time.Time) int64 {
|
||||||
count := dashboardMapItem.itemCount
|
count := dashboardMapItem.itemCount
|
||||||
for _, e := range dashboardMapItem.dashboardDateItems {
|
for _, e := range dashboardMapItem.dashboardDateItems {
|
||||||
createdTime, _ := time.Parse("2006-01-02T15:04:05-07:00", e.CreatedTime)
|
createdTime, _ := time.Parse(time.RFC3339, e.CreatedTime)
|
||||||
if createdTime.Before(before) {
|
if createdTime.Before(before) {
|
||||||
count++
|
count++
|
||||||
}
|
}
|
||||||
|
@ -95,12 +95,13 @@ func GetGroupsHaveChildrenMap(groups []*Group) (map[string]*Group, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
err := ormer.Engine.Cols("owner", "name", "parent_id", "display_name").Distinct("parent_id").In("parent_id", groupIds).Find(&groupsHaveChildren)
|
err := ormer.Engine.Cols("owner", "name", "parent_id", "display_name").Distinct("name").In("name", groupIds).Find(&groupsHaveChildren)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, group := range groupsHaveChildren {
|
for _, group := range groupsHaveChildren {
|
||||||
resultMap[group.ParentId] = groupMap[group.ParentId]
|
resultMap[group.GetId()] = group
|
||||||
}
|
}
|
||||||
return resultMap, nil
|
return resultMap, nil
|
||||||
}
|
}
|
||||||
@ -180,6 +181,41 @@ func AddGroups(groups []*Group) (bool, error) {
|
|||||||
return affected != 0, nil
|
return affected != 0, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func AddGroupsInBatch(groups []*Group) (bool, error) {
|
||||||
|
if len(groups) == 0 {
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
session := ormer.Engine.NewSession()
|
||||||
|
defer session.Close()
|
||||||
|
err := session.Begin()
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, group := range groups {
|
||||||
|
err = checkGroupName(group.Name)
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
affected, err := session.Insert(group)
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
if affected == 0 {
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
err = session.Commit()
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
|
|
||||||
func deleteGroup(group *Group) (bool, error) {
|
func deleteGroup(group *Group) (bool, error) {
|
||||||
affected, err := ormer.Engine.ID(core.PK{group.Owner, group.Name}).Delete(&Group{})
|
affected, err := ormer.Engine.ID(core.PK{group.Owner, group.Name}).Delete(&Group{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
61
object/group_upload.go
Normal file
61
object/group_upload.go
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
// Copyright 2025 The Casdoor Authors. All Rights Reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package object
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/casdoor/casdoor/xlsx"
|
||||||
|
)
|
||||||
|
|
||||||
|
func getGroupMap(owner string) (map[string]*Group, error) {
|
||||||
|
m := map[string]*Group{}
|
||||||
|
|
||||||
|
groups, err := GetGroups(owner)
|
||||||
|
if err != nil {
|
||||||
|
return m, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, group := range groups {
|
||||||
|
m[group.GetId()] = group
|
||||||
|
}
|
||||||
|
|
||||||
|
return m, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func UploadGroups(owner string, path string) (bool, error) {
|
||||||
|
table := xlsx.ReadXlsxFile(path)
|
||||||
|
|
||||||
|
oldGroupMap, err := getGroupMap(owner)
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
transGroups, err := StringArrayToStruct[Group](table)
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
newGroups := []*Group{}
|
||||||
|
for _, group := range transGroups {
|
||||||
|
if _, ok := oldGroupMap[group.GetId()]; !ok {
|
||||||
|
newGroups = append(newGroups, group)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(newGroups) == 0 {
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return AddGroupsInBatch(newGroups)
|
||||||
|
}
|
@ -154,7 +154,7 @@ func initBuiltInUser() {
|
|||||||
CreatedIp: "127.0.0.1",
|
CreatedIp: "127.0.0.1",
|
||||||
Properties: make(map[string]string),
|
Properties: make(map[string]string),
|
||||||
}
|
}
|
||||||
_, err = AddUser(user)
|
_, err = AddUser(user, "en")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
@ -342,7 +342,7 @@ func initDefinedUser(user *User) {
|
|||||||
if user.Properties == nil {
|
if user.Properties == nil {
|
||||||
user.Properties = make(map[string]string)
|
user.Properties = make(map[string]string)
|
||||||
}
|
}
|
||||||
_, err = AddUser(user)
|
_, err = AddUser(user, "en")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,7 @@ package object
|
|||||||
import "testing"
|
import "testing"
|
||||||
|
|
||||||
func TestDumpToFile(t *testing.T) {
|
func TestDumpToFile(t *testing.T) {
|
||||||
|
createDatabase = false
|
||||||
InitConfig()
|
InitConfig()
|
||||||
|
|
||||||
err := DumpToFile("./init_data_dump.json")
|
err := DumpToFile("./init_data_dump.json")
|
||||||
|
@ -260,15 +260,15 @@ func AutoAdjustLdapUser(users []LdapUser) []LdapUser {
|
|||||||
res := make([]LdapUser, len(users))
|
res := make([]LdapUser, len(users))
|
||||||
for i, user := range users {
|
for i, user := range users {
|
||||||
res[i] = LdapUser{
|
res[i] = LdapUser{
|
||||||
UidNumber: user.UidNumber,
|
UidNumber: user.UidNumber,
|
||||||
Uid: user.Uid,
|
Uid: user.Uid,
|
||||||
Cn: user.Cn,
|
Cn: user.Cn,
|
||||||
GroupId: user.GidNumber,
|
GroupId: user.GidNumber,
|
||||||
Uuid: user.GetLdapUuid(),
|
Uuid: user.GetLdapUuid(),
|
||||||
DisplayName: user.DisplayName,
|
DisplayName: user.DisplayName,
|
||||||
Email: util.ReturnAnyNotEmpty(user.Email, user.EmailAddress, user.Mail),
|
Email: util.ReturnAnyNotEmpty(user.Email, user.EmailAddress, user.Mail),
|
||||||
Mobile: util.ReturnAnyNotEmpty(user.Mobile, user.MobileTelephoneNumber, user.TelephoneNumber),
|
Mobile: util.ReturnAnyNotEmpty(user.Mobile, user.MobileTelephoneNumber, user.TelephoneNumber),
|
||||||
RegisteredAddress: util.ReturnAnyNotEmpty(user.PostalAddress, user.RegisteredAddress),
|
Address: util.ReturnAnyNotEmpty(user.Address, user.PostalAddress, user.RegisteredAddress),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return res
|
return res
|
||||||
@ -351,7 +351,7 @@ func SyncLdapUsers(owner string, syncUsers []LdapUser, ldapId string) (existUser
|
|||||||
newUser.Groups = []string{ldap.DefaultGroup}
|
newUser.Groups = []string{ldap.DefaultGroup}
|
||||||
}
|
}
|
||||||
|
|
||||||
affected, err := AddUser(newUser)
|
affected, err := AddUser(newUser, "en")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
@ -21,13 +21,14 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type MfaProps struct {
|
type MfaProps struct {
|
||||||
Enabled bool `json:"enabled"`
|
Enabled bool `json:"enabled"`
|
||||||
IsPreferred bool `json:"isPreferred"`
|
IsPreferred bool `json:"isPreferred"`
|
||||||
MfaType string `json:"mfaType" form:"mfaType"`
|
MfaType string `json:"mfaType" form:"mfaType"`
|
||||||
Secret string `json:"secret,omitempty"`
|
Secret string `json:"secret,omitempty"`
|
||||||
CountryCode string `json:"countryCode,omitempty"`
|
CountryCode string `json:"countryCode,omitempty"`
|
||||||
URL string `json:"url,omitempty"`
|
URL string `json:"url,omitempty"`
|
||||||
RecoveryCodes []string `json:"recoveryCodes,omitempty"`
|
RecoveryCodes []string `json:"recoveryCodes,omitempty"`
|
||||||
|
MfaRememberInHours int `json:"mfaRememberInHours"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type MfaInterface interface {
|
type MfaInterface interface {
|
||||||
|
@ -57,6 +57,7 @@ type Organization struct {
|
|||||||
Logo string `xorm:"varchar(200)" json:"logo"`
|
Logo string `xorm:"varchar(200)" json:"logo"`
|
||||||
LogoDark string `xorm:"varchar(200)" json:"logoDark"`
|
LogoDark string `xorm:"varchar(200)" json:"logoDark"`
|
||||||
Favicon string `xorm:"varchar(200)" json:"favicon"`
|
Favicon string `xorm:"varchar(200)" json:"favicon"`
|
||||||
|
HasPrivilegeConsent bool `xorm:"bool" json:"hasPrivilegeConsent"`
|
||||||
PasswordType string `xorm:"varchar(100)" json:"passwordType"`
|
PasswordType string `xorm:"varchar(100)" json:"passwordType"`
|
||||||
PasswordSalt string `xorm:"varchar(100)" json:"passwordSalt"`
|
PasswordSalt string `xorm:"varchar(100)" json:"passwordSalt"`
|
||||||
PasswordOptions []string `xorm:"varchar(100)" json:"passwordOptions"`
|
PasswordOptions []string `xorm:"varchar(100)" json:"passwordOptions"`
|
||||||
@ -83,8 +84,9 @@ type Organization struct {
|
|||||||
NavItems []string `xorm:"varchar(1000)" json:"navItems"`
|
NavItems []string `xorm:"varchar(1000)" json:"navItems"`
|
||||||
WidgetItems []string `xorm:"varchar(1000)" json:"widgetItems"`
|
WidgetItems []string `xorm:"varchar(1000)" json:"widgetItems"`
|
||||||
|
|
||||||
MfaItems []*MfaItem `xorm:"varchar(300)" json:"mfaItems"`
|
MfaItems []*MfaItem `xorm:"varchar(300)" json:"mfaItems"`
|
||||||
AccountItems []*AccountItem `xorm:"varchar(5000)" json:"accountItems"`
|
MfaRememberInHours int `json:"mfaRememberInHours"`
|
||||||
|
AccountItems []*AccountItem `xorm:"varchar(5000)" json:"accountItems"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetOrganizationCount(owner, name, field, value string) (int64, error) {
|
func GetOrganizationCount(owner, name, field, value string) (int64, error) {
|
||||||
@ -221,7 +223,7 @@ func UpdateOrganization(id string, organization *Organization, isGlobalAdmin boo
|
|||||||
if organization.MasterPassword != "" && organization.MasterPassword != "***" {
|
if organization.MasterPassword != "" && organization.MasterPassword != "***" {
|
||||||
credManager := cred.GetCredManager(organization.PasswordType)
|
credManager := cred.GetCredManager(organization.PasswordType)
|
||||||
if credManager != nil {
|
if credManager != nil {
|
||||||
hashedPassword := credManager.GetHashedPassword(organization.MasterPassword, "", organization.PasswordSalt)
|
hashedPassword := credManager.GetHashedPassword(organization.MasterPassword, organization.PasswordSalt)
|
||||||
organization.MasterPassword = hashedPassword
|
organization.MasterPassword = hashedPassword
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -535,7 +537,13 @@ func IsNeedPromptMfa(org *Organization, user *User) bool {
|
|||||||
if org == nil || user == nil {
|
if org == nil || user == nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
for _, item := range org.MfaItems {
|
|
||||||
|
mfaItems := org.MfaItems
|
||||||
|
|
||||||
|
if len(user.MfaItems) > 0 {
|
||||||
|
mfaItems = user.MfaItems
|
||||||
|
}
|
||||||
|
for _, item := range mfaItems {
|
||||||
if item.Rule == "Required" {
|
if item.Rule == "Required" {
|
||||||
if item.Name == EmailType && !user.MfaEmailEnabled {
|
if item.Name == EmailType && !user.MfaEmailEnabled {
|
||||||
return true
|
return true
|
||||||
|
@ -49,17 +49,21 @@ func (plan *Plan) GetId() string {
|
|||||||
return fmt.Sprintf("%s/%s", plan.Owner, plan.Name)
|
return fmt.Sprintf("%s/%s", plan.Owner, plan.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetDuration(period string) (startTime time.Time, endTime time.Time) {
|
func getDuration(period string) (string, string, error) {
|
||||||
|
startTime := time.Now()
|
||||||
|
var endTime time.Time
|
||||||
|
|
||||||
if period == PeriodYearly {
|
if period == PeriodYearly {
|
||||||
startTime = time.Now()
|
|
||||||
endTime = startTime.AddDate(1, 0, 0)
|
endTime = startTime.AddDate(1, 0, 0)
|
||||||
} else if period == PeriodMonthly {
|
} else if period == PeriodMonthly {
|
||||||
startTime = time.Now()
|
|
||||||
endTime = startTime.AddDate(0, 1, 0)
|
endTime = startTime.AddDate(0, 1, 0)
|
||||||
} else {
|
} else {
|
||||||
panic(fmt.Sprintf("invalid period: %s", period))
|
return "", "", fmt.Errorf("invalid period: %s", period)
|
||||||
}
|
}
|
||||||
return
|
|
||||||
|
startTimeString := startTime.Format(time.RFC3339)
|
||||||
|
endTimeString := endTime.Format(time.RFC3339)
|
||||||
|
return startTimeString, endTimeString, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetPlanCount(owner, field, value string) (int64, error) {
|
func GetPlanCount(owner, field, value string) (int64, error) {
|
||||||
|
@ -42,6 +42,7 @@ type Product struct {
|
|||||||
IsRecharge bool `json:"isRecharge"`
|
IsRecharge bool `json:"isRecharge"`
|
||||||
Providers []string `xorm:"varchar(255)" json:"providers"`
|
Providers []string `xorm:"varchar(255)" json:"providers"`
|
||||||
ReturnUrl string `xorm:"varchar(1000)" json:"returnUrl"`
|
ReturnUrl string `xorm:"varchar(1000)" json:"returnUrl"`
|
||||||
|
SuccessUrl string `xorm:"varchar(1000)" json:"successUrl"`
|
||||||
|
|
||||||
State string `xorm:"varchar(100)" json:"state"`
|
State string `xorm:"varchar(100)" json:"state"`
|
||||||
|
|
||||||
@ -205,14 +206,24 @@ func BuyProduct(id string, user *User, providerName, pricingName, planName, host
|
|||||||
if plan == nil {
|
if plan == nil {
|
||||||
return nil, nil, fmt.Errorf("the plan: %s does not exist", planName)
|
return nil, nil, fmt.Errorf("the plan: %s does not exist", planName)
|
||||||
}
|
}
|
||||||
sub := NewSubscription(owner, user.Name, plan.Name, paymentName, plan.Period)
|
|
||||||
|
sub, err := NewSubscription(owner, user.Name, plan.Name, paymentName, plan.Period)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
_, err = AddSubscription(sub)
|
_, err = AddSubscription(sub)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
returnUrl = fmt.Sprintf("%s/buy-plan/%s/%s/result?subscription=%s", originFrontend, owner, pricingName, sub.Name)
|
returnUrl = fmt.Sprintf("%s/buy-plan/%s/%s/result?subscription=%s", originFrontend, owner, pricingName, sub.Name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if product.SuccessUrl != "" {
|
||||||
|
returnUrl = fmt.Sprintf("%s?transactionOwner=%s&transactionName=%s", product.SuccessUrl, owner, paymentName)
|
||||||
|
}
|
||||||
// Create an order
|
// Create an order
|
||||||
payReq := &pp.PayReq{
|
payReq := &pp.PayReq{
|
||||||
ProviderName: providerName,
|
ProviderName: providerName,
|
||||||
|
@ -48,8 +48,8 @@ type Subscription struct {
|
|||||||
Plan string `xorm:"varchar(100)" json:"plan"`
|
Plan string `xorm:"varchar(100)" json:"plan"`
|
||||||
Payment string `xorm:"varchar(100)" json:"payment"`
|
Payment string `xorm:"varchar(100)" json:"payment"`
|
||||||
|
|
||||||
StartTime time.Time `json:"startTime"`
|
StartTime string `xorm:"varchar(100)" json:"startTime"`
|
||||||
EndTime time.Time `json:"endTime"`
|
EndTime string `xorm:"varchar(100)" json:"endTime"`
|
||||||
Period string `xorm:"varchar(100)" json:"period"`
|
Period string `xorm:"varchar(100)" json:"period"`
|
||||||
State SubscriptionState `xorm:"varchar(100)" json:"state"`
|
State SubscriptionState `xorm:"varchar(100)" json:"state"`
|
||||||
}
|
}
|
||||||
@ -84,9 +84,19 @@ func (sub *Subscription) UpdateState() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if sub.State == SubStateActive || sub.State == SubStateUpcoming || sub.State == SubStateExpired {
|
if sub.State == SubStateActive || sub.State == SubStateUpcoming || sub.State == SubStateExpired {
|
||||||
if sub.EndTime.Before(time.Now()) {
|
startTime, err := time.Parse(time.RFC3339, sub.StartTime)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
endTime, err := time.Parse(time.RFC3339, sub.EndTime)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if endTime.Before(time.Now()) {
|
||||||
sub.State = SubStateExpired
|
sub.State = SubStateExpired
|
||||||
} else if sub.StartTime.After(time.Now()) {
|
} else if startTime.After(time.Now()) {
|
||||||
sub.State = SubStateUpcoming
|
sub.State = SubStateUpcoming
|
||||||
} else {
|
} else {
|
||||||
sub.State = SubStateActive
|
sub.State = SubStateActive
|
||||||
@ -103,10 +113,15 @@ func (sub *Subscription) UpdateState() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewSubscription(owner, userName, planName, paymentName, period string) *Subscription {
|
func NewSubscription(owner, userName, planName, paymentName, period string) (*Subscription, error) {
|
||||||
startTime, endTime := GetDuration(period)
|
startTime, endTime, err := getDuration(period)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
id := util.GenerateId()[:6]
|
id := util.GenerateId()[:6]
|
||||||
return &Subscription{
|
|
||||||
|
res := &Subscription{
|
||||||
Owner: owner,
|
Owner: owner,
|
||||||
Name: "sub_" + id,
|
Name: "sub_" + id,
|
||||||
DisplayName: "New Subscription - " + id,
|
DisplayName: "New Subscription - " + id,
|
||||||
@ -121,6 +136,7 @@ func NewSubscription(owner, userName, planName, paymentName, period string) *Sub
|
|||||||
Period: period,
|
Period: period,
|
||||||
State: SubStatePending, // waiting for payment complete
|
State: SubStatePending, // waiting for payment complete
|
||||||
}
|
}
|
||||||
|
return res, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetSubscriptionCount(owner, field, value string) (int64, error) {
|
func GetSubscriptionCount(owner, field, value string) (int64, error) {
|
||||||
|
93
object/token_cleanup.go
Normal file
93
object/token_cleanup.go
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
// Copyright 2025 The Casdoor Authors. All Rights Reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package object
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/golang-jwt/jwt/v5"
|
||||||
|
"github.com/robfig/cron/v3"
|
||||||
|
)
|
||||||
|
|
||||||
|
func CleanupTokens(tokenRetentionIntervalAfterExpiry int) error {
|
||||||
|
var sessions []*Token
|
||||||
|
err := ormer.Engine.Find(&sessions)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to query expired tokens: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
currentTime := time.Now()
|
||||||
|
deletedCount := 0
|
||||||
|
|
||||||
|
for _, session := range sessions {
|
||||||
|
tokenString := session.AccessToken
|
||||||
|
token, _, err := new(jwt.Parser).ParseUnverified(tokenString, jwt.MapClaims{})
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("Failed to parse token %s: %v\n", session.Name, err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if claims, ok := token.Claims.(jwt.MapClaims); ok {
|
||||||
|
exp, ok := claims["exp"].(float64)
|
||||||
|
if !ok {
|
||||||
|
fmt.Printf("Token %s does not have an 'exp' claim\n", session.Name)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
expireTime := time.Unix(int64(exp), 0)
|
||||||
|
tokenAfterExpiry := currentTime.Sub(expireTime).Seconds()
|
||||||
|
if tokenAfterExpiry > float64(tokenRetentionIntervalAfterExpiry) {
|
||||||
|
_, err = ormer.Engine.Delete(session)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to delete expired token %s: %w", session.Name, err)
|
||||||
|
}
|
||||||
|
fmt.Printf("[%d] Deleted expired token: %s | Created: %s | Org: %s | App: %s | User: %s\n",
|
||||||
|
deletedCount, session.Name, session.CreatedTime, session.Organization, session.Application, session.User)
|
||||||
|
deletedCount++
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fmt.Printf("Token %s is not valid\n", session.Name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func getTokenRetentionInterval(days int) int {
|
||||||
|
if days <= 0 {
|
||||||
|
days = 30
|
||||||
|
}
|
||||||
|
return days * 24 * 3600
|
||||||
|
}
|
||||||
|
|
||||||
|
func InitCleanupTokens() {
|
||||||
|
schedule := "0 0 * * *"
|
||||||
|
interval := getTokenRetentionInterval(30)
|
||||||
|
|
||||||
|
if err := CleanupTokens(interval); err != nil {
|
||||||
|
fmt.Printf("Error cleaning up tokens at startup: %v\n", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
cronJob := cron.New()
|
||||||
|
_, err := cronJob.AddFunc(schedule, func() {
|
||||||
|
if err := CleanupTokens(interval); err != nil {
|
||||||
|
fmt.Printf("Error cleaning up tokens: %v\n", err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("Error scheduling token cleanup: %v\n", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
cronJob.Start()
|
||||||
|
}
|
@ -764,7 +764,7 @@ func GetWechatMiniProgramToken(application *Application, code string, host strin
|
|||||||
UserPropertiesWechatUnionId: unionId,
|
UserPropertiesWechatUnionId: unionId,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
_, err = AddUser(user)
|
_, err = AddUser(user, "en")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
@ -25,6 +25,7 @@ import (
|
|||||||
|
|
||||||
"github.com/casdoor/casdoor/conf"
|
"github.com/casdoor/casdoor/conf"
|
||||||
"github.com/casdoor/casdoor/faceId"
|
"github.com/casdoor/casdoor/faceId"
|
||||||
|
"github.com/casdoor/casdoor/i18n"
|
||||||
"github.com/casdoor/casdoor/proxy"
|
"github.com/casdoor/casdoor/proxy"
|
||||||
"github.com/casdoor/casdoor/util"
|
"github.com/casdoor/casdoor/util"
|
||||||
"github.com/go-webauthn/webauthn/webauthn"
|
"github.com/go-webauthn/webauthn/webauthn"
|
||||||
@ -209,10 +210,12 @@ type User struct {
|
|||||||
LastSigninWrongTime string `xorm:"varchar(100)" json:"lastSigninWrongTime"`
|
LastSigninWrongTime string `xorm:"varchar(100)" json:"lastSigninWrongTime"`
|
||||||
SigninWrongTimes int `json:"signinWrongTimes"`
|
SigninWrongTimes int `json:"signinWrongTimes"`
|
||||||
|
|
||||||
ManagedAccounts []ManagedAccount `xorm:"managedAccounts blob" json:"managedAccounts"`
|
ManagedAccounts []ManagedAccount `xorm:"managedAccounts blob" json:"managedAccounts"`
|
||||||
MfaAccounts []MfaAccount `xorm:"mfaAccounts blob" json:"mfaAccounts"`
|
MfaAccounts []MfaAccount `xorm:"mfaAccounts blob" json:"mfaAccounts"`
|
||||||
NeedUpdatePassword bool `json:"needUpdatePassword"`
|
MfaItems []*MfaItem `xorm:"varchar(300)" json:"mfaItems"`
|
||||||
IpWhitelist string `xorm:"varchar(200)" json:"ipWhitelist"`
|
MfaRememberDeadline string `xorm:"varchar(100)" json:"mfaRememberDeadline"`
|
||||||
|
NeedUpdatePassword bool `json:"needUpdatePassword"`
|
||||||
|
IpWhitelist string `xorm:"varchar(200)" json:"ipWhitelist"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type Userinfo struct {
|
type Userinfo struct {
|
||||||
@ -660,6 +663,62 @@ func GetMaskedUser(user *User, isAdminOrSelf bool, errs ...error) (*User, error)
|
|||||||
return user, nil
|
return user, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetFilteredUser(user *User, isAdmin bool, isAdminOrSelf bool, accountItems []*AccountItem) (*User, error) {
|
||||||
|
if accountItems == nil || len(accountItems) == 0 {
|
||||||
|
return user, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
userFieldMap := map[string]int{}
|
||||||
|
|
||||||
|
reflectedUserField := reflect.TypeOf(User{})
|
||||||
|
for i := 0; i < reflectedUserField.NumField(); i++ {
|
||||||
|
userFieldMap[strings.ToLower(reflectedUserField.Field(i).Name)] = i
|
||||||
|
}
|
||||||
|
|
||||||
|
reflectedUser := reflect.ValueOf(user).Elem()
|
||||||
|
|
||||||
|
for _, accountItem := range accountItems {
|
||||||
|
if accountItem.ViewRule == "Public" {
|
||||||
|
continue
|
||||||
|
} else if accountItem.ViewRule == "Self" && isAdminOrSelf {
|
||||||
|
continue
|
||||||
|
} else if accountItem.ViewRule == "Admin" && isAdmin {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
lowerCaseAccountItemName := strings.ToLower(accountItem.Name)
|
||||||
|
lowerCaseAccountItemName = strings.ReplaceAll(lowerCaseAccountItemName, " ", "")
|
||||||
|
|
||||||
|
switch accountItem.Name {
|
||||||
|
case "Multi-factor authentication":
|
||||||
|
lowerCaseAccountItemName = strings.ToLower("PreferredMfaType")
|
||||||
|
case "User type":
|
||||||
|
lowerCaseAccountItemName = "type"
|
||||||
|
case "Country/Region":
|
||||||
|
lowerCaseAccountItemName = "region"
|
||||||
|
case "ID card info":
|
||||||
|
{
|
||||||
|
infoKeys := []string{"idCardWithPerson", "idCardFront", "idCardWithPerson"}
|
||||||
|
for _, infoKey := range infoKeys {
|
||||||
|
if _, ok := user.Properties[infoKey]; ok {
|
||||||
|
user.Properties[infoKey] = ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fieldIdx, ok := userFieldMap[lowerCaseAccountItemName]
|
||||||
|
if !ok {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
reflectedUser.Field(fieldIdx).SetZero()
|
||||||
|
}
|
||||||
|
|
||||||
|
return user, nil
|
||||||
|
}
|
||||||
|
|
||||||
func GetMaskedUsers(users []*User, errs ...error) ([]*User, error) {
|
func GetMaskedUsers(users []*User, errs ...error) ([]*User, error) {
|
||||||
if len(errs) > 0 && errs[0] != nil {
|
if len(errs) > 0 && errs[0] != nil {
|
||||||
return nil, errs[0]
|
return nil, errs[0]
|
||||||
@ -734,11 +793,11 @@ func UpdateUser(id string, user *User, columns []string, isAdmin bool) (bool, er
|
|||||||
"eveonline", "fitbit", "gitea", "heroku", "influxcloud", "instagram", "intercom", "kakao", "lastfm", "mailru", "meetup",
|
"eveonline", "fitbit", "gitea", "heroku", "influxcloud", "instagram", "intercom", "kakao", "lastfm", "mailru", "meetup",
|
||||||
"microsoftonline", "naver", "nextcloud", "onedrive", "oura", "patreon", "paypal", "salesforce", "shopify", "soundcloud",
|
"microsoftonline", "naver", "nextcloud", "onedrive", "oura", "patreon", "paypal", "salesforce", "shopify", "soundcloud",
|
||||||
"spotify", "strava", "stripe", "type", "tiktok", "tumblr", "twitch", "twitter", "typetalk", "uber", "vk", "wepay", "xero", "yahoo",
|
"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 {
|
if isAdmin {
|
||||||
columns = append(columns, "name", "id", "email", "phone", "country_code", "type", "balance")
|
columns = append(columns, "name", "id", "email", "phone", "country_code", "type", "balance", "mfa_items")
|
||||||
}
|
}
|
||||||
|
|
||||||
columns = append(columns, "updated_time")
|
columns = append(columns, "updated_time")
|
||||||
@ -818,7 +877,7 @@ func UpdateUserForAllFields(id string, user *User) (bool, error) {
|
|||||||
return affected != 0, nil
|
return affected != 0, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func AddUser(user *User) (bool, error) {
|
func AddUser(user *User, lang string) (bool, error) {
|
||||||
if user.Id == "" {
|
if user.Id == "" {
|
||||||
application, err := GetApplicationByUser(user)
|
application, err := GetApplicationByUser(user)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -834,7 +893,7 @@ func AddUser(user *User) (bool, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if user.Owner == "" || user.Name == "" {
|
if user.Owner == "" || user.Name == "" {
|
||||||
return false, fmt.Errorf("the user's owner and name should not be empty")
|
return false, fmt.Errorf(i18n.Translate(lang, "user:the user's owner and name should not be empty"))
|
||||||
}
|
}
|
||||||
|
|
||||||
if CheckUsernameWithEmail(user.Name, "en") != "" {
|
if CheckUsernameWithEmail(user.Name, "en") != "" {
|
||||||
@ -846,7 +905,7 @@ func AddUser(user *User) (bool, error) {
|
|||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
if organization == nil {
|
if organization == nil {
|
||||||
return false, fmt.Errorf("the organization: %s is not found", user.Owner)
|
return false, fmt.Errorf(i18n.Translate(lang, "auth:the organization: %s is not found"), user.Owner)
|
||||||
}
|
}
|
||||||
|
|
||||||
if user.Owner != "built-in" {
|
if user.Owner != "built-in" {
|
||||||
@ -855,10 +914,14 @@ func AddUser(user *User) (bool, error) {
|
|||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
if applicationCount == 0 {
|
if applicationCount == 0 {
|
||||||
return false, fmt.Errorf("The organization: %s should have one application at least", organization.Owner)
|
return false, fmt.Errorf(i18n.Translate(lang, "general:The organization: %s should have one application at least"), organization.Owner)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if organization.Name == "built-in" && !organization.HasPrivilegeConsent && user.Name != "admin" {
|
||||||
|
return false, fmt.Errorf(i18n.Translate(lang, "organization:adding a new user to the 'built-in' organization is currently disabled. Please note: all users in the 'built-in' organization are global administrators in Casdoor. Refer to the docs: https://casdoor.org/docs/basic/core-concepts#how-does-casdoor-manage-itself. If you still wish to create a user for the 'built-in' organization, go to the organization's settings page and enable the 'Has privilege consent' option."))
|
||||||
|
}
|
||||||
|
|
||||||
if organization.DefaultPassword != "" && user.Password == "123" {
|
if organization.DefaultPassword != "" && user.Password == "123" {
|
||||||
user.Password = organization.DefaultPassword
|
user.Password = organization.DefaultPassword
|
||||||
}
|
}
|
||||||
@ -1117,6 +1180,17 @@ func ExtendUserWithRolesAndPermissions(user *User) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func DeleteGroupForUser(user string, group string) (bool, error) {
|
func DeleteGroupForUser(user string, group string) (bool, error) {
|
||||||
|
userObj, err := GetUser(user)
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
userObj.Groups = util.DeleteVal(userObj.Groups, group)
|
||||||
|
_, err = updateUser(user, userObj, []string{"groups"})
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
return userEnforcer.DeleteGroupForUser(user, group)
|
return userEnforcer.DeleteGroupForUser(user, group)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -42,8 +42,9 @@ func (user *User) UpdateUserHash() error {
|
|||||||
func (user *User) UpdateUserPassword(organization *Organization) {
|
func (user *User) UpdateUserPassword(organization *Organization) {
|
||||||
credManager := cred.GetCredManager(organization.PasswordType)
|
credManager := cred.GetCredManager(organization.PasswordType)
|
||||||
if credManager != nil {
|
if credManager != nil {
|
||||||
hashedPassword := credManager.GetHashedPassword(user.Password, user.PasswordSalt, organization.PasswordSalt)
|
hashedPassword := credManager.GetHashedPassword(user.Password, organization.PasswordSalt)
|
||||||
user.Password = hashedPassword
|
user.Password = hashedPassword
|
||||||
user.PasswordType = organization.PasswordType
|
user.PasswordType = organization.PasswordType
|
||||||
|
user.PasswordSalt = organization.PasswordSalt
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -81,62 +81,12 @@ func UploadUsers(owner string, path string) (bool, error) {
|
|||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
transUsers, err := StringArrayToStruct[User](table)
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
newUsers := []*User{}
|
newUsers := []*User{}
|
||||||
for index, line := range table {
|
for _, user := range transUsers {
|
||||||
line := line
|
|
||||||
if index == 0 || parseLineItem(&line, 0) == "" {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
user := &User{
|
|
||||||
Owner: parseLineItem(&line, 0),
|
|
||||||
Name: parseLineItem(&line, 1),
|
|
||||||
CreatedTime: parseLineItem(&line, 2),
|
|
||||||
UpdatedTime: parseLineItem(&line, 3),
|
|
||||||
Id: parseLineItem(&line, 4),
|
|
||||||
Type: parseLineItem(&line, 5),
|
|
||||||
Password: parseLineItem(&line, 6),
|
|
||||||
PasswordSalt: parseLineItem(&line, 7),
|
|
||||||
DisplayName: parseLineItem(&line, 8),
|
|
||||||
FirstName: parseLineItem(&line, 9),
|
|
||||||
LastName: parseLineItem(&line, 10),
|
|
||||||
Avatar: parseLineItem(&line, 11),
|
|
||||||
PermanentAvatar: "",
|
|
||||||
Email: parseLineItem(&line, 12),
|
|
||||||
Phone: parseLineItem(&line, 13),
|
|
||||||
Location: parseLineItem(&line, 14),
|
|
||||||
Address: []string{parseLineItem(&line, 15)},
|
|
||||||
Affiliation: parseLineItem(&line, 16),
|
|
||||||
Title: parseLineItem(&line, 17),
|
|
||||||
IdCardType: parseLineItem(&line, 18),
|
|
||||||
IdCard: parseLineItem(&line, 19),
|
|
||||||
Homepage: parseLineItem(&line, 20),
|
|
||||||
Bio: parseLineItem(&line, 21),
|
|
||||||
Tag: parseLineItem(&line, 22),
|
|
||||||
Region: parseLineItem(&line, 23),
|
|
||||||
Language: parseLineItem(&line, 24),
|
|
||||||
Gender: parseLineItem(&line, 25),
|
|
||||||
Birthday: parseLineItem(&line, 26),
|
|
||||||
Education: parseLineItem(&line, 27),
|
|
||||||
Score: parseLineItemInt(&line, 28),
|
|
||||||
Karma: parseLineItemInt(&line, 29),
|
|
||||||
Ranking: parseLineItemInt(&line, 30),
|
|
||||||
IsDefaultAvatar: false,
|
|
||||||
IsOnline: parseLineItemBool(&line, 31),
|
|
||||||
IsAdmin: parseLineItemBool(&line, 32),
|
|
||||||
IsForbidden: parseLineItemBool(&line, 33),
|
|
||||||
IsDeleted: parseLineItemBool(&line, 34),
|
|
||||||
SignupApplication: parseLineItem(&line, 35),
|
|
||||||
Hash: "",
|
|
||||||
PreHash: "",
|
|
||||||
CreatedIp: parseLineItem(&line, 36),
|
|
||||||
LastSigninTime: parseLineItem(&line, 37),
|
|
||||||
LastSigninIp: parseLineItem(&line, 38),
|
|
||||||
Ldap: "",
|
|
||||||
Properties: map[string]string{},
|
|
||||||
DeletedTime: parseLineItem(&line, 39),
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, ok := oldUserMap[user.GetId()]; !ok {
|
if _, ok := oldUserMap[user.GetId()]; !ok {
|
||||||
newUsers = append(newUsers, user)
|
newUsers = append(newUsers, user)
|
||||||
}
|
}
|
||||||
|
@ -19,12 +19,14 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"reflect"
|
"reflect"
|
||||||
"regexp"
|
"regexp"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/casdoor/casdoor/conf"
|
"github.com/casdoor/casdoor/conf"
|
||||||
"github.com/casdoor/casdoor/i18n"
|
"github.com/casdoor/casdoor/i18n"
|
||||||
"github.com/casdoor/casdoor/idp"
|
"github.com/casdoor/casdoor/idp"
|
||||||
"github.com/casdoor/casdoor/util"
|
"github.com/casdoor/casdoor/util"
|
||||||
|
"github.com/go-webauthn/webauthn/webauthn"
|
||||||
jsoniter "github.com/json-iterator/go"
|
jsoniter "github.com/json-iterator/go"
|
||||||
"github.com/xorm-io/core"
|
"github.com/xorm-io/core"
|
||||||
)
|
)
|
||||||
@ -261,7 +263,19 @@ func ClearUserOAuthProperties(user *User, providerType string) (bool, error) {
|
|||||||
return affected != 0, nil
|
return affected != 0, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang string) (bool, string) {
|
func userVisible(isAdmin bool, item *AccountItem) bool {
|
||||||
|
if item == nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if item.ViewRule == "Admin" && !isAdmin {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, allowDisplayNameEmpty bool, lang string) (bool, string) {
|
||||||
organization, err := GetOrganizationByUser(oldUser)
|
organization, err := GetOrganizationByUser(oldUser)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err.Error()
|
return false, err.Error()
|
||||||
@ -271,7 +285,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
|
|||||||
|
|
||||||
if oldUser.Owner != newUser.Owner {
|
if oldUser.Owner != newUser.Owner {
|
||||||
item := GetAccountItemByName("Organization", organization)
|
item := GetAccountItemByName("Organization", organization)
|
||||||
if item == nil {
|
if !userVisible(isAdmin, item) {
|
||||||
newUser.Owner = oldUser.Owner
|
newUser.Owner = oldUser.Owner
|
||||||
} else {
|
} else {
|
||||||
itemsChanged = append(itemsChanged, item)
|
itemsChanged = append(itemsChanged, item)
|
||||||
@ -279,7 +293,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
|
|||||||
}
|
}
|
||||||
if oldUser.Name != newUser.Name {
|
if oldUser.Name != newUser.Name {
|
||||||
item := GetAccountItemByName("Name", organization)
|
item := GetAccountItemByName("Name", organization)
|
||||||
if item == nil {
|
if !userVisible(isAdmin, item) {
|
||||||
newUser.Name = oldUser.Name
|
newUser.Name = oldUser.Name
|
||||||
} else {
|
} else {
|
||||||
itemsChanged = append(itemsChanged, item)
|
itemsChanged = append(itemsChanged, item)
|
||||||
@ -287,7 +301,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
|
|||||||
}
|
}
|
||||||
if oldUser.Id != newUser.Id {
|
if oldUser.Id != newUser.Id {
|
||||||
item := GetAccountItemByName("ID", organization)
|
item := GetAccountItemByName("ID", organization)
|
||||||
if item == nil {
|
if !userVisible(isAdmin, item) {
|
||||||
newUser.Id = oldUser.Id
|
newUser.Id = oldUser.Id
|
||||||
} else {
|
} else {
|
||||||
itemsChanged = append(itemsChanged, item)
|
itemsChanged = append(itemsChanged, item)
|
||||||
@ -295,15 +309,19 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
|
|||||||
}
|
}
|
||||||
if oldUser.DisplayName != newUser.DisplayName {
|
if oldUser.DisplayName != newUser.DisplayName {
|
||||||
item := GetAccountItemByName("Display name", organization)
|
item := GetAccountItemByName("Display name", organization)
|
||||||
if item == nil {
|
if !userVisible(isAdmin, item) {
|
||||||
newUser.DisplayName = oldUser.DisplayName
|
newUser.DisplayName = oldUser.DisplayName
|
||||||
} else {
|
} else {
|
||||||
|
if !allowDisplayNameEmpty && newUser.DisplayName == "" {
|
||||||
|
return false, i18n.Translate(lang, "user:Display name cannot be empty")
|
||||||
|
}
|
||||||
|
|
||||||
itemsChanged = append(itemsChanged, item)
|
itemsChanged = append(itemsChanged, item)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if oldUser.Avatar != newUser.Avatar {
|
if oldUser.Avatar != newUser.Avatar {
|
||||||
item := GetAccountItemByName("Avatar", organization)
|
item := GetAccountItemByName("Avatar", organization)
|
||||||
if item == nil {
|
if !userVisible(isAdmin, item) {
|
||||||
newUser.Avatar = oldUser.Avatar
|
newUser.Avatar = oldUser.Avatar
|
||||||
} else {
|
} else {
|
||||||
itemsChanged = append(itemsChanged, item)
|
itemsChanged = append(itemsChanged, item)
|
||||||
@ -311,7 +329,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
|
|||||||
}
|
}
|
||||||
if oldUser.Type != newUser.Type {
|
if oldUser.Type != newUser.Type {
|
||||||
item := GetAccountItemByName("User type", organization)
|
item := GetAccountItemByName("User type", organization)
|
||||||
if item == nil {
|
if !userVisible(isAdmin, item) {
|
||||||
newUser.Type = oldUser.Type
|
newUser.Type = oldUser.Type
|
||||||
} else {
|
} else {
|
||||||
itemsChanged = append(itemsChanged, item)
|
itemsChanged = append(itemsChanged, item)
|
||||||
@ -320,7 +338,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
|
|||||||
// The password is *** when not modified
|
// The password is *** when not modified
|
||||||
if oldUser.Password != newUser.Password && newUser.Password != "***" {
|
if oldUser.Password != newUser.Password && newUser.Password != "***" {
|
||||||
item := GetAccountItemByName("Password", organization)
|
item := GetAccountItemByName("Password", organization)
|
||||||
if item == nil {
|
if !userVisible(isAdmin, item) {
|
||||||
newUser.Password = oldUser.Password
|
newUser.Password = oldUser.Password
|
||||||
} else {
|
} else {
|
||||||
itemsChanged = append(itemsChanged, item)
|
itemsChanged = append(itemsChanged, item)
|
||||||
@ -328,7 +346,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
|
|||||||
}
|
}
|
||||||
if oldUser.Email != newUser.Email {
|
if oldUser.Email != newUser.Email {
|
||||||
item := GetAccountItemByName("Email", organization)
|
item := GetAccountItemByName("Email", organization)
|
||||||
if item == nil {
|
if !userVisible(isAdmin, item) {
|
||||||
newUser.Email = oldUser.Email
|
newUser.Email = oldUser.Email
|
||||||
} else {
|
} else {
|
||||||
itemsChanged = append(itemsChanged, item)
|
itemsChanged = append(itemsChanged, item)
|
||||||
@ -336,7 +354,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
|
|||||||
}
|
}
|
||||||
if oldUser.Phone != newUser.Phone {
|
if oldUser.Phone != newUser.Phone {
|
||||||
item := GetAccountItemByName("Phone", organization)
|
item := GetAccountItemByName("Phone", organization)
|
||||||
if item == nil {
|
if !userVisible(isAdmin, item) {
|
||||||
newUser.Phone = oldUser.Phone
|
newUser.Phone = oldUser.Phone
|
||||||
} else {
|
} else {
|
||||||
itemsChanged = append(itemsChanged, item)
|
itemsChanged = append(itemsChanged, item)
|
||||||
@ -344,7 +362,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
|
|||||||
}
|
}
|
||||||
if oldUser.CountryCode != newUser.CountryCode {
|
if oldUser.CountryCode != newUser.CountryCode {
|
||||||
item := GetAccountItemByName("Country code", organization)
|
item := GetAccountItemByName("Country code", organization)
|
||||||
if item == nil {
|
if !userVisible(isAdmin, item) {
|
||||||
newUser.CountryCode = oldUser.CountryCode
|
newUser.CountryCode = oldUser.CountryCode
|
||||||
} else {
|
} else {
|
||||||
itemsChanged = append(itemsChanged, item)
|
itemsChanged = append(itemsChanged, item)
|
||||||
@ -352,7 +370,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
|
|||||||
}
|
}
|
||||||
if oldUser.Region != newUser.Region {
|
if oldUser.Region != newUser.Region {
|
||||||
item := GetAccountItemByName("Country/Region", organization)
|
item := GetAccountItemByName("Country/Region", organization)
|
||||||
if item == nil {
|
if !userVisible(isAdmin, item) {
|
||||||
newUser.Region = oldUser.Region
|
newUser.Region = oldUser.Region
|
||||||
} else {
|
} else {
|
||||||
itemsChanged = append(itemsChanged, item)
|
itemsChanged = append(itemsChanged, item)
|
||||||
@ -360,7 +378,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
|
|||||||
}
|
}
|
||||||
if oldUser.Location != newUser.Location {
|
if oldUser.Location != newUser.Location {
|
||||||
item := GetAccountItemByName("Location", organization)
|
item := GetAccountItemByName("Location", organization)
|
||||||
if item == nil {
|
if !userVisible(isAdmin, item) {
|
||||||
newUser.Location = oldUser.Location
|
newUser.Location = oldUser.Location
|
||||||
} else {
|
} else {
|
||||||
itemsChanged = append(itemsChanged, item)
|
itemsChanged = append(itemsChanged, item)
|
||||||
@ -368,7 +386,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
|
|||||||
}
|
}
|
||||||
if oldUser.Affiliation != newUser.Affiliation {
|
if oldUser.Affiliation != newUser.Affiliation {
|
||||||
item := GetAccountItemByName("Affiliation", organization)
|
item := GetAccountItemByName("Affiliation", organization)
|
||||||
if item == nil {
|
if !userVisible(isAdmin, item) {
|
||||||
newUser.Affiliation = oldUser.Affiliation
|
newUser.Affiliation = oldUser.Affiliation
|
||||||
} else {
|
} else {
|
||||||
itemsChanged = append(itemsChanged, item)
|
itemsChanged = append(itemsChanged, item)
|
||||||
@ -376,7 +394,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
|
|||||||
}
|
}
|
||||||
if oldUser.Title != newUser.Title {
|
if oldUser.Title != newUser.Title {
|
||||||
item := GetAccountItemByName("Title", organization)
|
item := GetAccountItemByName("Title", organization)
|
||||||
if item == nil {
|
if !userVisible(isAdmin, item) {
|
||||||
newUser.Title = oldUser.Title
|
newUser.Title = oldUser.Title
|
||||||
} else {
|
} else {
|
||||||
itemsChanged = append(itemsChanged, item)
|
itemsChanged = append(itemsChanged, item)
|
||||||
@ -384,7 +402,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
|
|||||||
}
|
}
|
||||||
if oldUser.Homepage != newUser.Homepage {
|
if oldUser.Homepage != newUser.Homepage {
|
||||||
item := GetAccountItemByName("Homepage", organization)
|
item := GetAccountItemByName("Homepage", organization)
|
||||||
if item == nil {
|
if !userVisible(isAdmin, item) {
|
||||||
newUser.Homepage = oldUser.Homepage
|
newUser.Homepage = oldUser.Homepage
|
||||||
} else {
|
} else {
|
||||||
itemsChanged = append(itemsChanged, item)
|
itemsChanged = append(itemsChanged, item)
|
||||||
@ -392,7 +410,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
|
|||||||
}
|
}
|
||||||
if oldUser.Bio != newUser.Bio {
|
if oldUser.Bio != newUser.Bio {
|
||||||
item := GetAccountItemByName("Bio", organization)
|
item := GetAccountItemByName("Bio", organization)
|
||||||
if item == nil {
|
if !userVisible(isAdmin, item) {
|
||||||
newUser.Bio = oldUser.Bio
|
newUser.Bio = oldUser.Bio
|
||||||
} else {
|
} else {
|
||||||
itemsChanged = append(itemsChanged, item)
|
itemsChanged = append(itemsChanged, item)
|
||||||
@ -400,7 +418,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
|
|||||||
}
|
}
|
||||||
if oldUser.Tag != newUser.Tag {
|
if oldUser.Tag != newUser.Tag {
|
||||||
item := GetAccountItemByName("Tag", organization)
|
item := GetAccountItemByName("Tag", organization)
|
||||||
if item == nil {
|
if !userVisible(isAdmin, item) {
|
||||||
newUser.Tag = oldUser.Tag
|
newUser.Tag = oldUser.Tag
|
||||||
} else {
|
} else {
|
||||||
itemsChanged = append(itemsChanged, item)
|
itemsChanged = append(itemsChanged, item)
|
||||||
@ -408,7 +426,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
|
|||||||
}
|
}
|
||||||
if oldUser.SignupApplication != newUser.SignupApplication {
|
if oldUser.SignupApplication != newUser.SignupApplication {
|
||||||
item := GetAccountItemByName("Signup application", organization)
|
item := GetAccountItemByName("Signup application", organization)
|
||||||
if item == nil {
|
if !userVisible(isAdmin, item) {
|
||||||
newUser.SignupApplication = oldUser.SignupApplication
|
newUser.SignupApplication = oldUser.SignupApplication
|
||||||
} else {
|
} else {
|
||||||
itemsChanged = append(itemsChanged, item)
|
itemsChanged = append(itemsChanged, item)
|
||||||
@ -417,7 +435,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
|
|||||||
|
|
||||||
if oldUser.Gender != newUser.Gender {
|
if oldUser.Gender != newUser.Gender {
|
||||||
item := GetAccountItemByName("Gender", organization)
|
item := GetAccountItemByName("Gender", organization)
|
||||||
if item == nil {
|
if !userVisible(isAdmin, item) {
|
||||||
newUser.Gender = oldUser.Gender
|
newUser.Gender = oldUser.Gender
|
||||||
} else {
|
} else {
|
||||||
itemsChanged = append(itemsChanged, item)
|
itemsChanged = append(itemsChanged, item)
|
||||||
@ -426,7 +444,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
|
|||||||
|
|
||||||
if oldUser.Birthday != newUser.Birthday {
|
if oldUser.Birthday != newUser.Birthday {
|
||||||
item := GetAccountItemByName("Birthday", organization)
|
item := GetAccountItemByName("Birthday", organization)
|
||||||
if item == nil {
|
if !userVisible(isAdmin, item) {
|
||||||
newUser.Birthday = oldUser.Birthday
|
newUser.Birthday = oldUser.Birthday
|
||||||
} else {
|
} else {
|
||||||
itemsChanged = append(itemsChanged, item)
|
itemsChanged = append(itemsChanged, item)
|
||||||
@ -435,7 +453,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
|
|||||||
|
|
||||||
if oldUser.Education != newUser.Education {
|
if oldUser.Education != newUser.Education {
|
||||||
item := GetAccountItemByName("Education", organization)
|
item := GetAccountItemByName("Education", organization)
|
||||||
if item == nil {
|
if !userVisible(isAdmin, item) {
|
||||||
newUser.Education = oldUser.Education
|
newUser.Education = oldUser.Education
|
||||||
} else {
|
} else {
|
||||||
itemsChanged = append(itemsChanged, item)
|
itemsChanged = append(itemsChanged, item)
|
||||||
@ -444,7 +462,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
|
|||||||
|
|
||||||
if oldUser.IdCard != newUser.IdCard {
|
if oldUser.IdCard != newUser.IdCard {
|
||||||
item := GetAccountItemByName("ID card", organization)
|
item := GetAccountItemByName("ID card", organization)
|
||||||
if item == nil {
|
if !userVisible(isAdmin, item) {
|
||||||
newUser.IdCard = oldUser.IdCard
|
newUser.IdCard = oldUser.IdCard
|
||||||
} else {
|
} else {
|
||||||
itemsChanged = append(itemsChanged, item)
|
itemsChanged = append(itemsChanged, item)
|
||||||
@ -453,7 +471,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
|
|||||||
|
|
||||||
if oldUser.IdCardType != newUser.IdCardType {
|
if oldUser.IdCardType != newUser.IdCardType {
|
||||||
item := GetAccountItemByName("ID card type", organization)
|
item := GetAccountItemByName("ID card type", organization)
|
||||||
if item == nil {
|
if !userVisible(isAdmin, item) {
|
||||||
newUser.IdCardType = oldUser.IdCardType
|
newUser.IdCardType = oldUser.IdCardType
|
||||||
} else {
|
} else {
|
||||||
itemsChanged = append(itemsChanged, item)
|
itemsChanged = append(itemsChanged, item)
|
||||||
@ -461,10 +479,13 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
|
|||||||
}
|
}
|
||||||
|
|
||||||
oldUserPropertiesJson, _ := json.Marshal(oldUser.Properties)
|
oldUserPropertiesJson, _ := json.Marshal(oldUser.Properties)
|
||||||
|
if newUser.Properties == nil {
|
||||||
|
newUser.Properties = make(map[string]string)
|
||||||
|
}
|
||||||
newUserPropertiesJson, _ := json.Marshal(newUser.Properties)
|
newUserPropertiesJson, _ := json.Marshal(newUser.Properties)
|
||||||
if string(oldUserPropertiesJson) != string(newUserPropertiesJson) {
|
if string(oldUserPropertiesJson) != string(newUserPropertiesJson) {
|
||||||
item := GetAccountItemByName("Properties", organization)
|
item := GetAccountItemByName("Properties", organization)
|
||||||
if item == nil {
|
if !userVisible(isAdmin, item) {
|
||||||
newUser.Properties = oldUser.Properties
|
newUser.Properties = oldUser.Properties
|
||||||
} else {
|
} else {
|
||||||
itemsChanged = append(itemsChanged, item)
|
itemsChanged = append(itemsChanged, item)
|
||||||
@ -473,7 +494,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
|
|||||||
|
|
||||||
if oldUser.PreferredMfaType != newUser.PreferredMfaType {
|
if oldUser.PreferredMfaType != newUser.PreferredMfaType {
|
||||||
item := GetAccountItemByName("Multi-factor authentication", organization)
|
item := GetAccountItemByName("Multi-factor authentication", organization)
|
||||||
if item == nil {
|
if !userVisible(isAdmin, item) {
|
||||||
newUser.PreferredMfaType = oldUser.PreferredMfaType
|
newUser.PreferredMfaType = oldUser.PreferredMfaType
|
||||||
} else {
|
} else {
|
||||||
itemsChanged = append(itemsChanged, item)
|
itemsChanged = append(itemsChanged, item)
|
||||||
@ -484,13 +505,14 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
|
|||||||
oldUser.Groups = []string{}
|
oldUser.Groups = []string{}
|
||||||
}
|
}
|
||||||
oldUserGroupsJson, _ := json.Marshal(oldUser.Groups)
|
oldUserGroupsJson, _ := json.Marshal(oldUser.Groups)
|
||||||
|
|
||||||
if newUser.Groups == nil {
|
if newUser.Groups == nil {
|
||||||
newUser.Groups = []string{}
|
newUser.Groups = []string{}
|
||||||
}
|
}
|
||||||
newUserGroupsJson, _ := json.Marshal(newUser.Groups)
|
newUserGroupsJson, _ := json.Marshal(newUser.Groups)
|
||||||
if string(oldUserGroupsJson) != string(newUserGroupsJson) {
|
if string(oldUserGroupsJson) != string(newUserGroupsJson) {
|
||||||
item := GetAccountItemByName("Groups", organization)
|
item := GetAccountItemByName("Groups", organization)
|
||||||
if item == nil {
|
if !userVisible(isAdmin, item) {
|
||||||
newUser.Groups = oldUser.Groups
|
newUser.Groups = oldUser.Groups
|
||||||
} else {
|
} else {
|
||||||
itemsChanged = append(itemsChanged, item)
|
itemsChanged = append(itemsChanged, item)
|
||||||
@ -508,7 +530,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
|
|||||||
newUserAddressJson, _ := json.Marshal(newUser.Address)
|
newUserAddressJson, _ := json.Marshal(newUser.Address)
|
||||||
if string(oldUserAddressJson) != string(newUserAddressJson) {
|
if string(oldUserAddressJson) != string(newUserAddressJson) {
|
||||||
item := GetAccountItemByName("Address", organization)
|
item := GetAccountItemByName("Address", organization)
|
||||||
if item == nil {
|
if !userVisible(isAdmin, item) {
|
||||||
newUser.Address = oldUser.Address
|
newUser.Address = oldUser.Address
|
||||||
} else {
|
} else {
|
||||||
itemsChanged = append(itemsChanged, item)
|
itemsChanged = append(itemsChanged, item)
|
||||||
@ -517,7 +539,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
|
|||||||
|
|
||||||
if newUser.FaceIds != nil {
|
if newUser.FaceIds != nil {
|
||||||
item := GetAccountItemByName("Face ID", organization)
|
item := GetAccountItemByName("Face ID", organization)
|
||||||
if item == nil {
|
if !userVisible(isAdmin, item) {
|
||||||
newUser.FaceIds = oldUser.FaceIds
|
newUser.FaceIds = oldUser.FaceIds
|
||||||
} else {
|
} else {
|
||||||
itemsChanged = append(itemsChanged, item)
|
itemsChanged = append(itemsChanged, item)
|
||||||
@ -526,7 +548,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
|
|||||||
|
|
||||||
if oldUser.IsAdmin != newUser.IsAdmin {
|
if oldUser.IsAdmin != newUser.IsAdmin {
|
||||||
item := GetAccountItemByName("Is admin", organization)
|
item := GetAccountItemByName("Is admin", organization)
|
||||||
if item == nil {
|
if !userVisible(isAdmin, item) {
|
||||||
newUser.IsAdmin = oldUser.IsAdmin
|
newUser.IsAdmin = oldUser.IsAdmin
|
||||||
} else {
|
} else {
|
||||||
itemsChanged = append(itemsChanged, item)
|
itemsChanged = append(itemsChanged, item)
|
||||||
@ -535,7 +557,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
|
|||||||
|
|
||||||
if oldUser.IsForbidden != newUser.IsForbidden {
|
if oldUser.IsForbidden != newUser.IsForbidden {
|
||||||
item := GetAccountItemByName("Is forbidden", organization)
|
item := GetAccountItemByName("Is forbidden", organization)
|
||||||
if item == nil {
|
if !userVisible(isAdmin, item) {
|
||||||
newUser.IsForbidden = oldUser.IsForbidden
|
newUser.IsForbidden = oldUser.IsForbidden
|
||||||
} else {
|
} else {
|
||||||
itemsChanged = append(itemsChanged, item)
|
itemsChanged = append(itemsChanged, item)
|
||||||
@ -543,7 +565,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
|
|||||||
}
|
}
|
||||||
if oldUser.IsDeleted != newUser.IsDeleted {
|
if oldUser.IsDeleted != newUser.IsDeleted {
|
||||||
item := GetAccountItemByName("Is deleted", organization)
|
item := GetAccountItemByName("Is deleted", organization)
|
||||||
if item == nil {
|
if !userVisible(isAdmin, item) {
|
||||||
newUser.IsDeleted = oldUser.IsDeleted
|
newUser.IsDeleted = oldUser.IsDeleted
|
||||||
} else {
|
} else {
|
||||||
itemsChanged = append(itemsChanged, item)
|
itemsChanged = append(itemsChanged, item)
|
||||||
@ -551,7 +573,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
|
|||||||
}
|
}
|
||||||
if oldUser.NeedUpdatePassword != newUser.NeedUpdatePassword {
|
if oldUser.NeedUpdatePassword != newUser.NeedUpdatePassword {
|
||||||
item := GetAccountItemByName("Need update password", organization)
|
item := GetAccountItemByName("Need update password", organization)
|
||||||
if item == nil {
|
if !userVisible(isAdmin, item) {
|
||||||
newUser.NeedUpdatePassword = oldUser.NeedUpdatePassword
|
newUser.NeedUpdatePassword = oldUser.NeedUpdatePassword
|
||||||
} else {
|
} else {
|
||||||
itemsChanged = append(itemsChanged, item)
|
itemsChanged = append(itemsChanged, item)
|
||||||
@ -559,7 +581,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
|
|||||||
}
|
}
|
||||||
if oldUser.IpWhitelist != newUser.IpWhitelist {
|
if oldUser.IpWhitelist != newUser.IpWhitelist {
|
||||||
item := GetAccountItemByName("IP whitelist", organization)
|
item := GetAccountItemByName("IP whitelist", organization)
|
||||||
if item == nil {
|
if !userVisible(isAdmin, item) {
|
||||||
newUser.IpWhitelist = oldUser.IpWhitelist
|
newUser.IpWhitelist = oldUser.IpWhitelist
|
||||||
} else {
|
} else {
|
||||||
itemsChanged = append(itemsChanged, item)
|
itemsChanged = append(itemsChanged, item)
|
||||||
@ -568,7 +590,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
|
|||||||
|
|
||||||
if oldUser.Balance != newUser.Balance {
|
if oldUser.Balance != newUser.Balance {
|
||||||
item := GetAccountItemByName("Balance", organization)
|
item := GetAccountItemByName("Balance", organization)
|
||||||
if item == nil {
|
if !userVisible(isAdmin, item) {
|
||||||
newUser.Balance = oldUser.Balance
|
newUser.Balance = oldUser.Balance
|
||||||
} else {
|
} else {
|
||||||
itemsChanged = append(itemsChanged, item)
|
itemsChanged = append(itemsChanged, item)
|
||||||
@ -577,7 +599,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
|
|||||||
|
|
||||||
if oldUser.Score != newUser.Score {
|
if oldUser.Score != newUser.Score {
|
||||||
item := GetAccountItemByName("Score", organization)
|
item := GetAccountItemByName("Score", organization)
|
||||||
if item == nil {
|
if !userVisible(isAdmin, item) {
|
||||||
newUser.Score = oldUser.Score
|
newUser.Score = oldUser.Score
|
||||||
} else {
|
} else {
|
||||||
itemsChanged = append(itemsChanged, item)
|
itemsChanged = append(itemsChanged, item)
|
||||||
@ -586,7 +608,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
|
|||||||
|
|
||||||
if oldUser.Karma != newUser.Karma {
|
if oldUser.Karma != newUser.Karma {
|
||||||
item := GetAccountItemByName("Karma", organization)
|
item := GetAccountItemByName("Karma", organization)
|
||||||
if item == nil {
|
if !userVisible(isAdmin, item) {
|
||||||
newUser.Karma = oldUser.Karma
|
newUser.Karma = oldUser.Karma
|
||||||
} else {
|
} else {
|
||||||
itemsChanged = append(itemsChanged, item)
|
itemsChanged = append(itemsChanged, item)
|
||||||
@ -595,7 +617,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
|
|||||||
|
|
||||||
if oldUser.Language != newUser.Language {
|
if oldUser.Language != newUser.Language {
|
||||||
item := GetAccountItemByName("Language", organization)
|
item := GetAccountItemByName("Language", organization)
|
||||||
if item == nil {
|
if !userVisible(isAdmin, item) {
|
||||||
newUser.Language = oldUser.Language
|
newUser.Language = oldUser.Language
|
||||||
} else {
|
} else {
|
||||||
itemsChanged = append(itemsChanged, item)
|
itemsChanged = append(itemsChanged, item)
|
||||||
@ -604,7 +626,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
|
|||||||
|
|
||||||
if oldUser.Ranking != newUser.Ranking {
|
if oldUser.Ranking != newUser.Ranking {
|
||||||
item := GetAccountItemByName("Ranking", organization)
|
item := GetAccountItemByName("Ranking", organization)
|
||||||
if item == nil {
|
if !userVisible(isAdmin, item) {
|
||||||
newUser.Ranking = oldUser.Ranking
|
newUser.Ranking = oldUser.Ranking
|
||||||
} else {
|
} else {
|
||||||
itemsChanged = append(itemsChanged, item)
|
itemsChanged = append(itemsChanged, item)
|
||||||
@ -613,7 +635,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
|
|||||||
|
|
||||||
if oldUser.Currency != newUser.Currency {
|
if oldUser.Currency != newUser.Currency {
|
||||||
item := GetAccountItemByName("Currency", organization)
|
item := GetAccountItemByName("Currency", organization)
|
||||||
if item == nil {
|
if !userVisible(isAdmin, item) {
|
||||||
newUser.Currency = oldUser.Currency
|
newUser.Currency = oldUser.Currency
|
||||||
} else {
|
} else {
|
||||||
itemsChanged = append(itemsChanged, item)
|
itemsChanged = append(itemsChanged, item)
|
||||||
@ -622,7 +644,7 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
|
|||||||
|
|
||||||
if oldUser.Hash != newUser.Hash {
|
if oldUser.Hash != newUser.Hash {
|
||||||
item := GetAccountItemByName("Hash", organization)
|
item := GetAccountItemByName("Hash", organization)
|
||||||
if item == nil {
|
if !userVisible(isAdmin, item) {
|
||||||
newUser.Hash = oldUser.Hash
|
newUser.Hash = oldUser.Hash
|
||||||
} else {
|
} else {
|
||||||
itemsChanged = append(itemsChanged, item)
|
itemsChanged = append(itemsChanged, item)
|
||||||
@ -689,3 +711,104 @@ func IsAppUser(userId string) bool {
|
|||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func setReflectAttr[T any](fieldValue *reflect.Value, fieldString string) error {
|
||||||
|
unmarshalValue := new(T)
|
||||||
|
err := json.Unmarshal([]byte(fieldString), unmarshalValue)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
fvElem := fieldValue
|
||||||
|
fvElem.Set(reflect.ValueOf(*unmarshalValue))
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func StringArrayToStruct[T any](stringArray [][]string) ([]*T, error) {
|
||||||
|
fieldNames := stringArray[0]
|
||||||
|
excelMap := []map[string]string{}
|
||||||
|
structFieldMap := map[string]int{}
|
||||||
|
|
||||||
|
reflectedStruct := reflect.TypeOf(*new(T))
|
||||||
|
for i := 0; i < reflectedStruct.NumField(); i++ {
|
||||||
|
structFieldMap[strings.ToLower(reflectedStruct.Field(i).Name)] = i
|
||||||
|
}
|
||||||
|
|
||||||
|
for idx, field := range stringArray {
|
||||||
|
if idx == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
tempMap := map[string]string{}
|
||||||
|
for idx, val := range field {
|
||||||
|
tempMap[fieldNames[idx]] = val
|
||||||
|
}
|
||||||
|
excelMap = append(excelMap, tempMap)
|
||||||
|
}
|
||||||
|
|
||||||
|
instances := []*T{}
|
||||||
|
var err error
|
||||||
|
|
||||||
|
for _, m := range excelMap {
|
||||||
|
instance := new(T)
|
||||||
|
reflectedInstance := reflect.ValueOf(instance).Elem()
|
||||||
|
|
||||||
|
for k, v := range m {
|
||||||
|
if v == "" || v == "null" || v == "[]" || v == "{}" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
fName := strings.ToLower(strings.ReplaceAll(k, "_", ""))
|
||||||
|
fieldIdx, ok := structFieldMap[fName]
|
||||||
|
if !ok {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
fv := reflectedInstance.Field(fieldIdx)
|
||||||
|
if !fv.IsValid() {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
switch fv.Kind() {
|
||||||
|
case reflect.String:
|
||||||
|
fv.SetString(v)
|
||||||
|
continue
|
||||||
|
case reflect.Bool:
|
||||||
|
fv.SetBool(v == "1")
|
||||||
|
continue
|
||||||
|
case reflect.Int:
|
||||||
|
intVal, err := strconv.Atoi(v)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
fv.SetInt(int64(intVal))
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
switch fv.Type() {
|
||||||
|
case reflect.TypeOf([]string{}):
|
||||||
|
err = setReflectAttr[[]string](&fv, v)
|
||||||
|
case reflect.TypeOf([]*string{}):
|
||||||
|
err = setReflectAttr[[]*string](&fv, v)
|
||||||
|
case reflect.TypeOf([]*FaceId{}):
|
||||||
|
err = setReflectAttr[[]*FaceId](&fv, v)
|
||||||
|
case reflect.TypeOf([]*MfaProps{}):
|
||||||
|
err = setReflectAttr[[]*MfaProps](&fv, v)
|
||||||
|
case reflect.TypeOf([]*Role{}):
|
||||||
|
err = setReflectAttr[[]*Role](&fv, v)
|
||||||
|
case reflect.TypeOf([]*Permission{}):
|
||||||
|
err = setReflectAttr[[]*Permission](&fv, v)
|
||||||
|
case reflect.TypeOf([]ManagedAccount{}):
|
||||||
|
err = setReflectAttr[[]ManagedAccount](&fv, v)
|
||||||
|
case reflect.TypeOf([]MfaAccount{}):
|
||||||
|
err = setReflectAttr[[]MfaAccount](&fv, v)
|
||||||
|
case reflect.TypeOf([]webauthn.Credential{}):
|
||||||
|
err = setReflectAttr[[]webauthn.Credential](&fv, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
instances = append(instances, instance)
|
||||||
|
}
|
||||||
|
|
||||||
|
return instances, nil
|
||||||
|
}
|
||||||
|
@ -66,6 +66,10 @@ func AutoSigninFilter(ctx *context.Context) {
|
|||||||
responseError(ctx, err.Error())
|
responseError(ctx, err.Error())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if application == nil {
|
||||||
|
responseError(ctx, fmt.Sprintf("No application is found for userId: app/%s", token.Application))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
setSessionUser(ctx, userId)
|
setSessionUser(ctx, userId)
|
||||||
setSessionOidc(ctx, token.Scope, application.ClientId)
|
setSessionOidc(ctx, token.Scope, application.ClientId)
|
||||||
|
@ -185,17 +185,3 @@ func removePort(s string) string {
|
|||||||
}
|
}
|
||||||
return ipStr
|
return ipStr
|
||||||
}
|
}
|
||||||
|
|
||||||
func isHostIntranet(s string) bool {
|
|
||||||
ipStr, _, err := net.SplitHostPort(s)
|
|
||||||
if err != nil {
|
|
||||||
ipStr = s
|
|
||||||
}
|
|
||||||
|
|
||||||
ip := net.ParseIP(ipStr)
|
|
||||||
if ip == nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
return ip.IsPrivate() || ip.IsLoopback() || ip.IsLinkLocalUnicast() || ip.IsLinkLocalMulticast()
|
|
||||||
}
|
|
||||||
|
@ -83,7 +83,7 @@ func CorsFilter(ctx *context.Context) {
|
|||||||
setCorsHeaders(ctx, origin)
|
setCorsHeaders(ctx, origin)
|
||||||
} else if originHostname == host {
|
} else if originHostname == host {
|
||||||
setCorsHeaders(ctx, origin)
|
setCorsHeaders(ctx, origin)
|
||||||
} else if isHostIntranet(host) {
|
} else if util.IsHostIntranet(host) {
|
||||||
setCorsHeaders(ctx, origin)
|
setCorsHeaders(ctx, origin)
|
||||||
} else {
|
} else {
|
||||||
ok, err := object.IsOriginAllowed(origin)
|
ok, err := object.IsOriginAllowed(origin)
|
||||||
|
56
routers/field_validation_filter.go
Normal file
56
routers/field_validation_filter.go
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
// Copyright 2025 The Casdoor Authors. All Rights Reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package routers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/beego/beego/context"
|
||||||
|
)
|
||||||
|
|
||||||
|
var forbiddenChars = `/?:#&%=+;`
|
||||||
|
|
||||||
|
func FieldValidationFilter(ctx *context.Context) {
|
||||||
|
if ctx.Input.Method() != "POST" {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
urlPath := ctx.Request.URL.Path
|
||||||
|
if !(strings.HasPrefix(urlPath, "/api/add-") || strings.HasPrefix(urlPath, "/api/update-")) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
bodyBytes, err := io.ReadAll(ctx.Request.Body)
|
||||||
|
if err != nil || len(bodyBytes) == 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.Request.Body = io.NopCloser(strings.NewReader(string(bodyBytes)))
|
||||||
|
|
||||||
|
var requestData map[string]interface{}
|
||||||
|
if err := json.Unmarshal(bodyBytes, &requestData); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if value, ok := requestData["name"].(string); ok {
|
||||||
|
if strings.ContainsAny(value, forbiddenChars) {
|
||||||
|
responseError(ctx, fmt.Sprintf("Field 'name' contains forbidden characters: %q", forbiddenChars))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -81,6 +81,7 @@ func initAPI() {
|
|||||||
beego.Router("/api/update-group", &controllers.ApiController{}, "POST:UpdateGroup")
|
beego.Router("/api/update-group", &controllers.ApiController{}, "POST:UpdateGroup")
|
||||||
beego.Router("/api/add-group", &controllers.ApiController{}, "POST:AddGroup")
|
beego.Router("/api/add-group", &controllers.ApiController{}, "POST:AddGroup")
|
||||||
beego.Router("/api/delete-group", &controllers.ApiController{}, "POST:DeleteGroup")
|
beego.Router("/api/delete-group", &controllers.ApiController{}, "POST:DeleteGroup")
|
||||||
|
beego.Router("/api/upload-groups", &controllers.ApiController{}, "POST:UploadGroups")
|
||||||
|
|
||||||
beego.Router("/api/get-global-users", &controllers.ApiController{}, "GET:GetGlobalUsers")
|
beego.Router("/api/get-global-users", &controllers.ApiController{}, "GET:GetGlobalUsers")
|
||||||
beego.Router("/api/get-users", &controllers.ApiController{}, "GET:GetUsers")
|
beego.Router("/api/get-users", &controllers.ApiController{}, "GET:GetUsers")
|
||||||
|
@ -132,7 +132,7 @@ func AddScimUser(r *scim.Resource) error {
|
|||||||
return errors.ScimErrorUniqueness
|
return errors.ScimErrorUniqueness
|
||||||
}
|
}
|
||||||
|
|
||||||
affect, err := object.AddUser(newUser)
|
affect, err := object.AddUser(newUser, "en")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
47
util/network.go
Normal file
47
util/network.go
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
// Copyright 2025 The Casdoor Authors. All Rights Reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package util
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net"
|
||||||
|
)
|
||||||
|
|
||||||
|
func IsInternetIp(ip string) bool {
|
||||||
|
ipStr, _, err := net.SplitHostPort(ip)
|
||||||
|
if err != nil {
|
||||||
|
ipStr = ip
|
||||||
|
}
|
||||||
|
|
||||||
|
parsedIP := net.ParseIP(ipStr)
|
||||||
|
if parsedIP == nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return !parsedIP.IsPrivate() && !parsedIP.IsLoopback() && !parsedIP.IsMulticast() && !parsedIP.IsUnspecified()
|
||||||
|
}
|
||||||
|
|
||||||
|
func IsHostIntranet(ip string) bool {
|
||||||
|
ipStr, _, err := net.SplitHostPort(ip)
|
||||||
|
if err != nil {
|
||||||
|
ipStr = ip
|
||||||
|
}
|
||||||
|
|
||||||
|
parsedIP := net.ParseIP(ipStr)
|
||||||
|
if parsedIP == nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return parsedIP.IsPrivate() || parsedIP.IsLoopback() || parsedIP.IsLinkLocalUnicast() || parsedIP.IsLinkLocalMulticast()
|
||||||
|
}
|
@ -30,6 +30,7 @@ import (
|
|||||||
"github.com/go-git/go-git/v5/plumbing/object"
|
"github.com/go-git/go-git/v5/plumbing/object"
|
||||||
"github.com/shirou/gopsutil/cpu"
|
"github.com/shirou/gopsutil/cpu"
|
||||||
"github.com/shirou/gopsutil/mem"
|
"github.com/shirou/gopsutil/mem"
|
||||||
|
"github.com/shirou/gopsutil/process"
|
||||||
)
|
)
|
||||||
|
|
||||||
type SystemInfo struct {
|
type SystemInfo struct {
|
||||||
@ -60,7 +61,17 @@ func getMemoryUsage() (uint64, uint64, error) {
|
|||||||
var m runtime.MemStats
|
var m runtime.MemStats
|
||||||
runtime.ReadMemStats(&m)
|
runtime.ReadMemStats(&m)
|
||||||
|
|
||||||
return m.Alloc, virtualMem.Total, nil
|
proc, err := process.NewProcess(int32(os.Getpid()))
|
||||||
|
if err != nil {
|
||||||
|
return 0, 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
memInfo, err := proc.MemoryInfo()
|
||||||
|
if err != nil {
|
||||||
|
return 0, 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return memInfo.RSS, virtualMem.Total, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetSystemInfo() (*SystemInfo, error) {
|
func GetSystemInfo() (*SystemInfo, error) {
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import {Button, Card, Col, ConfigProvider, Input, InputNumber, Popover, Radio, Result, Row, Select, Space, Switch, Upload} from "antd";
|
import {Button, Card, Col, ConfigProvider, Input, InputNumber, Popover, Radio, Result, Row, Select, Space, Switch, Upload, message} from "antd";
|
||||||
import {CopyOutlined, HolderOutlined, LinkOutlined, UploadOutlined, UsergroupAddOutlined} from "@ant-design/icons";
|
import {CopyOutlined, HolderOutlined, LinkOutlined, UploadOutlined, UsergroupAddOutlined} from "@ant-design/icons";
|
||||||
import * as ApplicationBackend from "./backend/ApplicationBackend";
|
import * as ApplicationBackend from "./backend/ApplicationBackend";
|
||||||
import * as CertBackend from "./backend/CertBackend";
|
import * as CertBackend from "./backend/CertBackend";
|
||||||
@ -279,6 +279,13 @@ class ApplicationEditPage extends React.Component {
|
|||||||
</Col>
|
</Col>
|
||||||
<Col span={22} >
|
<Col span={22} >
|
||||||
<Input value={this.state.application.name} disabled={this.state.application.name === "app-built-in"} onChange={e => {
|
<Input value={this.state.application.name} disabled={this.state.application.name === "app-built-in"} onChange={e => {
|
||||||
|
const value = e.target.value;
|
||||||
|
if (/[/?:@#&%=+;]/.test(value)) {
|
||||||
|
const invalidChars = "/ ? : @ # & % = + ;";
|
||||||
|
const messageText = i18next.t("application:Invalid characters in application name") + ":" + " " + invalidChars;
|
||||||
|
message.error(messageText);
|
||||||
|
return;
|
||||||
|
}
|
||||||
this.updateApplicationField("name", e.target.value);
|
this.updateApplicationField("name", e.target.value);
|
||||||
}} />
|
}} />
|
||||||
</Col>
|
</Col>
|
||||||
|
@ -14,7 +14,8 @@
|
|||||||
|
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import {Link} from "react-router-dom";
|
import {Link} from "react-router-dom";
|
||||||
import {Button, Table, Tooltip} from "antd";
|
import {Button, Table, Tooltip, Upload} from "antd";
|
||||||
|
import {UploadOutlined} from "@ant-design/icons";
|
||||||
import moment from "moment";
|
import moment from "moment";
|
||||||
import * as Setting from "./Setting";
|
import * as Setting from "./Setting";
|
||||||
import * as GroupBackend from "./backend/GroupBackend";
|
import * as GroupBackend from "./backend/GroupBackend";
|
||||||
@ -87,6 +88,42 @@ class GroupListPage extends BaseListPage {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uploadFile(info) {
|
||||||
|
const {status, response: res} = info.file;
|
||||||
|
if (status === "done") {
|
||||||
|
if (res.status === "ok") {
|
||||||
|
Setting.showMessage("success", "Groups uploaded successfully, refreshing the page");
|
||||||
|
const {pagination} = this.state;
|
||||||
|
this.fetch({pagination});
|
||||||
|
} else {
|
||||||
|
Setting.showMessage("error", `Groups failed to upload: ${res.msg}`);
|
||||||
|
}
|
||||||
|
} else if (status === "error") {
|
||||||
|
Setting.showMessage("error", "File failed to upload");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
renderUpload() {
|
||||||
|
const props = {
|
||||||
|
name: "file",
|
||||||
|
accept: ".xlsx",
|
||||||
|
method: "post",
|
||||||
|
action: `${Setting.ServerUrl}/api/upload-groups`,
|
||||||
|
withCredentials: true,
|
||||||
|
onChange: (info) => {
|
||||||
|
this.uploadFile(info);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Upload {...props}>
|
||||||
|
<Button icon={<UploadOutlined />} id="upload-button" type="primary" size="small">
|
||||||
|
{i18next.t("group:Upload (.xlsx)")}
|
||||||
|
</Button>
|
||||||
|
</Upload>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
renderTable(data) {
|
renderTable(data) {
|
||||||
const columns = [
|
const columns = [
|
||||||
{
|
{
|
||||||
@ -231,7 +268,10 @@ class GroupListPage extends BaseListPage {
|
|||||||
title={() => (
|
title={() => (
|
||||||
<div>
|
<div>
|
||||||
{i18next.t("general:Groups")}
|
{i18next.t("general:Groups")}
|
||||||
<Button type="primary" size="small" onClick={this.addGroup.bind(this)}>{i18next.t("general:Add")}</Button>
|
<Button style={{marginRight: "5px"}} type="primary" size="small" onClick={this.addGroup.bind(this)}>{i18next.t("general:Add")}</Button>
|
||||||
|
{
|
||||||
|
this.renderUpload()
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
loading={this.state.loading}
|
loading={this.state.loading}
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import {Button, Card, Col, Input, InputNumber, Radio, Row, Select, Switch} from "antd";
|
import {Button, Card, Col, Input, InputNumber, Popconfirm, Radio, Row, Select, Switch} from "antd";
|
||||||
import * as OrganizationBackend from "./backend/OrganizationBackend";
|
import * as OrganizationBackend from "./backend/OrganizationBackend";
|
||||||
import * as ApplicationBackend from "./backend/ApplicationBackend";
|
import * as ApplicationBackend from "./backend/ApplicationBackend";
|
||||||
import * as LdapBackend from "./backend/LdapBackend";
|
import * as LdapBackend from "./backend/LdapBackend";
|
||||||
@ -270,6 +270,31 @@ class OrganizationEditPage extends React.Component {
|
|||||||
}} />
|
}} />
|
||||||
</Col>
|
</Col>
|
||||||
</Row>
|
</Row>
|
||||||
|
{
|
||||||
|
this.state.organization.name === "built-in" ? (
|
||||||
|
<Row style={{marginTop: "20px"}} >
|
||||||
|
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 19 : 2}>
|
||||||
|
{Setting.getLabel(i18next.t("organization:Has privilege consent"), i18next.t("organization:Has privilege consent - Tooltip"))} :
|
||||||
|
</Col>
|
||||||
|
<Col span={1} >
|
||||||
|
{
|
||||||
|
!this.state.organization.hasPrivilegeConsent ? (
|
||||||
|
<Popconfirm
|
||||||
|
title={i18next.t("organization:Has privilege consent warning")}
|
||||||
|
onConfirm={() => {this.updateOrganizationField("hasPrivilegeConsent", !this.state.organization.hasPrivilegeConsent);}}
|
||||||
|
okText={i18next.t("general:OK")}
|
||||||
|
cancelText={i18next.t("general:Cancel")}
|
||||||
|
styles={{root: {width: "800px"}}}
|
||||||
|
>
|
||||||
|
<Switch checked={this.state.organization.hasPrivilegeConsent} />
|
||||||
|
</Popconfirm>
|
||||||
|
) :
|
||||||
|
<Switch checked={this.state.organization.hasPrivilegeConsent} onChange={() => {this.updateOrganizationField("hasPrivilegeConsent", !this.state.organization.hasPrivilegeConsent);}} />
|
||||||
|
}
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
|
) : null
|
||||||
|
}
|
||||||
<Row style={{marginTop: "20px"}} >
|
<Row style={{marginTop: "20px"}} >
|
||||||
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
|
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
|
||||||
{Setting.getLabel(i18next.t("general:Password type"), i18next.t("general:Password type - Tooltip"))} :
|
{Setting.getLabel(i18next.t("general:Password type"), i18next.t("general:Password type - Tooltip"))} :
|
||||||
@ -578,6 +603,16 @@ class OrganizationEditPage extends React.Component {
|
|||||||
/>
|
/>
|
||||||
</Col>
|
</Col>
|
||||||
</Row>
|
</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"}} >
|
<Row style={{marginTop: "20px"}} >
|
||||||
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
|
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
|
||||||
{Setting.getLabel(i18next.t("general:MFA items"), i18next.t("general:MFA items - Tooltip"))} :
|
{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 {
|
class OrganizationListPage extends BaseListPage {
|
||||||
newOrganization() {
|
newOrganization() {
|
||||||
const randomName = Setting.getRandomName();
|
const randomName = Setting.getRandomName();
|
||||||
|
const DefaultMfaRememberInHours = 12;
|
||||||
return {
|
return {
|
||||||
owner: "admin", // this.props.account.organizationname,
|
owner: "admin", // this.props.account.organizationname,
|
||||||
name: `organization_${randomName}`,
|
name: `organization_${randomName}`,
|
||||||
@ -48,6 +49,7 @@ class OrganizationListPage extends BaseListPage {
|
|||||||
enableSoftDeletion: false,
|
enableSoftDeletion: false,
|
||||||
isProfilePublic: true,
|
isProfilePublic: true,
|
||||||
enableTour: true,
|
enableTour: true,
|
||||||
|
mfaRememberInHours: DefaultMfaRememberInHours,
|
||||||
accountItems: [
|
accountItems: [
|
||||||
{name: "Organization", visible: true, viewRule: "Public", modifyRule: "Admin"},
|
{name: "Organization", visible: true, viewRule: "Public", modifyRule: "Admin"},
|
||||||
{name: "ID", visible: true, viewRule: "Public", modifyRule: "Immutable"},
|
{name: "ID", visible: true, viewRule: "Public", modifyRule: "Immutable"},
|
||||||
|
@ -288,6 +288,16 @@ class ProductEditPage extends React.Component {
|
|||||||
}} />
|
}} />
|
||||||
</Col>
|
</Col>
|
||||||
</Row>
|
</Row>
|
||||||
|
<Row style={{marginTop: "20px"}} >
|
||||||
|
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
|
||||||
|
{Setting.getLabel(i18next.t("product:Success URL"), i18next.t("product:Success URL - Tooltip"))} :
|
||||||
|
</Col>
|
||||||
|
<Col span={22} >
|
||||||
|
<Input prefix={<LinkOutlined />} value={this.state.product.successUrl} onChange={e => {
|
||||||
|
this.updateProductField("successUrl", e.target.value);
|
||||||
|
}} />
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
<Row style={{marginTop: "20px"}} >
|
<Row style={{marginTop: "20px"}} >
|
||||||
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
|
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
|
||||||
{Setting.getLabel(i18next.t("general:State"), i18next.t("general:State - Tooltip"))} :
|
{Setting.getLabel(i18next.t("general:State"), i18next.t("general:State - Tooltip"))} :
|
||||||
|
@ -371,11 +371,6 @@ class ProviderEditPage extends React.Component {
|
|||||||
{id: "Third-party", name: i18next.t("provider:Third-party")},
|
{id: "Third-party", name: i18next.t("provider:Third-party")},
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
} else if (type === "Aliyun Captcha") {
|
|
||||||
return [
|
|
||||||
{id: "nc", name: i18next.t("provider:Sliding Validation")},
|
|
||||||
{id: "ic", name: i18next.t("provider:Intelligent Validation")},
|
|
||||||
];
|
|
||||||
} else {
|
} else {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
@ -674,7 +669,7 @@ class ProviderEditPage extends React.Component {
|
|||||||
</Col>
|
</Col>
|
||||||
</Row>
|
</Row>
|
||||||
{
|
{
|
||||||
this.state.provider.type !== "WeCom" && this.state.provider.type !== "Infoflow" && this.state.provider.type !== "Aliyun Captcha" ? null : (
|
this.state.provider.type !== "WeCom" && this.state.provider.type !== "Infoflow" ? null : (
|
||||||
<React.Fragment>
|
<React.Fragment>
|
||||||
<Row style={{marginTop: "20px"}} >
|
<Row style={{marginTop: "20px"}} >
|
||||||
<Col style={{marginTop: "5px"}} span={2}>
|
<Col style={{marginTop: "5px"}} span={2}>
|
||||||
@ -950,7 +945,7 @@ class ProviderEditPage extends React.Component {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
this.state.provider.type !== "ADFS" && this.state.provider.type !== "AzureAD" && this.state.provider.type !== "AzureADB2C" && (this.state.provider.type !== "Casdoor" && this.state.category !== "Storage") && this.state.provider.type !== "Okta" ? null : (
|
this.state.provider.type !== "ADFS" && this.state.provider.type !== "AzureAD" && this.state.provider.type !== "AzureADB2C" && (this.state.provider.type !== "Casdoor" && this.state.category !== "Storage") && this.state.provider.type !== "Okta" && this.state.provider.type !== "Nextcloud" ? null : (
|
||||||
<Row style={{marginTop: "20px"}} >
|
<Row style={{marginTop: "20px"}} >
|
||||||
<Col style={{marginTop: "5px"}} span={2}>
|
<Col style={{marginTop: "5px"}} span={2}>
|
||||||
{Setting.getLabel(i18next.t("provider:Domain"), i18next.t("provider:Domain - Tooltip"))} :
|
{Setting.getLabel(i18next.t("provider:Domain"), i18next.t("provider:Domain - Tooltip"))} :
|
||||||
|
@ -696,18 +696,27 @@ export const MfaRulePrompted = "Prompted";
|
|||||||
export const MfaRuleOptional = "Optional";
|
export const MfaRuleOptional = "Optional";
|
||||||
|
|
||||||
export function isRequiredEnableMfa(user, organization) {
|
export function isRequiredEnableMfa(user, organization) {
|
||||||
if (!user || !organization || !organization.mfaItems) {
|
if (!user || !organization || (!organization.mfaItems && !user.mfaItems)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return getMfaItemsByRules(user, organization, [MfaRuleRequired]).length > 0;
|
return getMfaItemsByRules(user, organization, [MfaRuleRequired]).length > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getMfaItemsByRules(user, organization, mfaRules = []) {
|
export function getMfaItemsByRules(user, organization, mfaRules = []) {
|
||||||
if (!user || !organization || !organization.mfaItems) {
|
if (!user || !organization || (!organization.mfaItems && !user.mfaItems)) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
return organization.mfaItems.filter((mfaItem) => mfaRules.includes(mfaItem.rule))
|
let mfaItems = organization.mfaItems;
|
||||||
|
if (user.mfaItems && user.mfaItems.length !== 0) {
|
||||||
|
mfaItems = user.mfaItems;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mfaItems === null) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
return mfaItems.filter((mfaItem) => mfaRules.includes(mfaItem.rule))
|
||||||
.filter((mfaItem) => user.multiFactorAuths.some((mfa) => mfa.mfaType === mfaItem.name && !mfa.enabled));
|
.filter((mfaItem) => user.multiFactorAuths.some((mfa) => mfa.mfaType === mfaItem.name && !mfa.enabled));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -42,6 +42,7 @@ import * as MfaBackend from "./backend/MfaBackend";
|
|||||||
import AccountAvatar from "./account/AccountAvatar";
|
import AccountAvatar from "./account/AccountAvatar";
|
||||||
import FaceIdTable from "./table/FaceIdTable";
|
import FaceIdTable from "./table/FaceIdTable";
|
||||||
import MfaAccountTable from "./table/MfaAccountTable";
|
import MfaAccountTable from "./table/MfaAccountTable";
|
||||||
|
import MfaTable from "./table/MfaTable";
|
||||||
|
|
||||||
const {Option} = Select;
|
const {Option} = Select;
|
||||||
|
|
||||||
@ -926,6 +927,19 @@ class UserEditPage extends React.Component {
|
|||||||
</Col>
|
</Col>
|
||||||
</Row>
|
</Row>
|
||||||
);
|
);
|
||||||
|
} else if (accountItem.name === "MFA items") {
|
||||||
|
return (<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"))} :
|
||||||
|
</Col>
|
||||||
|
<Col span={22} >
|
||||||
|
<MfaTable
|
||||||
|
title={i18next.t("general:MFA items")}
|
||||||
|
table={this.state.user.mfaItems ?? []}
|
||||||
|
onUpdateTable={(value) => {this.updateUserField("mfaItems", value);}}
|
||||||
|
/>
|
||||||
|
</Col>
|
||||||
|
</Row>);
|
||||||
} else if (accountItem.name === "Multi-factor authentication") {
|
} else if (accountItem.name === "Multi-factor authentication") {
|
||||||
return (
|
return (
|
||||||
!this.isSelfOrAdmin() ? null : (
|
!this.isSelfOrAdmin() ? null : (
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user