package controller import ( zitadelv1alpha1 "gitea.corredorconect.com/software-engineering/zitadel-resources-operator/api/v1alpha1" "gitea.corredorconect.com/software-engineering/zitadel-resources-operator/pkg/controller/core" "context" "fmt" clientv2 "github.com/zitadel/zitadel-go/v3/pkg/client" "github.com/zitadel/zitadel-go/v3/pkg/client/zitadel/org/v2" "sigs.k8s.io/controller-runtime/pkg/client" ctrlClient "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" ) const ( organizationFinalizerName = "organization.zitadel.github.com/organization" ) type wrappedOrganizationFinalizer struct { client.Client organization *zitadelv1alpha1.Organization } func newWrappedOrganizationFinalizer(client client.Client, organization *zitadelv1alpha1.Organization) core.WrappedCoreFinalizer { return &wrappedOrganizationFinalizer{ Client: client, organization: organization, } } func (wf *wrappedOrganizationFinalizer) AddFinalizer(ctx context.Context) error { if wf.ContainsFinalizer() { return nil } return wf.patch(ctx, wf.organization, func(organization *zitadelv1alpha1.Organization) { controllerutil.AddFinalizer(organization, organizationFinalizerName) }) } func (wf *wrappedOrganizationFinalizer) RemoveFinalizer(ctx context.Context) error { if !wf.ContainsFinalizer() { return nil } return wf.patch(ctx, wf.organization, func(organization *zitadelv1alpha1.Organization) { controllerutil.RemoveFinalizer(wf.organization, organizationFinalizerName) }) } func (wr *wrappedOrganizationFinalizer) ContainsFinalizer() bool { return controllerutil.ContainsFinalizer(wr.organization, organizationFinalizerName) } func (wf *wrappedOrganizationFinalizer) Reconcile(ctx context.Context, ztdClient *clientv2.Client) error { if wf.organization.Status.OrganizationId != nil { if _, err := ztdClient.OrganizationServiceV2().DeleteOrganization(ctx, &org.DeleteOrganizationRequest{ OrganizationId: *wf.organization.Status.OrganizationId, }, ); err != nil { return fmt.Errorf("Error deleting organization: %v", err) } } return nil } func (wr *wrappedOrganizationFinalizer) patch(ctx context.Context, organization *zitadelv1alpha1.Organization, patchFn func(*zitadelv1alpha1.Organization)) error { patch := ctrlClient.MergeFrom(organization.DeepCopy()) patchFn(organization) if err := wr.Client.Patch(ctx, organization, patch); err != nil { return fmt.Errorf("error patching Organization finalizer: %v", err) } return nil }