From 5cd1c7a9211f7d24e9fa57bce39a41e65dd2adb7 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Sat, 29 Feb 2020 12:06:09 +0100 Subject: [PATCH] imap: consistently index users by IMAP-supplied username The IMAP-supplied username may be different from the canonical ProtonMail username. References: https://github.com/emersion/hydroxide/issues/83 --- imap/user.go | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/imap/user.go b/imap/user.go index 1cfed55..6f99742 100644 --- a/imap/user.go +++ b/imap/user.go @@ -39,6 +39,7 @@ var systemFlags = []struct { } type user struct { + username string backend *backend c *protonmail.Client u *protonmail.User @@ -65,17 +66,7 @@ func getUser(be *backend, username string, c *protonmail.Client, privateKeys ope u.Unlock() return u, nil } else { - pu, err := c.GetCurrentUser() - if err != nil { - return nil, err - } - - addrs, err := c.ListAddresses() - if err != nil { - return nil, err - } - - u, err := newUser(be, c, pu, privateKeys, addrs) + u, err := newUser(be, username, c, privateKeys) if err != nil { return nil, err } @@ -85,8 +76,19 @@ func getUser(be *backend, username string, c *protonmail.Client, privateKeys ope } } -func newUser(be *backend, c *protonmail.Client, u *protonmail.User, privateKeys openpgp.EntityList, addrs []*protonmail.Address) (*user, error) { +func newUser(be *backend, username string, c *protonmail.Client, privateKeys openpgp.EntityList) (*user, error) { + u, err := c.GetCurrentUser() + if err != nil { + return nil, err + } + + addrs, err := c.ListAddresses() + if err != nil { + return nil, err + } + uu := &user{ + username: username, backend: be, c: c, u: u, @@ -277,7 +279,7 @@ func (u *user) Logout() error { return nil } - delete(u.backend.users, u.u.Name) + delete(u.backend.users, u.username) close(u.done)