Add getCasdoorColumns().

This commit is contained in:
Yang Luo 2021-12-20 00:26:46 +08:00
parent db56f54b8c
commit e64f181e28
5 changed files with 57 additions and 25 deletions

View File

@ -41,7 +41,7 @@ func (syncer *Syncer) syncUsers() {
updatedUser := syncer.createUserFromOriginalUser(oUser, affiliationMap) updatedUser := syncer.createUserFromOriginalUser(oUser, affiliationMap)
updatedUser.Hash = oHash updatedUser.Hash = oHash
updatedUser.PreHash = oHash updatedUser.PreHash = oHash
UpdateUserForOriginalFields(updatedUser) syncer.updateUserForOriginalFields(updatedUser)
fmt.Printf("Update from oUser to user: %v\n", updatedUser) fmt.Printf("Update from oUser to user: %v\n", updatedUser)
} }
} else { } else {
@ -62,7 +62,7 @@ func (syncer *Syncer) syncUsers() {
updatedUser := syncer.createUserFromOriginalUser(oUser, affiliationMap) updatedUser := syncer.createUserFromOriginalUser(oUser, affiliationMap)
updatedUser.Hash = oHash updatedUser.Hash = oHash
updatedUser.PreHash = oHash updatedUser.PreHash = oHash
UpdateUserForOriginalFields(updatedUser) syncer.updateUserForOriginalFields(updatedUser)
fmt.Printf("Update from oUser to user (2nd condition): %v\n", updatedUser) fmt.Printf("Update from oUser to user (2nd condition): %v\n", updatedUser)
} }
} }

View File

@ -21,6 +21,7 @@ import (
"github.com/astaxie/beego" "github.com/astaxie/beego"
"github.com/casbin/casdoor/util" "github.com/casbin/casdoor/util"
"xorm.io/core"
) )
type OriginalUser = User type OriginalUser = User
@ -55,7 +56,7 @@ func (syncer *Syncer) addUser(user *OriginalUser) bool {
return affected != 0 return affected != 0
} }
func (syncer *Syncer) getActiveColumns() []string { func (syncer *Syncer) getOriginalColumns() []string {
res := []string{} res := []string{}
for _, tableColumn := range syncer.TableColumns { for _, tableColumn := range syncer.TableColumns {
if tableColumn.CasdoorName != "Id" { if tableColumn.CasdoorName != "Id" {
@ -65,9 +66,20 @@ func (syncer *Syncer) getActiveColumns() []string {
return res return res
} }
func (syncer *Syncer) getCasdoorColumns() []string {
res := []string{}
for _, tableColumn := range syncer.TableColumns {
if tableColumn.CasdoorName != "Id" {
v := util.CamelToSnakeCase(tableColumn.CasdoorName)
res = append(res, v)
}
}
return res
}
func (syncer *Syncer) updateUser(user *OriginalUser) bool { func (syncer *Syncer) updateUser(user *OriginalUser) bool {
m := syncer.getMapFromOriginalUser(user) m := syncer.getMapFromOriginalUser(user)
columns := syncer.getActiveColumns() columns := syncer.getOriginalColumns()
affected, err := syncer.Adapter.Engine.Table(syncer.Table).ID(syncer.TablePrimaryKey).Cols(columns...).Update(m) affected, err := syncer.Adapter.Engine.Table(syncer.Table).ID(syncer.TablePrimaryKey).Cols(columns...).Update(m)
if err != nil { if err != nil {
panic(err) panic(err)
@ -76,12 +88,33 @@ func (syncer *Syncer) updateUser(user *OriginalUser) bool {
return affected != 0 return affected != 0
} }
func (syncer *Syncer) updateUserForOriginalFields(user *User) bool {
owner, name := util.GetOwnerAndNameFromId(user.GetId())
oldUser := getUser(owner, name)
if oldUser == nil {
return false
}
if user.Avatar != oldUser.Avatar && user.Avatar != "" {
user.PermanentAvatar = getPermanentAvatarUrl(user.Owner, user.Name, user.Avatar)
}
columns := syncer.getCasdoorColumns()
columns = append(columns, "affiliation", "hash", "pre_hash")
affected, err := adapter.Engine.ID(core.PK{user.Owner, user.Name}).Cols(columns...).Update(user)
if err != nil {
panic(err)
}
return affected != 0
}
func (syncer *Syncer) calculateHash(user *OriginalUser) string { func (syncer *Syncer) calculateHash(user *OriginalUser) string {
values := []string{} values := []string{}
m := syncer.getMapFromOriginalUser(user) m := syncer.getMapFromOriginalUser(user)
for _, tableColumn := range syncer.TableColumns { for _, tableColumn := range syncer.TableColumns {
if tableColumn.IsHashed { if tableColumn.IsHashed {
values = append(values, m[tableColumn.CasdoorName]) values = append(values, m[tableColumn.Name])
} }
} }

View File

@ -52,6 +52,7 @@ func (syncer *Syncer) createUserFromOriginalUser(originalUser *OriginalUser, aff
if user.Type == "" { if user.Type == "" {
user.Type = "normal-user" user.Type = "normal-user"
} }
user.Avatar = syncer.getFullAvatarUrl(user.Avatar)
if originalUser.Score != 0 { if originalUser.Score != 0 {
affiliation, ok := affiliationMap[originalUser.Score] affiliation, ok := affiliationMap[originalUser.Score]
if !ok { if !ok {
@ -196,7 +197,7 @@ func (syncer *Syncer) getMapFromOriginalUser(user *OriginalUser) map[string]stri
m2 := map[string]string{} m2 := map[string]string{}
for _, tableColumn := range syncer.TableColumns { for _, tableColumn := range syncer.TableColumns {
m2[tableColumn.CasdoorName] = m[tableColumn.CasdoorName] m2[tableColumn.Name] = m[tableColumn.CasdoorName]
} }
return m2 return m2

View File

@ -289,25 +289,6 @@ func UpdateUserForAllFields(id string, user *User) bool {
return affected != 0 return affected != 0
} }
func UpdateUserForOriginalFields(user *User) bool {
owner, name := util.GetOwnerAndNameFromId(user.GetId())
oldUser := getUser(owner, name)
if oldUser == nil {
return false
}
if user.Avatar != oldUser.Avatar && user.Avatar != "" {
user.PermanentAvatar = getPermanentAvatarUrl(user.Owner, user.Name, user.Avatar)
}
affected, err := adapter.Engine.ID(core.PK{user.Owner, user.Name}).Cols("display_name", "password", "phone", "avatar", "affiliation", "score", "is_forbidden", "hash", "pre_hash").Update(user)
if err != nil {
panic(err)
}
return affected != 0
}
func AddUser(user *User) bool { func AddUser(user *User) bool {
if user.Id == "" { if user.Id == "" {
user.Id = util.GenerateId() user.Id = util.GenerateId()

View File

@ -15,6 +15,7 @@
package util package util
import ( import (
"bytes"
"crypto/md5" "crypto/md5"
"encoding/hex" "encoding/hex"
"errors" "errors"
@ -52,6 +53,22 @@ func BoolToString(b bool) string {
} }
} }
func CamelToSnakeCase(camel string) string {
var buf bytes.Buffer
for _, c := range camel {
if 'A' <= c && c <= 'Z' {
// just convert [A-Z] to _[a-z]
if buf.Len() > 0 {
buf.WriteRune('_')
}
buf.WriteRune(c - 'A' + 'a')
} else {
buf.WriteRune(c)
}
}
return buf.String()
}
func GetOwnerAndNameFromId(id string) (string, string) { func GetOwnerAndNameFromId(id string) (string, string) {
tokens := strings.Split(id, "/") tokens := strings.Split(id, "/")
if len(tokens) != 2 { if len(tokens) != 2 {