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
}
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: ""}
c.Data["json"] = resp
c.ServeJSON()

View File

@ -15,8 +15,6 @@
package object
import (
"crypto/md5"
"encoding/hex"
"fmt"
"reflect"
"strings"
@ -237,17 +235,16 @@ func GetMaskedUsers(users []*User) []*User {
return users
}
func getMd5Hash(text string) string {
hash := md5.Sum([]byte(text))
return hex.EncodeToString(hash[:])
}
func calculateHash(user *User) string {
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() {
hash := calculateHash(user)
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"
)
func getFullAvatarUrl(avatar string) string {
return fmt.Sprintf("%s%s", avatarBaseUrl, avatar)
}
func createUserFromOriginalUser(originalUser *User) *object.User {
user := &object.User{
Owner: orgName,
@ -31,7 +35,7 @@ func createUserFromOriginalUser(originalUser *User) *object.User {
Type: "normal-user",
Password: originalUser.Password,
DisplayName: originalUser.Name,
Avatar: fmt.Sprintf("%s%s", avatarBaseUrl, originalUser.Avatar),
Avatar: getFullAvatarUrl(originalUser.Avatar),
Email: "",
PhonePrefix: "86",
Phone: originalUser.Cellphone,
@ -46,8 +50,9 @@ func createUserFromOriginalUser(originalUser *User) *object.User {
func syncUsers() {
fmt.Printf("Running syncUsers()..\n")
userMap := getUserMap()
oUsers := getUsersOriginal()
users, userMap := getUserMap()
oUsers, _ := getUserMapOriginal()
fmt.Printf("Users: %d, oUsers: %d\n", len(users), len(oUsers))
newUsers := []*object.User{}
for _, oUser := range oUsers {
@ -56,6 +61,14 @@ func syncUsers() {
user := createUserFromOriginalUser(oUser)
fmt.Printf("New user: %v\n", 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)

View File

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

View File

@ -14,6 +14,13 @@
package original
import (
"strconv"
"strings"
"github.com/casdoor/casdoor/util"
)
type User struct {
Id int `xorm:"int notnull pk autoincr" json:"id"`
Name string `xorm:"varchar(128)" json:"name"`
@ -37,12 +44,17 @@ func getUsersOriginal() []*User {
return users
}
//func getUserMapOriginal() map[string]*User {
// users := getUsersOriginal()
//
// m := map[string]*User{}
// for _, user := range users {
// m[strconv.Itoa(user.Id)] = user
// }
// return m
//}
func getUserMapOriginal() ([]*User, map[string]*User) {
users := getUsersOriginal()
m := map[string]*User{}
for _, user := range users {
m[strconv.Itoa(user.Id)] = user
}
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
import (
"crypto/md5"
"encoding/hex"
"errors"
"fmt"
"strings"
@ -38,3 +40,8 @@ func GenerateId() string {
func GetId(name string) string {
return fmt.Sprintf("admin/%s", name)
}
func GetMd5Hash(text string) string {
hash := md5.Sum([]byte(text))
return hex.EncodeToString(hash[:])
}