+// mailpopbox
+// Copyright 2020 Blue Static <https://www.bluestatic.org>
+// This program is free software licensed under the GNU General Public License,
+// version 3.0. The full text of the license can be found in LICENSE.txt.
+// SPDX-License-Identifier: GPL-3.0-only
+
package main
import (
"os"
"path"
- "github.com/uber-go/zap"
+ "go.uber.org/zap"
"src.bluestatic.org/mailpopbox/pop3"
)
-func runPOP3Server(config Config, log zap.Logger) <-chan ServerControlMessage {
+func runPOP3Server(config Config, log *zap.Logger) <-chan ServerControlMessage {
server := pop3Server{
config: config,
controlChan: make(chan ServerControlMessage),
type pop3Server struct {
config Config
controlChan chan ServerControlMessage
- log zap.Logger
+ log *zap.Logger
}
func (server *pop3Server) run() {
func (server *pop3Server) OpenMailbox(user, pass string) (pop3.Mailbox, error) {
for _, s := range server.config.Servers {
- if user == "mailbox@"+s.Domain && pass == s.MailboxPassword {
+ if user == MailboxAccount+s.Domain && pass == s.MailboxPassword {
return server.openMailbox(s.MaildropPath)
}
}
func (server *pop3Server) openMailbox(maildrop string) (*mailbox, error) {
files, err := ioutil.ReadDir(maildrop)
if err != nil {
- // TODO: hide error, log instead
- return nil, err
+ server.log.Error("failed read maildrop dir", zap.String("dir", maildrop), zap.Error(err))
+ return nil, errors.New("error opening maildrop")
}
mb := &mailbox{
}
func (mb *mailbox) GetMessage(id int) pop3.Message {
- if id > len(mb.messages) {
+ if id == 0 || id > len(mb.messages) {
return nil
}
return &mb.messages[id-1]