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" "sigs.k8s.io/controller-runtime/pkg/client" ctrlClient "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" ) const ( ConnectionFinalizerName = "connection.zitadel.github.com/connection" ) type wrappedConnectionFinalizer struct { client.Client Connection *zitadelv1alpha1.Connection refresolver *zitadelv1alpha1.RefResolver } func newWrappedConnectionFinalizer(client client.Client, Connection *zitadelv1alpha1.Connection, refresolver *zitadelv1alpha1.RefResolver) core.WrappedCoreFinalizer { return &wrappedConnectionFinalizer{ Client: client, Connection: Connection, refresolver: refresolver, } } func (wf *wrappedConnectionFinalizer) AddFinalizer(ctx context.Context) error { if wf.ContainsFinalizer() { return nil } return wf.patch(ctx, wf.Connection, func(Connection *zitadelv1alpha1.Connection) { controllerutil.AddFinalizer(Connection, ConnectionFinalizerName) }) } func (wf *wrappedConnectionFinalizer) RemoveFinalizer(ctx context.Context) error { if !wf.ContainsFinalizer() { return nil } return wf.patch(ctx, wf.Connection, func(Connection *zitadelv1alpha1.Connection) { controllerutil.RemoveFinalizer(wf.Connection, ConnectionFinalizerName) }) } func (wr *wrappedConnectionFinalizer) ContainsFinalizer() bool { return controllerutil.ContainsFinalizer(wr.Connection, ConnectionFinalizerName) } func (wf *wrappedConnectionFinalizer) Reconcile(ctx context.Context, ztdClient *clientv2.Client) error { return nil } func (wr *wrappedConnectionFinalizer) patch(ctx context.Context, Connection *zitadelv1alpha1.Connection, patchFn func(*zitadelv1alpha1.Connection)) error { patch := ctrlClient.MergeFrom(Connection.DeepCopy()) patchFn(Connection) if err := wr.Client.Patch(ctx, Connection, patch); err != nil { return fmt.Errorf("error patching Connection finalizer: %v", err) } return nil }