Can sync update from 2nd DB.

This commit is contained in:
Yang Luo 2021-05-08 22:04:45 +08:00
parent c76a432003
commit de67ee9014
6 changed files with 57 additions and 23 deletions

View File

@ -198,7 +198,7 @@ func (c *ApiController) UploadAvatar() {
return return
} }
user.Avatar = fmt.Sprintf("%s%s.png?time=%s", object.GetAvatarPath(), user.Name, util.GetCurrentUnixTime()) user.Avatar = fmt.Sprintf("%s%s.png?time=%s", object.GetAvatarPath(), user.Name, util.GetCurrentUnixTime())
object.UpdateUser(user.Owner+"/"+user.Name, user) object.UpdateUser(user.GetId(), user)
resp = Response{Status: "ok", Msg: ""} resp = Response{Status: "ok", Msg: ""}
c.Data["json"] = resp c.Data["json"] = resp
c.ServeJSON() c.ServeJSON()

View File

@ -15,8 +15,6 @@
package object package object
import ( import (
"crypto/md5"
"encoding/hex"
"fmt" "fmt"
"reflect" "reflect"
"strings" "strings"
@ -237,17 +235,16 @@ func GetMaskedUsers(users []*User) []*User {
return users return users
} }
func getMd5Hash(text string) string {
hash := md5.Sum([]byte(text))
return hex.EncodeToString(hash[:])
}
func calculateHash(user *User) string { func calculateHash(user *User) string {
s := strings.Join([]string{user.Id, user.Password, user.DisplayName, user.Avatar, user.Phone}, "|") s := strings.Join([]string{user.Id, user.Password, user.DisplayName, user.Avatar, user.Phone}, "|")
return getMd5Hash(s) return util.GetMd5Hash(s)
} }
func (user *User) UpdateUserHash() { func (user *User) UpdateUserHash() {
hash := calculateHash(user) hash := calculateHash(user)
user.Hash = hash user.Hash = hash
} }
func (user *User) GetId() string {
return fmt.Sprintf("%s/%s", user.Owner, user.Name)
}

View File

@ -22,6 +22,10 @@ import (
"github.com/casdoor/casdoor/util" "github.com/casdoor/casdoor/util"
) )
func getFullAvatarUrl(avatar string) string {
return fmt.Sprintf("%s%s", avatarBaseUrl, avatar)
}
func createUserFromOriginalUser(originalUser *User) *object.User { func createUserFromOriginalUser(originalUser *User) *object.User {
user := &object.User{ user := &object.User{
Owner: orgName, Owner: orgName,
@ -31,7 +35,7 @@ func createUserFromOriginalUser(originalUser *User) *object.User {
Type: "normal-user", Type: "normal-user",
Password: originalUser.Password, Password: originalUser.Password,
DisplayName: originalUser.Name, DisplayName: originalUser.Name,
Avatar: fmt.Sprintf("%s%s", avatarBaseUrl, originalUser.Avatar), Avatar: getFullAvatarUrl(originalUser.Avatar),
Email: "", Email: "",
PhonePrefix: "86", PhonePrefix: "86",
Phone: originalUser.Cellphone, Phone: originalUser.Cellphone,
@ -46,8 +50,9 @@ func createUserFromOriginalUser(originalUser *User) *object.User {
func syncUsers() { func syncUsers() {
fmt.Printf("Running syncUsers()..\n") fmt.Printf("Running syncUsers()..\n")
userMap := getUserMap() users, userMap := getUserMap()
oUsers := getUsersOriginal() oUsers, _ := getUserMapOriginal()
fmt.Printf("Users: %d, oUsers: %d\n", len(users), len(oUsers))
newUsers := []*object.User{} newUsers := []*object.User{}
for _, oUser := range oUsers { for _, oUser := range oUsers {
@ -56,6 +61,14 @@ func syncUsers() {
user := createUserFromOriginalUser(oUser) user := createUserFromOriginalUser(oUser)
fmt.Printf("New user: %v\n", user) fmt.Printf("New user: %v\n", user)
newUsers = append(newUsers, user) newUsers = append(newUsers, user)
} else {
user := userMap[id]
hash := calculateHash(oUser)
if user.Hash != hash {
user := createUserFromOriginalUser(oUser)
object.UpdateUser(user.GetId(), user)
fmt.Printf("Update user: %v\n", user)
}
} }
} }
object.AddUsersSafe(newUsers) object.AddUsersSafe(newUsers)

View File

@ -16,12 +16,17 @@ package original
import "github.com/casdoor/casdoor/object" import "github.com/casdoor/casdoor/object"
func getUserMap() map[string]*object.User { func getUsers() []*object.User {
users := object.GetUsers(orgName) users := object.GetUsers(orgName)
return users
}
func getUserMap() ([]*object.User, map[string]*object.User) {
users := getUsers()
m := map[string]*object.User{} m := map[string]*object.User{}
for _, user := range users { for _, user := range users {
m[user.Name] = user m[user.Name] = user
} }
return m return users, m
} }

View File

@ -14,6 +14,13 @@
package original package original
import (
"strconv"
"strings"
"github.com/casdoor/casdoor/util"
)
type User struct { type User struct {
Id int `xorm:"int notnull pk autoincr" json:"id"` Id int `xorm:"int notnull pk autoincr" json:"id"`
Name string `xorm:"varchar(128)" json:"name"` Name string `xorm:"varchar(128)" json:"name"`
@ -37,12 +44,17 @@ func getUsersOriginal() []*User {
return users return users
} }
//func getUserMapOriginal() map[string]*User { func getUserMapOriginal() ([]*User, map[string]*User) {
// users := getUsersOriginal() users := getUsersOriginal()
//
// m := map[string]*User{} m := map[string]*User{}
// for _, user := range users { for _, user := range users {
// m[strconv.Itoa(user.Id)] = user m[strconv.Itoa(user.Id)] = user
// } }
// return m return users, m
//} }
func calculateHash(user *User) string {
s := strings.Join([]string{strconv.Itoa(user.Id), user.Password, user.Name, getFullAvatarUrl(user.Avatar), user.Cellphone}, "|")
return util.GetMd5Hash(s)
}

View File

@ -15,6 +15,8 @@
package util package util
import ( import (
"crypto/md5"
"encoding/hex"
"errors" "errors"
"fmt" "fmt"
"strings" "strings"
@ -38,3 +40,8 @@ func GenerateId() string {
func GetId(name string) string { func GetId(name string) string {
return fmt.Sprintf("admin/%s", name) return fmt.Sprintf("admin/%s", name)
} }
func GetMd5Hash(text string) string {
hash := md5.Sum([]byte(text))
return hex.EncodeToString(hash[:])
}