diff --git a/internal/services/smtp/service.go b/internal/services/smtp/service.go index cff2f67b..d1415312 100644 --- a/internal/services/smtp/service.go +++ b/internal/services/smtp/service.go @@ -31,6 +31,7 @@ import ( "github.com/ProtonMail/proton-bridge/v3/internal/services/sendrecorder" "github.com/ProtonMail/proton-bridge/v3/internal/services/userevents" "github.com/ProtonMail/proton-bridge/v3/internal/services/useridentity" + "github.com/ProtonMail/proton-bridge/v3/internal/usertypes" "github.com/ProtonMail/proton-bridge/v3/pkg/cpc" "github.com/sirupsen/logrus" ) @@ -41,13 +42,6 @@ type Telemetry interface { ReportSMTPAuthFailed(username string) } -type AddressMode int - -const ( - AddressModeCombined AddressMode = iota - AddressModeSplit -) - type Service struct { userID string panicHandler async.PanicHandler @@ -67,7 +61,7 @@ type Service struct { addressSubscriber *userevents.AddressChanneledSubscriber userSubscriber *userevents.UserChanneledSubscriber - addressMode AddressMode + addressMode usertypes.AddressMode } func NewService( @@ -80,7 +74,7 @@ func NewService( keyPassProvider useridentity.KeyPassProvider, telemetry Telemetry, eventService userevents.Subscribable, - mode AddressMode, + mode usertypes.AddressMode, identityState *useridentity.State, ) *Service { subscriberName := fmt.Sprintf("smpt-%v", userID) @@ -122,7 +116,7 @@ func (s *Service) SendMail(ctx context.Context, authID string, from string, to [ return err } -func (s *Service) SetAddressMode(ctx context.Context, mode AddressMode) error { +func (s *Service) SetAddressMode(ctx context.Context, mode usertypes.AddressMode) error { _, err := s.cpc.Send(ctx, &setAddressModeReq{mode: mode}) return err @@ -248,7 +242,7 @@ func (s *Service) sendMail(ctx context.Context, req *sendMailReq) error { } type setAddressModeReq struct { - mode AddressMode + mode usertypes.AddressMode } type checkAuthReq struct { diff --git a/internal/services/smtp/smtp.go b/internal/services/smtp/smtp.go index a59f7c10..8a19c04e 100644 --- a/internal/services/smtp/smtp.go +++ b/internal/services/smtp/smtp.go @@ -160,7 +160,7 @@ func (s *Service) smtpSendMail(ctx context.Context, authID string, from string, func (s *Service) sendWithKey( ctx context.Context, authAddrID string, - addrMode AddressMode, + addrMode usertypes.AddressMode, settings proton.MailSettings, userKR, addrKR *crypto.KeyRing, emails []string, @@ -241,7 +241,7 @@ func getParentID( ctx context.Context, client *proton.Client, authAddrID string, - addrMode AddressMode, + addrMode usertypes.AddressMode, references []string, ) (string, error) { var ( @@ -263,7 +263,7 @@ func getParentID( for _, internal := range internal { var addrID string - if addrMode == AddressModeSplit { + if addrMode == usertypes.AddressModeSplit { addrID = authAddrID } @@ -291,7 +291,7 @@ func getParentID( if parentID == "" && len(external) > 0 { var addrID string - if addrMode == AddressModeSplit { + if addrMode == usertypes.AddressModeSplit { addrID = authAddrID } diff --git a/internal/user/user.go b/internal/user/user.go index 2fdbb86a..ff517bdb 100644 --- a/internal/user/user.go +++ b/internal/user/user.go @@ -224,7 +224,7 @@ func New( encVault, user, eventService, - vaultToSMTPAddressMode(encVault.AddressMode()), + usertypes.VaultToAddressMode(encVault.AddressMode()), identityState.Clone(), ) @@ -402,7 +402,7 @@ func (user *User) SetAddressMode(ctx context.Context, mode vault.AddressMode) er return fmt.Errorf("failed to set address mode: %w", err) } - if err := user.smtpService.SetAddressMode(ctx, vaultToSMTPAddressMode(mode)); err != nil { + if err := user.smtpService.SetAddressMode(ctx, usertypes.VaultToAddressMode(mode)); err != nil { return fmt.Errorf("failed to set smtp address mode: %w", err) } @@ -917,15 +917,3 @@ func sleepCtx(ctx context.Context, d time.Duration) { case <-time.After(d): } } - -func vaultToSMTPAddressMode(mode vault.AddressMode) smtp.AddressMode { - var smtpAddressMode smtp.AddressMode - - if mode == vault.SplitMode { - smtpAddressMode = smtp.AddressModeSplit - } else { - smtpAddressMode = smtp.AddressModeCombined - } - - return smtpAddressMode -} diff --git a/internal/usertypes/addressmode.go b/internal/usertypes/addressmode.go new file mode 100644 index 00000000..9c969f41 --- /dev/null +++ b/internal/usertypes/addressmode.go @@ -0,0 +1,47 @@ +// Copyright (c) 2023 Proton AG +// +// This file is part of Proton Mail Bridge. +// +// Proton Mail Bridge is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Proton Mail Bridge is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Proton Mail Bridge. If not, see . + +package usertypes + +import "github.com/ProtonMail/proton-bridge/v3/internal/vault" + +type AddressMode int + +const ( + AddressModeCombined AddressMode = iota + AddressModeSplit +) + +func VaultToAddressMode(mode vault.AddressMode) AddressMode { + var smtpAddressMode AddressMode + + if mode == vault.SplitMode { + smtpAddressMode = AddressModeSplit + } else { + smtpAddressMode = AddressModeCombined + } + + return smtpAddressMode +} + +func AddressModeToVault(mode AddressMode) vault.AddressMode { + if mode == AddressModeCombined { + return vault.CombinedMode + } + + return vault.SplitMode +}