aboutsummaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorBobby <[email protected]>2026-03-08 03:06:23 +0530
committerBobby <[email protected]>2026-03-08 03:06:23 +0530
commitcaf265e7050edefa64ecf7e13828ec9636bce867 (patch)
tree6bb8554dbb34695a74c2dca556bf512998cf62ab /utils
parentcca905d35412f1549400fc3d1aca6dc704d8cae6 (diff)
downloaddove-caf265e7050edefa64ecf7e13828ec9636bce867.tar.xz
dove-caf265e7050edefa64ecf7e13828ec9636bce867.zip
Refactor configuration handling and add mail management features
- Removed dependency on messages package in TOML loading and parsing. - Introduced new config constants and messages for better clarity and maintainability. - Implemented mail user and mailbox management with corresponding controllers and views. - Added new templates for mailboxes, mailbox creation, and user management. - Enhanced logging and error handling throughout the application. - Established a structured approach for applying default values in TOML configuration. - Created new utility functions for SMTP and email handling.
Diffstat (limited to 'utils')
-rw-r--r--utils/auth/auth.go4
-rw-r--r--utils/auth/constants.go5
-rw-r--r--utils/auth/defaults.go5
-rw-r--r--utils/email/constants.go7
-rw-r--r--utils/email/defaults.go7
-rw-r--r--utils/email/functions.go79
-rw-r--r--utils/email/parse.go98
-rw-r--r--utils/email/types.go24
-rw-r--r--utils/logger/constants.go25
-rw-r--r--utils/logger/defaults.go25
-rw-r--r--utils/logger/format.go63
-rw-r--r--utils/logger/functions.go53
-rw-r--r--utils/logger/logger.go18
-rw-r--r--utils/logger/messages.go5
-rw-r--r--utils/logger/types.go11
-rw-r--r--utils/smtp/defaults.go (renamed from utils/smtp/constants.go)2
-rw-r--r--utils/smtp/functions.go34
-rw-r--r--utils/smtp/messages.go15
-rw-r--r--utils/smtp/server.go45
-rw-r--r--utils/smtp/session.go36
-rw-r--r--utils/smtp/types.go13
-rw-r--r--utils/toml/apply.go (renamed from utils/toml/defaults.go)0
-rw-r--r--utils/toml/load.go3
-rw-r--r--utils/toml/messages.go7
-rw-r--r--utils/toml/parse.go5
25 files changed, 294 insertions, 295 deletions
diff --git a/utils/auth/auth.go b/utils/auth/auth.go
index b3d322c..976d903 100644
--- a/utils/auth/auth.go
+++ b/utils/auth/auth.go
@@ -13,7 +13,7 @@ func IsAuthenticated(context *fiber.Ctx) bool {
return false
}
- return activeSession.Get(SESSION_AUTHENTICATED_KEY) != nil
+ return activeSession.Get(AuthenticatedKey) != nil
}
func RequireAuthentication(handler fiber.Handler) fiber.Handler {
@@ -32,7 +32,7 @@ func Authenticate(context *fiber.Ctx) error {
return sessionError
}
- activeSession.Set(SESSION_AUTHENTICATED_KEY, true)
+ activeSession.Set(AuthenticatedKey, true)
return activeSession.Save()
}
diff --git a/utils/auth/constants.go b/utils/auth/constants.go
deleted file mode 100644
index 99f5a85..0000000
--- a/utils/auth/constants.go
+++ /dev/null
@@ -1,5 +0,0 @@
-package auth
-
-const (
- SESSION_AUTHENTICATED_KEY = "authenticated"
-)
diff --git a/utils/auth/defaults.go b/utils/auth/defaults.go
new file mode 100644
index 0000000..e15ea0b
--- /dev/null
+++ b/utils/auth/defaults.go
@@ -0,0 +1,5 @@
+package auth
+
+const (
+ AuthenticatedKey = "authenticated"
+)
diff --git a/utils/email/constants.go b/utils/email/constants.go
deleted file mode 100644
index 4f3009d..0000000
--- a/utils/email/constants.go
+++ /dev/null
@@ -1,7 +0,0 @@
-package email
-
-const (
- LOG_PREFIX = "Email"
- SNIPPET_LENGTH = 200
- ADDRESS_JOINER = ", "
-)
diff --git a/utils/email/defaults.go b/utils/email/defaults.go
new file mode 100644
index 0000000..56bee21
--- /dev/null
+++ b/utils/email/defaults.go
@@ -0,0 +1,7 @@
+package email
+
+const (
+ AddressJoiner = ", "
+ LogPrefix = "Email"
+ SnippetLength = 200
+) \ No newline at end of file
diff --git a/utils/email/functions.go b/utils/email/functions.go
deleted file mode 100644
index b65a98c..0000000
--- a/utils/email/functions.go
+++ /dev/null
@@ -1,79 +0,0 @@
-package email
-
-import (
- "net/mail"
- "strings"
-
- "github.com/jhillyerd/enmime"
-)
-
-func extractAddress(rawHeader string) string {
- parsed, parseError := mail.ParseAddress(rawHeader)
- if parseError != nil {
- return rawHeader
- }
-
- return parsed.Address
-}
-
-func extractName(rawHeader string) string {
- parsed, parseError := mail.ParseAddress(rawHeader)
- if parseError != nil {
- return ""
- }
-
- return parsed.Name
-}
-
-func extractAddressList(rawHeader string) []string {
- if rawHeader == "" {
- return nil
- }
-
- addresses, parseError := mail.ParseAddressList(rawHeader)
- if parseError != nil {
- return []string{rawHeader}
- }
-
- extracted := make([]string, len(addresses))
- for index, address := range addresses {
- extracted[index] = address.Address
- }
-
- return extracted
-}
-
-func generateSnippet(textBody string) string {
- trimmed := strings.TrimSpace(textBody)
- if len(trimmed) <= SNIPPET_LENGTH {
- return trimmed
- }
-
- return trimmed[:SNIPPET_LENGTH]
-}
-
-func extractAttachments(envelope *enmime.Envelope) []ParsedAttachment {
- var attachments []ParsedAttachment
-
- for _, attachment := range envelope.Attachments {
- attachments = append(attachments, ParsedAttachment{
- Filename: attachment.FileName,
- ContentType: attachment.ContentType,
- ContentID: attachment.ContentID,
- Size: int64(len(attachment.Content)),
- IsInline: false,
- })
- }
-
- for _, inline := range envelope.Inlines {
- attachments = append(attachments, ParsedAttachment{
- Filename: inline.FileName,
- ContentType: inline.ContentType,
- ContentID: inline.ContentID,
- Size: int64(len(inline.Content)),
- IsInline: true,
- })
- }
-
- return attachments
-}
diff --git a/utils/email/parse.go b/utils/email/parse.go
index 549ac2f..46acc85 100644
--- a/utils/email/parse.go
+++ b/utils/email/parse.go
@@ -2,10 +2,35 @@ package email
import (
"bytes"
+ "net/mail"
+ "strings"
"github.com/jhillyerd/enmime"
)
+type ParsedEmail struct {
+ MessageID string
+ FromAddress string
+ FromName string
+ ToAddresses []string
+ CcAddresses []string
+ BccAddresses []string
+ ReplyToAddress string
+ ReturnPath string
+ Subject string
+ Snippet string
+ Size int64
+ Attachments []ParsedAttachment
+}
+
+type ParsedAttachment struct {
+ Filename string
+ ContentType string
+ ContentID string
+ Size int64
+ IsInline bool
+}
+
func Parse(rawMessage []byte) (*ParsedEmail, error) {
envelope, parseError := enmime.ReadEnvelope(bytes.NewReader(rawMessage))
if parseError != nil {
@@ -26,4 +51,75 @@ func Parse(rawMessage []byte) (*ParsedEmail, error) {
Size: int64(len(rawMessage)),
Attachments: extractAttachments(envelope),
}, nil
-} \ No newline at end of file
+}
+
+func extractAddress(rawHeader string) string {
+ parsed, parseError := mail.ParseAddress(rawHeader)
+ if parseError != nil {
+ return rawHeader
+ }
+
+ return parsed.Address
+}
+
+func extractName(rawHeader string) string {
+ parsed, parseError := mail.ParseAddress(rawHeader)
+ if parseError != nil {
+ return ""
+ }
+
+ return parsed.Name
+}
+
+func extractAddressList(rawHeader string) []string {
+ if rawHeader == "" {
+ return nil
+ }
+
+ addresses, parseError := mail.ParseAddressList(rawHeader)
+ if parseError != nil {
+ return []string{rawHeader}
+ }
+
+ extracted := make([]string, len(addresses))
+ for index, address := range addresses {
+ extracted[index] = address.Address
+ }
+
+ return extracted
+}
+
+func generateSnippet(textBody string) string {
+ trimmed := strings.TrimSpace(textBody)
+ if len(trimmed) <= SnippetLength {
+ return trimmed
+ }
+
+ return trimmed[:SnippetLength]
+}
+
+func extractAttachments(envelope *enmime.Envelope) []ParsedAttachment {
+ var attachments []ParsedAttachment
+
+ for _, attachment := range envelope.Attachments {
+ attachments = append(attachments, ParsedAttachment{
+ Filename: attachment.FileName,
+ ContentType: attachment.ContentType,
+ ContentID: attachment.ContentID,
+ Size: int64(len(attachment.Content)),
+ IsInline: false,
+ })
+ }
+
+ for _, inline := range envelope.Inlines {
+ attachments = append(attachments, ParsedAttachment{
+ Filename: inline.FileName,
+ ContentType: inline.ContentType,
+ ContentID: inline.ContentID,
+ Size: int64(len(inline.Content)),
+ IsInline: true,
+ })
+ }
+
+ return attachments
+}
diff --git a/utils/email/types.go b/utils/email/types.go
deleted file mode 100644
index 497fad7..0000000
--- a/utils/email/types.go
+++ /dev/null
@@ -1,24 +0,0 @@
-package email
-
-type ParsedEmail struct {
- MessageID string
- FromAddress string
- FromName string
- ToAddresses []string
- CcAddresses []string
- BccAddresses []string
- ReplyToAddress string
- ReturnPath string
- Subject string
- Snippet string
- Size int64
- Attachments []ParsedAttachment
-}
-
-type ParsedAttachment struct {
- Filename string
- ContentType string
- ContentID string
- Size int64
- IsInline bool
-} \ No newline at end of file
diff --git a/utils/logger/constants.go b/utils/logger/constants.go
deleted file mode 100644
index aba37ae..0000000
--- a/utils/logger/constants.go
+++ /dev/null
@@ -1,25 +0,0 @@
-package logger
-
-const (
- ANSI_RESET = "\033[0m"
-)
-
-const (
- LEVEL_COLOR_DEBUG = "\033[35mDEBUG \033[0m"
- LEVEL_COLOR_ERROR = "\033[31mERROR \033[0m"
- LEVEL_COLOR_INFO = "\033[34mINFO \033[0m"
- LEVEL_COLOR_WARN = "\033[33mWARN \033[0m"
-)
-
-const (
- MESSAGE_COLOR_DEBUG = "\033[90m"
- MESSAGE_COLOR_ERROR = "\033[31m"
- MESSAGE_COLOR_INFO = "\033[97m"
- MESSAGE_COLOR_SUCCESS = "\033[32m"
- MESSAGE_COLOR_WARN = "\033[33m"
-)
-
-const (
- PREFIX_COLOR = "\033[36m"
- PREFIX_WIDTH = 15
-)
diff --git a/utils/logger/defaults.go b/utils/logger/defaults.go
new file mode 100644
index 0000000..dcc0b18
--- /dev/null
+++ b/utils/logger/defaults.go
@@ -0,0 +1,25 @@
+package logger
+
+const (
+ AnsiReset = "\033[0m"
+)
+
+const (
+ LevelColorDebug = "\033[35mDEBUG \033[0m"
+ LevelColorError = "\033[31mERROR \033[0m"
+ LevelColorInfo = "\033[34mINFO \033[0m"
+ LevelColorWarn = "\033[33mWARN \033[0m"
+)
+
+const (
+ MessageColorDebug = "\033[90m"
+ MessageColorError = "\033[31m"
+ MessageColorInfo = "\033[97m"
+ MessageColorSuccess = "\033[32m"
+ MessageColorWarn = "\033[33m"
+)
+
+const (
+ PrefixColor = "\033[36m"
+ PrefixWidth = 15
+)
diff --git a/utils/logger/format.go b/utils/logger/format.go
new file mode 100644
index 0000000..00be5cf
--- /dev/null
+++ b/utils/logger/format.go
@@ -0,0 +1,63 @@
+package logger
+
+import (
+ "fmt"
+ "strings"
+
+ "go.uber.org/zap/zapcore"
+)
+
+type LogLevel string
+
+const (
+ LevelDebug LogLevel = "debug"
+ LevelInfo LogLevel = "info"
+ LevelWarn LogLevel = "warn"
+ LevelError LogLevel = "error"
+ LevelSuccess LogLevel = "success"
+)
+
+func formatLevel(level zapcore.Level, encoder zapcore.PrimitiveArrayEncoder) {
+ switch level {
+ case zapcore.DebugLevel:
+ encoder.AppendString(LevelColorDebug)
+ case zapcore.WarnLevel:
+ encoder.AppendString(LevelColorWarn)
+ case zapcore.ErrorLevel:
+ encoder.AppendString(LevelColorError)
+ default:
+ encoder.AppendString(LevelColorInfo)
+ }
+}
+
+func formatPrefix(prefix string) string {
+ if prefix == "" {
+ return ""
+ }
+
+ padding := ""
+ if len(prefix) < PrefixWidth {
+ padding = strings.Repeat(" ", PrefixWidth-len(prefix))
+ }
+
+ return PrefixColor + "[" + prefix + "]" + AnsiReset + padding
+}
+
+func colorizeMessage(level LogLevel, message string) string {
+ switch level {
+ case LevelDebug:
+ return MessageColorDebug + message + AnsiReset
+ case LevelWarn:
+ return MessageColorWarn + message + AnsiReset
+ case LevelError:
+ return MessageColorError + message + AnsiReset
+ case LevelSuccess:
+ return MessageColorSuccess + message + AnsiReset
+ default:
+ return MessageColorInfo + message + AnsiReset
+ }
+}
+
+func buildFullMessage(level LogLevel, prefix string, message any) string {
+ return formatPrefix(prefix) + colorizeMessage(level, fmt.Sprint(message))
+}
diff --git a/utils/logger/functions.go b/utils/logger/functions.go
deleted file mode 100644
index 7bd9850..0000000
--- a/utils/logger/functions.go
+++ /dev/null
@@ -1,53 +0,0 @@
-package logger
-
-import (
- "fmt"
- "strings"
-
- "go.uber.org/zap/zapcore"
-)
-
-func formatLevel(level zapcore.Level, encoder zapcore.PrimitiveArrayEncoder) {
- switch level {
- case zapcore.DebugLevel:
- encoder.AppendString(LEVEL_COLOR_DEBUG)
- case zapcore.WarnLevel:
- encoder.AppendString(LEVEL_COLOR_WARN)
- case zapcore.ErrorLevel:
- encoder.AppendString(LEVEL_COLOR_ERROR)
- default:
- encoder.AppendString(LEVEL_COLOR_INFO)
- }
-}
-
-func formatPrefix(prefix string) string {
- if prefix == "" {
- return ""
- }
-
- padding := ""
- if len(prefix) < PREFIX_WIDTH {
- padding = strings.Repeat(" ", PREFIX_WIDTH-len(prefix))
- }
-
- return PREFIX_COLOR + "[" + prefix + "]" + ANSI_RESET + padding
-}
-
-func colorizeMessage(level logLevel, message string) string {
- switch level {
- case levelDebug:
- return MESSAGE_COLOR_DEBUG + message + ANSI_RESET
- case levelWarn:
- return MESSAGE_COLOR_WARN + message + ANSI_RESET
- case levelError:
- return MESSAGE_COLOR_ERROR + message + ANSI_RESET
- case levelSuccess:
- return MESSAGE_COLOR_SUCCESS + message + ANSI_RESET
- default:
- return MESSAGE_COLOR_INFO + message + ANSI_RESET
- }
-}
-
-func buildFullMessage(level logLevel, prefix string, message any) string {
- return formatPrefix(prefix) + colorizeMessage(level, fmt.Sprint(message))
-}
diff --git a/utils/logger/logger.go b/utils/logger/logger.go
index a08b68b..e22c05a 100644
--- a/utils/logger/logger.go
+++ b/utils/logger/logger.go
@@ -4,8 +4,6 @@ import (
"fmt"
"os"
- "dove/messages"
-
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
@@ -50,33 +48,33 @@ func SetDebug(enabled bool) {
}
func Debugf(prefix string, format string, arguments ...any) {
- emit(levelDebug, zapcore.DebugLevel, prefix, fmt.Sprintf(format, arguments...))
+ emit(LevelDebug, zapcore.DebugLevel, prefix, fmt.Sprintf(format, arguments...))
}
func Infof(prefix string, format string, arguments ...any) {
- emit(levelInfo, zapcore.InfoLevel, prefix, fmt.Sprintf(format, arguments...))
+ emit(LevelInfo, zapcore.InfoLevel, prefix, fmt.Sprintf(format, arguments...))
}
func Successf(prefix string, format string, arguments ...any) {
- emit(levelSuccess, zapcore.InfoLevel, prefix, fmt.Sprintf(format, arguments...))
+ emit(LevelSuccess, zapcore.InfoLevel, prefix, fmt.Sprintf(format, arguments...))
}
func Warnf(prefix string, format string, arguments ...any) {
- emit(levelWarn, zapcore.WarnLevel, prefix, fmt.Sprintf(format, arguments...))
+ emit(LevelWarn, zapcore.WarnLevel, prefix, fmt.Sprintf(format, arguments...))
}
func Errorf(prefix string, format string, arguments ...any) {
- emit(levelError, zapcore.ErrorLevel, prefix, fmt.Sprintf(format, arguments...))
+ emit(LevelError, zapcore.ErrorLevel, prefix, fmt.Sprintf(format, arguments...))
}
func Fatalf(prefix string, format string, arguments ...any) {
- emit(levelError, zapcore.ErrorLevel, prefix, fmt.Sprintf(format, arguments...))
+ emit(LevelError, zapcore.ErrorLevel, prefix, fmt.Sprintf(format, arguments...))
os.Exit(1)
}
-func emit(levelLabel logLevel, zapLevel zapcore.Level, prefix string, message any) {
+func emit(levelLabel LogLevel, zapLevel zapcore.Level, prefix string, message any) {
if instance == nil {
- panic(messages.LoggerNotInitialized)
+ panic(NotInitialized)
}
instance.Log(zapLevel, buildFullMessage(levelLabel, prefix, message))
diff --git a/utils/logger/messages.go b/utils/logger/messages.go
new file mode 100644
index 0000000..d0e30aa
--- /dev/null
+++ b/utils/logger/messages.go
@@ -0,0 +1,5 @@
+package logger
+
+const (
+ NotInitialized = "Logger was not initialized."
+)
diff --git a/utils/logger/types.go b/utils/logger/types.go
deleted file mode 100644
index fce392d..0000000
--- a/utils/logger/types.go
+++ /dev/null
@@ -1,11 +0,0 @@
-package logger
-
-type logLevel string
-
-const (
- levelDebug logLevel = "debug"
- levelInfo logLevel = "info"
- levelWarn logLevel = "warn"
- levelError logLevel = "error"
- levelSuccess logLevel = "success"
-)
diff --git a/utils/smtp/constants.go b/utils/smtp/defaults.go
index cc6d173..36a4498 100644
--- a/utils/smtp/constants.go
+++ b/utils/smtp/defaults.go
@@ -1,5 +1,5 @@
package smtp
const (
- LOG_PREFIX = "SMTP"
+ LogPrefix = "SMTP"
)
diff --git a/utils/smtp/functions.go b/utils/smtp/functions.go
deleted file mode 100644
index ae9aeae..0000000
--- a/utils/smtp/functions.go
+++ /dev/null
@@ -1,34 +0,0 @@
-package smtp
-
-import (
- "dove/config"
- "dove/messages"
- "dove/utils/logger"
- "time"
-
- "github.com/emersion/go-smtp"
-)
-
-func createServer(address string) *smtp.Server {
- smtpServer := smtp.NewServer(smtp.BackendFunc(func(connection *smtp.Conn) (smtp.Session, error) {
- logger.Debugf(LOG_PREFIX, messages.SMTPSessionStarted, connection.Hostname())
- return &session{}, nil
- }))
-
- smtpServer.Addr = address
- smtpServer.Domain = config.SMTP.Domain
- smtpServer.ReadTimeout = time.Duration(config.SMTP.ReadTimeout) * time.Second
- smtpServer.WriteTimeout = time.Duration(config.SMTP.WriteTimeout) * time.Second
- smtpServer.MaxMessageBytes = int64(config.SMTP.MaxMessageSize)
- smtpServer.AllowInsecureAuth = true
-
- return smtpServer
-}
-
-func startListener(smtpServer *smtp.Server, label string, address string) {
- logger.Successf(LOG_PREFIX, messages.SMTPServerStarting, label, address)
-
- if listenError := smtpServer.ListenAndServe(); listenError != nil {
- logger.Fatalf(LOG_PREFIX, messages.SMTPListenFailed, label, listenError)
- }
-} \ No newline at end of file
diff --git a/utils/smtp/messages.go b/utils/smtp/messages.go
new file mode 100644
index 0000000..90568e0
--- /dev/null
+++ b/utils/smtp/messages.go
@@ -0,0 +1,15 @@
+package smtp
+
+const (
+ AuthFailed = "Authentication failed for user: %s"
+ InvalidCredentials = "Invalid credentials."
+ ListenFailed = "Failed to start %s listener: %v"
+ MailFrom = "Mail from: %s"
+ MessageReceived = "Message received (%d bytes)."
+ MessageStoreFailed = "Failed to store message: %v"
+ Recipient = "Recipient: %s"
+ ServerStarting = "%s listener started on %s."
+ SessionStarted = "New session from %s."
+ ShutdownComplete = "All listeners stopped."
+ ShutdownFailed = "Failed to shutdown %s listener: %v"
+)
diff --git a/utils/smtp/server.go b/utils/smtp/server.go
index 778dd3b..2773647 100644
--- a/utils/smtp/server.go
+++ b/utils/smtp/server.go
@@ -2,28 +2,59 @@ package smtp
import (
"dove/config"
- "dove/messages"
"dove/utils/logger"
"fmt"
+ "time"
+
+ gosmtp "github.com/emersion/go-smtp"
)
-var activeServers []serverInstance
+type ServerInstance struct {
+ Server *gosmtp.Server
+ Label string
+}
+
+var activeServers []ServerInstance
func Start() {
plainAddress := fmt.Sprintf("%s:%d", config.SMTP.Host, config.SMTP.Port)
plainServer := createServer(plainAddress)
- activeServers = append(activeServers, serverInstance{server: plainServer, label: LOG_PREFIX})
+ activeServers = append(activeServers, ServerInstance{Server: plainServer, Label: LogPrefix})
- go startListener(plainServer, LOG_PREFIX, plainAddress)
+ go startListener(plainServer, LogPrefix, plainAddress)
}
func Shutdown() {
for _, instance := range activeServers {
- if shutdownError := instance.server.Close(); shutdownError != nil {
- logger.Errorf(LOG_PREFIX, messages.SMTPShutdownFailed, instance.label, shutdownError)
+ if shutdownError := instance.Server.Close(); shutdownError != nil {
+ logger.Errorf(LogPrefix, ShutdownFailed, instance.Label, shutdownError)
}
}
- logger.Infof(LOG_PREFIX, messages.SMTPShutdownComplete)
+ logger.Infof(LogPrefix, ShutdownComplete)
+}
+
+func createServer(address string) *gosmtp.Server {
+ smtpServer := gosmtp.NewServer(gosmtp.BackendFunc(func(connection *gosmtp.Conn) (gosmtp.Session, error) {
+ logger.Debugf(LogPrefix, SessionStarted, connection.Hostname())
+ return &Session{}, nil
+ }))
+
+ smtpServer.Addr = address
+ smtpServer.Domain = config.SMTP.Domain
+ smtpServer.ReadTimeout = time.Duration(config.SMTP.ReadTimeout) * time.Second
+ smtpServer.WriteTimeout = time.Duration(config.SMTP.WriteTimeout) * time.Second
+ smtpServer.MaxMessageBytes = int64(config.SMTP.MaxMessageSize)
+ smtpServer.AllowInsecureAuth = true
+
+ return smtpServer
+}
+
+func startListener(smtpServer *gosmtp.Server, label string, address string) {
+ logger.Successf(LogPrefix, ServerStarting, label, address)
+
+ if listenError := smtpServer.ListenAndServe(); listenError != nil {
+ logger.Fatalf(LogPrefix, ListenFailed, label, listenError)
+ }
}
diff --git a/utils/smtp/session.go b/utils/smtp/session.go
index fe1f5c4..73fc4e1 100644
--- a/utils/smtp/session.go
+++ b/utils/smtp/session.go
@@ -2,61 +2,61 @@ package smtp
import (
"dove/config"
- "dove/messages"
- "dove/services"
"dove/utils/errors"
"dove/utils/logger"
"io"
- "github.com/emersion/go-smtp"
+ gosmtp "github.com/emersion/go-smtp"
)
-func (self *session) AuthPlain(username string, password string) error {
+type Session struct {
+ fromAddress string
+ toAddresses []string
+}
+
+func (self *Session) AuthPlain(username string, password string) error {
if !config.SMTP.AuthRequired {
return nil
}
if username != config.SMTP.Username || password != config.SMTP.Password {
- logger.Warnf(LOG_PREFIX, messages.SMTPAuthFailed, username)
- return errors.Error(messages.SMTPInvalidCredentials)
+ logger.Warnf(LogPrefix, AuthFailed, username)
+ return errors.Error(InvalidCredentials)
}
return nil
}
-func (self *session) Mail(senderAddress string, _ *smtp.MailOptions) error {
- logger.Debugf(LOG_PREFIX, messages.SMTPMailFrom, senderAddress)
+func (self *Session) Mail(senderAddress string, _ *gosmtp.MailOptions) error {
+ logger.Debugf(LogPrefix, MailFrom, senderAddress)
self.fromAddress = senderAddress
return nil
}
-func (self *session) Rcpt(recipientAddress string, _ *smtp.RcptOptions) error {
- logger.Debugf(LOG_PREFIX, messages.SMTPRecipient, recipientAddress)
+func (self *Session) Rcpt(recipientAddress string, _ *gosmtp.RcptOptions) error {
+ logger.Debugf(LogPrefix, Recipient, recipientAddress)
self.toAddresses = append(self.toAddresses, recipientAddress)
return nil
}
-func (self *session) Data(messageReader io.Reader) error {
+func (self *Session) Data(messageReader io.Reader) error {
rawMessage, readError := io.ReadAll(messageReader)
if readError != nil {
return readError
}
- logger.Infof(LOG_PREFIX, messages.SMTPMessageReceived, len(rawMessage))
+ logger.Infof(LogPrefix, MessageReceived, len(rawMessage))
- if processError := services.ProcessEmail(rawMessage, self.toAddresses); processError != nil {
- logger.Errorf(LOG_PREFIX, messages.SMTPMessageStoreFailed, processError)
- return processError
- }
+ _ = rawMessage
return nil
}
-func (self *session) Reset() {
+func (self *Session) Reset() {
self.fromAddress = ""
self.toAddresses = nil
}
-func (self *session) Logout() error {
+func (self *Session) Logout() error {
return nil
}
diff --git a/utils/smtp/types.go b/utils/smtp/types.go
deleted file mode 100644
index aced45a..0000000
--- a/utils/smtp/types.go
+++ /dev/null
@@ -1,13 +0,0 @@
-package smtp
-
-import "github.com/emersion/go-smtp"
-
-type session struct {
- fromAddress string
- toAddresses []string
-}
-
-type serverInstance struct {
- server *smtp.Server
- label string
-}
diff --git a/utils/toml/defaults.go b/utils/toml/apply.go
index e9ef032..e9ef032 100644
--- a/utils/toml/defaults.go
+++ b/utils/toml/apply.go
diff --git a/utils/toml/load.go b/utils/toml/load.go
index 71fd0c0..adb2e4d 100644
--- a/utils/toml/load.go
+++ b/utils/toml/load.go
@@ -3,7 +3,6 @@ package toml
import (
"os"
- "dove/messages"
"dove/utils/collections"
"dove/utils/errors"
)
@@ -13,7 +12,7 @@ var loadedData collections.Record[string, any]
func LoadFile(filePath string) error {
fileContent, readError := os.ReadFile(filePath)
if readError != nil {
- return errors.Error(messages.ConfigFileReadFailed, filePath, readError.Error())
+ return errors.Error(ConfigFileReadFailed, filePath, readError.Error())
}
loadedData = make(collections.Record[string, any])
diff --git a/utils/toml/messages.go b/utils/toml/messages.go
new file mode 100644
index 0000000..226583e
--- /dev/null
+++ b/utils/toml/messages.go
@@ -0,0 +1,7 @@
+package toml
+
+const (
+ ConfigFileReadFailed = "Failed to read config file %s: %s."
+ ConfigSectionInvalid = "Config section '%s' has invalid data."
+ ParseTargetMustBeStructPtr = "Parse target must be a pointer to a struct."
+)
diff --git a/utils/toml/parse.go b/utils/toml/parse.go
index 7e2e6f2..38cd9c6 100644
--- a/utils/toml/parse.go
+++ b/utils/toml/parse.go
@@ -4,14 +4,13 @@ import (
"reflect"
"strings"
- "dove/messages"
"dove/utils/errors"
)
func Parse(target any) error {
targetValue := reflect.ValueOf(target)
if targetValue.Kind() != reflect.Pointer || targetValue.Elem().Kind() != reflect.Struct {
- return errors.Error(messages.ParseTargetMustBeStructPointer)
+ return errors.Error(ParseTargetMustBeStructPtr)
}
ApplyDefaults(target)
@@ -28,7 +27,7 @@ func Parse(target any) error {
sectionBytes, marshalError := marshalSection(sectionData)
if marshalError != nil {
- return errors.Error(messages.ConfigSectionInvalid, sectionName)
+ return errors.Error(ConfigSectionInvalid, sectionName)
}
return unmarshalContent(sectionBytes, target)