diff --git a/controllers/account.go b/controllers/account.go index 1df84639..11fdfaa2 100644 --- a/controllers/account.go +++ b/controllers/account.go @@ -101,7 +101,6 @@ func (c *ApiController) Signup() { DisplayName: form.Name, Avatar: "https://casbin.org/img/casbin.svg", Email: form.Email, - PhonePrefix: form.PhonePrefix, Phone: form.Phone, Affiliation: form.Affiliation, IsAdmin: false, diff --git a/controllers/verification.go b/controllers/verification.go index 045aebb8..7c39b008 100644 --- a/controllers/verification.go +++ b/controllers/verification.go @@ -15,12 +15,24 @@ package controllers import ( + "fmt" "strings" "github.com/casdoor/casdoor/object" ) func (c *ApiController) SendVerificationCode() { + userId := c.GetSessionUser() + if len(userId) == 0 { + c.ResponseError("Please sign in first") + return + } + user := object.GetUser(userId) + if user == nil { + c.ResponseError("No such user.") + return + } + destType := c.Ctx.Request.Form.Get("type") dest := c.Ctx.Request.Form.Get("dest") remoteAddr := c.Ctx.Request.RemoteAddr @@ -37,6 +49,12 @@ func (c *ApiController) SendVerificationCode() { case "email": ret = object.SendVerificationCodeToEmail(remoteAddr, dest) case "phone": + org := object.GetOrganizationByName(user.Owner) + phonePrefix := "86" + if org != nil && org.PhonePrefix != "" { + phonePrefix = org.PhonePrefix + } + dest = fmt.Sprintf("+%s%s", phonePrefix, dest) ret = object.SendVerificationCodeToPhone(remoteAddr, dest) } @@ -71,7 +89,16 @@ func (c *ApiController) ResetEmailOrPhone() { return } - if ret := object.CheckVerificationCode(dest, code); len(ret) != 0 { + checkDest := dest + if destType == "phone" { + org := object.GetOrganizationByName(user.Owner) + phonePrefix := "86" + if org != nil && org.PhonePrefix != "" { + phonePrefix = org.PhonePrefix + } + checkDest = fmt.Sprintf("+%s%s", phonePrefix, dest) + } + if ret := object.CheckVerificationCode(checkDest, code); len(ret) != 0 { c.ResponseError(ret) return } @@ -81,15 +108,8 @@ func (c *ApiController) ResetEmailOrPhone() { user.Email = dest object.SetUserField(user, "email", user.Email) case "phone": - if strings.Index(dest, "+86") == 0 { - user.PhonePrefix = "86" - user.Phone = dest[3:] - } else if strings.Index(dest, "+1") == 0 { - user.PhonePrefix = "1" - user.Phone = dest[2:] - } + user.Phone = dest object.SetUserField(user, "phone", user.Phone) - object.SetUserField(user, "phone_prefix", user.PhonePrefix) default: c.ResponseError("Unknown type.") return diff --git a/object/organization.go b/object/organization.go index a8323d22..b9c40c44 100644 --- a/object/organization.go +++ b/object/organization.go @@ -29,6 +29,7 @@ type Organization struct { Favicon string `xorm:"varchar(100)" json:"favicon"` PasswordType string `xorm:"varchar(100)" json:"passwordType"` PasswordSalt string `xorm:"varchar(100)" json:"passwordSalt"` + PhonePrefix string `xorm:"varchar(10)" json:"phonePrefix"` } func GetOrganizations(owner string) []*Organization { @@ -91,3 +92,16 @@ func DeleteOrganization(organization *Organization) bool { return affected != 0 } + +func GetOrganizationByName(name string) *Organization { + var ret Organization + ret.Name = name + has, err := adapter.Engine.Get(&ret) + if err != nil { + panic(err) + } + if !has { + return nil + } + return &ret +} diff --git a/object/user.go b/object/user.go index 89bf6d71..2d5c088c 100644 --- a/object/user.go +++ b/object/user.go @@ -34,7 +34,6 @@ type User struct { DisplayName string `xorm:"varchar(100)" json:"displayName"` Avatar string `xorm:"varchar(255)" json:"avatar"` Email string `xorm:"varchar(100)" json:"email"` - PhonePrefix string `xorm:"varchar(10)" json:"phonePrefix"` Phone string `xorm:"varchar(100)" json:"phone"` Affiliation string `xorm:"varchar(100)" json:"affiliation"` Tag string `xorm:"varchar(100)" json:"tag"` diff --git a/web/src/OrganizationEditPage.js b/web/src/OrganizationEditPage.js index 49d496f7..e68b65fc 100644 --- a/web/src/OrganizationEditPage.js +++ b/web/src/OrganizationEditPage.js @@ -149,6 +149,16 @@ class OrganizationEditPage extends React.Component { }} /> + + + {i18next.t("general:Phone Prefix")}: + + + { + this.updateOrganizationField('phonePrefix', e.target.value); + }} /> + + ) } diff --git a/web/src/ResetModal.js b/web/src/ResetModal.js index ec0a9a5b..794f8c4e 100644 --- a/web/src/ResetModal.js +++ b/web/src/ResetModal.js @@ -37,7 +37,7 @@ export const ResetModal = (props) => { let dest = document.getElementById("dest").value; let code = document.getElementById("code").value; if (dest === "") { - Setting.showMessage("error", i18next.t("user:Empty ") + destType); + Setting.showMessage("error", i18next.t("user:Empty " + destType)); return; } if (code === "") { @@ -70,7 +70,7 @@ export const ResetModal = (props) => { if (sendCodeCoolDown) return; let dest = document.getElementById("dest").value; if (dest === "") { - Setting.showMessage("error", i18next.t("user:Empty ") + destType); + Setting.showMessage("error", i18next.t("user:Empty " + destType)); return; } UserBackend.sendCode(dest, destType).then(res => { @@ -86,7 +86,7 @@ export const ResetModal = (props) => { let placeHolder = ""; if (destType === "email") placeHolder = i18next.t("user:Input your email"); - else if (destType === "phone") placeHolder = i18next.t("user:Phone prefix is needed"); + else if (destType === "phone") placeHolder = i18next.t("user:Input your phone number"); return ( diff --git a/web/src/UserEditPage.js b/web/src/UserEditPage.js index ec2d9fa9..413909ac 100644 --- a/web/src/UserEditPage.js +++ b/web/src/UserEditPage.js @@ -285,7 +285,7 @@ class UserEditPage extends React.Component { {i18next.t("general:Phone")}: - + { this.state.user.id === this.props.account.id ? () : null} diff --git a/web/src/UserListPage.js b/web/src/UserListPage.js index a4f50fd2..c8e930d2 100644 --- a/web/src/UserListPage.js +++ b/web/src/UserListPage.js @@ -52,7 +52,6 @@ class UserListPage extends React.Component { displayName: `New User - ${this.state.users.length}`, avatar: "https://casbin.org/img/casbin.svg", email: "user@example.com", - phonePrefix: "86", phone: "12345678", affiliation: "Example Inc.", tag: "staff", diff --git a/web/src/auth/SignupPage.js b/web/src/auth/SignupPage.js index cd62f517..89716164 100644 --- a/web/src/auth/SignupPage.js +++ b/web/src/auth/SignupPage.js @@ -133,19 +133,6 @@ class SignupPage extends React.Component { ) } - const prefixSelector = ( - - - - ); - return (