all repos — postern @ main

Modern mail management

internal/imap/imap.go (view raw)

 1package imap
 2
 3import (
 4	"crypto/tls"
 5	"sync"
 6
 7	"postern/internal/db"
 8	"postern/internal/persistence"
 9	"postern/internal/policy"
10
11	"github.com/emersion/go-imap/v2/imapserver"
12)
13
14type Config struct {
15	DB           *db.DB
16	Listen       string
17	Persistence  *persistence.Persistence
18	TLSConfig    *tls.Config
19	PolicyEngine *policy.Engine
20}
21type Server struct {
22	db           *db.DB
23	mTracker     *mailboxTrackerRegistry
24	listen       string
25	persistence  *persistence.Persistence
26	tlsConfig    *tls.Config
27	policyEngine *policy.Engine
28
29	mu      sync.Mutex
30	imapSrv *imapserver.Server
31	status  string
32}
33
34func NewServer(config *Config) (*Server, error) {
35	return &Server{
36		mTracker:     newMailboxTrackerRegistry(),
37		db:           config.DB,
38		listen:       config.Listen,
39		persistence:  config.Persistence,
40		tlsConfig:    config.TLSConfig,
41		policyEngine: config.PolicyEngine,
42	}, nil
43}