func()

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
}