mirror of
https://github.com/casdoor/casdoor.git
synced 2025-05-23 02:35:49 +08:00
Can sync update from 2nd DB.
This commit is contained in:
parent
c76a432003
commit
de67ee9014
@ -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()
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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[:])
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user