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
This commit is contained in:
Simon Ser 2020-02-29 12:06:09 +01:00
parent cbcde22b5b
commit 5cd1c7a921
No known key found for this signature in database
GPG Key ID: 0FDE7BE0E88F5E48
1 changed files with 15 additions and 13 deletions

View File

@ -39,6 +39,7 @@ var systemFlags = []struct {
} }
type user struct { type user struct {
username string
backend *backend backend *backend
c *protonmail.Client c *protonmail.Client
u *protonmail.User u *protonmail.User
@ -65,17 +66,7 @@ func getUser(be *backend, username string, c *protonmail.Client, privateKeys ope
u.Unlock() u.Unlock()
return u, nil return u, nil
} else { } else {
pu, err := c.GetCurrentUser() u, err := newUser(be, username, c, privateKeys)
if err != nil {
return nil, err
}
addrs, err := c.ListAddresses()
if err != nil {
return nil, err
}
u, err := newUser(be, c, pu, privateKeys, addrs)
if err != nil { if err != nil {
return nil, err 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{ uu := &user{
username: username,
backend: be, backend: be,
c: c, c: c,
u: u, u: u,
@ -277,7 +279,7 @@ func (u *user) Logout() error {
return nil return nil
} }
delete(u.backend.users, u.u.Name) delete(u.backend.users, u.username)
close(u.done) close(u.done)