48 lines
1.2 KiB
Go
Raw Normal View History

2021-07-18 23:03:28 +01:00
/*
* Copyright (c) 2021 Neil Alexander
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
2021-07-07 18:15:07 +01:00
package imapserver
import (
"log"
2021-07-07 18:15:07 +01:00
idle "github.com/emersion/go-imap-idle"
"github.com/emersion/go-imap/server"
"github.com/emersion/go-sasl"
2021-07-07 18:15:07 +01:00
)
type IMAPServer struct {
server *server.Server
backend *Backend
}
func NewIMAPServer(backend *Backend, addr string, insecure bool) (*IMAPServer, *IMAPNotify, error) {
2021-07-07 18:15:07 +01:00
s := &IMAPServer{
server: server.New(backend),
backend: backend,
}
notify := NewIMAPNotify(s.server, backend.Log)
s.server.Addr = addr
s.server.AllowInsecureAuth = insecure
2021-07-10 11:43:14 +01:00
//s.server.Debug = os.Stdout
2021-07-07 18:15:07 +01:00
s.server.Enable(idle.NewExtension())
2023-11-03 14:03:41 +00:00
//s.server.Enable(notify)
s.server.EnableAuth(sasl.Login, func(conn server.Conn) sasl.Server {
return sasl.NewLoginServer(func(username, password string) error {
_, err := s.backend.Login(nil, username, password)
return err
})
})
go func() {
if err := s.server.ListenAndServe(); err != nil {
log.Fatal(err)
}
}()
return s, notify, nil
2021-07-07 18:15:07 +01:00
}