hydroxide-push/imap/backend.go

47 lines
1019 B
Go
Raw Normal View History

2017-12-03 15:58:24 +02:00
package imap
import (
"errors"
2019-06-22 13:15:41 +03:00
"github.com/emersion/go-imap"
2017-12-03 15:58:24 +02:00
imapbackend "github.com/emersion/go-imap/backend"
"github.com/emersion/hydroxide/auth"
2018-01-12 14:20:17 +02:00
"github.com/emersion/hydroxide/events"
2017-12-03 15:58:24 +02:00
)
var errNotYetImplemented = errors.New("not yet implemented")
type backend struct {
2018-10-21 13:15:20 +03:00
sessions *auth.Manager
2018-01-12 14:20:17 +02:00
eventsManager *events.Manager
2018-10-21 13:15:20 +03:00
updates chan imapbackend.Update
2017-12-03 15:58:24 +02:00
}
2019-06-22 13:15:41 +03:00
func (be *backend) Login(info *imap.ConnInfo, username, password string) (imapbackend.User, error) {
2017-12-03 15:58:24 +02:00
c, privateKeys, err := be.sessions.Auth(username, password)
if err != nil {
return nil, err
}
u, err := c.GetCurrentUser()
if err != nil {
return nil, err
}
addrs, err := c.ListAddresses()
if err != nil {
return nil, err
}
2017-12-03 15:58:24 +02:00
return newUser(be, c, u, privateKeys, addrs)
2017-12-03 15:58:24 +02:00
}
2018-01-14 12:21:34 +02:00
func (be *backend) Updates() <-chan imapbackend.Update {
2018-01-12 16:16:26 +02:00
return be.updates
}
2018-01-12 14:20:17 +02:00
func New(sessions *auth.Manager, eventsManager *events.Manager) imapbackend.Backend {
2018-01-14 12:21:34 +02:00
return &backend{sessions, eventsManager, make(chan imapbackend.Update, 50)}
2017-12-03 15:58:24 +02:00
}