diff --git a/controllers/account.go b/controllers/account.go index 6d4ee5e8..2b5218f0 100644 --- a/controllers/account.go +++ b/controllers/account.go @@ -90,7 +90,6 @@ func (c *ApiController) Signup() { Id: util.GenerateId(), Type: "normal-user", Password: form.Password, - PasswordType: "plain", DisplayName: form.Name, Avatar: "https://casbin.org/img/casbin.svg", Email: form.Email, diff --git a/object/check.go b/object/check.go index 3f163051..bceec82f 100644 --- a/object/check.go +++ b/object/check.go @@ -56,20 +56,22 @@ func CheckUserSignup(organization string, username string, password string, disp } func checkPassword(user *User, password string) string { - if user.PasswordType == "plain" { + organization := getOrganization("admin", user.Owner) + + if organization.PasswordType == "plain" { if password == user.Password { return "" } else { return "password incorrect" } - } else if user.PasswordType == "salt" { + } else if organization.PasswordType == "salt" { if getSaltedPassword(password) == user.Password { return "" } else { return "password incorrect" } } else { - return fmt.Sprintf("unsupported password type: %s", user.PasswordType) + return fmt.Sprintf("unsupported password type: %s", organization.PasswordType) } } @@ -79,15 +81,15 @@ func CheckUserLogin(organization string, username string, password string) (*Use return nil, "the user does not exist, please sign up first" } + if user.IsForbidden { + return nil, "the user is forbidden to sign in, please contact the administrator" + } + msg := checkPassword(user, password) if msg != "" { return nil, msg } - if user.IsForbidden { - return nil, "the user is forbidden to sign in, please contact the administrator" - } - return user, "" } diff --git a/object/init.go b/object/init.go index 8c7bef68..2036aefe 100644 --- a/object/init.go +++ b/object/init.go @@ -15,11 +15,12 @@ func initBuiltInOrganization() { } organization = &Organization{ - Owner: "admin", - Name: "built-in", - CreatedTime: util.GetCurrentTime(), - DisplayName: "Built-in Organization", - WebsiteUrl: "https://example.com", + Owner: "admin", + Name: "built-in", + CreatedTime: util.GetCurrentTime(), + DisplayName: "Built-in Organization", + WebsiteUrl: "https://example.com", + PasswordType: "plain", } AddOrganization(organization) } @@ -36,7 +37,6 @@ func initBuiltInUser() { CreatedTime: util.GetCurrentTime(), Id: util.GenerateId(), Password: "123", - PasswordType: "plain", DisplayName: "Admin", Avatar: "https://casbin.org/img/casbin.svg", Email: "admin@example.com", diff --git a/object/organization.go b/object/organization.go index b439dea0..9862626c 100644 --- a/object/organization.go +++ b/object/organization.go @@ -24,9 +24,10 @@ type Organization struct { Name string `xorm:"varchar(100) notnull pk" json:"name"` CreatedTime string `xorm:"varchar(100)" json:"createdTime"` - DisplayName string `xorm:"varchar(100)" json:"displayName"` - WebsiteUrl string `xorm:"varchar(100)" json:"websiteUrl"` - Favicon string `xorm:"varchar(100)" json:"favicon"` + DisplayName string `xorm:"varchar(100)" json:"displayName"` + WebsiteUrl string `xorm:"varchar(100)" json:"websiteUrl"` + Favicon string `xorm:"varchar(100)" json:"favicon"` + PasswordType string `xorm:"varchar(100)" json:"passwordType"` } func GetOrganizations(owner string) []*Organization { diff --git a/object/user.go b/object/user.go index 2faa808d..05747c3a 100644 --- a/object/user.go +++ b/object/user.go @@ -30,7 +30,6 @@ type User struct { Id string `xorm:"varchar(100)" json:"id"` Type string `xorm:"varchar(100)" json:"type"` Password string `xorm:"varchar(100)" json:"password"` - PasswordType string `xorm:"varchar(100)" json:"passwordType"` DisplayName string `xorm:"varchar(100)" json:"displayName"` Avatar string `xorm:"varchar(255)" json:"avatar"` Email string `xorm:"varchar(100)" json:"email"` diff --git a/original/sync.go b/original/sync.go index cc32dc52..9883ffac 100644 --- a/original/sync.go +++ b/original/sync.go @@ -30,7 +30,6 @@ func createUserFromOriginalUser(originalUser *User) *object.User { Id: strconv.Itoa(originalUser.Id), Type: "normal-user", Password: originalUser.Password, - PasswordType: "salt", DisplayName: originalUser.Name, Avatar: fmt.Sprintf("%s%s", avatarBaseUrl, originalUser.Avatar), Email: "", diff --git a/web/src/OrganizationEditPage.js b/web/src/OrganizationEditPage.js index 497b500e..f9bfe104 100644 --- a/web/src/OrganizationEditPage.js +++ b/web/src/OrganizationEditPage.js @@ -13,12 +13,14 @@ // limitations under the License. import React from "react"; -import {Button, Card, Col, Input, Row} from 'antd'; +import {Button, Card, Col, Input, Row, Select} from 'antd'; import * as OrganizationBackend from "./backend/OrganizationBackend"; import * as Setting from "./Setting"; import i18next from "i18next"; import {LinkOutlined} from "@ant-design/icons"; +const { Option } = Select; + class OrganizationEditPage extends React.Component { constructor(props) { super(props); @@ -124,6 +126,19 @@ class OrganizationEditPage extends React.Component { }} /> + + + {i18next.t("general:Password type")}: + + + + + ) } diff --git a/web/src/OrganizationListPage.js b/web/src/OrganizationListPage.js index 101beab1..260b95f1 100644 --- a/web/src/OrganizationListPage.js +++ b/web/src/OrganizationListPage.js @@ -142,6 +142,13 @@ class OrganizationListPage extends React.Component { ) } }, + { + title: i18next.t("general:Password type"), + dataIndex: 'passwordType', + key: 'passwordType', + width: '150px', + sorter: (a, b) => a.passwordType.localeCompare(b.passwordType), + }, { title: i18next.t("general:Action"), dataIndex: '', diff --git a/web/src/UserEditPage.js b/web/src/UserEditPage.js index 9d5cb278..8dbbfeb2 100644 --- a/web/src/UserEditPage.js +++ b/web/src/UserEditPage.js @@ -261,19 +261,6 @@ class UserEditPage extends React.Component { - - - {i18next.t("general:Password type")}: - - - - - {i18next.t("general:Password")}: diff --git a/web/src/UserListPage.js b/web/src/UserListPage.js index 300a0126..4ad6fd25 100644 --- a/web/src/UserListPage.js +++ b/web/src/UserListPage.js @@ -130,20 +130,6 @@ class UserListPage extends React.Component { return Setting.getFormattedDate(text); } }, - // { - // title: 'Password type', - // dataIndex: 'passwordType', - // key: 'passwordType', - // width: '150px', - // sorter: (a, b) => a.passwordType.localeCompare(b.passwordType), - // }, - // { - // title: 'Password', - // dataIndex: 'password', - // key: 'password', - // width: '150px', - // sorter: (a, b) => a.password.localeCompare(b.password), - // }, { title: i18next.t("general:Display name"), dataIndex: 'displayName',