From 7e7e721792f9c95fcfcdcaed8acb3b0e32bd11b1 Mon Sep 17 00:00:00 2001 From: Haim Kortovich Date: Tue, 31 Dec 2024 15:54:02 -0500 Subject: [PATCH] fix smtp flow [ZITADOPER-7] --- .../controller/zitadelcluster_controller.go | 87 +++++++++---------- 1 file changed, 41 insertions(+), 46 deletions(-) diff --git a/src/internal/controller/zitadelcluster_controller.go b/src/internal/controller/zitadelcluster_controller.go index c82d730..2209722 100644 --- a/src/internal/controller/zitadelcluster_controller.go +++ b/src/internal/controller/zitadelcluster_controller.go @@ -542,21 +542,50 @@ func (r *ZitadelClusterReconciler) reconcileSMTPConfig(ctx context.Context, zita return ctrl.Result{}, fmt.Errorf("Could add smtp trusted domain: %v", err) } } - var smtpId string - resp, err := adminClient.GetSMTPConfig(ctx, &adm.GetSMTPConfigRequest{}) + resp, err := adminClient.GetEmailProvider(ctx, &adm.GetEmailProviderRequest{}) if err != nil { - if !strings.Contains(err.Error(), "SMTP configuration not found") { + if strings.Contains(err.Error(), "not found") { + adminRequest := &adm.AddEmailProviderSMTPRequest{ + SenderAddress: zitadel.Spec.SMTPConfig.SenderAddress, + SenderName: zitadel.Spec.SMTPConfig.SenderName, + Tls: zitadel.Spec.SMTPConfig.TLS, + Host: zitadel.Spec.SMTPConfig.Host, + Description: "autogenerated by k8s-operator", + Password: "test", + } + if zitadel.Spec.SMTPConfig.User != nil && zitadel.Spec.SMTPConfig.Password != nil { + passwordSecret, err := r.RefResolver.SecretKeyRef(ctx, zitadel.Spec.SMTPConfig.Password.SecretKeyRef, zitadel.Namespace) + if err != nil { + return ctrl.Result{}, err + } + adminRequest.Password = passwordSecret + adminRequest.User = *zitadel.Spec.SMTPConfig.User + } + if zitadel.Spec.SMTPConfig.ReplyToAddress != nil { + adminRequest.ReplyToAddress = *zitadel.Spec.SMTPConfig.ReplyToAddress + } + + addRes, err := adminClient.AddEmailProviderSMTP(ctx, adminRequest) + if err != nil { + return ctrl.Result{}, fmt.Errorf("Could not add SMTP config: %v", err) + } + if _, err := adminClient.ActivateEmailProvider(ctx, &adm.ActivateEmailProviderRequest{ + Id: addRes.Id, + }); err != nil { + if !strings.Contains(err.Error(), "AlreadyActive") { + return ctrl.Result{}, fmt.Errorf("Error activating SMTP config: %v", err) + } + } + } else { return ctrl.Result{}, fmt.Errorf("Error getting SMTP config: %v", err) } - } - - if resp != nil && resp.SmtpConfig != nil { - adminRequest := &adm.UpdateSMTPConfigRequest{ + } else { + adminRequest := &adm.UpdateEmailProviderSMTPRequest{ SenderAddress: zitadel.Spec.SMTPConfig.SenderAddress, SenderName: zitadel.Spec.SMTPConfig.SenderName, Tls: zitadel.Spec.SMTPConfig.TLS, Host: zitadel.Spec.SMTPConfig.Host, - Id: resp.SmtpConfig.Id, + Id: resp.Config.Id, Password: "test", Description: "autogenerated by k8s-operator", } @@ -573,50 +602,16 @@ func (r *ZitadelClusterReconciler) reconcileSMTPConfig(ctx context.Context, zita adminRequest.ReplyToAddress = *zitadel.Spec.SMTPConfig.ReplyToAddress } - if _, err = adminClient.UpdateSMTPConfig(ctx, adminRequest); err != nil { + if _, err = adminClient.UpdateEmailProviderSMTP(ctx, adminRequest); err != nil { if !strings.Contains(err.Error(), "No changes") { return ctrl.Result{}, fmt.Errorf("Could not update SMTP config: %v", err) } } - smtpId = resp.SmtpConfig.Id - } else { - adminRequest := &adm.AddSMTPConfigRequest{ - SenderAddress: zitadel.Spec.SMTPConfig.SenderAddress, - SenderName: zitadel.Spec.SMTPConfig.SenderName, - Tls: zitadel.Spec.SMTPConfig.TLS, - Host: zitadel.Spec.SMTPConfig.Host, - Description: "autogenerated by k8s-operator", - Password: "test", - } - if zitadel.Spec.SMTPConfig.User != nil && zitadel.Spec.SMTPConfig.Password != nil { - passwordSecret, err := r.RefResolver.SecretKeyRef(ctx, zitadel.Spec.SMTPConfig.Password.SecretKeyRef, zitadel.Namespace) - if err != nil { - return ctrl.Result{}, err - } - adminRequest.Password = passwordSecret - adminRequest.User = *zitadel.Spec.SMTPConfig.User - } - if zitadel.Spec.SMTPConfig.ReplyToAddress != nil { - adminRequest.ReplyToAddress = *zitadel.Spec.SMTPConfig.ReplyToAddress - } - addRes, err := adminClient.AddSMTPConfig(ctx, adminRequest) - if err != nil { - return ctrl.Result{}, fmt.Errorf("Could not add SMTP config: %v", err) - } - smtpId = addRes.Id + patch := client.MergeFrom(zitadel.DeepCopy()) + return ctrl.Result{}, r.Status().Patch(ctx, zitadel, patch) } - - if _, err := adminClient.ActivateSMTPConfig(ctx, &adm.ActivateSMTPConfigRequest{ - Id: smtpId, - }); err != nil { - if !strings.Contains(err.Error(), "AlreadyActive") { - return ctrl.Result{}, fmt.Errorf("Error activating SMTP config: %v", err) - } - } - patch := client.MergeFrom(zitadel.DeepCopy()) - zitadel.Status.SMTPProviderId = smtpId - return ctrl.Result{}, r.Status().Patch(ctx, zitadel, patch) + return ctrl.Result{}, nil } func (r *ZitadelClusterReconciler) reconcileDomainPolicy(ctx context.Context, zitadel *zitadelv1alpha1.ZitadelCluster) (ctrl.Result, error) {