mirror of
https://github.com/zitadel/zitadel.git
synced 2025-08-11 21:07:31 +00:00
feat: add http as smtp provider (#8545)
# Which Problems Are Solved Send Email messages as a HTTP call to a relay, for own logic on handling different Email providers # How the Problems Are Solved Create endpoints under Email provider to manage SMTP and HTTP in the notification handlers. # Additional Changes Clean up old logic in command and query side to handle the general Email providers with deactivate, activate and remove. # Additional Context Partially closes #8270 --------- Co-authored-by: Livio Spring <livio.a@gmail.com>
This commit is contained in:
140
internal/api/grpc/admin/email.go
Normal file
140
internal/api/grpc/admin/email.go
Normal file
@@ -0,0 +1,140 @@
|
||||
package admin
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/zitadel/zitadel/internal/api/authz"
|
||||
"github.com/zitadel/zitadel/internal/api/grpc/object"
|
||||
admin_pb "github.com/zitadel/zitadel/pkg/grpc/admin"
|
||||
)
|
||||
|
||||
func (s *Server) GetEmailProvider(ctx context.Context, req *admin_pb.GetEmailProviderRequest) (*admin_pb.GetEmailProviderResponse, error) {
|
||||
smtp, err := s.query.SMTPConfigActive(ctx, authz.GetInstance(ctx).InstanceID())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &admin_pb.GetEmailProviderResponse{
|
||||
Config: emailProviderToProviderPb(smtp),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *Server) GetEmailProviderById(ctx context.Context, req *admin_pb.GetEmailProviderByIdRequest) (*admin_pb.GetEmailProviderByIdResponse, error) {
|
||||
smtp, err := s.query.SMTPConfigByID(ctx, authz.GetInstance(ctx).InstanceID(), req.Id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &admin_pb.GetEmailProviderByIdResponse{
|
||||
Config: emailProviderToProviderPb(smtp),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *Server) AddEmailProviderSMTP(ctx context.Context, req *admin_pb.AddEmailProviderSMTPRequest) (*admin_pb.AddEmailProviderSMTPResponse, error) {
|
||||
config := addEmailProviderSMTPToConfig(ctx, req)
|
||||
if err := s.command.AddSMTPConfig(ctx, config); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &admin_pb.AddEmailProviderSMTPResponse{
|
||||
Details: object.DomainToChangeDetailsPb(config.Details),
|
||||
Id: config.ID,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *Server) UpdateEmailProviderSMTP(ctx context.Context, req *admin_pb.UpdateEmailProviderSMTPRequest) (*admin_pb.UpdateEmailProviderSMTPResponse, error) {
|
||||
config := updateEmailProviderSMTPToConfig(ctx, req)
|
||||
if err := s.command.ChangeSMTPConfig(ctx, config); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &admin_pb.UpdateEmailProviderSMTPResponse{
|
||||
Details: object.DomainToChangeDetailsPb(config.Details),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *Server) AddEmailProviderHTTP(ctx context.Context, req *admin_pb.AddEmailProviderHTTPRequest) (*admin_pb.AddEmailProviderHTTPResponse, error) {
|
||||
config := addEmailProviderHTTPToConfig(ctx, req)
|
||||
if err := s.command.AddSMTPConfigHTTP(ctx, config); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &admin_pb.AddEmailProviderHTTPResponse{
|
||||
Details: object.DomainToChangeDetailsPb(config.Details),
|
||||
Id: config.ID,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *Server) UpdateEmailProviderHTTP(ctx context.Context, req *admin_pb.UpdateEmailProviderHTTPRequest) (*admin_pb.UpdateEmailProviderHTTPResponse, error) {
|
||||
config := updateEmailProviderHTTPToConfig(ctx, req)
|
||||
if err := s.command.ChangeSMTPConfigHTTP(ctx, config); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &admin_pb.UpdateEmailProviderHTTPResponse{
|
||||
Details: object.DomainToChangeDetailsPb(config.Details),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *Server) RemoveEmailProvider(ctx context.Context, req *admin_pb.RemoveEmailProviderRequest) (*admin_pb.RemoveEmailProviderResponse, error) {
|
||||
details, err := s.command.RemoveSMTPConfig(ctx, authz.GetInstance(ctx).InstanceID(), req.Id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &admin_pb.RemoveEmailProviderResponse{
|
||||
Details: object.DomainToChangeDetailsPb(details),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *Server) UpdateEmailProviderSMTPPassword(ctx context.Context, req *admin_pb.UpdateEmailProviderSMTPPasswordRequest) (*admin_pb.UpdateEmailProviderSMTPPasswordResponse, error) {
|
||||
details, err := s.command.ChangeSMTPConfigPassword(ctx, authz.GetInstance(ctx).InstanceID(), req.Id, req.Password)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &admin_pb.UpdateEmailProviderSMTPPasswordResponse{
|
||||
Details: object.DomainToChangeDetailsPb(details),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *Server) ListEmailProviders(ctx context.Context, req *admin_pb.ListEmailProvidersRequest) (*admin_pb.ListEmailProvidersResponse, error) {
|
||||
queries, err := listEmailProvidersToModel(req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result, err := s.query.SearchSMTPConfigs(ctx, queries)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &admin_pb.ListEmailProvidersResponse{
|
||||
Details: object.ToListDetails(result.Count, result.Sequence, result.LastRun),
|
||||
Result: emailProvidersToPb(result.Configs),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *Server) ActivateEmailProvider(ctx context.Context, req *admin_pb.ActivateEmailProviderRequest) (*admin_pb.ActivateEmailProviderResponse, error) {
|
||||
result, err := s.command.ActivateSMTPConfig(ctx, authz.GetInstance(ctx).InstanceID(), req.Id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &admin_pb.ActivateEmailProviderResponse{
|
||||
Details: object.DomainToAddDetailsPb(result),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *Server) DeactivateEmailProvider(ctx context.Context, req *admin_pb.DeactivateEmailProviderRequest) (*admin_pb.DeactivateEmailProviderResponse, error) {
|
||||
result, err := s.command.DeactivateSMTPConfig(ctx, authz.GetInstance(ctx).InstanceID(), req.Id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &admin_pb.DeactivateEmailProviderResponse{
|
||||
Details: object.DomainToAddDetailsPb(result),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *Server) TestEmailProviderById(ctx context.Context, req *admin_pb.TestEmailProviderSMTPByIdRequest) (*admin_pb.TestEmailProviderSMTPByIdResponse, error) {
|
||||
if err := s.command.TestSMTPConfigById(ctx, authz.GetInstance(ctx).InstanceID(), req.Id, req.ReceiverAddress); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &admin_pb.TestEmailProviderSMTPByIdResponse{}, nil
|
||||
}
|
||||
|
||||
func (s *Server) TestEmailProviderSMTP(ctx context.Context, req *admin_pb.TestEmailProviderSMTPRequest) (*admin_pb.TestEmailProviderSMTPResponse, error) {
|
||||
if err := s.command.TestSMTPConfig(ctx, authz.GetInstance(ctx).InstanceID(), req.Id, req.ReceiverAddress, testEmailProviderSMTPToConfig(req)); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &admin_pb.TestEmailProviderSMTPResponse{}, nil
|
||||
}
|
Reference in New Issue
Block a user