mirror of
https://github.com/casdoor/casdoor.git
synced 2025-07-03 20:50:19 +08:00
feat: add post methed for saml response (#1399)
This commit is contained in:
@ -51,6 +51,7 @@ type Application struct {
|
|||||||
EnableCodeSignin bool `json:"enableCodeSignin"`
|
EnableCodeSignin bool `json:"enableCodeSignin"`
|
||||||
EnableSamlCompress bool `json:"enableSamlCompress"`
|
EnableSamlCompress bool `json:"enableSamlCompress"`
|
||||||
EnableWebAuthn bool `json:"enableWebAuthn"`
|
EnableWebAuthn bool `json:"enableWebAuthn"`
|
||||||
|
SamlReplyUrl string `xorm:"varchar(100)" json:"samlReplyUrl"`
|
||||||
Providers []*ProviderItem `xorm:"mediumtext" json:"providers"`
|
Providers []*ProviderItem `xorm:"mediumtext" json:"providers"`
|
||||||
SignupItems []*SignupItem `xorm:"varchar(1000)" json:"signupItems"`
|
SignupItems []*SignupItem `xorm:"varchar(1000)" json:"signupItems"`
|
||||||
GrantTypes []string `xorm:"varchar(1000)" json:"grantTypes"`
|
GrantTypes []string `xorm:"varchar(1000)" json:"grantTypes"`
|
||||||
|
@ -251,6 +251,11 @@ func GetSamlResponse(application *Application, user *User, samlRequest string, h
|
|||||||
|
|
||||||
_, originBackend := getOriginFromHost(host)
|
_, originBackend := getOriginFromHost(host)
|
||||||
|
|
||||||
|
// redirect Url (Assertion Consumer Url)
|
||||||
|
if application.SamlReplyUrl != "" {
|
||||||
|
authnRequest.AssertionConsumerServiceURL = application.SamlReplyUrl
|
||||||
|
}
|
||||||
|
|
||||||
// build signedResponse
|
// build signedResponse
|
||||||
samlResponse, _ := NewSamlResponse(user, originBackend, certificate, authnRequest.AssertionConsumerServiceURL, authnRequest.Issuer.Url, authnRequest.ID, application.RedirectUris)
|
samlResponse, _ := NewSamlResponse(user, originBackend, certificate, authnRequest.AssertionConsumerServiceURL, authnRequest.Issuer.Url, authnRequest.ID, application.RedirectUris)
|
||||||
randomKeyStore := &X509Key{
|
randomKeyStore := &X509Key{
|
||||||
|
@ -545,6 +545,16 @@ class ApplicationEditPage extends React.Component {
|
|||||||
</Select>
|
</Select>
|
||||||
</Col>
|
</Col>
|
||||||
</Row>
|
</Row>
|
||||||
|
<Row style={{marginTop: "20px"}} >
|
||||||
|
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 22 : 2}>
|
||||||
|
{Setting.getLabel(i18next.t("application:SAML Reply URL"), i18next.t("application:Redirect URL (Assertion Consumer Service POST Binding URL) - Tooltip"))} :
|
||||||
|
</Col>
|
||||||
|
<Col span={22} >
|
||||||
|
<Input prefix={<LinkOutlined />} value={this.state.application.samlReplyUrl} onChange={e => {
|
||||||
|
this.updateApplicationField("samlReplyUrl", e.target.value);
|
||||||
|
}} />
|
||||||
|
</Col>
|
||||||
|
</Row>
|
||||||
<Row style={{marginTop: "20px"}} >
|
<Row style={{marginTop: "20px"}} >
|
||||||
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 19 : 2}>
|
<Col style={{marginTop: "5px"}} span={(Setting.isMobile()) ? 19 : 2}>
|
||||||
{Setting.getLabel(i18next.t("application:Enable SAML compress"), i18next.t("application:Enable SAML compress - Tooltip"))} :
|
{Setting.getLabel(i18next.t("application:Enable SAML compress"), i18next.t("application:Enable SAML compress - Tooltip"))} :
|
||||||
|
@ -29,6 +29,7 @@ import CustomGithubCorner from "../CustomGithubCorner";
|
|||||||
import {CountDownInput} from "../common/CountDownInput";
|
import {CountDownInput} from "../common/CountDownInput";
|
||||||
import SelectLanguageBox from "../SelectLanguageBox";
|
import SelectLanguageBox from "../SelectLanguageBox";
|
||||||
import {CaptchaModal} from "../common/CaptchaModal";
|
import {CaptchaModal} from "../common/CaptchaModal";
|
||||||
|
import RedirectForm from "../common/RedirectForm";
|
||||||
|
|
||||||
class LoginPage extends React.Component {
|
class LoginPage extends React.Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
@ -49,6 +50,9 @@ class LoginPage extends React.Component {
|
|||||||
enableCaptchaModal: false,
|
enableCaptchaModal: false,
|
||||||
openCaptchaModal: false,
|
openCaptchaModal: false,
|
||||||
verifyCaptcha: undefined,
|
verifyCaptcha: undefined,
|
||||||
|
samlResponse: "",
|
||||||
|
relayState: "",
|
||||||
|
redirectUrl: "",
|
||||||
};
|
};
|
||||||
|
|
||||||
if (this.state.type === "cas" && props.match?.params.casApplicationName !== undefined) {
|
if (this.state.type === "cas" && props.match?.params.casApplicationName !== undefined) {
|
||||||
@ -184,6 +188,7 @@ class LoginPage extends React.Component {
|
|||||||
|
|
||||||
if (values["samlRequest"] !== null && values["samlRequest"] !== "" && values["samlRequest"] !== undefined) {
|
if (values["samlRequest"] !== null && values["samlRequest"] !== "" && values["samlRequest"] !== undefined) {
|
||||||
values["type"] = "saml";
|
values["type"] = "saml";
|
||||||
|
values["relayState"] = oAuthParams.relayState;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.state.application.organization !== null && this.state.application.organization !== undefined) {
|
if (this.state.application.organization !== null && this.state.application.organization !== undefined) {
|
||||||
@ -312,8 +317,16 @@ class LoginPage extends React.Component {
|
|||||||
} else if (responseType === "saml") {
|
} else if (responseType === "saml") {
|
||||||
const SAMLResponse = res.data;
|
const SAMLResponse = res.data;
|
||||||
const redirectUri = res.data2;
|
const redirectUri = res.data2;
|
||||||
|
if (this.state.application.assertionConsumerUrl !== "") {
|
||||||
|
this.setState({
|
||||||
|
samlResponse: res.data,
|
||||||
|
redirectUrl: res.data2,
|
||||||
|
relayState: oAuthParams.relayState,
|
||||||
|
});
|
||||||
|
} else {
|
||||||
Setting.goToLink(`${redirectUri}?SAMLResponse=${encodeURIComponent(SAMLResponse)}&RelayState=${oAuthParams.relayState}`);
|
Setting.goToLink(`${redirectUri}?SAMLResponse=${encodeURIComponent(SAMLResponse)}&RelayState=${oAuthParams.relayState}`);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
this.setState({openCaptchaModal: false});
|
this.setState({openCaptchaModal: false});
|
||||||
Setting.showMessage("error", `Failed to log in: ${res.msg}`);
|
Setting.showMessage("error", `Failed to log in: ${res.msg}`);
|
||||||
@ -761,6 +774,10 @@ class LoginPage extends React.Component {
|
|||||||
return Util.renderMessageLarge(this, this.state.msg);
|
return Util.renderMessageLarge(this, this.state.msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.state.samlResponse !== "") {
|
||||||
|
return <RedirectForm samlResponse={this.state.samlResponse} redirectUrl={this.state.redirectUrl} relayState={this.state.relayState} />;
|
||||||
|
}
|
||||||
|
|
||||||
if (application.signinHtml !== "") {
|
if (application.signinHtml !== "") {
|
||||||
return (
|
return (
|
||||||
<div dangerouslySetInnerHTML={{__html: application.signinHtml}} />
|
<div dangerouslySetInnerHTML={{__html: application.signinHtml}} />
|
||||||
|
@ -125,5 +125,5 @@ export const CaptchaWidget = ({captchaType, subType, siteKey, clientSecret, onCh
|
|||||||
}
|
}
|
||||||
}, [captchaType, subType, siteKey, clientSecret, clientId2, clientSecret2]);
|
}, [captchaType, subType, siteKey, clientSecret, clientId2, clientSecret2]);
|
||||||
|
|
||||||
return <div id="captcha"></div>;
|
return <div id="captcha" />;
|
||||||
};
|
};
|
||||||
|
43
web/src/common/RedirectForm.js
Normal file
43
web/src/common/RedirectForm.js
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
// Copyright 2022 The Casdoor Authors. All Rights Reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
import React, {useEffect} from "react";
|
||||||
|
|
||||||
|
export const RedirectForm = (props) => {
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
document.getElementById("saml").submit();
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
return (<>
|
||||||
|
<p>Redirecting, please wait.</p>
|
||||||
|
<form id="saml" method="post" action={props.redirectUrl}>
|
||||||
|
<input
|
||||||
|
type="hidden"
|
||||||
|
name="SAMLResponse"
|
||||||
|
id="samlResponse"
|
||||||
|
value={props.samlResponse}
|
||||||
|
/>
|
||||||
|
<input
|
||||||
|
type="hidden"
|
||||||
|
name="RelayState"
|
||||||
|
id="relayState"
|
||||||
|
value={props.relayState}
|
||||||
|
/>
|
||||||
|
</form>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default RedirectForm;
|
@ -58,12 +58,14 @@
|
|||||||
"Please select a HTML file": "Bitte wählen Sie eine HTML-Datei",
|
"Please select a HTML file": "Bitte wählen Sie eine HTML-Datei",
|
||||||
"Prompt page URL copied to clipboard successfully, please paste it into the incognito window or another browser": "Prompt page URL copied to clipboard successfully, please paste it into the incognito window or another browser",
|
"Prompt page URL copied to clipboard successfully, please paste it into the incognito window or another browser": "Prompt page URL copied to clipboard successfully, please paste it into the incognito window or another browser",
|
||||||
"Redirect URL": "Weiterleitungs-URL",
|
"Redirect URL": "Weiterleitungs-URL",
|
||||||
|
"Redirect URL (Assertion Consumer Service POST Binding URL) - Tooltip": "Redirect URL (Assertion Consumer Service POST Binding URL) - Tooltip",
|
||||||
"Redirect URLs": "Umleitungs-URLs",
|
"Redirect URLs": "Umleitungs-URLs",
|
||||||
"Redirect URLs - Tooltip": "List of redirect addresses after successful login",
|
"Redirect URLs - Tooltip": "List of redirect addresses after successful login",
|
||||||
"Refresh token expire": "Aktualisierungs-Token läuft ab",
|
"Refresh token expire": "Aktualisierungs-Token läuft ab",
|
||||||
"Refresh token expire - Tooltip": "Aktualisierungs-Token läuft ab - Tooltip",
|
"Refresh token expire - Tooltip": "Aktualisierungs-Token läuft ab - Tooltip",
|
||||||
"Right": "Right",
|
"Right": "Right",
|
||||||
"Rule": "Rule",
|
"Rule": "Rule",
|
||||||
|
"SAML Reply URL": "SAML Reply URL",
|
||||||
"SAML metadata": "SAML metadata",
|
"SAML metadata": "SAML metadata",
|
||||||
"SAML metadata - Tooltip": "SAML metadata - Tooltip",
|
"SAML metadata - Tooltip": "SAML metadata - Tooltip",
|
||||||
"SAML metadata URL copied to clipboard successfully": "SAML metadata URL copied to clipboard successfully",
|
"SAML metadata URL copied to clipboard successfully": "SAML metadata URL copied to clipboard successfully",
|
||||||
@ -435,6 +437,7 @@
|
|||||||
"Detail": "Detail",
|
"Detail": "Detail",
|
||||||
"Detail - Tooltip": "Detail - Tooltip",
|
"Detail - Tooltip": "Detail - Tooltip",
|
||||||
"Edit Product": "Edit Product",
|
"Edit Product": "Edit Product",
|
||||||
|
"I have completed the payment": "I have completed the payment",
|
||||||
"Image": "Image",
|
"Image": "Image",
|
||||||
"Image - Tooltip": "Image - Tooltip",
|
"Image - Tooltip": "Image - Tooltip",
|
||||||
"New Product": "New Product",
|
"New Product": "New Product",
|
||||||
@ -443,6 +446,8 @@
|
|||||||
"Payment providers - Tooltip": "Payment providers - Tooltip",
|
"Payment providers - Tooltip": "Payment providers - Tooltip",
|
||||||
"Paypal": "Paypal",
|
"Paypal": "Paypal",
|
||||||
"Placing order...": "Placing order...",
|
"Placing order...": "Placing order...",
|
||||||
|
"Please provide your username in the remark": "Please provide your username in the remark",
|
||||||
|
"Please scan the QR code to pay": "Please scan the QR code to pay",
|
||||||
"Price": "Price",
|
"Price": "Price",
|
||||||
"Price - Tooltip": "Price - Tooltip",
|
"Price - Tooltip": "Price - Tooltip",
|
||||||
"Quantity": "Quantity",
|
"Quantity": "Quantity",
|
||||||
|
@ -58,12 +58,14 @@
|
|||||||
"Please select a HTML file": "Please select a HTML file",
|
"Please select a HTML file": "Please select a HTML file",
|
||||||
"Prompt page URL copied to clipboard successfully, please paste it into the incognito window or another browser": "Prompt page URL copied to clipboard successfully, please paste it into the incognito window or another browser",
|
"Prompt page URL copied to clipboard successfully, please paste it into the incognito window or another browser": "Prompt page URL copied to clipboard successfully, please paste it into the incognito window or another browser",
|
||||||
"Redirect URL": "Redirect URL",
|
"Redirect URL": "Redirect URL",
|
||||||
|
"Redirect URL (Assertion Consumer Service POST Binding URL) - Tooltip": "Redirect URL (Assertion Consumer Service POST Binding URL) - Tooltip",
|
||||||
"Redirect URLs": "Redirect URLs",
|
"Redirect URLs": "Redirect URLs",
|
||||||
"Redirect URLs - Tooltip": "Redirect URLs - Tooltip",
|
"Redirect URLs - Tooltip": "Redirect URLs - Tooltip",
|
||||||
"Refresh token expire": "Refresh token expire",
|
"Refresh token expire": "Refresh token expire",
|
||||||
"Refresh token expire - Tooltip": "Refresh token expire - Tooltip",
|
"Refresh token expire - Tooltip": "Refresh token expire - Tooltip",
|
||||||
"Right": "Right",
|
"Right": "Right",
|
||||||
"Rule": "Rule",
|
"Rule": "Rule",
|
||||||
|
"SAML Reply URL": "SAML Reply URL",
|
||||||
"SAML metadata": "SAML metadata",
|
"SAML metadata": "SAML metadata",
|
||||||
"SAML metadata - Tooltip": "SAML metadata - Tooltip",
|
"SAML metadata - Tooltip": "SAML metadata - Tooltip",
|
||||||
"SAML metadata URL copied to clipboard successfully": "SAML metadata URL copied to clipboard successfully",
|
"SAML metadata URL copied to clipboard successfully": "SAML metadata URL copied to clipboard successfully",
|
||||||
@ -435,6 +437,7 @@
|
|||||||
"Detail": "Detail",
|
"Detail": "Detail",
|
||||||
"Detail - Tooltip": "Detail - Tooltip",
|
"Detail - Tooltip": "Detail - Tooltip",
|
||||||
"Edit Product": "Edit Product",
|
"Edit Product": "Edit Product",
|
||||||
|
"I have completed the payment": "I have completed the payment",
|
||||||
"Image": "Image",
|
"Image": "Image",
|
||||||
"Image - Tooltip": "Image - Tooltip",
|
"Image - Tooltip": "Image - Tooltip",
|
||||||
"New Product": "New Product",
|
"New Product": "New Product",
|
||||||
@ -443,6 +446,8 @@
|
|||||||
"Payment providers - Tooltip": "Payment providers - Tooltip",
|
"Payment providers - Tooltip": "Payment providers - Tooltip",
|
||||||
"Paypal": "Paypal",
|
"Paypal": "Paypal",
|
||||||
"Placing order...": "Placing order...",
|
"Placing order...": "Placing order...",
|
||||||
|
"Please provide your username in the remark": "Please provide your username in the remark",
|
||||||
|
"Please scan the QR code to pay": "Please scan the QR code to pay",
|
||||||
"Price": "Price",
|
"Price": "Price",
|
||||||
"Price - Tooltip": "Price - Tooltip",
|
"Price - Tooltip": "Price - Tooltip",
|
||||||
"Quantity": "Quantity",
|
"Quantity": "Quantity",
|
||||||
|
@ -58,12 +58,14 @@
|
|||||||
"Please select a HTML file": "Veuillez sélectionner un fichier HTML",
|
"Please select a HTML file": "Veuillez sélectionner un fichier HTML",
|
||||||
"Prompt page URL copied to clipboard successfully, please paste it into the incognito window or another browser": "Prompt page URL copied to clipboard successfully, please paste it into the incognito window or another browser",
|
"Prompt page URL copied to clipboard successfully, please paste it into the incognito window or another browser": "Prompt page URL copied to clipboard successfully, please paste it into the incognito window or another browser",
|
||||||
"Redirect URL": "URL de redirection",
|
"Redirect URL": "URL de redirection",
|
||||||
|
"Redirect URL (Assertion Consumer Service POST Binding URL) - Tooltip": "Redirect URL (Assertion Consumer Service POST Binding URL) - Tooltip",
|
||||||
"Redirect URLs": "URL de redirection",
|
"Redirect URLs": "URL de redirection",
|
||||||
"Redirect URLs - Tooltip": "List of redirect addresses after successful login",
|
"Redirect URLs - Tooltip": "List of redirect addresses after successful login",
|
||||||
"Refresh token expire": "Expiration du jeton d'actualisation",
|
"Refresh token expire": "Expiration du jeton d'actualisation",
|
||||||
"Refresh token expire - Tooltip": "Expiration du jeton d'actualisation - infobulle",
|
"Refresh token expire - Tooltip": "Expiration du jeton d'actualisation - infobulle",
|
||||||
"Right": "Right",
|
"Right": "Right",
|
||||||
"Rule": "Rule",
|
"Rule": "Rule",
|
||||||
|
"SAML Reply URL": "SAML Reply URL",
|
||||||
"SAML metadata": "SAML metadata",
|
"SAML metadata": "SAML metadata",
|
||||||
"SAML metadata - Tooltip": "SAML metadata - Tooltip",
|
"SAML metadata - Tooltip": "SAML metadata - Tooltip",
|
||||||
"SAML metadata URL copied to clipboard successfully": "SAML metadata URL copied to clipboard successfully",
|
"SAML metadata URL copied to clipboard successfully": "SAML metadata URL copied to clipboard successfully",
|
||||||
@ -435,6 +437,7 @@
|
|||||||
"Detail": "Detail",
|
"Detail": "Detail",
|
||||||
"Detail - Tooltip": "Detail - Tooltip",
|
"Detail - Tooltip": "Detail - Tooltip",
|
||||||
"Edit Product": "Edit Product",
|
"Edit Product": "Edit Product",
|
||||||
|
"I have completed the payment": "I have completed the payment",
|
||||||
"Image": "Image",
|
"Image": "Image",
|
||||||
"Image - Tooltip": "Image - Tooltip",
|
"Image - Tooltip": "Image - Tooltip",
|
||||||
"New Product": "New Product",
|
"New Product": "New Product",
|
||||||
@ -443,6 +446,8 @@
|
|||||||
"Payment providers - Tooltip": "Payment providers - Tooltip",
|
"Payment providers - Tooltip": "Payment providers - Tooltip",
|
||||||
"Paypal": "Paypal",
|
"Paypal": "Paypal",
|
||||||
"Placing order...": "Placing order...",
|
"Placing order...": "Placing order...",
|
||||||
|
"Please provide your username in the remark": "Please provide your username in the remark",
|
||||||
|
"Please scan the QR code to pay": "Please scan the QR code to pay",
|
||||||
"Price": "Price",
|
"Price": "Price",
|
||||||
"Price - Tooltip": "Price - Tooltip",
|
"Price - Tooltip": "Price - Tooltip",
|
||||||
"Quantity": "Quantity",
|
"Quantity": "Quantity",
|
||||||
|
@ -58,12 +58,14 @@
|
|||||||
"Please select a HTML file": "HTMLファイルを選択してください",
|
"Please select a HTML file": "HTMLファイルを選択してください",
|
||||||
"Prompt page URL copied to clipboard successfully, please paste it into the incognito window or another browser": "Prompt page URL copied to clipboard successfully, please paste it into the incognito window or another browser",
|
"Prompt page URL copied to clipboard successfully, please paste it into the incognito window or another browser": "Prompt page URL copied to clipboard successfully, please paste it into the incognito window or another browser",
|
||||||
"Redirect URL": "リダイレクトURL",
|
"Redirect URL": "リダイレクトURL",
|
||||||
|
"Redirect URL (Assertion Consumer Service POST Binding URL) - Tooltip": "Redirect URL (Assertion Consumer Service POST Binding URL) - Tooltip",
|
||||||
"Redirect URLs": "リダイレクトURL",
|
"Redirect URLs": "リダイレクトURL",
|
||||||
"Redirect URLs - Tooltip": "List of redirect addresses after successful login",
|
"Redirect URLs - Tooltip": "List of redirect addresses after successful login",
|
||||||
"Refresh token expire": "トークンの更新の期限が切れます",
|
"Refresh token expire": "トークンの更新の期限が切れます",
|
||||||
"Refresh token expire - Tooltip": "トークンの有効期限を更新する - ツールチップ",
|
"Refresh token expire - Tooltip": "トークンの有効期限を更新する - ツールチップ",
|
||||||
"Right": "Right",
|
"Right": "Right",
|
||||||
"Rule": "Rule",
|
"Rule": "Rule",
|
||||||
|
"SAML Reply URL": "SAML Reply URL",
|
||||||
"SAML metadata": "SAML metadata",
|
"SAML metadata": "SAML metadata",
|
||||||
"SAML metadata - Tooltip": "SAML metadata - Tooltip",
|
"SAML metadata - Tooltip": "SAML metadata - Tooltip",
|
||||||
"SAML metadata URL copied to clipboard successfully": "SAML metadata URL copied to clipboard successfully",
|
"SAML metadata URL copied to clipboard successfully": "SAML metadata URL copied to clipboard successfully",
|
||||||
@ -435,6 +437,7 @@
|
|||||||
"Detail": "Detail",
|
"Detail": "Detail",
|
||||||
"Detail - Tooltip": "Detail - Tooltip",
|
"Detail - Tooltip": "Detail - Tooltip",
|
||||||
"Edit Product": "Edit Product",
|
"Edit Product": "Edit Product",
|
||||||
|
"I have completed the payment": "I have completed the payment",
|
||||||
"Image": "Image",
|
"Image": "Image",
|
||||||
"Image - Tooltip": "Image - Tooltip",
|
"Image - Tooltip": "Image - Tooltip",
|
||||||
"New Product": "New Product",
|
"New Product": "New Product",
|
||||||
@ -443,6 +446,8 @@
|
|||||||
"Payment providers - Tooltip": "Payment providers - Tooltip",
|
"Payment providers - Tooltip": "Payment providers - Tooltip",
|
||||||
"Paypal": "Paypal",
|
"Paypal": "Paypal",
|
||||||
"Placing order...": "Placing order...",
|
"Placing order...": "Placing order...",
|
||||||
|
"Please provide your username in the remark": "Please provide your username in the remark",
|
||||||
|
"Please scan the QR code to pay": "Please scan the QR code to pay",
|
||||||
"Price": "Price",
|
"Price": "Price",
|
||||||
"Price - Tooltip": "Price - Tooltip",
|
"Price - Tooltip": "Price - Tooltip",
|
||||||
"Quantity": "Quantity",
|
"Quantity": "Quantity",
|
||||||
|
@ -58,12 +58,14 @@
|
|||||||
"Please select a HTML file": "Please select a HTML file",
|
"Please select a HTML file": "Please select a HTML file",
|
||||||
"Prompt page URL copied to clipboard successfully, please paste it into the incognito window or another browser": "Prompt page URL copied to clipboard successfully, please paste it into the incognito window or another browser",
|
"Prompt page URL copied to clipboard successfully, please paste it into the incognito window or another browser": "Prompt page URL copied to clipboard successfully, please paste it into the incognito window or another browser",
|
||||||
"Redirect URL": "Redirect URL",
|
"Redirect URL": "Redirect URL",
|
||||||
|
"Redirect URL (Assertion Consumer Service POST Binding URL) - Tooltip": "Redirect URL (Assertion Consumer Service POST Binding URL) - Tooltip",
|
||||||
"Redirect URLs": "Redirect URLs",
|
"Redirect URLs": "Redirect URLs",
|
||||||
"Redirect URLs - Tooltip": "List of redirect addresses after successful login",
|
"Redirect URLs - Tooltip": "List of redirect addresses after successful login",
|
||||||
"Refresh token expire": "Refresh token expire",
|
"Refresh token expire": "Refresh token expire",
|
||||||
"Refresh token expire - Tooltip": "Refresh token expire - Tooltip",
|
"Refresh token expire - Tooltip": "Refresh token expire - Tooltip",
|
||||||
"Right": "Right",
|
"Right": "Right",
|
||||||
"Rule": "Rule",
|
"Rule": "Rule",
|
||||||
|
"SAML Reply URL": "SAML Reply URL",
|
||||||
"SAML metadata": "SAML metadata",
|
"SAML metadata": "SAML metadata",
|
||||||
"SAML metadata - Tooltip": "SAML metadata - Tooltip",
|
"SAML metadata - Tooltip": "SAML metadata - Tooltip",
|
||||||
"SAML metadata URL copied to clipboard successfully": "SAML metadata URL copied to clipboard successfully",
|
"SAML metadata URL copied to clipboard successfully": "SAML metadata URL copied to clipboard successfully",
|
||||||
@ -435,6 +437,7 @@
|
|||||||
"Detail": "Detail",
|
"Detail": "Detail",
|
||||||
"Detail - Tooltip": "Detail - Tooltip",
|
"Detail - Tooltip": "Detail - Tooltip",
|
||||||
"Edit Product": "Edit Product",
|
"Edit Product": "Edit Product",
|
||||||
|
"I have completed the payment": "I have completed the payment",
|
||||||
"Image": "Image",
|
"Image": "Image",
|
||||||
"Image - Tooltip": "Image - Tooltip",
|
"Image - Tooltip": "Image - Tooltip",
|
||||||
"New Product": "New Product",
|
"New Product": "New Product",
|
||||||
@ -443,6 +446,8 @@
|
|||||||
"Payment providers - Tooltip": "Payment providers - Tooltip",
|
"Payment providers - Tooltip": "Payment providers - Tooltip",
|
||||||
"Paypal": "Paypal",
|
"Paypal": "Paypal",
|
||||||
"Placing order...": "Placing order...",
|
"Placing order...": "Placing order...",
|
||||||
|
"Please provide your username in the remark": "Please provide your username in the remark",
|
||||||
|
"Please scan the QR code to pay": "Please scan the QR code to pay",
|
||||||
"Price": "Price",
|
"Price": "Price",
|
||||||
"Price - Tooltip": "Price - Tooltip",
|
"Price - Tooltip": "Price - Tooltip",
|
||||||
"Quantity": "Quantity",
|
"Quantity": "Quantity",
|
||||||
|
@ -58,12 +58,14 @@
|
|||||||
"Please select a HTML file": "Пожалуйста, выберите HTML-файл",
|
"Please select a HTML file": "Пожалуйста, выберите HTML-файл",
|
||||||
"Prompt page URL copied to clipboard successfully, please paste it into the incognito window or another browser": "Ссылка на страницу успешно скопирована в буфер обмена, пожалуйста, вставьте ее в окно инкогнито или другой браузер",
|
"Prompt page URL copied to clipboard successfully, please paste it into the incognito window or another browser": "Ссылка на страницу успешно скопирована в буфер обмена, пожалуйста, вставьте ее в окно инкогнито или другой браузер",
|
||||||
"Redirect URL": "URL перенаправления",
|
"Redirect URL": "URL перенаправления",
|
||||||
|
"Redirect URL (Assertion Consumer Service POST Binding URL) - Tooltip": "Redirect URL (Assertion Consumer Service POST Binding URL) - Tooltip",
|
||||||
"Redirect URLs": "Перенаправление URL",
|
"Redirect URLs": "Перенаправление URL",
|
||||||
"Redirect URLs - Tooltip": "List of redirect addresses after successful login",
|
"Redirect URLs - Tooltip": "List of redirect addresses after successful login",
|
||||||
"Refresh token expire": "Срок действия обновления токена истекает",
|
"Refresh token expire": "Срок действия обновления токена истекает",
|
||||||
"Refresh token expire - Tooltip": "Срок обновления токена истекает - Подсказка",
|
"Refresh token expire - Tooltip": "Срок обновления токена истекает - Подсказка",
|
||||||
"Right": "Right",
|
"Right": "Right",
|
||||||
"Rule": "правило",
|
"Rule": "правило",
|
||||||
|
"SAML Reply URL": "SAML Reply URL",
|
||||||
"SAML metadata": "Метаданные SAML",
|
"SAML metadata": "Метаданные SAML",
|
||||||
"SAML metadata - Tooltip": "Метаданные SAML - Подсказка",
|
"SAML metadata - Tooltip": "Метаданные SAML - Подсказка",
|
||||||
"SAML metadata URL copied to clipboard successfully": "Адрес метаданных SAML скопирован в буфер обмена",
|
"SAML metadata URL copied to clipboard successfully": "Адрес метаданных SAML скопирован в буфер обмена",
|
||||||
@ -435,6 +437,7 @@
|
|||||||
"Detail": "Сведения",
|
"Detail": "Сведения",
|
||||||
"Detail - Tooltip": "Detail - Tooltip",
|
"Detail - Tooltip": "Detail - Tooltip",
|
||||||
"Edit Product": "Редактирование продукта",
|
"Edit Product": "Редактирование продукта",
|
||||||
|
"I have completed the payment": "I have completed the payment",
|
||||||
"Image": "Изображение",
|
"Image": "Изображение",
|
||||||
"Image - Tooltip": "Image - Tooltip",
|
"Image - Tooltip": "Image - Tooltip",
|
||||||
"New Product": "Новый продукт",
|
"New Product": "Новый продукт",
|
||||||
@ -443,6 +446,8 @@
|
|||||||
"Payment providers - Tooltip": "Payment providers - Tooltip",
|
"Payment providers - Tooltip": "Payment providers - Tooltip",
|
||||||
"Paypal": "PayPal",
|
"Paypal": "PayPal",
|
||||||
"Placing order...": "Placing order...",
|
"Placing order...": "Placing order...",
|
||||||
|
"Please provide your username in the remark": "Please provide your username in the remark",
|
||||||
|
"Please scan the QR code to pay": "Please scan the QR code to pay",
|
||||||
"Price": "Цена",
|
"Price": "Цена",
|
||||||
"Price - Tooltip": "Price - Tooltip",
|
"Price - Tooltip": "Price - Tooltip",
|
||||||
"Quantity": "Quantity",
|
"Quantity": "Quantity",
|
||||||
|
@ -58,12 +58,14 @@
|
|||||||
"Please select a HTML file": "请选择一个HTML文件",
|
"Please select a HTML file": "请选择一个HTML文件",
|
||||||
"Prompt page URL copied to clipboard successfully, please paste it into the incognito window or another browser": "提醒页面URL已成功复制到剪贴板,请粘贴到当前浏览器的隐身模式窗口或另一个浏览器访问",
|
"Prompt page URL copied to clipboard successfully, please paste it into the incognito window or another browser": "提醒页面URL已成功复制到剪贴板,请粘贴到当前浏览器的隐身模式窗口或另一个浏览器访问",
|
||||||
"Redirect URL": "重定向 URL",
|
"Redirect URL": "重定向 URL",
|
||||||
|
"Redirect URL (Assertion Consumer Service POST Binding URL) - Tooltip": "回复 URL (断言使用者服务 URL, 使用POST请求返回响应) - Tooltip",
|
||||||
"Redirect URLs": "重定向 URLs",
|
"Redirect URLs": "重定向 URLs",
|
||||||
"Redirect URLs - Tooltip": "登录成功后重定向地址列表",
|
"Redirect URLs - Tooltip": "登录成功后重定向地址列表",
|
||||||
"Refresh token expire": "Refresh Token过期",
|
"Refresh token expire": "Refresh Token过期",
|
||||||
"Refresh token expire - Tooltip": "Refresh Token过期时间",
|
"Refresh token expire - Tooltip": "Refresh Token过期时间",
|
||||||
"Right": "居右",
|
"Right": "居右",
|
||||||
"Rule": "规则",
|
"Rule": "规则",
|
||||||
|
"SAML Reply URL": "SAML回复 URL",
|
||||||
"SAML metadata": "SAML元数据",
|
"SAML metadata": "SAML元数据",
|
||||||
"SAML metadata - Tooltip": "SAML协议的元数据(Metadata)信息",
|
"SAML metadata - Tooltip": "SAML协议的元数据(Metadata)信息",
|
||||||
"SAML metadata URL copied to clipboard successfully": "SAML元数据URL已成功复制到剪贴板",
|
"SAML metadata URL copied to clipboard successfully": "SAML元数据URL已成功复制到剪贴板",
|
||||||
@ -435,6 +437,7 @@
|
|||||||
"Detail": "详情",
|
"Detail": "详情",
|
||||||
"Detail - Tooltip": "详情 - 工具提示",
|
"Detail - Tooltip": "详情 - 工具提示",
|
||||||
"Edit Product": "编辑商品",
|
"Edit Product": "编辑商品",
|
||||||
|
"I have completed the payment": "支付完成",
|
||||||
"Image": "图片",
|
"Image": "图片",
|
||||||
"Image - Tooltip": "图片 - 工具提示",
|
"Image - Tooltip": "图片 - 工具提示",
|
||||||
"New Product": "添加商品",
|
"New Product": "添加商品",
|
||||||
@ -443,6 +446,8 @@
|
|||||||
"Payment providers - Tooltip": "支付提供商 - 工具提示",
|
"Payment providers - Tooltip": "支付提供商 - 工具提示",
|
||||||
"Paypal": "PayPal(贝宝)",
|
"Paypal": "PayPal(贝宝)",
|
||||||
"Placing order...": "正在下单...",
|
"Placing order...": "正在下单...",
|
||||||
|
"Please provide your username in the remark": "Please provide your username in the remark",
|
||||||
|
"Please scan the QR code to pay": "请扫描二维码支付",
|
||||||
"Price": "价格",
|
"Price": "价格",
|
||||||
"Price - Tooltip": "价格 - 工具提示",
|
"Price - Tooltip": "价格 - 工具提示",
|
||||||
"Quantity": "库存",
|
"Quantity": "库存",
|
||||||
|
Reference in New Issue
Block a user