feat(GODT-2799): SMTP service interacts directly with Server Manager

Bridge no longer needs to manually add and remove accounts from the
service.
This commit is contained in:
Leander Beernaert
2023-08-08 14:14:52 +02:00
parent ded4f370dc
commit 20b188368a
6 changed files with 88 additions and 30 deletions

View File

@ -97,7 +97,8 @@ func New(
maxSyncMemory uint64,
statsDir string,
telemetryManager telemetry.Availability,
serverManager imapservice.IMAPServerManager,
imapServerManager imapservice.IMAPServerManager,
smtpServerManager smtp.ServerManager,
eventSubscription events.Subscription,
) (*User, error) {
user, err := newImpl(
@ -111,7 +112,8 @@ func New(
maxSyncMemory,
statsDir,
telemetryManager,
serverManager,
imapServerManager,
smtpServerManager,
eventSubscription,
)
if err != nil {
@ -138,7 +140,8 @@ func newImpl(
maxSyncMemory uint64,
statsDir string,
telemetryManager telemetry.Availability,
serverManager imapservice.IMAPServerManager,
imapServerManager imapservice.IMAPServerManager,
smtpServerManager smtp.ServerManager,
eventSubscription events.Subscription,
) (*User, error) {
logrus.WithField("userID", apiUser.ID).Info("Creating new user")
@ -223,6 +226,7 @@ func newImpl(
user.eventService,
addressMode,
identityState.Clone(),
smtpServerManager,
)
user.imapService = imapservice.NewService(
@ -231,7 +235,7 @@ func newImpl(
user,
encVault,
user.eventService,
serverManager,
imapServerManager,
user,
encVault,
encVault,
@ -282,7 +286,9 @@ func newImpl(
user.identityService.Start(ctx, user.serviceGroup)
// Start SMTP Service
user.smtpService.Start(ctx, user.serviceGroup)
if err := user.smtpService.Start(ctx, user.serviceGroup); err != nil {
return user, fmt.Errorf("failed to start smtp service: %w", err)
}
// Start IMAP Service
if err := user.imapService.Start(ctx, user.serviceGroup); err != nil {
@ -548,8 +554,12 @@ func (user *User) Logout(ctx context.Context, withAPI bool) error {
user.log.Debug("Canceling ongoing tasks")
if err := user.smtpService.OnLogout(ctx); err != nil {
return fmt.Errorf("failed to remove user from smtp server: %w", err)
}
if err := user.imapService.OnLogout(ctx); err != nil {
return fmt.Errorf("failed to remove user from server: %w", err)
return fmt.Errorf("failed to remove user from imap server: %w", err)
}
// Stop Services

View File

@ -28,6 +28,7 @@ import (
"github.com/ProtonMail/proton-bridge/v3/internal/certs"
"github.com/ProtonMail/proton-bridge/v3/internal/events"
"github.com/ProtonMail/proton-bridge/v3/internal/services/imapservice"
"github.com/ProtonMail/proton-bridge/v3/internal/services/smtp"
"github.com/ProtonMail/proton-bridge/v3/internal/telemetry/mocks"
"github.com/ProtonMail/proton-bridge/v3/internal/vault"
"github.com/ProtonMail/proton-bridge/v3/tests"
@ -155,7 +156,8 @@ func withUser(tb testing.TB, ctx context.Context, _ *server.Server, m *proton.Ma
manager.EXPECT().IsTelemetryAvailable(context.Background()).AnyTimes()
nullEventSubscription := events.NewNullSubscription()
nullServerManager := imapservice.NewNullIMAPServerManager()
nullIMAPServerManager := imapservice.NewNullIMAPServerManager()
nullSMTPServerManager := smtp.NewNullServerManager()
user, err := New(
ctx,
@ -168,7 +170,8 @@ func withUser(tb testing.TB, ctx context.Context, _ *server.Server, m *proton.Ma
vault.DefaultMaxSyncMemory,
tb.TempDir(),
manager,
nullServerManager,
nullIMAPServerManager,
nullSMTPServerManager,
nullEventSubscription,
)
require.NoError(tb, err)