mirror of
https://github.com/casdoor/casdoor.git
synced 2025-07-27 16:30:46 +08:00
Compare commits
10 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
793a7d6cda | ||
![]() |
4cc2120fed | ||
![]() |
93b0f52f26 | ||
![]() |
e228045e37 | ||
![]() |
6b8c24e1f0 | ||
![]() |
8a79bb64dd | ||
![]() |
e5f9aab28f | ||
![]() |
7d05b69aac | ||
![]() |
868e66e866 | ||
![]() |
40ad3c9234 |
@@ -117,7 +117,7 @@ func (c *ApiController) HandleLoggedIn(application *object.Application, user *ob
|
||||
if form.Type == ResponseTypeLogin {
|
||||
c.SetSessionUsername(userId)
|
||||
util.LogInfo(c.Ctx, "API: [%s] signed in", userId)
|
||||
resp = &Response{Status: "ok", Msg: "", Data: userId}
|
||||
resp = &Response{Status: "ok", Msg: "", Data: userId, Data2: user.NeedUpdatePassword}
|
||||
} else if form.Type == ResponseTypeCode {
|
||||
clientId := c.Input().Get("clientId")
|
||||
responseType := c.Input().Get("responseType")
|
||||
@@ -139,7 +139,7 @@ func (c *ApiController) HandleLoggedIn(application *object.Application, user *ob
|
||||
}
|
||||
|
||||
resp = codeToResponse(code)
|
||||
|
||||
resp.Data2 = user.NeedUpdatePassword
|
||||
if application.EnableSigninSession || application.HasPromptPage() {
|
||||
// The prompt page needs the user to be signed in
|
||||
c.SetSessionUsername(userId)
|
||||
@@ -152,6 +152,8 @@ func (c *ApiController) HandleLoggedIn(application *object.Application, user *ob
|
||||
nonce := c.Input().Get("nonce")
|
||||
token, _ := object.GetTokenByUser(application, user, scope, nonce, c.Ctx.Request.Host)
|
||||
resp = tokenToResponse(token)
|
||||
|
||||
resp.Data2 = user.NeedUpdatePassword
|
||||
}
|
||||
} else if form.Type == ResponseTypeSaml { // saml flow
|
||||
res, redirectUrl, method, err := object.GetSamlResponse(application, user, form.SamlRequest, c.Ctx.Request.Host)
|
||||
@@ -159,7 +161,7 @@ func (c *ApiController) HandleLoggedIn(application *object.Application, user *ob
|
||||
c.ResponseError(err.Error(), nil)
|
||||
return
|
||||
}
|
||||
resp = &Response{Status: "ok", Msg: "", Data: res, Data2: map[string]string{"redirectUrl": redirectUrl, "method": method}}
|
||||
resp = &Response{Status: "ok", Msg: "", Data: res, Data2: map[string]interface{}{"redirectUrl": redirectUrl, "method": method, "needUpdatePassword": user.NeedUpdatePassword}}
|
||||
|
||||
if application.EnableSigninSession || application.HasPromptPage() {
|
||||
// The prompt page needs the user to be signed in
|
||||
|
@@ -17,6 +17,7 @@ package controllers
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"strconv"
|
||||
|
||||
"github.com/beego/beego/utils/pagination"
|
||||
"github.com/casdoor/casdoor/object"
|
||||
@@ -164,6 +165,16 @@ func (c *ApiController) BuyProduct() {
|
||||
host := c.Ctx.Request.Host
|
||||
providerName := c.Input().Get("providerName")
|
||||
paymentEnv := c.Input().Get("paymentEnv")
|
||||
customPriceStr := c.Input().Get("customPrice")
|
||||
if customPriceStr == "" {
|
||||
customPriceStr = "0"
|
||||
}
|
||||
|
||||
customPrice, err := strconv.ParseFloat(customPriceStr, 64)
|
||||
if err != nil {
|
||||
c.ResponseError(err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
// buy `pricingName/planName` for `paidUserName`
|
||||
pricingName := c.Input().Get("pricingName")
|
||||
@@ -189,7 +200,7 @@ func (c *ApiController) BuyProduct() {
|
||||
return
|
||||
}
|
||||
|
||||
payment, attachInfo, err := object.BuyProduct(id, user, providerName, pricingName, planName, host, paymentEnv)
|
||||
payment, attachInfo, err := object.BuyProduct(id, user, providerName, pricingName, planName, host, paymentEnv, customPrice)
|
||||
if err != nil {
|
||||
c.ResponseError(err.Error())
|
||||
return
|
||||
|
@@ -27,11 +27,12 @@ import (
|
||||
)
|
||||
|
||||
type EmailForm struct {
|
||||
Title string `json:"title"`
|
||||
Content string `json:"content"`
|
||||
Sender string `json:"sender"`
|
||||
Receivers []string `json:"receivers"`
|
||||
Provider string `json:"provider"`
|
||||
Title string `json:"title"`
|
||||
Content string `json:"content"`
|
||||
Sender string `json:"sender"`
|
||||
Receivers []string `json:"receivers"`
|
||||
Provider string `json:"provider"`
|
||||
ProviderObject object.Provider `json:"providerObject"`
|
||||
}
|
||||
|
||||
type SmsForm struct {
|
||||
@@ -74,7 +75,6 @@ func (c *ApiController) SendEmail() {
|
||||
c.ResponseError(err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
} else {
|
||||
// called by Casdoor SDK via Client ID & Client Secret, so the used Email provider will be the application' Email provider or the default Email provider
|
||||
provider, err = c.GetProviderFromContext("Email")
|
||||
@@ -84,6 +84,13 @@ func (c *ApiController) SendEmail() {
|
||||
}
|
||||
}
|
||||
|
||||
if emailForm.ProviderObject.Name != "" {
|
||||
if emailForm.ProviderObject.ClientSecret == "***" {
|
||||
emailForm.ProviderObject.ClientSecret = provider.ClientSecret
|
||||
}
|
||||
provider = &emailForm.ProviderObject
|
||||
}
|
||||
|
||||
// when receiver is the reserved keyword: "TestSmtpServer", it means to test the SMTP server instead of sending a real Email
|
||||
if len(emailForm.Receivers) == 1 && emailForm.Receivers[0] == "TestSmtpServer" {
|
||||
err = object.DailSmtpServer(provider)
|
||||
|
@@ -509,8 +509,21 @@ func (c *ApiController) SetPassword() {
|
||||
return
|
||||
}
|
||||
|
||||
organization, err := object.GetOrganizationByUser(targetUser)
|
||||
if err != nil {
|
||||
c.ResponseError(err.Error())
|
||||
return
|
||||
}
|
||||
if organization == nil {
|
||||
c.ResponseError(fmt.Sprintf(c.T("the organization: %s is not found"), targetUser.Owner))
|
||||
return
|
||||
}
|
||||
|
||||
targetUser.Password = newPassword
|
||||
_, err = object.SetUserField(targetUser, "password", targetUser.Password)
|
||||
targetUser.UpdateUserPassword(organization)
|
||||
targetUser.NeedUpdatePassword = false
|
||||
|
||||
_, err = object.UpdateUser(userId, targetUser, []string{"password", "need_update_password", "password_type"}, false)
|
||||
if err != nil {
|
||||
c.ResponseError(err.Error())
|
||||
return
|
||||
|
2
go.mod
2
go.mod
@@ -9,7 +9,7 @@ require (
|
||||
github.com/beego/beego v1.12.12
|
||||
github.com/beevik/etree v1.1.0
|
||||
github.com/casbin/casbin/v2 v2.77.2
|
||||
github.com/casdoor/go-sms-sender v0.23.0
|
||||
github.com/casdoor/go-sms-sender v0.24.0
|
||||
github.com/casdoor/gomail/v2 v2.0.1
|
||||
github.com/casdoor/notify v0.45.0
|
||||
github.com/casdoor/oss v1.6.0
|
||||
|
4
go.sum
4
go.sum
@@ -1085,8 +1085,8 @@ github.com/casbin/casbin/v2 v2.77.2 h1:yQinn/w9x8AswiwqwtrXz93VU48R1aYTXdHEx4RI3
|
||||
github.com/casbin/casbin/v2 v2.77.2/go.mod h1:mzGx0hYW9/ksOSpw3wNjk3NRAroq5VMFYUQ6G43iGPk=
|
||||
github.com/casdoor/go-reddit/v2 v2.1.0 h1:kIbfdJ7AA7H0uTQ8s0q4GGZqSS5V9wVE74RrXyD9XPs=
|
||||
github.com/casdoor/go-reddit/v2 v2.1.0/go.mod h1:eagkvwlZ4Hcsuc/uQsLHYEulz5jN65SVSwV/AIE7zsc=
|
||||
github.com/casdoor/go-sms-sender v0.23.0 h1:N8+By4JNwyilEcx7cp0QGOepafefM88VwV+o3UEFZio=
|
||||
github.com/casdoor/go-sms-sender v0.23.0/go.mod h1:bOm4H8/YfJmEHjBatEVQFOnAf0OOn1B0Wi5B7zDhws0=
|
||||
github.com/casdoor/go-sms-sender v0.24.0 h1:LNLsce3EG/87I3JS6UiajF3LlQmdIiCgebEu0IE4wSM=
|
||||
github.com/casdoor/go-sms-sender v0.24.0/go.mod h1:bOm4H8/YfJmEHjBatEVQFOnAf0OOn1B0Wi5B7zDhws0=
|
||||
github.com/casdoor/gomail/v2 v2.0.1 h1:J+FG6x80s9e5lBHUn8Sv0Y56mud34KiWih5YdmudR/w=
|
||||
github.com/casdoor/gomail/v2 v2.0.1/go.mod h1:VnGPslEAtpix5FjHisR/WKB1qvZDBaujbikxDe9d+2Q=
|
||||
github.com/casdoor/notify v0.45.0 h1:OlaFvcQFjGOgA4mRx07M8AH1gvb5xNo21mcqrVGlLgk=
|
||||
|
@@ -39,6 +39,8 @@ type Payment struct {
|
||||
Currency string `xorm:"varchar(100)" json:"currency"`
|
||||
Price float64 `json:"price"`
|
||||
ReturnUrl string `xorm:"varchar(1000)" json:"returnUrl"`
|
||||
IsRecharge bool `xorm:"bool" json:"isRecharge"`
|
||||
|
||||
// Payer Info
|
||||
User string `xorm:"varchar(100)" json:"user"`
|
||||
PersonName string `xorm:"varchar(100)" json:"personName"`
|
||||
@@ -193,11 +195,16 @@ func notifyPayment(body []byte, owner string, paymentName string) (*Payment, *pp
|
||||
return payment, nil, err
|
||||
}
|
||||
|
||||
if notifyResult.Price != product.Price {
|
||||
if notifyResult.Price != product.Price && !product.IsRecharge {
|
||||
err = fmt.Errorf("the payment's price: %f doesn't equal to the expected price: %f", notifyResult.Price, product.Price)
|
||||
return payment, nil, err
|
||||
}
|
||||
|
||||
if payment.IsRecharge {
|
||||
err = updateUserBalance(payment.Owner, payment.User, payment.Price)
|
||||
return payment, notifyResult, err
|
||||
}
|
||||
|
||||
return payment, notifyResult, nil
|
||||
}
|
||||
|
||||
|
@@ -39,6 +39,7 @@ type Product struct {
|
||||
Price float64 `json:"price"`
|
||||
Quantity int `json:"quantity"`
|
||||
Sold int `json:"sold"`
|
||||
IsRecharge bool `json:"isRecharge"`
|
||||
Providers []string `xorm:"varchar(255)" json:"providers"`
|
||||
ReturnUrl string `xorm:"varchar(1000)" json:"returnUrl"`
|
||||
|
||||
@@ -160,7 +161,7 @@ func (product *Product) getProvider(providerName string) (*Provider, error) {
|
||||
return provider, nil
|
||||
}
|
||||
|
||||
func BuyProduct(id string, user *User, providerName, pricingName, planName, host, paymentEnv string) (payment *Payment, attachInfo map[string]interface{}, err error) {
|
||||
func BuyProduct(id string, user *User, providerName, pricingName, planName, host, paymentEnv string, customPrice float64) (payment *Payment, attachInfo map[string]interface{}, err error) {
|
||||
product, err := GetProduct(id)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
@@ -169,6 +170,14 @@ func BuyProduct(id string, user *User, providerName, pricingName, planName, host
|
||||
return nil, nil, fmt.Errorf("the product: %s does not exist", id)
|
||||
}
|
||||
|
||||
if product.IsRecharge {
|
||||
if customPrice <= 0 {
|
||||
return nil, nil, fmt.Errorf("the custom price should bigger than zero")
|
||||
} else {
|
||||
product.Price = customPrice
|
||||
}
|
||||
}
|
||||
|
||||
provider, err := product.getProvider(providerName)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
@@ -246,6 +255,7 @@ func BuyProduct(id string, user *User, providerName, pricingName, planName, host
|
||||
Currency: product.Currency,
|
||||
Price: product.Price,
|
||||
ReturnUrl: product.ReturnUrl,
|
||||
IsRecharge: product.IsRecharge,
|
||||
|
||||
User: user.Name,
|
||||
PayUrl: payResp.PayUrl,
|
||||
@@ -256,6 +266,10 @@ func BuyProduct(id string, user *User, providerName, pricingName, planName, host
|
||||
|
||||
if provider.Type == "Dummy" {
|
||||
payment.State = pp.PaymentStatePaid
|
||||
err = updateUserBalance(user.Owner, user.Name, payment.Price)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
}
|
||||
|
||||
affected, err := AddPayment(payment)
|
||||
@@ -304,8 +318,9 @@ func CreateProductForPlan(plan *Plan) *Product {
|
||||
Price: plan.Price,
|
||||
Currency: plan.Currency,
|
||||
|
||||
Quantity: 999,
|
||||
Sold: 0,
|
||||
Quantity: 999,
|
||||
Sold: 0,
|
||||
IsRecharge: false,
|
||||
|
||||
Providers: plan.PaymentProviders,
|
||||
State: "Published",
|
||||
|
@@ -48,7 +48,7 @@ func SendSms(provider *Provider, content string, phoneNumbers ...string) error {
|
||||
if provider.AppId != "" {
|
||||
phoneNumbers = append([]string{provider.AppId}, phoneNumbers...)
|
||||
}
|
||||
} else if provider.Type == sender.Aliyun || provider.Type == sender.SendCloud {
|
||||
} else if provider.Type == sender.Aliyun {
|
||||
for i, number := range phoneNumbers {
|
||||
phoneNumbers[i] = strings.TrimPrefix(number, "+86")
|
||||
}
|
||||
|
@@ -169,6 +169,12 @@ func (syncer *Syncer) setUserByKeyValue(user *User, key string, value string) {
|
||||
user.TotpSecret = value
|
||||
case "SignupApplication":
|
||||
user.SignupApplication = value
|
||||
case "MfaPhoneEnabled":
|
||||
user.MfaPhoneEnabled = util.ParseBool(value)
|
||||
case "MfaEmailEnabled":
|
||||
user.MfaEmailEnabled = util.ParseBool(value)
|
||||
case "RecoveryCodes":
|
||||
user.RecoveryCodes = strings.Split(value, ",")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -303,6 +309,9 @@ func (syncer *Syncer) getMapFromOriginalUser(user *OriginalUser) map[string]stri
|
||||
m["PreferredMfaType"] = user.PreferredMfaType
|
||||
m["TotpSecret"] = user.TotpSecret
|
||||
m["SignupApplication"] = user.SignupApplication
|
||||
m["MfaPhoneEnabled"] = util.BoolToString(user.MfaPhoneEnabled)
|
||||
m["MfaEmailEnabled"] = util.BoolToString(user.MfaEmailEnabled)
|
||||
m["RecoveryCodes"] = strings.Join(user.RecoveryCodes, ",")
|
||||
|
||||
m2 := map[string]string{}
|
||||
for _, tableColumn := range syncer.TableColumns {
|
||||
|
@@ -203,7 +203,8 @@ type User struct {
|
||||
LastSigninWrongTime string `xorm:"varchar(100)" json:"lastSigninWrongTime"`
|
||||
SigninWrongTimes int `json:"signinWrongTimes"`
|
||||
|
||||
ManagedAccounts []ManagedAccount `xorm:"managedAccounts blob" json:"managedAccounts"`
|
||||
ManagedAccounts []ManagedAccount `xorm:"managedAccounts blob" json:"managedAccounts"`
|
||||
NeedUpdatePassword bool `json:"needUpdatePassword"`
|
||||
}
|
||||
|
||||
type Userinfo struct {
|
||||
@@ -682,11 +683,11 @@ func UpdateUser(id string, user *User, columns []string, isAdmin bool) (bool, er
|
||||
"eveonline", "fitbit", "gitea", "heroku", "influxcloud", "instagram", "intercom", "kakao", "lastfm", "mailru", "meetup",
|
||||
"microsoftonline", "naver", "nextcloud", "onedrive", "oura", "patreon", "paypal", "salesforce", "shopify", "soundcloud",
|
||||
"spotify", "strava", "stripe", "type", "tiktok", "tumblr", "twitch", "twitter", "typetalk", "uber", "vk", "wepay", "xero", "yahoo",
|
||||
"yammer", "yandex", "zoom", "custom",
|
||||
"yammer", "yandex", "zoom", "custom", "need_update_password",
|
||||
}
|
||||
}
|
||||
if isAdmin {
|
||||
columns = append(columns, "name", "id", "email", "phone", "country_code", "type")
|
||||
columns = append(columns, "name", "id", "email", "phone", "country_code", "type", "balance")
|
||||
}
|
||||
|
||||
columns = append(columns, "updated_time")
|
||||
@@ -1156,3 +1157,13 @@ func GenerateIdForNewUser(application *Application) (string, error) {
|
||||
res := strconv.Itoa(lastUserId + 1)
|
||||
return res, nil
|
||||
}
|
||||
|
||||
func updateUserBalance(owner string, name string, balance float64) error {
|
||||
user, err := getUser(owner, name)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
user.Balance += balance
|
||||
_, err = UpdateUser(user.GetId(), user, []string{"balance"}, true)
|
||||
return err
|
||||
}
|
||||
|
@@ -411,6 +411,15 @@ func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang str
|
||||
item := GetAccountItemByName("Is deleted", organization)
|
||||
itemsChanged = append(itemsChanged, item)
|
||||
}
|
||||
if oldUser.NeedUpdatePassword != newUser.NeedUpdatePassword {
|
||||
item := GetAccountItemByName("Need update password", organization)
|
||||
itemsChanged = append(itemsChanged, item)
|
||||
}
|
||||
|
||||
if oldUser.Balance != newUser.Balance {
|
||||
item := GetAccountItemByName("Balance", organization)
|
||||
itemsChanged = append(itemsChanged, item)
|
||||
}
|
||||
|
||||
if oldUser.Score != newUser.Score {
|
||||
item := GetAccountItemByName("Score", organization)
|
||||
|
@@ -414,6 +414,7 @@ class App extends Component {
|
||||
<Layout id="parent-area">
|
||||
<ManagementPage
|
||||
account={this.state.account}
|
||||
application={this.state.application}
|
||||
uri={this.state.uri}
|
||||
themeData={this.state.themeData}
|
||||
themeAlgorithm={this.state.themeAlgorithm}
|
||||
|
@@ -108,8 +108,8 @@ class EntryPage extends React.Component {
|
||||
<Route exact path="/signup/oauth/authorize" render={(props) => <SignupPage {...this.props} application={this.state.application} onUpdateApplication={onUpdateApplication} {...props} />} />
|
||||
<Route exact path="/login/oauth/authorize" render={(props) => <LoginPage {...this.props} application={this.state.application} type={"code"} mode={"signin"} onUpdateApplication={onUpdateApplication} {...props} />} />
|
||||
<Route exact path="/login/saml/authorize/:owner/:applicationName" render={(props) => <LoginPage {...this.props} application={this.state.application} type={"saml"} mode={"signin"} onUpdateApplication={onUpdateApplication} {...props} />} />
|
||||
<Route exact path="/forget" render={(props) => this.renderHomeIfLoggedIn(<SelfForgetPage {...this.props} application={this.state.application} onUpdateApplication={onUpdateApplication} {...props} />)} />
|
||||
<Route exact path="/forget/:applicationName" render={(props) => this.renderHomeIfLoggedIn(<ForgetPage {...this.props} application={this.state.application} onUpdateApplication={onUpdateApplication} {...props} />)} />
|
||||
<Route exact path="/forget" render={(props) => <SelfForgetPage {...this.props} account={this.props.account} application={this.state.application} onUpdateApplication={onUpdateApplication} {...props} />} />
|
||||
<Route exact path="/forget/:applicationName" render={(props) => <ForgetPage {...this.props} account={this.props.account} application={this.state.application} onUpdateApplication={onUpdateApplication} {...props} />} />
|
||||
<Route exact path="/prompt" render={(props) => this.renderLoginIfNotLoggedIn(<PromptPage {...this.props} application={this.state.application} onUpdateApplication={onUpdateApplication} {...props} />)} />
|
||||
<Route exact path="/prompt/:applicationName" render={(props) => this.renderLoginIfNotLoggedIn(<PromptPage {...this.props} application={this.state.application} onUpdateApplication={onUpdateApplication} {...props} />)} />
|
||||
<Route exact path="/result" render={(props) => this.renderHomeIfLoggedIn(<ResultPage {...this.props} application={this.state.application} onUpdateApplication={onUpdateApplication} {...props} />)} />
|
||||
|
@@ -328,6 +328,8 @@ function ManagementPage(props) {
|
||||
return <Redirect to="/login" />;
|
||||
} else if (props.account === undefined) {
|
||||
return null;
|
||||
} else if (props.account.needUpdatePassword) {
|
||||
return <Redirect to={"/forget/" + props.application.name} />;
|
||||
} else {
|
||||
return component;
|
||||
}
|
||||
@@ -409,7 +411,7 @@ function ManagementPage(props) {
|
||||
return Setting.isMobile() || window.location.pathname.startsWith("/trees");
|
||||
}
|
||||
|
||||
const menuStyleRight = Setting.isAdminUser(props.account) && !Setting.isMobile() ? "calc(180px + 280px)" : "280px";
|
||||
const menuStyleRight = Setting.isAdminUser(props.account) && !Setting.isMobile() ? "calc(180px + 280px)" : "320px";
|
||||
|
||||
const onClose = () => {
|
||||
setMenuVisible(false);
|
||||
|
@@ -17,6 +17,7 @@ import {Button, Result, Spin} from "antd";
|
||||
import * as PaymentBackend from "./backend/PaymentBackend";
|
||||
import * as PricingBackend from "./backend/PricingBackend";
|
||||
import * as SubscriptionBackend from "./backend/SubscriptionBackend";
|
||||
import * as UserBackend from "./backend/UserBackend";
|
||||
import * as Setting from "./Setting";
|
||||
import i18next from "i18next";
|
||||
|
||||
@@ -34,6 +35,7 @@ class PaymentResultPage extends React.Component {
|
||||
pricing: props.pricing ?? null,
|
||||
subscription: props.subscription ?? null,
|
||||
timeout: null,
|
||||
user: null,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -41,6 +43,25 @@ class PaymentResultPage extends React.Component {
|
||||
this.getPayment();
|
||||
}
|
||||
|
||||
getUser() {
|
||||
UserBackend.getUser(this.props.account.owner, this.props.account.name)
|
||||
.then((res) => {
|
||||
if (res.data === null) {
|
||||
this.props.history.push("/404");
|
||||
return;
|
||||
}
|
||||
|
||||
if (res.status === "error") {
|
||||
Setting.showMessage("error", res.msg);
|
||||
return;
|
||||
}
|
||||
|
||||
this.setState({
|
||||
user: res.data,
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
if (this.state.timeout !== null) {
|
||||
clearTimeout(this.state.timeout);
|
||||
@@ -114,6 +135,12 @@ class PaymentResultPage extends React.Component {
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (payment.state === "Paid") {
|
||||
if (this.props.account) {
|
||||
this.getUser();
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
Setting.showMessage("error", err.message);
|
||||
return;
|
||||
@@ -136,6 +163,27 @@ class PaymentResultPage extends React.Component {
|
||||
}
|
||||
|
||||
if (payment.state === "Paid") {
|
||||
if (payment.isRecharge) {
|
||||
return (
|
||||
<div className="login-content">
|
||||
{
|
||||
Setting.renderHelmet(payment)
|
||||
}
|
||||
<Result
|
||||
status="success"
|
||||
title={`${i18next.t("payment:Recharged successfully")}`}
|
||||
subTitle={`${i18next.t("payment:You have successfully recharged")} ${payment.price} ${Setting.getCurrencyText(payment)}, ${i18next.t("payment:Your current balance is")} ${this.state.user?.balance} ${Setting.getCurrencyText(payment)}`}
|
||||
extra={[
|
||||
<Button type="primary" key="returnUrl" onClick={() => {
|
||||
this.goToPaymentUrl(payment);
|
||||
}}>
|
||||
{i18next.t("payment:Return to Website")}
|
||||
</Button>,
|
||||
]}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
return (
|
||||
<div className="login-content">
|
||||
{
|
||||
|
@@ -13,7 +13,7 @@
|
||||
// limitations under the License.
|
||||
|
||||
import React from "react";
|
||||
import {Button, Descriptions, Spin} from "antd";
|
||||
import {Button, Descriptions, InputNumber, Space, Spin} from "antd";
|
||||
import i18next from "i18next";
|
||||
import * as ProductBackend from "./backend/ProductBackend";
|
||||
import * as PlanBackend from "./backend/PlanBackend";
|
||||
@@ -36,6 +36,7 @@ class ProductBuyPage extends React.Component {
|
||||
pricing: props?.pricing ?? null,
|
||||
plan: null,
|
||||
isPlacingOrder: false,
|
||||
customPrice: 0,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -127,18 +128,8 @@ class ProductBuyPage extends React.Component {
|
||||
}
|
||||
}
|
||||
|
||||
getCurrencyText(product) {
|
||||
if (product?.currency === "USD") {
|
||||
return i18next.t("product:USD");
|
||||
} else if (product?.currency === "CNY") {
|
||||
return i18next.t("product:CNY");
|
||||
} else {
|
||||
return "(Unknown currency)";
|
||||
}
|
||||
}
|
||||
|
||||
getPrice(product) {
|
||||
return `${this.getCurrencySymbol(product)}${product?.price} (${this.getCurrencyText(product)})`;
|
||||
return `${this.getCurrencySymbol(product)}${product?.price} (${Setting.getCurrencyText(product)})`;
|
||||
}
|
||||
|
||||
// Call Weechat Pay via jsapi
|
||||
@@ -192,7 +183,7 @@ class ProductBuyPage extends React.Component {
|
||||
isPlacingOrder: true,
|
||||
});
|
||||
|
||||
ProductBackend.buyProduct(product.owner, product.name, provider.name, this.state.pricingName ?? "", this.state.planName ?? "", this.state.userName ?? "", this.state.paymentEnv)
|
||||
ProductBackend.buyProduct(product.owner, product.name, provider.name, this.state.pricingName ?? "", this.state.planName ?? "", this.state.userName ?? "", this.state.paymentEnv, this.state.customPrice)
|
||||
.then((res) => {
|
||||
if (res.status === "ok") {
|
||||
const payment = res.data;
|
||||
@@ -295,15 +286,27 @@ class ProductBuyPage extends React.Component {
|
||||
<Descriptions.Item label={i18next.t("product:Image")} span={3}>
|
||||
<img src={product?.image} alt={product?.name} height={90} style={{marginBottom: "20px"}} />
|
||||
</Descriptions.Item>
|
||||
<Descriptions.Item label={i18next.t("product:Price")}>
|
||||
<span style={{fontSize: 28, color: "red", fontWeight: "bold"}}>
|
||||
{
|
||||
this.getPrice(product)
|
||||
}
|
||||
</span>
|
||||
</Descriptions.Item>
|
||||
<Descriptions.Item label={i18next.t("product:Quantity")}><span style={{fontSize: 16}}>{product?.quantity}</span></Descriptions.Item>
|
||||
<Descriptions.Item label={i18next.t("product:Sold")}><span style={{fontSize: 16}}>{product?.sold}</span></Descriptions.Item>
|
||||
{
|
||||
product.isRecharge ? (
|
||||
<Descriptions.Item span={3} label={i18next.t("product:Price")}>
|
||||
<Space>
|
||||
<InputNumber min={0} value={this.state.customPrice} onChange={(e) => {this.setState({customPrice: e});}} /> {Setting.getCurrencyText(product)}
|
||||
</Space>
|
||||
</Descriptions.Item>
|
||||
) : (
|
||||
<React.Fragment>
|
||||
<Descriptions.Item label={i18next.t("product:Price")}>
|
||||
<span style={{fontSize: 28, color: "red", fontWeight: "bold"}}>
|
||||
{
|
||||
this.getPrice(product)
|
||||
}
|
||||
</span>
|
||||
</Descriptions.Item>
|
||||
<Descriptions.Item label={i18next.t("product:Quantity")}><span style={{fontSize: 16}}>{product?.quantity}</span></Descriptions.Item>
|
||||
<Descriptions.Item label={i18next.t("product:Sold")}><span style={{fontSize: 16}}>{product?.sold}</span></Descriptions.Item>
|
||||
</React.Fragment>
|
||||
)
|
||||
}
|
||||
<Descriptions.Item label={i18next.t("product:Pay")} span={3}>
|
||||
{
|
||||
this.renderPay(product)
|
||||
|
@@ -13,7 +13,7 @@
|
||||
// limitations under the License.
|
||||
|
||||
import React from "react";
|
||||
import {Button, Card, Col, Input, InputNumber, Row, Select} from "antd";
|
||||
import {Button, Card, Col, Input, InputNumber, Row, Select, Switch} from "antd";
|
||||
import * as ProductBackend from "./backend/ProductBackend";
|
||||
import * as Setting from "./Setting";
|
||||
import i18next from "i18next";
|
||||
@@ -216,14 +216,27 @@ class ProductEditPage extends React.Component {
|
||||
</Row>
|
||||
<Row style={{marginTop: "20px"}} >
|
||||
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
|
||||
{Setting.getLabel(i18next.t("product:Price"), i18next.t("product:Price - Tooltip"))} :
|
||||
{Setting.getLabel(i18next.t("product:Is recharge"), i18next.t("product:Is recharge - Tooltip"))} :
|
||||
</Col>
|
||||
<Col span={22} >
|
||||
<InputNumber value={this.state.product.price} disabled={isCreatedByPlan} onChange={value => {
|
||||
this.updateProductField("price", value);
|
||||
<Switch checked={this.state.product.isRecharge} onChange={value => {
|
||||
this.updateProductField("isRecharge", value);
|
||||
}} />
|
||||
</Col>
|
||||
</Row>
|
||||
{
|
||||
this.state.product.isRecharge ? null : (
|
||||
<Row style={{marginTop: "20px"}} >
|
||||
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
|
||||
{Setting.getLabel(i18next.t("product:Price"), i18next.t("product:Price - Tooltip"))} :
|
||||
</Col>
|
||||
<Col span={22} >
|
||||
<InputNumber value={this.state.product.price} disabled={isCreatedByPlan} onChange={value => {
|
||||
this.updateProductField("price", value);
|
||||
}} />
|
||||
</Col>
|
||||
</Row>
|
||||
)}
|
||||
<Row style={{marginTop: "20px"}} >
|
||||
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
|
||||
{Setting.getLabel(i18next.t("product:Quantity"), i18next.t("product:Quantity - Tooltip"))} :
|
||||
|
@@ -38,6 +38,7 @@ class ProductListPage extends BaseListPage {
|
||||
price: 300,
|
||||
quantity: 99,
|
||||
sold: 10,
|
||||
isRecharge: false,
|
||||
providers: [],
|
||||
state: "Published",
|
||||
};
|
||||
|
@@ -209,8 +209,6 @@ class ProviderEditPage extends React.Component {
|
||||
return Setting.getLabel(i18next.t("provider:Public key"), i18next.t("provider:Public key - Tooltip"));
|
||||
} else if (provider.type === "Msg91 SMS" || provider.type === "Infobip SMS" || provider.type === "OSON SMS") {
|
||||
return Setting.getLabel(i18next.t("provider:Sender Id"), i18next.t("provider:Sender Id - Tooltip"));
|
||||
} else if (provider.type === "SendCloud SMS") {
|
||||
return "SMS_USER";
|
||||
} else {
|
||||
return Setting.getLabel(i18next.t("provider:Client ID"), i18next.t("provider:Client ID - Tooltip"));
|
||||
}
|
||||
@@ -262,8 +260,6 @@ class ProviderEditPage extends React.Component {
|
||||
return Setting.getLabel(i18next.t("provider:Auth Key"), i18next.t("provider:Auth Key - Tooltip"));
|
||||
} else if (provider.type === "Infobip SMS") {
|
||||
return Setting.getLabel(i18next.t("provider:Api Key"), i18next.t("provider:Api Key - Tooltip"));
|
||||
} else if (provider.type === "SendCloud SMS") {
|
||||
return "SMS_KEY";
|
||||
} else {
|
||||
return Setting.getLabel(i18next.t("provider:Client secret"), i18next.t("provider:Client secret - Tooltip"));
|
||||
}
|
||||
@@ -1107,7 +1103,7 @@ class ProviderEditPage extends React.Component {
|
||||
</React.Fragment>
|
||||
) : this.state.provider.category === "SMS" ? (
|
||||
<React.Fragment>
|
||||
{["Custom HTTP SMS", "Twilio SMS", "Amazon SNS", "Azure ACS", "Msg91 SMS", "Infobip SMS", "SendCloud SMS"].includes(this.state.provider.type) ?
|
||||
{["Custom HTTP SMS", "Twilio SMS", "Amazon SNS", "Azure ACS", "Msg91 SMS", "Infobip SMS"].includes(this.state.provider.type) ?
|
||||
null :
|
||||
(<Row style={{marginTop: "20px"}} >
|
||||
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
|
||||
|
@@ -139,10 +139,6 @@ export const OtherProviderInfo = {
|
||||
logo: `${StaticBaseUrl}/img/social_twilio.svg`,
|
||||
url: "https://www.twilio.com/messaging",
|
||||
},
|
||||
"SendCloud SMS": {
|
||||
logo: `${StaticBaseUrl}/img/sms_sendcloud.png`,
|
||||
url: "https://www.sendcloud.net/",
|
||||
},
|
||||
"SmsBao SMS": {
|
||||
logo: `${StaticBaseUrl}/img/social_smsbao.png`,
|
||||
url: "https://www.smsbao.com/",
|
||||
@@ -1043,7 +1039,6 @@ export function getProviderTypeOptions(category) {
|
||||
{id: "Huawei Cloud SMS", name: "Huawei Cloud SMS"},
|
||||
{id: "UCloud SMS", name: "UCloud SMS"},
|
||||
{id: "Twilio SMS", name: "Twilio SMS"},
|
||||
{id: "SendCloud SMS", name: "SendCloud SMS"},
|
||||
{id: "SmsBao SMS", name: "SmsBao SMS"},
|
||||
{id: "SUBMAIL SMS", name: "SUBMAIL SMS"},
|
||||
{id: "Msg91 SMS", name: "Msg91 SMS"},
|
||||
@@ -1468,7 +1463,7 @@ export function getUserCommonFields() {
|
||||
return ["Owner", "Name", "CreatedTime", "UpdatedTime", "DeletedTime", "Id", "Type", "Password", "PasswordSalt", "DisplayName", "FirstName", "LastName", "Avatar", "PermanentAvatar",
|
||||
"Email", "EmailVerified", "Phone", "Location", "Address", "Affiliation", "Title", "IdCardType", "IdCard", "Homepage", "Bio", "Tag", "Region",
|
||||
"Language", "Gender", "Birthday", "Education", "Score", "Ranking", "IsDefaultAvatar", "IsOnline", "IsAdmin", "IsForbidden", "IsDeleted", "CreatedIp",
|
||||
"PreferredMfaType", "TotpSecret", "SignupApplication"];
|
||||
"PreferredMfaType", "TotpSecret", "SignupApplication", "RecoveryCodes", "MfaPhoneEnabled", "MfaEmailEnabled"];
|
||||
}
|
||||
|
||||
export function getDefaultFooterContent() {
|
||||
@@ -1521,3 +1516,13 @@ export function getDefaultHtmlEmailContent() {
|
||||
</body>
|
||||
</html>`;
|
||||
}
|
||||
|
||||
export function getCurrencyText(product) {
|
||||
if (product?.currency === "USD") {
|
||||
return i18next.t("product:USD");
|
||||
} else if (product?.currency === "CNY") {
|
||||
return i18next.t("product:CNY");
|
||||
} else {
|
||||
return "(Unknown currency)";
|
||||
}
|
||||
}
|
||||
|
@@ -707,6 +707,19 @@ class UserEditPage extends React.Component {
|
||||
</Col>
|
||||
</Row>
|
||||
);
|
||||
} else if (accountItem.name === "Balance") {
|
||||
return (
|
||||
<Row style={{marginTop: "20px"}} >
|
||||
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
|
||||
{Setting.getLabel(i18next.t("user:Balance"), i18next.t("user:Balance - Tooltip"))} :
|
||||
</Col>
|
||||
<Col span={22} >
|
||||
<InputNumber value={this.state.user.balance} onChange={value => {
|
||||
this.updateUserField("balance", value);
|
||||
}} />
|
||||
</Col>
|
||||
</Row>
|
||||
);
|
||||
} else if (accountItem.name === "Score") {
|
||||
return (
|
||||
<Row style={{marginTop: "20px"}} >
|
||||
@@ -1026,6 +1039,19 @@ class UserEditPage extends React.Component {
|
||||
</Col>
|
||||
</Row>
|
||||
);
|
||||
} else if (accountItem.name === "Need update password") {
|
||||
return (
|
||||
<Row style={{marginTop: "20px"}} >
|
||||
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
|
||||
{Setting.getLabel(i18next.t("user:Need update password"), i18next.t("user:Need update password - Tooltip"))} :
|
||||
</Col>
|
||||
<Col span={(Setting.isMobile()) ? 22 : 2} >
|
||||
<Switch disabled={(!this.state.user.phone) && (!this.state.user.email) && (!this.state.user.mfaProps)} checked={this.state.user.needUpdatePassword} onChange={checked => {
|
||||
this.updateUserField("needUpdatePassword", checked);
|
||||
}} />
|
||||
</Col>
|
||||
</Row>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -153,21 +153,37 @@ class AuthCallback extends React.Component {
|
||||
// OAuth
|
||||
const oAuthParams = Util.getOAuthGetParameters(innerParams);
|
||||
const concatChar = oAuthParams?.redirectUri?.includes("?") ? "&" : "?";
|
||||
const signinUrl = localStorage.getItem("signinUrl");
|
||||
|
||||
AuthBackend.login(body, oAuthParams)
|
||||
.then((res) => {
|
||||
if (res.status === "ok") {
|
||||
const responseType = this.getResponseType();
|
||||
if (responseType === "login") {
|
||||
if (res.data2) {
|
||||
sessionStorage.setItem("signinUrl", signinUrl);
|
||||
Setting.goToLinkSoft(this, `/forget/${applicationName}`);
|
||||
return;
|
||||
}
|
||||
Setting.showMessage("success", "Logged in successfully");
|
||||
// Setting.goToLinkSoft(this, "/");
|
||||
|
||||
const link = Setting.getFromLink();
|
||||
Setting.goToLink(link);
|
||||
} else if (responseType === "code") {
|
||||
if (res.data2) {
|
||||
sessionStorage.setItem("signinUrl", signinUrl);
|
||||
Setting.goToLinkSoft(this, `/forget/${applicationName}`);
|
||||
return;
|
||||
}
|
||||
const code = res.data;
|
||||
Setting.goToLink(`${oAuthParams.redirectUri}${concatChar}code=${code}&state=${oAuthParams.state}`);
|
||||
// Setting.showMessage("success", `Authorization code: ${res.data}`);
|
||||
} else if (responseType === "token" || responseType === "id_token") {
|
||||
if (res.data2) {
|
||||
sessionStorage.setItem("signinUrl", signinUrl);
|
||||
Setting.goToLinkSoft(this, `/forget/${applicationName}`);
|
||||
return;
|
||||
}
|
||||
const token = res.data;
|
||||
Setting.goToLink(`${oAuthParams.redirectUri}${concatChar}${responseType}=${token}&state=${oAuthParams.state}&token_type=bearer`);
|
||||
} else if (responseType === "link") {
|
||||
@@ -181,6 +197,11 @@ class AuthCallback extends React.Component {
|
||||
relayState: oAuthParams.relayState,
|
||||
});
|
||||
} else {
|
||||
if (res.data2.needUpdatePassword) {
|
||||
sessionStorage.setItem("signinUrl", signinUrl);
|
||||
Setting.goToLinkSoft(this, `/forget/${applicationName}`);
|
||||
return;
|
||||
}
|
||||
const SAMLResponse = res.data;
|
||||
const redirectUri = res.data2.redirectUrl;
|
||||
Setting.goToLink(`${redirectUri}?SAMLResponse=${encodeURIComponent(SAMLResponse)}&RelayState=${oAuthParams.relayState}`);
|
||||
|
@@ -35,8 +35,8 @@ class ForgetPage extends React.Component {
|
||||
classes: props,
|
||||
applicationName: props.applicationName ?? props.match.params?.applicationName,
|
||||
msg: null,
|
||||
name: "",
|
||||
username: "",
|
||||
name: props.account ? props.account.name : "",
|
||||
username: props.account ? props.account.name : "",
|
||||
phone: "",
|
||||
email: "",
|
||||
dest: "",
|
||||
@@ -44,7 +44,6 @@ class ForgetPage extends React.Component {
|
||||
verifyType: "", // "email", "phone"
|
||||
current: 0,
|
||||
};
|
||||
|
||||
this.form = React.createRef();
|
||||
}
|
||||
|
||||
@@ -205,6 +204,7 @@ class ForgetPage extends React.Component {
|
||||
initialValues={{
|
||||
application: application.name,
|
||||
organization: application.organization,
|
||||
username: this.state.name,
|
||||
}}
|
||||
style={{width: "300px"}}
|
||||
size="large"
|
||||
@@ -488,7 +488,7 @@ class ForgetPage extends React.Component {
|
||||
<Row>
|
||||
<Col span={24}>
|
||||
<div style={{textAlign: "center", fontSize: "28px"}}>
|
||||
{i18next.t("forget:Retrieve password")}
|
||||
{i18next.t("forget:Reset password")}
|
||||
</div>
|
||||
</Col>
|
||||
</Row>
|
||||
|
@@ -68,6 +68,8 @@ class LoginPage extends React.Component {
|
||||
this.state.applicationName = props.match?.params?.casApplicationName;
|
||||
}
|
||||
|
||||
localStorage.setItem("signinUrl", window.location.href);
|
||||
|
||||
this.form = React.createRef();
|
||||
}
|
||||
|
||||
@@ -300,6 +302,12 @@ class LoginPage extends React.Component {
|
||||
return;
|
||||
}
|
||||
|
||||
if (resp.data2) {
|
||||
sessionStorage.setItem("signinUrl", window.location.href);
|
||||
Setting.goToLinkSoft(ths, `/forget/${application.name}`);
|
||||
return;
|
||||
}
|
||||
|
||||
if (Setting.hasPromptPage(application)) {
|
||||
AuthBackend.getAccount()
|
||||
.then((res) => {
|
||||
@@ -442,15 +450,27 @@ class LoginPage extends React.Component {
|
||||
const responseType = values["type"];
|
||||
|
||||
if (responseType === "login") {
|
||||
if (res.data2) {
|
||||
sessionStorage.setItem("signinUrl", window.location.href);
|
||||
Setting.goToLink(this, `/forget/${this.state.applicationName}`);
|
||||
}
|
||||
Setting.showMessage("success", i18next.t("application:Logged in successfully"));
|
||||
this.props.onLoginSuccess();
|
||||
} else if (responseType === "code") {
|
||||
this.postCodeLoginAction(res);
|
||||
} else if (responseType === "token" || responseType === "id_token") {
|
||||
if (res.data2) {
|
||||
sessionStorage.setItem("signinUrl", window.location.href);
|
||||
Setting.goToLink(this, `/forget/${this.state.applicationName}`);
|
||||
}
|
||||
const amendatoryResponseType = responseType === "token" ? "access_token" : responseType;
|
||||
const accessToken = res.data;
|
||||
Setting.goToLink(`${oAuthParams.redirectUri}#${amendatoryResponseType}=${accessToken}&state=${oAuthParams.state}&token_type=bearer`);
|
||||
} else if (responseType === "saml") {
|
||||
if (res.data2.needUpdatePassword) {
|
||||
sessionStorage.setItem("signinUrl", window.location.href);
|
||||
Setting.goToLink(this, `/forget/${this.state.applicationName}`);
|
||||
}
|
||||
if (res.data2.method === "POST") {
|
||||
this.setState({
|
||||
samlResponse: res.data,
|
||||
|
@@ -399,7 +399,7 @@ export function getAuthUrl(application, provider, method, code) {
|
||||
scope += "+https://www.googleapis.com/auth/user.phonenumbers.read";
|
||||
}
|
||||
|
||||
if (provider.type === "Google" || provider.type === "GitHub" || provider.type === "QQ" || provider.type === "Facebook"
|
||||
if (provider.type === "Google" || provider.type === "GitHub" || provider.type === "Facebook"
|
||||
|| provider.type === "Weibo" || provider.type === "Gitee" || provider.type === "LinkedIn" || provider.type === "GitLab" || provider.type === "AzureAD"
|
||||
|| provider.type === "Slack" || provider.type === "Line" || provider.type === "Amazon" || provider.type === "Auth0" || provider.type === "BattleNet"
|
||||
|| provider.type === "Bitbucket" || provider.type === "Box" || provider.type === "CloudFoundry" || provider.type === "Dailymotion"
|
||||
@@ -411,6 +411,8 @@ export function getAuthUrl(application, provider, method, code) {
|
||||
|| provider.type === "Twitch" || provider.type === "Typetalk" || provider.type === "Uber" || provider.type === "VK" || provider.type === "Wepay"
|
||||
|| provider.type === "Xero" || provider.type === "Yahoo" || provider.type === "Yammer" || provider.type === "Yandex" || provider.type === "Zoom") {
|
||||
return `${endpoint}?client_id=${provider.clientId}&redirect_uri=${redirectUri}&scope=${scope}&response_type=code&state=${state}`;
|
||||
} else if (provider.type === "QQ") {
|
||||
return `${endpoint}?response_type=code&client_id=${provider.clientId}&redirect_uri=${encodeURIComponent(redirectUri)}&state=${encodeURIComponent(state)}&scope=${encodeURIComponent(scope)}`;
|
||||
} else if (provider.type === "AzureADB2C") {
|
||||
return `https://${provider.domain}.b2clogin.com/${provider.domain}.onmicrosoft.com/${provider.appId}/oauth2/v2.0/authorize?client_id=${provider.clientId}&nonce=defaultNonce&redirect_uri=${encodeURIComponent(redirectUri)}&scope=${scope}&response_type=code&state=${state}&prompt=login`;
|
||||
} else if (provider.type === "DingTalk") {
|
||||
|
@@ -70,8 +70,8 @@ export function deleteProduct(product) {
|
||||
}).then(res => res.json());
|
||||
}
|
||||
|
||||
export function buyProduct(owner, name, providerName, pricingName = "", planName = "", userName = "", paymentEnv = "") {
|
||||
return fetch(`${Setting.ServerUrl}/api/buy-product?id=${owner}/${encodeURIComponent(name)}&providerName=${providerName}&pricingName=${pricingName}&planName=${planName}&userName=${userName}&paymentEnv=${paymentEnv}`, {
|
||||
export function buyProduct(owner, name, providerName, pricingName = "", planName = "", userName = "", paymentEnv = "", customPrice = 0) {
|
||||
return fetch(`${Setting.ServerUrl}/api/buy-product?id=${owner}/${encodeURIComponent(name)}&providerName=${providerName}&pricingName=${pricingName}&planName=${planName}&userName=${userName}&paymentEnv=${paymentEnv}&customPrice=${customPrice}`, {
|
||||
method: "POST",
|
||||
credentials: "include",
|
||||
headers: {
|
||||
|
@@ -50,6 +50,7 @@ function testEmailProvider(provider, email = "") {
|
||||
sender: provider.displayName,
|
||||
receivers: email === "" ? ["TestSmtpServer"] : [email],
|
||||
provider: provider.name,
|
||||
providerObject: provider,
|
||||
};
|
||||
|
||||
return fetch(`${Setting.ServerUrl}/api/send-email`, {
|
||||
|
@@ -166,7 +166,7 @@
|
||||
"Next Step": "Next Step",
|
||||
"Please input your username!": "Please input your username!",
|
||||
"Reset": "Reset",
|
||||
"Retrieve password": "Retrieve password",
|
||||
"Reset password": "Reset password",
|
||||
"Unknown forget type": "Unknown forget type",
|
||||
"Verify": "Verify"
|
||||
},
|
||||
@@ -619,6 +619,7 @@
|
||||
"Processing...": "Processing...",
|
||||
"Product": "Product",
|
||||
"Product - Tooltip": "Product Name",
|
||||
"Recharged successfully": "Recharged successfully",
|
||||
"Result": "Result",
|
||||
"Return to Website": "Return to Website",
|
||||
"The payment has been canceled": "The payment has been canceled",
|
||||
@@ -627,6 +628,8 @@
|
||||
"The payment is still under processing": "The payment is still under processing",
|
||||
"Type - Tooltip": "Payment method used when purchasing the product",
|
||||
"You have successfully completed the payment": "You have successfully completed the payment",
|
||||
"You have successfully recharged": "You have successfully recharged",
|
||||
"Your current balance is": "Your current balance is",
|
||||
"please wait for a few seconds...": "please wait for a few seconds...",
|
||||
"the current state is": "the current state is"
|
||||
},
|
||||
@@ -689,6 +692,8 @@
|
||||
"Edit Product": "Edit Product",
|
||||
"Image": "Image",
|
||||
"Image - Tooltip": "Image of product",
|
||||
"Is recharge": "Is recharge",
|
||||
"Is recharge - Tooltip": "Whether the current product is to recharge balance",
|
||||
"New Product": "New Product",
|
||||
"Pay": "Pay",
|
||||
"PayPal": "PayPal",
|
||||
@@ -1080,6 +1085,8 @@
|
||||
"Address line": "Address line",
|
||||
"Affiliation": "Affiliation",
|
||||
"Affiliation - Tooltip": "Employer, such as company name or organization name",
|
||||
"Balance": "Balance",
|
||||
"Balance - Tooltip": "User's balance",
|
||||
"Bio": "Bio",
|
||||
"Bio - Tooltip": "Self introduction of the user",
|
||||
"Birthday": "Birthday",
|
||||
@@ -1130,6 +1137,8 @@
|
||||
"Managed accounts": "Managed accounts",
|
||||
"Modify password...": "Modify password...",
|
||||
"Multi-factor authentication": "Multi-factor authentication",
|
||||
"Need update password": "Need update password",
|
||||
"Need update password - Tooltip": "Force user update password after login",
|
||||
"New Email": "New Email",
|
||||
"New Password": "New Password",
|
||||
"New User": "New User",
|
||||
|
@@ -166,7 +166,7 @@
|
||||
"Next Step": "Nächster Schritt",
|
||||
"Please input your username!": "Bitte gib deinen Benutzernamen ein!",
|
||||
"Reset": "Zurücksetzen",
|
||||
"Retrieve password": "Passwort abrufen",
|
||||
"Reset password": "Passwort abrufen",
|
||||
"Unknown forget type": "Unbekannter Vergesslichkeitstyp",
|
||||
"Verify": "überprüfen"
|
||||
},
|
||||
@@ -619,6 +619,7 @@
|
||||
"Processing...": "In Bearbeitung...",
|
||||
"Product": "Produkt",
|
||||
"Product - Tooltip": "Produktname",
|
||||
"Recharged successfully": "Recharged successfully",
|
||||
"Result": "Ergebnis",
|
||||
"Return to Website": "Zurück zur Website",
|
||||
"The payment has been canceled": "The payment has been canceled",
|
||||
@@ -627,6 +628,8 @@
|
||||
"The payment is still under processing": "Die Zahlung wird immer noch bearbeitet",
|
||||
"Type - Tooltip": "Zahlungsmethode, die beim Kauf des Produkts verwendet wurde",
|
||||
"You have successfully completed the payment": "Sie haben die Zahlung erfolgreich abgeschlossen",
|
||||
"You have successfully recharged": "You have successfully recharged",
|
||||
"Your current balance is": "Your current balance is",
|
||||
"please wait for a few seconds...": "Bitte warten Sie ein paar Sekunden...",
|
||||
"the current state is": "der aktuelle Zustand ist"
|
||||
},
|
||||
@@ -689,6 +692,8 @@
|
||||
"Edit Product": "Produkt bearbeiten",
|
||||
"Image": "Bild",
|
||||
"Image - Tooltip": "Bild des Produkts",
|
||||
"Is recharge": "Is recharge",
|
||||
"Is recharge - Tooltip": "Whether the current product is to recharge balance",
|
||||
"New Product": "Neues Produkt",
|
||||
"Pay": "Zahlen",
|
||||
"PayPal": "PayPal",
|
||||
@@ -1080,6 +1085,8 @@
|
||||
"Address line": "Address line",
|
||||
"Affiliation": "Zugehörigkeit",
|
||||
"Affiliation - Tooltip": "Arbeitgeber, wie Firmenname oder Organisationsname",
|
||||
"Balance": "Balance",
|
||||
"Balance - Tooltip": "User's balance",
|
||||
"Bio": "Bio",
|
||||
"Bio - Tooltip": "Selbstvorstellung des Nutzers",
|
||||
"Birthday": "Birthday",
|
||||
@@ -1130,6 +1137,8 @@
|
||||
"Managed accounts": "Verwaltete Konten",
|
||||
"Modify password...": "Passwort ändern...",
|
||||
"Multi-factor authentication": "Multi-factor authentication",
|
||||
"Need update password": "Need update password",
|
||||
"Need update password - Tooltip": "Force user update password after login",
|
||||
"New Email": "Neue E-Mail",
|
||||
"New Password": "Neues Passwort",
|
||||
"New User": "Neuer Benutzer",
|
||||
|
@@ -166,7 +166,7 @@
|
||||
"Next Step": "Next Step",
|
||||
"Please input your username!": "Please input your username!",
|
||||
"Reset": "Reset",
|
||||
"Retrieve password": "Retrieve password",
|
||||
"Reset password": "Reset password",
|
||||
"Unknown forget type": "Unknown forget type",
|
||||
"Verify": "Verify"
|
||||
},
|
||||
@@ -619,6 +619,7 @@
|
||||
"Processing...": "Processing...",
|
||||
"Product": "Product",
|
||||
"Product - Tooltip": "Product Name",
|
||||
"Recharged successfully": "Recharged successfully",
|
||||
"Result": "Result",
|
||||
"Return to Website": "Return to Website",
|
||||
"The payment has been canceled": "The payment has been canceled",
|
||||
@@ -627,6 +628,8 @@
|
||||
"The payment is still under processing": "The payment is still under processing",
|
||||
"Type - Tooltip": "Payment method used when purchasing the product",
|
||||
"You have successfully completed the payment": "You have successfully completed the payment",
|
||||
"You have successfully recharged": "You have successfully recharged",
|
||||
"Your current balance is": "Your current balance is",
|
||||
"please wait for a few seconds...": "please wait for a few seconds...",
|
||||
"the current state is": "the current state is"
|
||||
},
|
||||
@@ -689,6 +692,8 @@
|
||||
"Edit Product": "Edit Product",
|
||||
"Image": "Image",
|
||||
"Image - Tooltip": "Image of product",
|
||||
"Is recharge": "Is recharge",
|
||||
"Is recharge - Tooltip": "Whether the current product is to recharge balance",
|
||||
"New Product": "New Product",
|
||||
"Pay": "Pay",
|
||||
"PayPal": "PayPal",
|
||||
@@ -1080,6 +1085,8 @@
|
||||
"Address line": "Address line",
|
||||
"Affiliation": "Affiliation",
|
||||
"Affiliation - Tooltip": "Employer, such as company name or organization name",
|
||||
"Balance": "Balance",
|
||||
"Balance - Tooltip": "User's balance",
|
||||
"Bio": "Bio",
|
||||
"Bio - Tooltip": "Self introduction of the user",
|
||||
"Birthday": "Birthday",
|
||||
@@ -1130,6 +1137,8 @@
|
||||
"Managed accounts": "Managed accounts",
|
||||
"Modify password...": "Modify password...",
|
||||
"Multi-factor authentication": "Multi-factor authentication",
|
||||
"Need update password": "Need update password",
|
||||
"Need update password - Tooltip": "Force user update password after login",
|
||||
"New Email": "New Email",
|
||||
"New Password": "New Password",
|
||||
"New User": "New User",
|
||||
|
@@ -166,7 +166,7 @@
|
||||
"Next Step": "Siguiente paso",
|
||||
"Please input your username!": "¡Por favor, ingrese su nombre de usuario!",
|
||||
"Reset": "Restablecer",
|
||||
"Retrieve password": "Recuperar contraseña",
|
||||
"Reset password": "Reset password",
|
||||
"Unknown forget type": "Tipo de olvido desconocido",
|
||||
"Verify": "Verificar"
|
||||
},
|
||||
@@ -619,6 +619,7 @@
|
||||
"Processing...": "Procesando...",
|
||||
"Product": "Producto",
|
||||
"Product - Tooltip": "Nombre del producto",
|
||||
"Recharged successfully": "Recharged successfully",
|
||||
"Result": "Resultado",
|
||||
"Return to Website": "Regresar al sitio web",
|
||||
"The payment has been canceled": "The payment has been canceled",
|
||||
@@ -627,6 +628,8 @@
|
||||
"The payment is still under processing": "El pago aún está en proceso",
|
||||
"Type - Tooltip": "Método de pago utilizado al comprar el producto",
|
||||
"You have successfully completed the payment": "Has completado el pago exitosamente",
|
||||
"You have successfully recharged": "You have successfully recharged",
|
||||
"Your current balance is": "Your current balance is",
|
||||
"please wait for a few seconds...": "Por favor espera unos segundos...",
|
||||
"the current state is": "el estado actual es"
|
||||
},
|
||||
@@ -689,6 +692,8 @@
|
||||
"Edit Product": "Editar Producto",
|
||||
"Image": "Imagen",
|
||||
"Image - Tooltip": "Imagen del producto",
|
||||
"Is recharge": "Is recharge",
|
||||
"Is recharge - Tooltip": "Whether the current product is to recharge balance",
|
||||
"New Product": "Nuevo producto",
|
||||
"Pay": "Pagar",
|
||||
"PayPal": "PayPal",
|
||||
@@ -1080,6 +1085,8 @@
|
||||
"Address line": "Address line",
|
||||
"Affiliation": "Afiliación",
|
||||
"Affiliation - Tooltip": "Empleador, como el nombre de una empresa u organización",
|
||||
"Balance": "Balance",
|
||||
"Balance - Tooltip": "User's balance",
|
||||
"Bio": "Bio - Biografía",
|
||||
"Bio - Tooltip": "Introducción personal del usuario",
|
||||
"Birthday": "Birthday",
|
||||
@@ -1130,6 +1137,8 @@
|
||||
"Managed accounts": "Cuentas gestionadas",
|
||||
"Modify password...": "Modificar contraseña...",
|
||||
"Multi-factor authentication": "Multi-factor authentication",
|
||||
"Need update password": "Need update password",
|
||||
"Need update password - Tooltip": "Force user update password after login",
|
||||
"New Email": "Nuevo correo electrónico",
|
||||
"New Password": "Nueva contraseña",
|
||||
"New User": "Nuevo Usuario",
|
||||
|
@@ -166,7 +166,7 @@
|
||||
"Next Step": "Next Step",
|
||||
"Please input your username!": "Please input your username!",
|
||||
"Reset": "Reset",
|
||||
"Retrieve password": "Retrieve password",
|
||||
"Reset password": "Reset password",
|
||||
"Unknown forget type": "Unknown forget type",
|
||||
"Verify": "Verify"
|
||||
},
|
||||
@@ -619,6 +619,7 @@
|
||||
"Processing...": "Processing...",
|
||||
"Product": "Product",
|
||||
"Product - Tooltip": "Product Name",
|
||||
"Recharged successfully": "Recharged successfully",
|
||||
"Result": "Result",
|
||||
"Return to Website": "Return to Website",
|
||||
"The payment has been canceled": "The payment has been canceled",
|
||||
@@ -627,6 +628,8 @@
|
||||
"The payment is still under processing": "The payment is still under processing",
|
||||
"Type - Tooltip": "Payment method used when purchasing the product",
|
||||
"You have successfully completed the payment": "You have successfully completed the payment",
|
||||
"You have successfully recharged": "You have successfully recharged",
|
||||
"Your current balance is": "Your current balance is",
|
||||
"please wait for a few seconds...": "please wait for a few seconds...",
|
||||
"the current state is": "the current state is"
|
||||
},
|
||||
@@ -689,6 +692,8 @@
|
||||
"Edit Product": "Edit Product",
|
||||
"Image": "Image",
|
||||
"Image - Tooltip": "Image of product",
|
||||
"Is recharge": "Is recharge",
|
||||
"Is recharge - Tooltip": "Whether the current product is to recharge balance",
|
||||
"New Product": "New Product",
|
||||
"Pay": "Pay",
|
||||
"PayPal": "PayPal",
|
||||
@@ -1080,6 +1085,8 @@
|
||||
"Address line": "Address line",
|
||||
"Affiliation": "Affiliation",
|
||||
"Affiliation - Tooltip": "Employer, such as company name or organization name",
|
||||
"Balance": "Balance",
|
||||
"Balance - Tooltip": "User's balance",
|
||||
"Bio": "Bio",
|
||||
"Bio - Tooltip": "Self introduction of the user",
|
||||
"Birthday": "Birthday",
|
||||
@@ -1130,6 +1137,8 @@
|
||||
"Managed accounts": "Managed accounts",
|
||||
"Modify password...": "Modify password...",
|
||||
"Multi-factor authentication": "Multi-factor authentication",
|
||||
"Need update password": "Need update password",
|
||||
"Need update password - Tooltip": "Force user update password after login",
|
||||
"New Email": "New Email",
|
||||
"New Password": "New Password",
|
||||
"New User": "New User",
|
||||
|
@@ -166,7 +166,7 @@
|
||||
"Next Step": "Next Step",
|
||||
"Please input your username!": "Please input your username!",
|
||||
"Reset": "Reset",
|
||||
"Retrieve password": "Retrieve password",
|
||||
"Reset password": "Reset password",
|
||||
"Unknown forget type": "Unknown forget type",
|
||||
"Verify": "Verify"
|
||||
},
|
||||
@@ -619,6 +619,7 @@
|
||||
"Processing...": "Processing...",
|
||||
"Product": "Product",
|
||||
"Product - Tooltip": "Product Name",
|
||||
"Recharged successfully": "Recharged successfully",
|
||||
"Result": "Result",
|
||||
"Return to Website": "Return to Website",
|
||||
"The payment has been canceled": "The payment has been canceled",
|
||||
@@ -627,6 +628,8 @@
|
||||
"The payment is still under processing": "The payment is still under processing",
|
||||
"Type - Tooltip": "Payment method used when purchasing the product",
|
||||
"You have successfully completed the payment": "You have successfully completed the payment",
|
||||
"You have successfully recharged": "You have successfully recharged",
|
||||
"Your current balance is": "Your current balance is",
|
||||
"please wait for a few seconds...": "please wait for a few seconds...",
|
||||
"the current state is": "the current state is"
|
||||
},
|
||||
@@ -689,6 +692,8 @@
|
||||
"Edit Product": "Edit Product",
|
||||
"Image": "Image",
|
||||
"Image - Tooltip": "Image of product",
|
||||
"Is recharge": "Is recharge",
|
||||
"Is recharge - Tooltip": "Whether the current product is to recharge balance",
|
||||
"New Product": "New Product",
|
||||
"Pay": "Pay",
|
||||
"PayPal": "PayPal",
|
||||
@@ -1080,6 +1085,8 @@
|
||||
"Address line": "Address line",
|
||||
"Affiliation": "Affiliation",
|
||||
"Affiliation - Tooltip": "Employer, such as company name or organization name",
|
||||
"Balance": "Balance",
|
||||
"Balance - Tooltip": "User's balance",
|
||||
"Bio": "Bio",
|
||||
"Bio - Tooltip": "Self introduction of the user",
|
||||
"Birthday": "Birthday",
|
||||
@@ -1130,6 +1137,8 @@
|
||||
"Managed accounts": "Managed accounts",
|
||||
"Modify password...": "Modify password...",
|
||||
"Multi-factor authentication": "Multi-factor authentication",
|
||||
"Need update password": "Need update password",
|
||||
"Need update password - Tooltip": "Force user update password after login",
|
||||
"New Email": "New Email",
|
||||
"New Password": "New Password",
|
||||
"New User": "New User",
|
||||
|
@@ -166,7 +166,7 @@
|
||||
"Next Step": "Étape suivante",
|
||||
"Please input your username!": "Veuillez saisir votre identifiant !",
|
||||
"Reset": "Réinitialiser",
|
||||
"Retrieve password": "Récupérer le mot de passe",
|
||||
"Reset password": "Récupérer le mot de passe",
|
||||
"Unknown forget type": "Type d'oubli inconnu",
|
||||
"Verify": "Vérifier"
|
||||
},
|
||||
@@ -619,6 +619,7 @@
|
||||
"Processing...": "Traitement...",
|
||||
"Product": "Produit",
|
||||
"Product - Tooltip": "Nom du produit",
|
||||
"Recharged successfully": "Recharged successfully",
|
||||
"Result": "Résultat",
|
||||
"Return to Website": "Retourner sur le site web",
|
||||
"The payment has been canceled": "Le paiement a été annulé",
|
||||
@@ -627,6 +628,8 @@
|
||||
"The payment is still under processing": "Le paiement est encore en cours de traitement",
|
||||
"Type - Tooltip": "Méthode de paiement utilisée lors de l'achat du produit",
|
||||
"You have successfully completed the payment": "Vous avez effectué le paiement avec succès",
|
||||
"You have successfully recharged": "You have successfully recharged",
|
||||
"Your current balance is": "Your current balance is",
|
||||
"please wait for a few seconds...": "Veuillez patienter quelques secondes...",
|
||||
"the current state is": "l'état actuel est"
|
||||
},
|
||||
@@ -689,6 +692,8 @@
|
||||
"Edit Product": "Modifier le produit",
|
||||
"Image": "Image",
|
||||
"Image - Tooltip": "Image du produit",
|
||||
"Is recharge": "Is recharge",
|
||||
"Is recharge - Tooltip": "Whether the current product is to recharge balance",
|
||||
"New Product": "Nouveau produit",
|
||||
"Pay": "Payer",
|
||||
"PayPal": "PayPal",
|
||||
@@ -1080,6 +1085,8 @@
|
||||
"Address line": "Address line",
|
||||
"Affiliation": "Affiliation",
|
||||
"Affiliation - Tooltip": "Employeur, tel que le nom de l'entreprise ou de l'organisation",
|
||||
"Balance": "Balance",
|
||||
"Balance - Tooltip": "User's balance",
|
||||
"Bio": "Bio",
|
||||
"Bio - Tooltip": "Biographie du compte",
|
||||
"Birthday": "Date de naissance",
|
||||
@@ -1130,6 +1137,8 @@
|
||||
"Managed accounts": "Comptes gérés",
|
||||
"Modify password...": "Modifier le mot de passe...",
|
||||
"Multi-factor authentication": "Authentification multifacteur",
|
||||
"Need update password": "Need update password",
|
||||
"Need update password - Tooltip": "Force user update password after login",
|
||||
"New Email": "Nouvelle adresse e-mail",
|
||||
"New Password": "Nouveau mot de passe",
|
||||
"New User": "Nouveau compte",
|
||||
|
@@ -166,7 +166,7 @@
|
||||
"Next Step": "Next Step",
|
||||
"Please input your username!": "Please input your username!",
|
||||
"Reset": "Reset",
|
||||
"Retrieve password": "Retrieve password",
|
||||
"Reset password": "Reset password",
|
||||
"Unknown forget type": "Unknown forget type",
|
||||
"Verify": "Verify"
|
||||
},
|
||||
@@ -619,6 +619,7 @@
|
||||
"Processing...": "Processing...",
|
||||
"Product": "Product",
|
||||
"Product - Tooltip": "Product Name",
|
||||
"Recharged successfully": "Recharged successfully",
|
||||
"Result": "Result",
|
||||
"Return to Website": "Return to Website",
|
||||
"The payment has been canceled": "The payment has been canceled",
|
||||
@@ -627,6 +628,8 @@
|
||||
"The payment is still under processing": "The payment is still under processing",
|
||||
"Type - Tooltip": "Payment method used when purchasing the product",
|
||||
"You have successfully completed the payment": "You have successfully completed the payment",
|
||||
"You have successfully recharged": "You have successfully recharged",
|
||||
"Your current balance is": "Your current balance is",
|
||||
"please wait for a few seconds...": "please wait for a few seconds...",
|
||||
"the current state is": "the current state is"
|
||||
},
|
||||
@@ -689,6 +692,8 @@
|
||||
"Edit Product": "Edit Product",
|
||||
"Image": "Image",
|
||||
"Image - Tooltip": "Image of product",
|
||||
"Is recharge": "Is recharge",
|
||||
"Is recharge - Tooltip": "Whether the current product is to recharge balance",
|
||||
"New Product": "New Product",
|
||||
"Pay": "Pay",
|
||||
"PayPal": "PayPal",
|
||||
@@ -1080,6 +1085,8 @@
|
||||
"Address line": "Address line",
|
||||
"Affiliation": "Affiliation",
|
||||
"Affiliation - Tooltip": "Employer, such as company name or organization name",
|
||||
"Balance": "Balance",
|
||||
"Balance - Tooltip": "User's balance",
|
||||
"Bio": "Bio",
|
||||
"Bio - Tooltip": "Self introduction of the user",
|
||||
"Birthday": "Birthday",
|
||||
@@ -1130,6 +1137,8 @@
|
||||
"Managed accounts": "Managed accounts",
|
||||
"Modify password...": "Modify password...",
|
||||
"Multi-factor authentication": "Multi-factor authentication",
|
||||
"Need update password": "Need update password",
|
||||
"Need update password - Tooltip": "Force user update password after login",
|
||||
"New Email": "New Email",
|
||||
"New Password": "New Password",
|
||||
"New User": "New User",
|
||||
|
@@ -166,7 +166,7 @@
|
||||
"Next Step": "Langkah selanjutnya",
|
||||
"Please input your username!": "Silakan masukkan nama pengguna Anda!",
|
||||
"Reset": "Menyetel-ulang",
|
||||
"Retrieve password": "Mengambil password",
|
||||
"Reset password": "Mengambil password",
|
||||
"Unknown forget type": "Tipe yang tidak diketahui terlupakan",
|
||||
"Verify": "Memverifikasi"
|
||||
},
|
||||
@@ -619,6 +619,7 @@
|
||||
"Processing...": "Pemrosesan...",
|
||||
"Product": "Produk",
|
||||
"Product - Tooltip": "Nama Produk",
|
||||
"Recharged successfully": "Recharged successfully",
|
||||
"Result": "Hasil",
|
||||
"Return to Website": "Kembali ke Situs Web",
|
||||
"The payment has been canceled": "The payment has been canceled",
|
||||
@@ -627,6 +628,8 @@
|
||||
"The payment is still under processing": "Pembayaran masih dalam proses",
|
||||
"Type - Tooltip": "Metode pembayaran yang digunakan saat membeli produk",
|
||||
"You have successfully completed the payment": "Anda telah berhasil menyelesaikan pembayaran",
|
||||
"You have successfully recharged": "You have successfully recharged",
|
||||
"Your current balance is": "Your current balance is",
|
||||
"please wait for a few seconds...": "Mohon tunggu beberapa detik...",
|
||||
"the current state is": "keadaan saat ini adalah"
|
||||
},
|
||||
@@ -689,6 +692,8 @@
|
||||
"Edit Product": "Edit Produk",
|
||||
"Image": "Gambar",
|
||||
"Image - Tooltip": "Gambar produk",
|
||||
"Is recharge": "Is recharge",
|
||||
"Is recharge - Tooltip": "Whether the current product is to recharge balance",
|
||||
"New Product": "Produk Baru",
|
||||
"Pay": "Bayar",
|
||||
"PayPal": "Paypal",
|
||||
@@ -1080,6 +1085,8 @@
|
||||
"Address line": "Address line",
|
||||
"Affiliation": "Afiliasi",
|
||||
"Affiliation - Tooltip": "Pemberi Kerja, seperti nama perusahaan atau nama organisasi",
|
||||
"Balance": "Balance",
|
||||
"Balance - Tooltip": "User's balance",
|
||||
"Bio": "Bio: Biografi",
|
||||
"Bio - Tooltip": "Pengenalan diri dari pengguna",
|
||||
"Birthday": "Birthday",
|
||||
@@ -1130,6 +1137,8 @@
|
||||
"Managed accounts": "Akun yang dikelola",
|
||||
"Modify password...": "Mengubah kata sandi...",
|
||||
"Multi-factor authentication": "Multi-factor authentication",
|
||||
"Need update password": "Need update password",
|
||||
"Need update password - Tooltip": "Force user update password after login",
|
||||
"New Email": "Email baru",
|
||||
"New Password": "Kata Sandi Baru",
|
||||
"New User": "Pengguna Baru",
|
||||
|
@@ -166,7 +166,7 @@
|
||||
"Next Step": "Next Step",
|
||||
"Please input your username!": "Please input your username!",
|
||||
"Reset": "Reset",
|
||||
"Retrieve password": "Retrieve password",
|
||||
"Reset password": "Reset password",
|
||||
"Unknown forget type": "Unknown forget type",
|
||||
"Verify": "Verify"
|
||||
},
|
||||
@@ -619,6 +619,7 @@
|
||||
"Processing...": "Processing...",
|
||||
"Product": "Product",
|
||||
"Product - Tooltip": "Product Name",
|
||||
"Recharged successfully": "Recharged successfully",
|
||||
"Result": "Result",
|
||||
"Return to Website": "Return to Website",
|
||||
"The payment has been canceled": "The payment has been canceled",
|
||||
@@ -627,6 +628,8 @@
|
||||
"The payment is still under processing": "The payment is still under processing",
|
||||
"Type - Tooltip": "Payment method used when purchasing the product",
|
||||
"You have successfully completed the payment": "You have successfully completed the payment",
|
||||
"You have successfully recharged": "You have successfully recharged",
|
||||
"Your current balance is": "Your current balance is",
|
||||
"please wait for a few seconds...": "please wait for a few seconds...",
|
||||
"the current state is": "the current state is"
|
||||
},
|
||||
@@ -689,6 +692,8 @@
|
||||
"Edit Product": "Edit Product",
|
||||
"Image": "Image",
|
||||
"Image - Tooltip": "Image of product",
|
||||
"Is recharge": "Is recharge",
|
||||
"Is recharge - Tooltip": "Whether the current product is to recharge balance",
|
||||
"New Product": "New Product",
|
||||
"Pay": "Pay",
|
||||
"PayPal": "PayPal",
|
||||
@@ -1080,6 +1085,8 @@
|
||||
"Address line": "Address line",
|
||||
"Affiliation": "Affiliation",
|
||||
"Affiliation - Tooltip": "Employer, such as company name or organization name",
|
||||
"Balance": "Balance",
|
||||
"Balance - Tooltip": "User's balance",
|
||||
"Bio": "Bio",
|
||||
"Bio - Tooltip": "Self introduction of the user",
|
||||
"Birthday": "Birthday",
|
||||
@@ -1130,6 +1137,8 @@
|
||||
"Managed accounts": "Managed accounts",
|
||||
"Modify password...": "Modify password...",
|
||||
"Multi-factor authentication": "Multi-factor authentication",
|
||||
"Need update password": "Need update password",
|
||||
"Need update password - Tooltip": "Force user update password after login",
|
||||
"New Email": "New Email",
|
||||
"New Password": "New Password",
|
||||
"New User": "New User",
|
||||
|
@@ -166,7 +166,7 @@
|
||||
"Next Step": "次のステップ",
|
||||
"Please input your username!": "ユーザー名を入力してください!",
|
||||
"Reset": "リセット",
|
||||
"Retrieve password": "パスワードの取得",
|
||||
"Reset password": "パスワードの取得",
|
||||
"Unknown forget type": "未知の忘却タイプ",
|
||||
"Verify": "検証"
|
||||
},
|
||||
@@ -619,6 +619,7 @@
|
||||
"Processing...": "処理中... ",
|
||||
"Product": "製品",
|
||||
"Product - Tooltip": "製品名",
|
||||
"Recharged successfully": "Recharged successfully",
|
||||
"Result": "結果",
|
||||
"Return to Website": "ウェブサイトに戻る",
|
||||
"The payment has been canceled": "The payment has been canceled",
|
||||
@@ -627,6 +628,8 @@
|
||||
"The payment is still under processing": "支払いはまだ処理中です",
|
||||
"Type - Tooltip": "製品を購入する際に使用される支払方法",
|
||||
"You have successfully completed the payment": "あなたは支払いを正常に完了しました",
|
||||
"You have successfully recharged": "You have successfully recharged",
|
||||
"Your current balance is": "Your current balance is",
|
||||
"please wait for a few seconds...": "数秒お待ちください...",
|
||||
"the current state is": "現在の状態は"
|
||||
},
|
||||
@@ -689,6 +692,8 @@
|
||||
"Edit Product": "製品を編集",
|
||||
"Image": "画像",
|
||||
"Image - Tooltip": "製品のイメージ",
|
||||
"Is recharge": "Is recharge",
|
||||
"Is recharge - Tooltip": "Whether the current product is to recharge balance",
|
||||
"New Product": "新製品",
|
||||
"Pay": "支払う",
|
||||
"PayPal": "PayPal",
|
||||
@@ -1080,6 +1085,8 @@
|
||||
"Address line": "Address line",
|
||||
"Affiliation": "所属",
|
||||
"Affiliation - Tooltip": "企業名や団体名などの雇用主",
|
||||
"Balance": "Balance",
|
||||
"Balance - Tooltip": "User's balance",
|
||||
"Bio": "バイオ技術",
|
||||
"Bio - Tooltip": "ユーザーの自己紹介\n\n私は○○です。私は○○(国、都市、職業など)出身で、現在は○○(国、都市、職業など)に住んでいます。私は○○(趣味、特技、興味など)が好きで、空き時間にはよくそれをしています。よろしくお願いします",
|
||||
"Birthday": "Birthday",
|
||||
@@ -1130,6 +1137,8 @@
|
||||
"Managed accounts": "管理アカウント",
|
||||
"Modify password...": "パスワードを変更する...",
|
||||
"Multi-factor authentication": "Multi-factor authentication",
|
||||
"Need update password": "Need update password",
|
||||
"Need update password - Tooltip": "Force user update password after login",
|
||||
"New Email": "新しいメール",
|
||||
"New Password": "新しいパスワード",
|
||||
"New User": "新しいユーザー",
|
||||
|
@@ -166,7 +166,7 @@
|
||||
"Next Step": "Next Step",
|
||||
"Please input your username!": "Please input your username!",
|
||||
"Reset": "Reset",
|
||||
"Retrieve password": "Retrieve password",
|
||||
"Reset password": "Reset password",
|
||||
"Unknown forget type": "Unknown forget type",
|
||||
"Verify": "Verify"
|
||||
},
|
||||
@@ -619,6 +619,7 @@
|
||||
"Processing...": "Processing...",
|
||||
"Product": "Product",
|
||||
"Product - Tooltip": "Product Name",
|
||||
"Recharged successfully": "Recharged successfully",
|
||||
"Result": "Result",
|
||||
"Return to Website": "Return to Website",
|
||||
"The payment has been canceled": "The payment has been canceled",
|
||||
@@ -627,6 +628,8 @@
|
||||
"The payment is still under processing": "The payment is still under processing",
|
||||
"Type - Tooltip": "Payment method used when purchasing the product",
|
||||
"You have successfully completed the payment": "You have successfully completed the payment",
|
||||
"You have successfully recharged": "You have successfully recharged",
|
||||
"Your current balance is": "Your current balance is",
|
||||
"please wait for a few seconds...": "please wait for a few seconds...",
|
||||
"the current state is": "the current state is"
|
||||
},
|
||||
@@ -689,6 +692,8 @@
|
||||
"Edit Product": "Edit Product",
|
||||
"Image": "Image",
|
||||
"Image - Tooltip": "Image of product",
|
||||
"Is recharge": "Is recharge",
|
||||
"Is recharge - Tooltip": "Whether the current product is to recharge balance",
|
||||
"New Product": "New Product",
|
||||
"Pay": "Pay",
|
||||
"PayPal": "PayPal",
|
||||
@@ -1080,6 +1085,8 @@
|
||||
"Address line": "Address line",
|
||||
"Affiliation": "Affiliation",
|
||||
"Affiliation - Tooltip": "Employer, such as company name or organization name",
|
||||
"Balance": "Balance",
|
||||
"Balance - Tooltip": "User's balance",
|
||||
"Bio": "Bio",
|
||||
"Bio - Tooltip": "Self introduction of the user",
|
||||
"Birthday": "Birthday",
|
||||
@@ -1130,6 +1137,8 @@
|
||||
"Managed accounts": "Managed accounts",
|
||||
"Modify password...": "Modify password...",
|
||||
"Multi-factor authentication": "Multi-factor authentication",
|
||||
"Need update password": "Need update password",
|
||||
"Need update password - Tooltip": "Force user update password after login",
|
||||
"New Email": "New Email",
|
||||
"New Password": "New Password",
|
||||
"New User": "New User",
|
||||
|
@@ -166,7 +166,7 @@
|
||||
"Next Step": "다음 단계",
|
||||
"Please input your username!": "사용자 이름을 입력하세요!",
|
||||
"Reset": "리셋",
|
||||
"Retrieve password": "비밀번호를 복구하세요",
|
||||
"Reset password": "비밀번호를 복구하세요",
|
||||
"Unknown forget type": "미지의 잊혀진 유형",
|
||||
"Verify": "검증하다"
|
||||
},
|
||||
@@ -619,6 +619,7 @@
|
||||
"Processing...": "처리 중...",
|
||||
"Product": "제품",
|
||||
"Product - Tooltip": "제품 이름",
|
||||
"Recharged successfully": "Recharged successfully",
|
||||
"Result": "결과",
|
||||
"Return to Website": "웹 사이트로 돌아가기",
|
||||
"The payment has been canceled": "The payment has been canceled",
|
||||
@@ -627,6 +628,8 @@
|
||||
"The payment is still under processing": "지불은 아직 처리 중입니다",
|
||||
"Type - Tooltip": "제품을 구매할 때 사용되는 결제 방법",
|
||||
"You have successfully completed the payment": "당신은 결제를 성공적으로 완료하셨습니다",
|
||||
"You have successfully recharged": "You have successfully recharged",
|
||||
"Your current balance is": "Your current balance is",
|
||||
"please wait for a few seconds...": "잠시만 기다려주세요...",
|
||||
"the current state is": "현재 상태입니다"
|
||||
},
|
||||
@@ -689,6 +692,8 @@
|
||||
"Edit Product": "제품 편집",
|
||||
"Image": "이미지",
|
||||
"Image - Tooltip": "제품 이미지",
|
||||
"Is recharge": "Is recharge",
|
||||
"Is recharge - Tooltip": "Whether the current product is to recharge balance",
|
||||
"New Product": "새로운 제품",
|
||||
"Pay": "결제하다",
|
||||
"PayPal": "페이팔",
|
||||
@@ -1080,6 +1085,8 @@
|
||||
"Address line": "Address line",
|
||||
"Affiliation": "소속",
|
||||
"Affiliation - Tooltip": "고용주, 회사명 또는 조직명",
|
||||
"Balance": "Balance",
|
||||
"Balance - Tooltip": "User's balance",
|
||||
"Bio": "바이오",
|
||||
"Bio - Tooltip": "사용자의 자기소개\n\n안녕하세요, 저는 [이름]입니다. 한국을 포함한 여러 나라에서 살아본 적이 있습니다. 저는 [직업/전공]을 공부하고 있으며 [취미/관심사]에 대해 깊게 알고 있습니다. 이 채팅 서비스를 사용하여 새로운 사람들과 함께 대화를 나누기를 원합니다. 감사합니다",
|
||||
"Birthday": "Birthday",
|
||||
@@ -1130,6 +1137,8 @@
|
||||
"Managed accounts": "관리 계정",
|
||||
"Modify password...": "비밀번호 수정하기...",
|
||||
"Multi-factor authentication": "Multi-factor authentication",
|
||||
"Need update password": "Need update password",
|
||||
"Need update password - Tooltip": "Force user update password after login",
|
||||
"New Email": "새 이메일",
|
||||
"New Password": "새로운 비밀번호",
|
||||
"New User": "새로운 사용자",
|
||||
|
@@ -166,7 +166,7 @@
|
||||
"Next Step": "Next Step",
|
||||
"Please input your username!": "Please input your username!",
|
||||
"Reset": "Reset",
|
||||
"Retrieve password": "Retrieve password",
|
||||
"Reset password": "Reset password",
|
||||
"Unknown forget type": "Unknown forget type",
|
||||
"Verify": "Verify"
|
||||
},
|
||||
@@ -619,6 +619,7 @@
|
||||
"Processing...": "Processing...",
|
||||
"Product": "Product",
|
||||
"Product - Tooltip": "Product Name",
|
||||
"Recharged successfully": "Recharged successfully",
|
||||
"Result": "Result",
|
||||
"Return to Website": "Return to Website",
|
||||
"The payment has been canceled": "The payment has been canceled",
|
||||
@@ -627,6 +628,8 @@
|
||||
"The payment is still under processing": "The payment is still under processing",
|
||||
"Type - Tooltip": "Payment method used when purchasing the product",
|
||||
"You have successfully completed the payment": "You have successfully completed the payment",
|
||||
"You have successfully recharged": "You have successfully recharged",
|
||||
"Your current balance is": "Your current balance is",
|
||||
"please wait for a few seconds...": "please wait for a few seconds...",
|
||||
"the current state is": "the current state is"
|
||||
},
|
||||
@@ -689,6 +692,8 @@
|
||||
"Edit Product": "Edit Product",
|
||||
"Image": "Image",
|
||||
"Image - Tooltip": "Image of product",
|
||||
"Is recharge": "Is recharge",
|
||||
"Is recharge - Tooltip": "Whether the current product is to recharge balance",
|
||||
"New Product": "New Product",
|
||||
"Pay": "Pay",
|
||||
"PayPal": "PayPal",
|
||||
@@ -1080,6 +1085,8 @@
|
||||
"Address line": "Address line",
|
||||
"Affiliation": "Affiliation",
|
||||
"Affiliation - Tooltip": "Employer, such as company name or organization name",
|
||||
"Balance": "Balance",
|
||||
"Balance - Tooltip": "User's balance",
|
||||
"Bio": "Bio",
|
||||
"Bio - Tooltip": "Self introduction of the user",
|
||||
"Birthday": "Birthday",
|
||||
@@ -1130,6 +1137,8 @@
|
||||
"Managed accounts": "Managed accounts",
|
||||
"Modify password...": "Modify password...",
|
||||
"Multi-factor authentication": "Multi-factor authentication",
|
||||
"Need update password": "Need update password",
|
||||
"Need update password - Tooltip": "Force user update password after login",
|
||||
"New Email": "New Email",
|
||||
"New Password": "New Password",
|
||||
"New User": "New User",
|
||||
|
@@ -166,7 +166,7 @@
|
||||
"Next Step": "Next Step",
|
||||
"Please input your username!": "Please input your username!",
|
||||
"Reset": "Reset",
|
||||
"Retrieve password": "Retrieve password",
|
||||
"Reset password": "Reset password",
|
||||
"Unknown forget type": "Unknown forget type",
|
||||
"Verify": "Verify"
|
||||
},
|
||||
@@ -619,6 +619,7 @@
|
||||
"Processing...": "Processing...",
|
||||
"Product": "Product",
|
||||
"Product - Tooltip": "Product Name",
|
||||
"Recharged successfully": "Recharged successfully",
|
||||
"Result": "Result",
|
||||
"Return to Website": "Return to Website",
|
||||
"The payment has been canceled": "The payment has been canceled",
|
||||
@@ -627,6 +628,8 @@
|
||||
"The payment is still under processing": "The payment is still under processing",
|
||||
"Type - Tooltip": "Payment method used when purchasing the product",
|
||||
"You have successfully completed the payment": "You have successfully completed the payment",
|
||||
"You have successfully recharged": "You have successfully recharged",
|
||||
"Your current balance is": "Your current balance is",
|
||||
"please wait for a few seconds...": "please wait for a few seconds...",
|
||||
"the current state is": "the current state is"
|
||||
},
|
||||
@@ -689,6 +692,8 @@
|
||||
"Edit Product": "Edit Product",
|
||||
"Image": "Image",
|
||||
"Image - Tooltip": "Image of product",
|
||||
"Is recharge": "Is recharge",
|
||||
"Is recharge - Tooltip": "Whether the current product is to recharge balance",
|
||||
"New Product": "New Product",
|
||||
"Pay": "Pay",
|
||||
"PayPal": "PayPal",
|
||||
@@ -1080,6 +1085,8 @@
|
||||
"Address line": "Address line",
|
||||
"Affiliation": "Affiliation",
|
||||
"Affiliation - Tooltip": "Employer, such as company name or organization name",
|
||||
"Balance": "Balance",
|
||||
"Balance - Tooltip": "User's balance",
|
||||
"Bio": "Bio",
|
||||
"Bio - Tooltip": "Self introduction of the user",
|
||||
"Birthday": "Birthday",
|
||||
@@ -1130,6 +1137,8 @@
|
||||
"Managed accounts": "Managed accounts",
|
||||
"Modify password...": "Modify password...",
|
||||
"Multi-factor authentication": "Multi-factor authentication",
|
||||
"Need update password": "Need update password",
|
||||
"Need update password - Tooltip": "Force user update password after login",
|
||||
"New Email": "New Email",
|
||||
"New Password": "New Password",
|
||||
"New User": "New User",
|
||||
|
@@ -166,7 +166,7 @@
|
||||
"Next Step": "Next Step",
|
||||
"Please input your username!": "Please input your username!",
|
||||
"Reset": "Reset",
|
||||
"Retrieve password": "Retrieve password",
|
||||
"Reset password": "Reset password",
|
||||
"Unknown forget type": "Unknown forget type",
|
||||
"Verify": "Verify"
|
||||
},
|
||||
@@ -619,6 +619,7 @@
|
||||
"Processing...": "Processing...",
|
||||
"Product": "Product",
|
||||
"Product - Tooltip": "Product Name",
|
||||
"Recharged successfully": "Recharged successfully",
|
||||
"Result": "Result",
|
||||
"Return to Website": "Return to Website",
|
||||
"The payment has been canceled": "The payment has been canceled",
|
||||
@@ -627,6 +628,8 @@
|
||||
"The payment is still under processing": "The payment is still under processing",
|
||||
"Type - Tooltip": "Payment method used when purchasing the product",
|
||||
"You have successfully completed the payment": "You have successfully completed the payment",
|
||||
"You have successfully recharged": "You have successfully recharged",
|
||||
"Your current balance is": "Your current balance is",
|
||||
"please wait for a few seconds...": "please wait for a few seconds...",
|
||||
"the current state is": "the current state is"
|
||||
},
|
||||
@@ -689,6 +692,8 @@
|
||||
"Edit Product": "Edit Product",
|
||||
"Image": "Image",
|
||||
"Image - Tooltip": "Image of product",
|
||||
"Is recharge": "Is recharge",
|
||||
"Is recharge - Tooltip": "Whether the current product is to recharge balance",
|
||||
"New Product": "New Product",
|
||||
"Pay": "Pay",
|
||||
"PayPal": "PayPal",
|
||||
@@ -1080,6 +1085,8 @@
|
||||
"Address line": "Address line",
|
||||
"Affiliation": "Affiliation",
|
||||
"Affiliation - Tooltip": "Employer, such as company name or organization name",
|
||||
"Balance": "Balance",
|
||||
"Balance - Tooltip": "User's balance",
|
||||
"Bio": "Bio",
|
||||
"Bio - Tooltip": "Self introduction of the user",
|
||||
"Birthday": "Birthday",
|
||||
@@ -1130,6 +1137,8 @@
|
||||
"Managed accounts": "Managed accounts",
|
||||
"Modify password...": "Modify password...",
|
||||
"Multi-factor authentication": "Multi-factor authentication",
|
||||
"Need update password": "Need update password",
|
||||
"Need update password - Tooltip": "Force user update password after login",
|
||||
"New Email": "New Email",
|
||||
"New Password": "New Password",
|
||||
"New User": "New User",
|
||||
|
@@ -166,7 +166,7 @@
|
||||
"Next Step": "Próxima Etapa",
|
||||
"Please input your username!": "Por favor, insira seu nome de usuário!",
|
||||
"Reset": "Redefinir",
|
||||
"Retrieve password": "Recuperar senha",
|
||||
"Reset password": "Recuperar senha",
|
||||
"Unknown forget type": "Tipo de recuperação desconhecido",
|
||||
"Verify": "Verificar"
|
||||
},
|
||||
@@ -619,6 +619,7 @@
|
||||
"Processing...": "Processando...",
|
||||
"Product": "Produto",
|
||||
"Product - Tooltip": "Nome do Produto",
|
||||
"Recharged successfully": "Recharged successfully",
|
||||
"Result": "Resultado",
|
||||
"Return to Website": "Retornar ao Website",
|
||||
"The payment has been canceled": "The payment has been canceled",
|
||||
@@ -627,6 +628,8 @@
|
||||
"The payment is still under processing": "O pagamento ainda está sendo processado",
|
||||
"Type - Tooltip": "Método de pagamento utilizado ao comprar o produto",
|
||||
"You have successfully completed the payment": "Você concluiu o pagamento com sucesso",
|
||||
"You have successfully recharged": "You have successfully recharged",
|
||||
"Your current balance is": "Your current balance is",
|
||||
"please wait for a few seconds...": "por favor, aguarde alguns segundos...",
|
||||
"the current state is": "o estado atual é"
|
||||
},
|
||||
@@ -689,6 +692,8 @@
|
||||
"Edit Product": "Editar Produto",
|
||||
"Image": "Imagem",
|
||||
"Image - Tooltip": "Imagem do produto",
|
||||
"Is recharge": "Is recharge",
|
||||
"Is recharge - Tooltip": "Whether the current product is to recharge balance",
|
||||
"New Product": "Novo Produto",
|
||||
"Pay": "Pagar",
|
||||
"PayPal": "PayPal",
|
||||
@@ -1080,6 +1085,8 @@
|
||||
"Address line": "Address line",
|
||||
"Affiliation": "Afiliação",
|
||||
"Affiliation - Tooltip": "Empregador, como nome da empresa ou organização",
|
||||
"Balance": "Balance",
|
||||
"Balance - Tooltip": "User's balance",
|
||||
"Bio": "Biografia",
|
||||
"Bio - Tooltip": "Autoapresentação do usuário",
|
||||
"Birthday": "Aniversário",
|
||||
@@ -1130,6 +1137,8 @@
|
||||
"Managed accounts": "Contas gerenciadas",
|
||||
"Modify password...": "Modificar senha...",
|
||||
"Multi-factor authentication": "Autenticação de vários fatores",
|
||||
"Need update password": "Need update password",
|
||||
"Need update password - Tooltip": "Force user update password after login",
|
||||
"New Email": "Novo E-mail",
|
||||
"New Password": "Nova Senha",
|
||||
"New User": "Novo Usuário",
|
||||
|
@@ -166,7 +166,7 @@
|
||||
"Next Step": "Следующий шаг",
|
||||
"Please input your username!": "Пожалуйста, введите своё имя пользователя!",
|
||||
"Reset": "Сбросить",
|
||||
"Retrieve password": "Восстановить пароль",
|
||||
"Reset password": "Восстановить пароль",
|
||||
"Unknown forget type": "Неизвестный забытый тип",
|
||||
"Verify": "Проверить"
|
||||
},
|
||||
@@ -619,6 +619,7 @@
|
||||
"Processing...": "Обработка...",
|
||||
"Product": "Продукт",
|
||||
"Product - Tooltip": "Название продукта",
|
||||
"Recharged successfully": "Recharged successfully",
|
||||
"Result": "Результат",
|
||||
"Return to Website": "Вернуться на веб-сайт",
|
||||
"The payment has been canceled": "The payment has been canceled",
|
||||
@@ -627,6 +628,8 @@
|
||||
"The payment is still under processing": "Оплата все еще обрабатывается",
|
||||
"Type - Tooltip": "Способ оплаты, используемый при покупке товара",
|
||||
"You have successfully completed the payment": "Вы успешно произвели платеж",
|
||||
"You have successfully recharged": "You have successfully recharged",
|
||||
"Your current balance is": "Your current balance is",
|
||||
"please wait for a few seconds...": "Пожалуйста, подождите несколько секунд...",
|
||||
"the current state is": "текущее состояние"
|
||||
},
|
||||
@@ -689,6 +692,8 @@
|
||||
"Edit Product": "Редактировать продукт",
|
||||
"Image": "Изображение",
|
||||
"Image - Tooltip": "Изображение продукта",
|
||||
"Is recharge": "Is recharge",
|
||||
"Is recharge - Tooltip": "Whether the current product is to recharge balance",
|
||||
"New Product": "Новый продукт",
|
||||
"Pay": "Заплатить",
|
||||
"PayPal": "PayPal",
|
||||
@@ -1080,6 +1085,8 @@
|
||||
"Address line": "Address line",
|
||||
"Affiliation": "Принадлежность",
|
||||
"Affiliation - Tooltip": "Работодатель, такой как название компании или организации",
|
||||
"Balance": "Balance",
|
||||
"Balance - Tooltip": "User's balance",
|
||||
"Bio": "Био",
|
||||
"Bio - Tooltip": "Само представление пользователя",
|
||||
"Birthday": "Birthday",
|
||||
@@ -1130,6 +1137,8 @@
|
||||
"Managed accounts": "Управляемые аккаунты",
|
||||
"Modify password...": "Изменить пароль...",
|
||||
"Multi-factor authentication": "Multi-factor authentication",
|
||||
"Need update password": "Need update password",
|
||||
"Need update password - Tooltip": "Force user update password after login",
|
||||
"New Email": "Новое электронное письмо",
|
||||
"New Password": "Новый пароль",
|
||||
"New User": "Новый пользователь",
|
||||
|
@@ -166,7 +166,7 @@
|
||||
"Next Step": "Next Step",
|
||||
"Please input your username!": "Please input your username!",
|
||||
"Reset": "Reset",
|
||||
"Retrieve password": "Retrieve password",
|
||||
"Reset password": "Reset password",
|
||||
"Unknown forget type": "Unknown forget type",
|
||||
"Verify": "Verify"
|
||||
},
|
||||
@@ -619,6 +619,7 @@
|
||||
"Processing...": "Processing...",
|
||||
"Product": "Product",
|
||||
"Product - Tooltip": "Product Name",
|
||||
"Recharged successfully": "Recharged successfully",
|
||||
"Result": "Result",
|
||||
"Return to Website": "Return to Website",
|
||||
"The payment has been canceled": "The payment has been canceled",
|
||||
@@ -627,6 +628,8 @@
|
||||
"The payment is still under processing": "The payment is still under processing",
|
||||
"Type - Tooltip": "Payment method used when purchasing the product",
|
||||
"You have successfully completed the payment": "You have successfully completed the payment",
|
||||
"You have successfully recharged": "You have successfully recharged",
|
||||
"Your current balance is": "Your current balance is",
|
||||
"please wait for a few seconds...": "please wait for a few seconds...",
|
||||
"the current state is": "the current state is"
|
||||
},
|
||||
@@ -689,6 +692,8 @@
|
||||
"Edit Product": "Edit Product",
|
||||
"Image": "Image",
|
||||
"Image - Tooltip": "Image of product",
|
||||
"Is recharge": "Is recharge",
|
||||
"Is recharge - Tooltip": "Whether the current product is to recharge balance",
|
||||
"New Product": "New Product",
|
||||
"Pay": "Pay",
|
||||
"PayPal": "PayPal",
|
||||
@@ -1080,6 +1085,8 @@
|
||||
"Address line": "Address line",
|
||||
"Affiliation": "Affiliation",
|
||||
"Affiliation - Tooltip": "Employer, such as company name or organization name",
|
||||
"Balance": "Balance",
|
||||
"Balance - Tooltip": "User's balance",
|
||||
"Bio": "Bio",
|
||||
"Bio - Tooltip": "Self introduction of the user",
|
||||
"Birthday": "Birthday",
|
||||
@@ -1130,6 +1137,8 @@
|
||||
"Managed accounts": "Managed accounts",
|
||||
"Modify password...": "Modify password...",
|
||||
"Multi-factor authentication": "Multi-factor authentication",
|
||||
"Need update password": "Need update password",
|
||||
"Need update password - Tooltip": "Force user update password after login",
|
||||
"New Email": "New Email",
|
||||
"New Password": "New Password",
|
||||
"New User": "New User",
|
||||
|
@@ -166,7 +166,7 @@
|
||||
"Next Step": "Sonraki adım",
|
||||
"Please input your username!": "Lütfen kullanıcı adınızı girin",
|
||||
"Reset": "Sıfırla",
|
||||
"Retrieve password": "Şifre kurtar",
|
||||
"Reset password": "Şifre kurtar",
|
||||
"Unknown forget type": "Unknown forget type",
|
||||
"Verify": "Doğrula"
|
||||
},
|
||||
@@ -619,6 +619,7 @@
|
||||
"Processing...": "Processing...",
|
||||
"Product": "Product",
|
||||
"Product - Tooltip": "Product Name",
|
||||
"Recharged successfully": "Recharged successfully",
|
||||
"Result": "Result",
|
||||
"Return to Website": "Return to Website",
|
||||
"The payment has been canceled": "The payment has been canceled",
|
||||
@@ -627,6 +628,8 @@
|
||||
"The payment is still under processing": "The payment is still under processing",
|
||||
"Type - Tooltip": "Payment method used when purchasing the product",
|
||||
"You have successfully completed the payment": "You have successfully completed the payment",
|
||||
"You have successfully recharged": "You have successfully recharged",
|
||||
"Your current balance is": "Your current balance is",
|
||||
"please wait for a few seconds...": "please wait for a few seconds...",
|
||||
"the current state is": "the current state is"
|
||||
},
|
||||
@@ -689,6 +692,8 @@
|
||||
"Edit Product": "Edit Product",
|
||||
"Image": "Image",
|
||||
"Image - Tooltip": "Image of product",
|
||||
"Is recharge": "Is recharge",
|
||||
"Is recharge - Tooltip": "Whether the current product is to recharge balance",
|
||||
"New Product": "New Product",
|
||||
"Pay": "Pay",
|
||||
"PayPal": "PayPal",
|
||||
@@ -1080,6 +1085,8 @@
|
||||
"Address line": "Address line",
|
||||
"Affiliation": "Affiliation",
|
||||
"Affiliation - Tooltip": "Employer, such as company name or organization name",
|
||||
"Balance": "Balance",
|
||||
"Balance - Tooltip": "User's balance",
|
||||
"Bio": "Bio",
|
||||
"Bio - Tooltip": "Self introduction of the user",
|
||||
"Birthday": "Birthday",
|
||||
@@ -1130,6 +1137,8 @@
|
||||
"Managed accounts": "Managed accounts",
|
||||
"Modify password...": "Modify password...",
|
||||
"Multi-factor authentication": "Multi-factor authentication",
|
||||
"Need update password": "Need update password",
|
||||
"Need update password - Tooltip": "Force user update password after login",
|
||||
"New Email": "New Email",
|
||||
"New Password": "New Password",
|
||||
"New User": "New User",
|
||||
|
@@ -166,7 +166,7 @@
|
||||
"Next Step": "Наступний крок",
|
||||
"Please input your username!": "Будь ласка, введіть своє ім'я користувача!",
|
||||
"Reset": "Скинути",
|
||||
"Retrieve password": "Отримати пароль",
|
||||
"Reset password": "Отримати пароль",
|
||||
"Unknown forget type": "Невідомий забутий тип",
|
||||
"Verify": "Підтвердити"
|
||||
},
|
||||
@@ -619,6 +619,7 @@
|
||||
"Processing...": "Обробка...",
|
||||
"Product": "Продукт",
|
||||
"Product - Tooltip": "Назва продукту",
|
||||
"Recharged successfully": "Recharged successfully",
|
||||
"Result": "Результат",
|
||||
"Return to Website": "Повернутися на сайт",
|
||||
"The payment has been canceled": "Платіж скасовано",
|
||||
@@ -627,6 +628,8 @@
|
||||
"The payment is still under processing": "Платіж ще обробляється",
|
||||
"Type - Tooltip": "Спосіб оплати, який використовується при покупці товару",
|
||||
"You have successfully completed the payment": "Ви успішно завершили оплату",
|
||||
"You have successfully recharged": "You have successfully recharged",
|
||||
"Your current balance is": "Your current balance is",
|
||||
"please wait for a few seconds...": "зачекайте кілька секунд...",
|
||||
"the current state is": "поточний стан є"
|
||||
},
|
||||
@@ -689,6 +692,8 @@
|
||||
"Edit Product": "Редагувати товар",
|
||||
"Image": "Зображення",
|
||||
"Image - Tooltip": "Зображення товару",
|
||||
"Is recharge": "Is recharge",
|
||||
"Is recharge - Tooltip": "Whether the current product is to recharge balance",
|
||||
"New Product": "Новий продукт",
|
||||
"Pay": "платити",
|
||||
"PayPal": "PayPal",
|
||||
@@ -1080,6 +1085,8 @@
|
||||
"Address line": "Address line",
|
||||
"Affiliation": "Приналежність",
|
||||
"Affiliation - Tooltip": "Роботодавець, наприклад назва компанії чи організації",
|
||||
"Balance": "Balance",
|
||||
"Balance - Tooltip": "User's balance",
|
||||
"Bio": "біографія",
|
||||
"Bio - Tooltip": "Самостійне представлення користувача",
|
||||
"Birthday": "день народження",
|
||||
@@ -1130,6 +1137,8 @@
|
||||
"Managed accounts": "Керовані облікові записи",
|
||||
"Modify password...": "Змінити пароль...",
|
||||
"Multi-factor authentication": "Багатофакторна аутентифікація",
|
||||
"Need update password": "Need update password",
|
||||
"Need update password - Tooltip": "Force user update password after login",
|
||||
"New Email": "Нова електронна пошта",
|
||||
"New Password": "Новий пароль",
|
||||
"New User": "Новий користувач",
|
||||
|
@@ -166,7 +166,7 @@
|
||||
"Next Step": "Bước tiếp theo",
|
||||
"Please input your username!": "Vui lòng nhập tên đăng nhập của bạn!",
|
||||
"Reset": "Đặt lại",
|
||||
"Retrieve password": "Truy xuất mật khẩu",
|
||||
"Reset password": "Truy xuất mật khẩu",
|
||||
"Unknown forget type": "Loại quên chưa biết",
|
||||
"Verify": "Xác thực"
|
||||
},
|
||||
@@ -619,6 +619,7 @@
|
||||
"Processing...": "Đang xử lý...",
|
||||
"Product": "Sản phẩm",
|
||||
"Product - Tooltip": "Tên sản phẩm",
|
||||
"Recharged successfully": "Recharged successfully",
|
||||
"Result": "Kết quả",
|
||||
"Return to Website": "Trở lại trang web",
|
||||
"The payment has been canceled": "The payment has been canceled",
|
||||
@@ -627,6 +628,8 @@
|
||||
"The payment is still under processing": "Thanh toán vẫn đang được xử lý",
|
||||
"Type - Tooltip": "Phương thức thanh toán được sử dụng khi mua sản phẩm",
|
||||
"You have successfully completed the payment": "Bạn đã hoàn thành thanh toán thành công",
|
||||
"You have successfully recharged": "You have successfully recharged",
|
||||
"Your current balance is": "Your current balance is",
|
||||
"please wait for a few seconds...": "Vui lòng đợi trong vài giây...",
|
||||
"the current state is": "tình trạng hiện tại là"
|
||||
},
|
||||
@@ -689,6 +692,8 @@
|
||||
"Edit Product": "Sửa sản phẩm",
|
||||
"Image": "Ảnh",
|
||||
"Image - Tooltip": "Hình ảnh sản phẩm",
|
||||
"Is recharge": "Is recharge",
|
||||
"Is recharge - Tooltip": "Whether the current product is to recharge balance",
|
||||
"New Product": "Sản phẩm mới",
|
||||
"Pay": "Trả tiền",
|
||||
"PayPal": "PayPal",
|
||||
@@ -1080,6 +1085,8 @@
|
||||
"Address line": "Address line",
|
||||
"Affiliation": "Liên kết",
|
||||
"Affiliation - Tooltip": "Nhà tuyển dụng, chẳng hạn như tên công ty hoặc tổ chức",
|
||||
"Balance": "Balance",
|
||||
"Balance - Tooltip": "User's balance",
|
||||
"Bio": "bản vẻ đời sống",
|
||||
"Bio - Tooltip": "Tự giới thiệu của người dùng",
|
||||
"Birthday": "Birthday",
|
||||
@@ -1130,6 +1137,8 @@
|
||||
"Managed accounts": "Quản lý tài khoản",
|
||||
"Modify password...": "Sửa đổi mật khẩu...",
|
||||
"Multi-factor authentication": "Multi-factor authentication",
|
||||
"Need update password": "Need update password",
|
||||
"Need update password - Tooltip": "Force user update password after login",
|
||||
"New Email": "Email mới",
|
||||
"New Password": "Mật khẩu mới",
|
||||
"New User": "Người dùng mới",
|
||||
|
@@ -166,7 +166,7 @@
|
||||
"Next Step": "下一步",
|
||||
"Please input your username!": "请输入您的用户名!",
|
||||
"Reset": "重置",
|
||||
"Retrieve password": "找回密码",
|
||||
"Reset password": "重置密码",
|
||||
"Unknown forget type": "未知的忘记密码类型",
|
||||
"Verify": "验证"
|
||||
},
|
||||
@@ -619,6 +619,7 @@
|
||||
"Processing...": "正在处理...",
|
||||
"Product": "商品",
|
||||
"Product - Tooltip": "商品名称",
|
||||
"Recharged successfully": "充值成功",
|
||||
"Result": "结果",
|
||||
"Return to Website": "返回原网站",
|
||||
"The payment has been canceled": "付款已取消",
|
||||
@@ -627,6 +628,8 @@
|
||||
"The payment is still under processing": "支付正在处理",
|
||||
"Type - Tooltip": "商品购买时的支付方式",
|
||||
"You have successfully completed the payment": "支付成功",
|
||||
"You have successfully recharged": "您已成功充值",
|
||||
"Your current balance is": "您现在的余额为",
|
||||
"please wait for a few seconds...": "请稍后...",
|
||||
"the current state is": "当前状态为"
|
||||
},
|
||||
@@ -689,6 +692,8 @@
|
||||
"Edit Product": "编辑商品",
|
||||
"Image": "图片",
|
||||
"Image - Tooltip": "商品图片",
|
||||
"Is recharge": "充值",
|
||||
"Is recharge - Tooltip": "当前商品是否为充值商品",
|
||||
"New Product": "添加商品",
|
||||
"Pay": "支付方式",
|
||||
"PayPal": "PayPal",
|
||||
@@ -1080,6 +1085,8 @@
|
||||
"Address line": "地址",
|
||||
"Affiliation": "工作单位",
|
||||
"Affiliation - Tooltip": "工作单位,如公司、组织名称",
|
||||
"Balance": "余额",
|
||||
"Balance - Tooltip": "用户的余额",
|
||||
"Bio": "自我介绍",
|
||||
"Bio - Tooltip": "用户的自我介绍",
|
||||
"Birthday": "生日",
|
||||
@@ -1130,6 +1137,8 @@
|
||||
"Managed accounts": "托管账户",
|
||||
"Modify password...": "编辑密码...",
|
||||
"Multi-factor authentication": "多因素认证",
|
||||
"Need update password": "需要更新密码",
|
||||
"Need update password - Tooltip": "强制用户在登录后更新密码",
|
||||
"New Email": "新邮箱",
|
||||
"New Password": "新密码",
|
||||
"New User": "添加用户",
|
||||
|
@@ -88,6 +88,7 @@ class AccountTable extends React.Component {
|
||||
{name: "Gender", label: i18next.t("user:Gender")},
|
||||
{name: "Birthday", label: i18next.t("user:Birthday")},
|
||||
{name: "Education", label: i18next.t("user:Education")},
|
||||
{name: "Balance", label: i18next.t("user:Balance")},
|
||||
{name: "Score", label: i18next.t("user:Score")},
|
||||
{name: "Karma", label: i18next.t("user:Karma")},
|
||||
{name: "Ranking", label: i18next.t("user:Ranking")},
|
||||
@@ -102,6 +103,7 @@ class AccountTable extends React.Component {
|
||||
{name: "Is admin", label: i18next.t("user:Is admin")},
|
||||
{name: "Is forbidden", label: i18next.t("user:Is forbidden")},
|
||||
{name: "Is deleted", label: i18next.t("user:Is deleted")},
|
||||
{name: "Need update password", label: i18next.t("user:Need update password")},
|
||||
{name: "Multi-factor authentication", label: i18next.t("user:Multi-factor authentication")},
|
||||
{name: "WebAuthn credentials", label: i18next.t("user:WebAuthn credentials")},
|
||||
{name: "Managed accounts", label: i18next.t("user:Managed accounts")},
|
||||
|
Reference in New Issue
Block a user