feat: return most backend API errors to frontend (#1836)

* feat: return most backend API errros to frontend

Signed-off-by: yehong <239859435@qq.com>

* refactor: reduce int type change

Signed-off-by: yehong <239859435@qq.com>

* feat: return err backend in token.go

Signed-off-by: yehong <239859435@qq.com>

---------

Signed-off-by: yehong <239859435@qq.com>
This commit is contained in:
yehong
2023-05-30 15:49:39 +08:00
committed by GitHub
parent 34151c0095
commit 02e692a300
105 changed files with 3788 additions and 1734 deletions

View File

@ -24,62 +24,70 @@ import (
"github.com/xorm-io/core"
)
func GetUserByField(organizationName string, field string, value string) *User {
func GetUserByField(organizationName string, field string, value string) (*User, error) {
if field == "" || value == "" {
return nil
return nil, nil
}
user := User{Owner: organizationName}
existed, err := adapter.Engine.Where(fmt.Sprintf("%s=?", strings.ToLower(field)), value).Get(&user)
if err != nil {
panic(err)
return nil, err
}
if existed {
return &user
return &user, nil
} else {
return nil
return nil, nil
}
}
func HasUserByField(organizationName string, field string, value string) bool {
return GetUserByField(organizationName, field, value) != nil
user, err := GetUserByField(organizationName, field, value)
if err != nil {
panic(err)
}
return user != nil
}
func GetUserByFields(organization string, field string) *User {
func GetUserByFields(organization string, field string) (*User, error) {
// check username
user := GetUserByField(organization, "name", field)
if user != nil {
return user
user, err := GetUserByField(organization, "name", field)
if err != nil || user != nil {
return user, err
}
// check email
if strings.Contains(field, "@") {
user = GetUserByField(organization, "email", field)
if user != nil {
return user
user, err = GetUserByField(organization, "email", field)
if user != nil || err != nil {
return user, err
}
}
// check phone
user = GetUserByField(organization, "phone", field)
if user != nil {
return user
user, err = GetUserByField(organization, "phone", field)
if user != nil || err != nil {
return user, err
}
// check ID card
user = GetUserByField(organization, "id_card", field)
if user != nil {
return user
user, err = GetUserByField(organization, "id_card", field)
if user != nil || err != nil {
return user, err
}
return nil
return nil, nil
}
func SetUserField(user *User, field string, value string) bool {
func SetUserField(user *User, field string, value string) (bool, error) {
bean := make(map[string]interface{})
if field == "password" {
organization := GetOrganizationByUser(user)
organization, err := GetOrganizationByUser(user)
if err != nil {
return false, err
}
user.UpdateUserPassword(organization)
bean[strings.ToLower(field)] = user.Password
bean["password_type"] = user.PasswordType
@ -89,17 +97,25 @@ func SetUserField(user *User, field string, value string) bool {
affected, err := adapter.Engine.Table(user).ID(core.PK{user.Owner, user.Name}).Update(bean)
if err != nil {
panic(err)
return false, err
}
user, err = getUser(user.Owner, user.Name)
if err != nil {
return false, err
}
err = user.UpdateUserHash()
if err != nil {
return false, err
}
user = getUser(user.Owner, user.Name)
user.UpdateUserHash()
_, err = adapter.Engine.ID(core.PK{user.Owner, user.Name}).Cols("hash").Update(user)
if err != nil {
panic(err)
return false, err
}
return affected != 0
return affected != 0, nil
}
func GetUserField(user *User, field string) string {
@ -121,7 +137,7 @@ func setUserProperty(user *User, field string, value string) {
}
}
func SetUserOAuthProperties(organization *Organization, user *User, providerType string, userInfo *idp.UserInfo) bool {
func SetUserOAuthProperties(organization *Organization, user *User, providerType string, userInfo *idp.UserInfo) (bool, error) {
if userInfo.Id != "" {
propertyName := fmt.Sprintf("oauth_%s_id", providerType)
setUserProperty(user, propertyName, userInfo.Id)
@ -164,11 +180,10 @@ func SetUserOAuthProperties(organization *Organization, user *User, providerType
}
}
affected := UpdateUserForAllFields(user.GetId(), user)
return affected
return UpdateUserForAllFields(user.GetId(), user)
}
func ClearUserOAuthProperties(user *User, providerType string) bool {
func ClearUserOAuthProperties(user *User, providerType string) (bool, error) {
for k := range user.Properties {
prefix := fmt.Sprintf("oauth_%s_", providerType)
if strings.HasPrefix(k, prefix) {
@ -178,14 +193,18 @@ func ClearUserOAuthProperties(user *User, providerType string) bool {
affected, err := adapter.Engine.ID(core.PK{user.Owner, user.Name}).Cols("properties").Update(user)
if err != nil {
panic(err)
return false, err
}
return affected != 0
return affected != 0, nil
}
func CheckPermissionForUpdateUser(oldUser, newUser *User, isAdmin bool, lang string) (bool, string) {
organization := GetOrganizationByUser(oldUser)
organization, err := GetOrganizationByUser(oldUser)
if err != nil {
return false, err.Error()
}
var itemsChanged []*AccountItem
if oldUser.Owner != newUser.Owner {
@ -310,7 +329,7 @@ func (user *User) GetCountryCode(countryCode string) string {
return user.CountryCode
}
if org := GetOrganizationByUser(user); org != nil && len(org.CountryCodes) > 0 {
if org, _ := GetOrganizationByUser(user); org != nil && len(org.CountryCodes) > 0 {
return org.CountryCodes[0]
}
return ""