mirror of
https://github.com/casdoor/casdoor.git
synced 2025-05-23 10:45:47 +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
|
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()
|
||||||
|
@ -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)
|
||||||
|
}
|
||||||
|
@ -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)
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
|
}
|
||||||
|
@ -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[:])
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user