func syncIDPMappers()

in controllers/keycloakrealmidentityprovider/keycloakrealmidentityprovider_controller.go [213:242]


func syncIDPMappers(ctx context.Context, idpSpec *keycloakApi.KeycloakRealmIdentityProviderSpec,
	kClient keycloak.Client, targetRealm string) error {
	if len(idpSpec.Mappers) == 0 {
		return nil
	}

	mappers, err := kClient.GetIDPMappers(ctx, targetRealm, idpSpec.Alias)
	if err != nil {
		return errors.Wrap(err, "unable to get idp mappers")
	}

	for _, m := range mappers {
		if err := kClient.DeleteIDPMapper(ctx, targetRealm, idpSpec.Alias, m.ID); err != nil {
			return errors.Wrap(err, "unable to delete idp mapper")
		}
	}

	for _, m := range idpSpec.Mappers {
		if m.IdentityProviderAlias == "" {
			m.IdentityProviderAlias = idpSpec.Alias
		}

		if _, err := kClient.CreateIDPMapper(ctx, targetRealm, idpSpec.Alias,
			createKeycloakIDPMapperFromSpec(&m)); err != nil {
			return errors.Wrap(err, "unable to create idp mapper")
		}
	}

	return nil
}