// Copyright 2021 The casbin 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 from 'react'; import {Link} from "react-router-dom"; import {Form, Input, Checkbox, Button, Row, Col, Result} from 'antd'; import * as Setting from "../Setting"; import * as AuthBackend from "./AuthBackend"; import i18next from "i18next"; import * as Util from "./Util"; import {authConfig} from "./Auth"; import * as ApplicationBackend from "../backend/ApplicationBackend"; import * as UserBackend from "../backend/UserBackend"; const formItemLayout = { labelCol: { xs: { span: 24, }, sm: { span: 6, }, }, wrapperCol: { xs: { span: 24, }, sm: { span: 18, }, }, }; const tailFormItemLayout = { wrapperCol: { xs: { span: 24, offset: 0, }, sm: { span: 16, offset: 8, }, }, }; class SignupPage extends React.Component { constructor(props) { super(props); this.state = { classes: props, applicationName: props.match.params.applicationName !== undefined ? props.match.params.applicationName : authConfig.appName, application: null, email: "", phone: "" }; this.form = React.createRef(); } UNSAFE_componentWillMount() { if (this.state.applicationName !== undefined) { this.getApplication(); } else { Util.showMessage("error", `Unknown application name: ${this.state.applicationName}`); } } getApplication() { if (this.state.applicationName === undefined) { return; } ApplicationBackend.getApplication("admin", this.state.applicationName) .then((application) => { this.setState({ application: application, }); }); } getResultPath(application) { if (authConfig.appName === application.name) { return "/result"; } else { return `/result/${application.name}`; } } onFinish(values) { values.phonePrefix = this.state.application?.organizationObj.phonePrefix; AuthBackend.signup(values) .then((res) => { if (res.status === 'ok') { Setting.goToLinkSoft(this, this.getResultPath(this.state.application)); } else { Setting.showMessage("error", i18next.t(`signup:${res.msg}`)); } }); } onFinishFailed(values, errorFields, outOfDate) { this.form.current.scrollToField(errorFields[0].name); } sendCode(type) { let dest, orgId; if (type === "email") { dest = this.state.email; } else if (type === "phone") { dest = this.state.phone; } else return; orgId = this.state.application?.organizationObj.owner + "/" + this.state.application?.organizationObj.name UserBackend.sendCode(dest, type, orgId).then(res => { if (res.status === "ok") Setting.showMessage("success", i18next.t("signup:code sent")); else Setting.showMessage("error", i18next.t("signup:" + res.msg)); }) } renderForm(application) { if (!application.enableSignUp) { return ( { Setting.goToLogin(this, application); }}> ]} > ) } return (
this.onFinish(values)} onFinishFailed={(errorInfo) => this.onFinishFailed(errorInfo.values, errorInfo.errorFields, errorInfo.outOfDate)} initialValues={{ application: application.name, organization: application.organization, }} style={{width: !Setting.isMobile() ? "400px" : "250px"}} size="large" > this.setState({email: e.target.value})} /> this.sendCode("email")} style={{backgroundColor: "#fafafa", border: "none"}}>{i18next.t("signup:send code")}} /> ({ validator(rule, value) { if (!value || getFieldValue('password') === value) { return Promise.resolve(); } return Promise.reject(i18next.t("signup:Your confirmed password is inconsistent with the password!")); }, }), ]} > this.setState({phone: e.target.value})} /> this.sendCode("phone")} style={{border: "none", backgroundColor: "#fafafa"}}>{i18next.t("signup:send code")}}/> {i18next.t("signup:Accept")}  {i18next.t("signup:Terms of Use")}   {i18next.t("signup:Have account?")}  { Setting.goToLogin(this, application); }}> {i18next.t("signup:sign in now")}
) } render() { const application = this.state.application; if (application === null) { return null; } return (
 
{ Setting.renderHelmet(application) } { Setting.renderLogo(application) } { this.renderForm(application) }
) } } export default SignupPage;