in pkg/client/keycloak/adapter/gocloak_adapter_user.go [60:108]
func (a GoCloakAdapter) createOrUpdateUser(ctx context.Context, realmName string, userDto *KeycloakUser, addOnly bool) (string, error) {
user, err := a.GetUserByName(ctx, realmName, userDto.Username)
if err != nil {
if !IsErrNotFound(err) {
return "", fmt.Errorf("unable to get user: %w", err)
}
kcUser := gocloak.User{
Username: &userDto.Username,
Enabled: &userDto.Enabled,
EmailVerified: &userDto.EmailVerified,
FirstName: &userDto.FirstName,
LastName: &userDto.LastName,
RequiredActions: &userDto.RequiredUserActions,
Email: &userDto.Email,
}
if len(userDto.Attributes) > 0 {
kcUser.Attributes = a.makeUserAttributes(&kcUser, userDto, addOnly)
}
var userID string
userID, err = a.client.CreateUser(ctx, a.token.AccessToken, realmName, kcUser)
if err != nil {
return "", fmt.Errorf("unable to create user: %w", err)
}
return userID, nil
}
user.Username = &userDto.Username
user.Enabled = &userDto.Enabled
user.EmailVerified = &userDto.EmailVerified
user.FirstName = &userDto.FirstName
user.LastName = &userDto.LastName
user.RequiredActions = &userDto.RequiredUserActions
user.Email = &userDto.Email
if len(userDto.Attributes) > 0 {
user.Attributes = a.makeUserAttributes(user, userDto, addOnly)
}
if err = a.client.UpdateUser(ctx, a.token.AccessToken, realmName, *user); err != nil {
return "", fmt.Errorf("unable to update user: %w", err)
}
return *user.ID, nil
}