diff options
| author | Bobby <[email protected]> | 2026-03-08 03:06:23 +0530 |
|---|---|---|
| committer | Bobby <[email protected]> | 2026-03-08 03:06:23 +0530 |
| commit | caf265e7050edefa64ecf7e13828ec9636bce867 (patch) | |
| tree | 6bb8554dbb34695a74c2dca556bf512998cf62ab /utils | |
| parent | cca905d35412f1549400fc3d1aca6dc704d8cae6 (diff) | |
| download | dove-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.go | 4 | ||||
| -rw-r--r-- | utils/auth/constants.go | 5 | ||||
| -rw-r--r-- | utils/auth/defaults.go | 5 | ||||
| -rw-r--r-- | utils/email/constants.go | 7 | ||||
| -rw-r--r-- | utils/email/defaults.go | 7 | ||||
| -rw-r--r-- | utils/email/functions.go | 79 | ||||
| -rw-r--r-- | utils/email/parse.go | 98 | ||||
| -rw-r--r-- | utils/email/types.go | 24 | ||||
| -rw-r--r-- | utils/logger/constants.go | 25 | ||||
| -rw-r--r-- | utils/logger/defaults.go | 25 | ||||
| -rw-r--r-- | utils/logger/format.go | 63 | ||||
| -rw-r--r-- | utils/logger/functions.go | 53 | ||||
| -rw-r--r-- | utils/logger/logger.go | 18 | ||||
| -rw-r--r-- | utils/logger/messages.go | 5 | ||||
| -rw-r--r-- | utils/logger/types.go | 11 | ||||
| -rw-r--r-- | utils/smtp/defaults.go (renamed from utils/smtp/constants.go) | 2 | ||||
| -rw-r--r-- | utils/smtp/functions.go | 34 | ||||
| -rw-r--r-- | utils/smtp/messages.go | 15 | ||||
| -rw-r--r-- | utils/smtp/server.go | 45 | ||||
| -rw-r--r-- | utils/smtp/session.go | 36 | ||||
| -rw-r--r-- | utils/smtp/types.go | 13 | ||||
| -rw-r--r-- | utils/toml/apply.go (renamed from utils/toml/defaults.go) | 0 | ||||
| -rw-r--r-- | utils/toml/load.go | 3 | ||||
| -rw-r--r-- | utils/toml/messages.go | 7 | ||||
| -rw-r--r-- | utils/toml/parse.go | 5 |
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) |
