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
}