func()

in pkg/client/keycloak/adapter/gocloak_adapter_roles.go [25:68]


func (a GoCloakAdapter) createOrUpdateRealmRole(ctx context.Context, realmName string, role *dto.PrimaryRealmRole) error {
	exists := true

	currentRealmRole, err := a.client.GetRealmRole(ctx, a.token.AccessToken, realmName, role.Name)
	if err != nil {
		if !IsErrNotFound(err) {
			return fmt.Errorf("failed to get realm role: %w", err)
		}

		exists = false
	}

	if exists {
		role.ID = currentRealmRole.ID
	}

	if !exists {
		var roleID string

		if roleID, err = a.CreatePrimaryRealmRole(ctx, realmName, role); err != nil {
			return err
		}

		role.ID = &roleID
	}

	if role.IsComposite {
		if err = a.syncRoleComposites(ctx, realmName, role); err != nil {
			return err
		}
	}

	if exists {
		currentRealmRole.Composite = &role.IsComposite
		currentRealmRole.Attributes = &role.Attributes
		currentRealmRole.Description = &role.Description

		if err = a.client.UpdateRealmRole(ctx, a.token.AccessToken, realmName, role.Name, *currentRealmRole); err != nil {
			return errors.Wrap(err, "unable to update realm role")
		}
	}

	return nil
}