in pkg/client/keycloak/adapter/gocloak_adapter_realms.go [192:224]
func (a GoCloakAdapter) SyncRealmIdentityProviderMappers(realmName string, mappers []dto.IdentityProviderMapper) error {
realm, err := a.client.GetRealm(context.Background(), a.token.AccessToken, realmName)
if err != nil {
return errors.Wrapf(err, "unable to get realm by name: %s", realmName)
}
currentMappers := make(map[string]*dto.IdentityProviderMapper)
if realm.IdentityProviderMappers != nil {
for _, idpm := range *realm.IdentityProviderMappers {
if idpmTyped, ok := decodeIdentityProviderMapper(idpm); ok {
currentMappers[idpmTyped.Name] = idpmTyped
}
}
}
for _, claimedMapper := range mappers {
if idpmTyped, ok := currentMappers[claimedMapper.Name]; ok {
claimedMapper.ID = idpmTyped.ID
if err := a.updateIdentityProviderMapper(realmName, claimedMapper); err != nil {
return errors.Wrapf(err, "unable to update idp mapper: %+v", claimedMapper)
}
continue
}
if err := a.createIdentityProviderMapper(realmName, claimedMapper); err != nil {
return errors.Wrapf(err, "unable to create idp mapper: %+v", claimedMapper)
}
}
return nil
}