From 067ae5448fb7e1b97fb40f6a970795e8ec3aacd4 Mon Sep 17 00:00:00 2001 From: Steve0x2a Date: Mon, 27 Dec 2021 18:55:25 +0800 Subject: [PATCH] fix: idp using goth shows wrong display name (#398) * fix: adjust the accessToken field Signed-off-by: 0x2a * fix: missing name and owner Signed-off-by: 0x2a * fix: get wrong display name Signed-off-by: 0x2a --- idp/goth.go | 23 ++++++++++++++++++++--- util/string.go | 12 ++++++++++++ 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/idp/goth.go b/idp/goth.go index a87b99e1..18f5a8b4 100644 --- a/idp/goth.go +++ b/idp/goth.go @@ -21,6 +21,7 @@ import ( "reflect" "time" + "github.com/casbin/casdoor/util" "github.com/markbates/goth" "github.com/markbates/goth/providers/amazon" "github.com/markbates/goth/providers/apple" @@ -244,11 +245,27 @@ func getUser(gothUser goth.User) *UserInfo { //Some idp return an empty Name //so construct the Name with firstname and lastname or nickname if user.Username == "" { - user.Username = fmt.Sprintf("%v%v", gothUser.FirstName, gothUser.LastName) + if gothUser.FirstName != "" && gothUser.LastName != "" { + user.Username = getName(gothUser.FirstName, gothUser.LastName) + } else { + user.Username = gothUser.NickName + } } - if user.Username == "" { - user.Username = gothUser.NickName + if user.DisplayName == "" { + if gothUser.FirstName != "" && gothUser.LastName != "" { + user.DisplayName = getName(gothUser.FirstName, gothUser.LastName) + } else { + user.DisplayName = user.Username + } } return &user } + +func getName(firstName, lastName string) string { + if util.IsChinese(firstName) || util.IsChinese(lastName) { + return fmt.Sprintf("%s%s", lastName, firstName) + } else { + return fmt.Sprintf("%s %s", firstName, lastName) + } +} diff --git a/util/string.go b/util/string.go index 65e9d823..3c6410f0 100644 --- a/util/string.go +++ b/util/string.go @@ -23,6 +23,7 @@ import ( "os" "strconv" "strings" + "unicode" "github.com/google/uuid" ) @@ -180,3 +181,14 @@ func SnakeString(s string) string { } return strings.ToLower(string(data[:])) } + +func IsChinese(str string) bool { + var flag bool + for _, v := range str { + if unicode.Is(unicode.Han, v) { + flag = true + break + } + } + return flag +}