mirror of
https://github.com/h44z/wg-portal
synced 2025-02-26 05:49:14 +00:00
parent
d596f578f6
commit
26d3257516
@ -23,6 +23,7 @@ import (
|
||||
type UserManager interface {
|
||||
GetUser(context.Context, domain.UserIdentifier) (*domain.User, error)
|
||||
RegisterUser(ctx context.Context, user *domain.User) error
|
||||
UpdateUser(ctx context.Context, user *domain.User) (*domain.User, error)
|
||||
}
|
||||
|
||||
type Authenticator struct {
|
||||
@ -371,6 +372,11 @@ func (a *Authenticator) processUserInfo(
|
||||
}
|
||||
case err != nil:
|
||||
return nil, fmt.Errorf("registration disabled, cannot create missing user: %w", err)
|
||||
default:
|
||||
err = a.updateExternalUser(ctx, user, userInfo)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to update user: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
return user, nil
|
||||
@ -400,6 +406,9 @@ func (a *Authenticator) registerNewUser(
|
||||
return nil, fmt.Errorf("failed to register new user: %w", err)
|
||||
}
|
||||
|
||||
logrus.Tracef("registered user %s from external authentication provider, admin user: %t",
|
||||
user.Identifier, user.IsAdmin)
|
||||
|
||||
return user, nil
|
||||
}
|
||||
|
||||
@ -419,4 +428,54 @@ func (a *Authenticator) getAuthenticatorConfig(id string) (interface{}, error) {
|
||||
return nil, fmt.Errorf("no configuration for Authenticator id %s", id)
|
||||
}
|
||||
|
||||
func (a *Authenticator) updateExternalUser(
|
||||
ctx context.Context,
|
||||
existingUser *domain.User,
|
||||
userInfo *domain.AuthenticatorUserInfo,
|
||||
) error {
|
||||
if existingUser.IsLocked() || existingUser.IsDisabled() {
|
||||
return nil // user is locked or disabled, do not update
|
||||
}
|
||||
|
||||
isChanged := false
|
||||
if existingUser.Email != userInfo.Email {
|
||||
existingUser.Email = userInfo.Email
|
||||
isChanged = true
|
||||
}
|
||||
if existingUser.Firstname != userInfo.Firstname {
|
||||
existingUser.Firstname = userInfo.Firstname
|
||||
isChanged = true
|
||||
}
|
||||
if existingUser.Lastname != userInfo.Lastname {
|
||||
existingUser.Lastname = userInfo.Lastname
|
||||
isChanged = true
|
||||
}
|
||||
if existingUser.Phone != userInfo.Phone {
|
||||
existingUser.Phone = userInfo.Phone
|
||||
isChanged = true
|
||||
}
|
||||
if existingUser.Department != userInfo.Department {
|
||||
existingUser.Department = userInfo.Department
|
||||
isChanged = true
|
||||
}
|
||||
if existingUser.IsAdmin != userInfo.IsAdmin {
|
||||
existingUser.IsAdmin = userInfo.IsAdmin
|
||||
isChanged = true
|
||||
}
|
||||
|
||||
if !isChanged {
|
||||
return nil // nothing to update
|
||||
}
|
||||
|
||||
_, err := a.users.UpdateUser(ctx, existingUser)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to update user: %w", err)
|
||||
}
|
||||
|
||||
logrus.Tracef("updated user %s with data from external authentication provider, admin user: %t",
|
||||
existingUser.Identifier, existingUser.IsAdmin)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// endregion oauth authentication
|
||||
|
Loading…
Reference in New Issue
Block a user