Skip to content

Commit 1c5af93

Browse files
Merge pull request #4977 from linuxfoundation/unicron-4974-updating-user_name-field
Unicron 4974 updating user name field
2 parents 74cc71b + 2109db8 commit 1c5af93

7 files changed

Lines changed: 109 additions & 26 deletions

File tree

cla-backend-go/auth/authorizer.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,10 @@ func (a Authorizer) SecurityAuth(token string, scopes []string) (*user.CLAUser,
134134
}
135135
return nil, err
136136
}
137+
138+
if name != "" {
139+
lfuser.Name = name
140+
}
137141
//log.WithFields(f).Debugf("user loaded : %+v with scopes : %+v", lfuser, scopes)
138142

139143
for _, scope := range scopes {

cla-backend-go/cmd/server.go

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -746,6 +746,27 @@ func responseLoggingMiddleware(next http.Handler) http.Handler {
746746
})
747747
}
748748

749+
func refreshStoredUserName(usersService users.Service, userModel *models.User, claUser *user.CLAUser) *models.User {
750+
if userModel == nil || claUser == nil || claUser.Name == "" || userModel.Username == claUser.Name {
751+
return userModel
752+
}
753+
754+
updatedUser, err := usersService.UpdateUser(userModel.UserID, map[string]interface{}{
755+
"user_name": claUser.Name,
756+
"date_modified": time.Now().UTC().Format(time.RFC3339),
757+
})
758+
if err != nil {
759+
log.WithFields(logrus.Fields{
760+
"functionName": "cmd.refreshStoredUserName",
761+
"userID": userModel.UserID,
762+
"lfUsername": claUser.LFUsername,
763+
}).WithError(err).Warn("unable to refresh stored user_name from current identity claims")
764+
return userModel
765+
}
766+
767+
return updatedUser
768+
}
769+
749770
// create user form http authorization token
750771
// this function creates user if user does not exist and token is valid
751772
func createUserFromRequest(authorizer auth.Authorizer, usersService users.Service, eventsService events.Service, r *http.Request) *http.Request {
@@ -788,8 +809,9 @@ func createUserFromRequest(authorizer auth.Authorizer, usersService users.Servic
788809
return r
789810
}
790811
}
791-
// If found - just return
812+
// If found - refresh the stored display name and return
792813
if userModel != nil {
814+
userModel = refreshStoredUserName(usersService, userModel, claUser)
793815
if !needToStoreUser {
794816
return r
795817
}
@@ -807,8 +829,9 @@ func createUserFromRequest(authorizer auth.Authorizer, usersService users.Servic
807829
return r
808830
}
809831
}
810-
// If found - just return
832+
// If found - refresh the stored display name and return
811833
if userModel != nil {
834+
userModel = refreshStoredUserName(usersService, userModel, claUser)
812835
if !needToStoreUser {
813836
return r
814837
}

cla-backend-go/v2/gitlab_organizations/service.go

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -888,6 +888,28 @@ func (s *Service) InitiateSignRequest(ctx context.Context, req *http.Request, gi
888888
return &consoleURL, nil
889889
}
890890

891+
func (s *Service) refreshGitLabUserName(ctx context.Context, claUser *models.User, gitlabUser *goGitLab.User) *models.User {
892+
if claUser == nil || gitlabUser == nil || gitlabUser.Name == "" || claUser.Username == gitlabUser.Name {
893+
return claUser
894+
}
895+
896+
updatedUser, err := s.userService.UpdateUser(claUser.UserID, map[string]interface{}{
897+
"user_name": gitlabUser.Name,
898+
"date_modified": time.Now().UTC().Format(time.RFC3339),
899+
})
900+
if err != nil {
901+
log.WithFields(logrus.Fields{
902+
"functionName": "v2.gitlab_organizations.service.refreshGitLabUserName",
903+
utils.XREQUESTID: ctx.Value(utils.XREQUESTID),
904+
"userID": claUser.UserID,
905+
"gitlabUserID": gitlabUser.ID,
906+
}).WithError(err).Warn("unable to refresh stored GitLab user_name")
907+
return claUser
908+
}
909+
910+
return updatedUser
911+
}
912+
891913
func (s *Service) getOrCreateUser(ctx context.Context, gitlabClient *goGitLab.Client, eventsService events.Service) (*models.User, error) {
892914

893915
f := logrus.Fields{
@@ -927,7 +949,7 @@ func (s *Service) getOrCreateUser(ctx context.Context, gitlabClient *goGitLab.Cl
927949
})
928950
return claUser, nil
929951
}
930-
return claUser, nil
952+
return s.refreshGitLabUserName(ctx, claUser, gitlabUser), nil
931953
}
932954

933955
func buildInstallationURL(gitlabOrgID string, authStateNonce string) *strfmt.URI {

cla-backend-go/v2/gitlab_sign/service.go

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,28 @@ func (s service) InitiateSignRequest(ctx context.Context, req *http.Request, git
181181
return &consoleURL, nil
182182
}
183183

184+
func (s service) refreshGitLabUserName(ctx context.Context, claUser *models.User, gitlabUser *gitlab.User) *models.User {
185+
if claUser == nil || gitlabUser == nil || gitlabUser.Name == "" || claUser.Username == gitlabUser.Name {
186+
return claUser
187+
}
188+
189+
updatedUser, err := s.userService.UpdateUser(claUser.UserID, map[string]interface{}{
190+
"user_name": gitlabUser.Name,
191+
"date_modified": time.Now().UTC().Format(time.RFC3339),
192+
})
193+
if err != nil {
194+
log.WithFields(logrus.Fields{
195+
"functionName": "v2.gitlab_sign.service.refreshGitLabUserName",
196+
utils.XREQUESTID: ctx.Value(utils.XREQUESTID),
197+
"userID": claUser.UserID,
198+
"gitlabUserID": gitlabUser.ID,
199+
}).WithError(err).Warn("unable to refresh stored GitLab user_name")
200+
return claUser
201+
}
202+
203+
return updatedUser
204+
}
205+
184206
func (s service) getOrCreateUser(ctx context.Context, gitlabClient *gitlab.Client, eventsService events.Service) (*models.User, error) {
185207
f := logrus.Fields{
186208
"functionName": "v2.gitlab_sign.service.getOrCreateUser",
@@ -197,23 +219,23 @@ func (s service) getOrCreateUser(ctx context.Context, gitlabClient *gitlab.Clien
197219
claUser, err := s.userService.GetUserByGitlabID(gitlabUser.ID)
198220
if err == nil && claUser != nil {
199221
log.WithFields(f).Debugf("found user by GitLab ID: %d", gitlabUser.ID)
200-
return claUser, nil
222+
return s.refreshGitLabUserName(ctx, claUser, gitlabUser), nil
201223
}
202-
log.WithFields(f).Debugf("unable to lookup user by github ID: %d, error: %+v ", gitlabUser.ID, err)
224+
log.WithFields(f).Debugf("unable to lookup user by GitLab ID: %d, error: %+v ", gitlabUser.ID, err)
203225

204226
log.WithFields(f).Debugf("looking up user by GitLab username: %s", gitlabUser.Username)
205227
claUser, err = s.userService.GetUserByGitLabUsername(gitlabUser.Username)
206228
if err == nil && claUser != nil {
207229
log.WithFields(f).Debugf("found user by GitLab username: %s", gitlabUser.Username)
208-
return claUser, nil
230+
return s.refreshGitLabUserName(ctx, claUser, gitlabUser), nil
209231
}
210-
log.WithFields(f).Debugf("unable to lookup user by github username: %s, error: %+v ", gitlabUser.Username, err)
232+
log.WithFields(f).Debugf("unable to lookup user by GitLab username: %s, error: %+v ", gitlabUser.Username, err)
211233

212234
log.WithFields(f).Debugf("looking up user by GitLab email: %s", gitlabUser.Email)
213235
claUser, err = s.userService.GetUserByEmail(gitlabUser.Email)
214236
if err == nil && claUser != nil {
215237
log.WithFields(f).Debugf("found user by GitLab email: %s", gitlabUser.Email)
216-
return claUser, nil
238+
return s.refreshGitLabUserName(ctx, claUser, gitlabUser), nil
217239
}
218240

219241
log.WithFields(f).Infof("unable to locate GitLab user - creating a new user record for GitLab user : %+v ", gitlabUser)
@@ -225,8 +247,8 @@ func (s service) getOrCreateUser(ctx context.Context, gitlabClient *gitlab.Clien
225247
Username: gitlabUser.Name,
226248
}
227249
claUser, userErr := s.userService.CreateUser(user, nil)
228-
if err != nil {
229-
log.WithFields(f).Debugf("unable to create claUser with details : %+v, error: %+v", user, userErr)
250+
if userErr != nil {
251+
log.WithFields(f).Debugf("unable to create claUser with details: %+v, error: %+v", user, userErr)
230252
return nil, userErr
231253
}
232254

cla-backend/cla/controllers/user.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -512,5 +512,10 @@ def get_or_create_user(auth_user):
512512

513513
return user
514514

515-
# Just return the first matching record
516-
return users[0]
515+
# Just return the first matching record, but refresh the display name when it changed upstream.
516+
user = users[0]
517+
user_name = auth_user.name.strip() if auth_user.name else None
518+
if user_name and user.get_user_name() != user_name:
519+
user.set_user_name(user_name)
520+
user.save()
521+
return user

cla-backend/cla/models/docusign_models.py

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1182,21 +1182,20 @@ def request_corporate_signature(self, auth_user: object,
11821182
if platform_users:
11831183
platform_user = platform_users[0]
11841184

1185-
if cla_manager_user.get_user_name() is None:
1186-
# Lookup user in the platform user service...
1187-
cla.log.warning(f'{fn} - Loaded CLA Manager by username: {auth_user.username}, but '
1188-
'the user_name is missing from profile - required for DocuSign.')
1189-
user_name = platform_user.get('Name', None)
1190-
if user_name:
1191-
if cla_manager_user.get_user_name() != user_name:
1192-
cla.log.debug(f'{fn} - user_name: {user_name} update for cla_manager : {auth_user.username}...')
1193-
cla_manager_user.set_user_name(user_name)
1194-
cla_manager_user.save()
1195-
else:
1196-
cla.log.debug(f'{fn} - user_name values match - no need to update the local record')
1185+
user_name = platform_user.get('Name', None)
1186+
if user_name:
1187+
if cla_manager_user.get_user_name() != user_name:
1188+
if cla_manager_user.get_user_name() is None:
1189+
cla.log.warning(f'{fn} - Loaded CLA Manager by username: {auth_user.username}, but '
1190+
'the user_name is missing from profile - required for DocuSign.')
1191+
cla.log.debug(f'{fn} - user_name: {user_name} update for cla_manager : {auth_user.username}...')
1192+
cla_manager_user.set_user_name(user_name)
1193+
cla_manager_user.save()
11971194
else:
1198-
cla.log.warning(f'{fn} - Unable to locate the user\'s name from the platform user service model. '
1199-
'Unable to update the local user record.')
1195+
cla.log.debug(f'{fn} - user_name values match - no need to update the local record')
1196+
else:
1197+
cla.log.warning(f'{fn} - Unable to locate the user\'s name from the platform user service model. '
1198+
'Unable to update the local user record.')
12001199

12011200
if cla_manager_user.get_user_email() is None:
12021201
cla.log.warning(f'{fn} - Loaded CLA Manager by username: {auth_user.username}, but '

cla-backend/cla/models/github_models.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1462,6 +1462,10 @@ def get_or_create_user(self, request):
14621462
# update/set the github username if available
14631463
cla.utils.update_github_username(github_user, user)
14641464

1465+
github_name = github_user.get("name")
1466+
if github_name and user.get_user_name() != github_name:
1467+
user.set_user_name(github_name)
1468+
14651469
user.set_user_emails(emails)
14661470
user.save()
14671471
return user
@@ -1486,6 +1490,10 @@ def get_or_create_user(self, request):
14861490
# update/set the github username if available
14871491
cla.utils.update_github_username(github_user, user)
14881492

1493+
github_name = github_user.get("name")
1494+
if github_name and user.get_user_name() != github_name:
1495+
user.set_user_name(github_name)
1496+
14891497
user.set_user_emails(emails)
14901498
user.save()
14911499
cla.log.debug(f"{fn} - Loaded GitHub user by email: {user}")

0 commit comments

Comments
 (0)