Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

server: when registering a user, set user name if OIDC identity contains one #537

Merged
merged 1 commit into from
Aug 11, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
7 changes: 7 additions & 0 deletions server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -416,6 +416,13 @@ func (s *Server) Login(ident oidc.Identity, key string) (string, error) {
if err != nil {
return "", fmt.Errorf("getting created user: %v", err)
}

if ses.Identity.Name != "" && ses.Identity.Name != usr.DisplayName {
err = s.UserManager.SetDisplayName(usr, ses.Identity.Name)
if err != nil {
return "", fmt.Errorf("couldn't set display name for user: %v", err)
}
}
} else if err != nil {
return "", fmt.Errorf("getting user: %v", err)
}
Expand Down
36 changes: 36 additions & 0 deletions server/server_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -358,6 +358,42 @@ func TestServerLoginDisabledUser(t *testing.T) {
}
}

func TestServerLoginDisplayName(t *testing.T) {
f, err := makeTestFixtures()
if err != nil {
t.Fatalf("error making test fixtures: %v", err)
}

sm := f.sessionManager
sessionID, err := sm.NewSession(testConnectorIDOpenID, testClientID, "bogus", testRedirectURL, "", false, []string{"openid"})
if err != nil {
t.Fatalf("Unexpected error: %v", err)
}

key, err := sm.NewSessionKey(sessionID)
if err != nil {
t.Errorf("new session key: %v", err)
}

f.srv.RegisterOnFirstLogin = true

ident := oidc.Identity{ID: testUserRemoteID1, Name: "elroy", Email: "elroy@example.com"}
_, err = f.srv.Login(ident, key)
if err != nil {
t.Fatalf("Unexpected error: %v", err)
}

usr, err := f.srv.UserRepo.GetByEmail(nil, ident.Email)
if err != nil {
t.Fatalf("Couldn't retrieve user we just created: %v", err)
}

if usr.DisplayName != ident.Name {
t.Fatalf("User display name (%s) did not match name on identity (%s)",
usr.DisplayName, ident.Name)
}
}

func TestServerCodeToken(t *testing.T) {
f, err := makeTestFixtures()
if err != nil {
Expand Down
19 changes: 19 additions & 0 deletions user/manager/manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,25 @@ func (m *UserManager) Disable(userID string, disabled bool) error {
return nil
}

func (m *UserManager) SetDisplayName(usr user.User, displayName string) error {
tx, err := m.begin()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Need to check the error here

if err != nil {
return err
}
defer rollback(tx)

usr.DisplayName = displayName
if err = m.userRepo.Update(tx, usr); err != nil {
return err
}

if err = tx.Commit(); err != nil {
return err
}

return nil
}

// RegisterWithRemoteIdentity creates new user and attaches the given remote identity.
func (m *UserManager) RegisterWithRemoteIdentity(email string, emailVerified bool, rid user.RemoteIdentity) (string, error) {
tx, err := m.begin()
Expand Down