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}