protonmail: remove User.Addresses, add Client.ListAddresses
This commit is contained in:
parent
6bd8ce1b6e
commit
d76f081114
|
@ -28,9 +28,12 @@ func (be *backend) Login(username, password string) (imapbackend.User, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: decrypt private keys in u.Addresses
|
addrs, err := c.ListAddresses()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
return newUser(be, c, u, privateKeys)
|
return newUser(be, c, u, privateKeys, addrs)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (be *backend) Updates() <-chan imapbackend.Update {
|
func (be *backend) Updates() <-chan imapbackend.Update {
|
||||||
|
|
|
@ -366,7 +366,7 @@ func (mbox *mailbox) CreateMessage(flags []string, date time.Time, body imap.Lit
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := createMessage(mbox.u.c, mbox.u.u, mbox.u.privateKeys, body)
|
_, err := createMessage(mbox.u.c, mbox.u.u, mbox.u.privateKeys, mbox.u.addrs, body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -376,7 +376,7 @@ func (mbox *mailbox) fetchBodySection(msg *protonmail.Message, section *imap.Bod
|
||||||
return l, nil
|
return l, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func createMessage(c *protonmail.Client, u *protonmail.User, privateKeys openpgp.EntityList, r io.Reader) (*protonmail.Message, error) {
|
func createMessage(c *protonmail.Client, u *protonmail.User, privateKeys openpgp.EntityList, addrs []*protonmail.Address, r io.Reader) (*protonmail.Message, error) {
|
||||||
// Parse the incoming MIME message header
|
// Parse the incoming MIME message header
|
||||||
mr, err := mail.CreateReader(r)
|
mr, err := mail.CreateReader(r)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -398,7 +398,7 @@ func createMessage(c *protonmail.Client, u *protonmail.User, privateKeys openpgp
|
||||||
|
|
||||||
fromAddrStr := fromList[0].Address
|
fromAddrStr := fromList[0].Address
|
||||||
var fromAddr *protonmail.Address
|
var fromAddr *protonmail.Address
|
||||||
for _, addr := range u.Addresses {
|
for _, addr := range addrs {
|
||||||
if strings.EqualFold(addr.Email, fromAddrStr) {
|
if strings.EqualFold(addr.Email, fromAddrStr) {
|
||||||
fromAddr = addr
|
fromAddr = addr
|
||||||
break
|
break
|
||||||
|
|
|
@ -33,6 +33,7 @@ type user struct {
|
||||||
c *protonmail.Client
|
c *protonmail.Client
|
||||||
u *protonmail.User
|
u *protonmail.User
|
||||||
privateKeys openpgp.EntityList
|
privateKeys openpgp.EntityList
|
||||||
|
addrs []*protonmail.Address
|
||||||
|
|
||||||
db *database.User
|
db *database.User
|
||||||
eventsReceiver *events.Receiver
|
eventsReceiver *events.Receiver
|
||||||
|
@ -44,11 +45,12 @@ type user struct {
|
||||||
eventSent chan struct{}
|
eventSent chan struct{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func newUser(be *backend, c *protonmail.Client, u *protonmail.User, privateKeys openpgp.EntityList) (*user, error) {
|
func newUser(be *backend, c *protonmail.Client, u *protonmail.User, privateKeys openpgp.EntityList, addrs []*protonmail.Address) (*user, error) {
|
||||||
uu := &user{
|
uu := &user{
|
||||||
c: c,
|
c: c,
|
||||||
u: u,
|
u: u,
|
||||||
privateKeys: privateKeys,
|
privateKeys: privateKeys,
|
||||||
|
addrs: addrs,
|
||||||
eventSent: make(chan struct{}),
|
eventSent: make(chan struct{}),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,9 @@
|
||||||
package protonmail
|
package protonmail
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
type (
|
type (
|
||||||
AddressSend int
|
AddressSend int
|
||||||
AddressStatus int
|
AddressStatus int
|
||||||
|
@ -37,3 +41,21 @@ type Address struct {
|
||||||
HasKeys int
|
HasKeys int
|
||||||
Keys []*PrivateKey
|
Keys []*PrivateKey
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Client) ListAddresses() ([]*Address, error) {
|
||||||
|
// TODO: Page, PageSize
|
||||||
|
req, err := c.newRequest(http.MethodGet, "/addresses", nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var respData struct {
|
||||||
|
resp
|
||||||
|
Addresses []*Address
|
||||||
|
}
|
||||||
|
if err := c.doJSON(req, &respData); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return respData.Addresses, nil
|
||||||
|
}
|
||||||
|
|
|
@ -17,50 +17,16 @@ type (
|
||||||
type User struct {
|
type User struct {
|
||||||
ID string
|
ID string
|
||||||
Name string
|
Name string
|
||||||
NotificationEmail string
|
|
||||||
Signature string // HTML
|
|
||||||
NumMessagePerPage int
|
|
||||||
UsedSpace int
|
UsedSpace int
|
||||||
Notify int
|
|
||||||
AutoSaveContacts int
|
|
||||||
Language string // e.g. en_US
|
|
||||||
LogAuth LogAuth
|
|
||||||
ComposerMode ComposerMode
|
|
||||||
MessageButtons MessageButtons
|
|
||||||
Images ImagesMode
|
|
||||||
Moved int
|
|
||||||
ShowImages int
|
|
||||||
ShowEmbedded int
|
|
||||||
ViewMode ViewMode
|
|
||||||
ViewLayout ViewLayout
|
|
||||||
SwipeLeft SwipeAction
|
|
||||||
SwipeRight SwipeAction
|
|
||||||
Theme string
|
|
||||||
Currency string // e.g. EUR
|
Currency string // e.g. EUR
|
||||||
Credit int
|
Credit int
|
||||||
InvoiceText string
|
|
||||||
AlsoArchive int
|
|
||||||
Hotkeys int
|
|
||||||
PMSignature int
|
|
||||||
TwoFactor int
|
|
||||||
PasswordReset int
|
|
||||||
PasswordMode PasswordMode
|
|
||||||
News int
|
|
||||||
AutoResponder interface{} // TODO
|
|
||||||
AutoWildcardSearch int
|
|
||||||
DraftMIMEType string
|
|
||||||
ReceiveMIMEType string
|
|
||||||
ImageProxy int
|
|
||||||
DisplayName string
|
|
||||||
MaxSpace int
|
MaxSpace int
|
||||||
MaxUpload int
|
MaxUpload int
|
||||||
Subscribed int // TODO
|
|
||||||
Services int // TODO
|
|
||||||
Role int // TODO
|
Role int // TODO
|
||||||
Private int
|
Private int
|
||||||
VPN interface{} // TODO
|
Subscribed int // TODO
|
||||||
|
Services int // TODO
|
||||||
Delinquent int
|
Delinquent int
|
||||||
Addresses []*Address
|
|
||||||
Keys []*PrivateKey
|
Keys []*PrivateKey
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,28 +36,13 @@ func (c *Client) GetCurrentUser() (*User, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var userData struct {
|
var respData struct {
|
||||||
resp
|
resp
|
||||||
User *User
|
User *User
|
||||||
}
|
}
|
||||||
if err := c.doJSON(req, &userData); err != nil {
|
if err := c.doJSON(req, &respData); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
req, err = c.newRequest(http.MethodGet, "/addresses", nil)
|
return respData.User, nil
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
var addrData struct {
|
|
||||||
resp
|
|
||||||
Addresses []*Address
|
|
||||||
}
|
|
||||||
if err := c.doJSON(req, &addrData); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
userData.User.Addresses = addrData.Addresses
|
|
||||||
|
|
||||||
return userData.User, nil
|
|
||||||
}
|
}
|
||||||
|
|
10
smtp/smtp.go
10
smtp/smtp.go
|
@ -41,6 +41,7 @@ type user struct {
|
||||||
c *protonmail.Client
|
c *protonmail.Client
|
||||||
u *protonmail.User
|
u *protonmail.User
|
||||||
privateKeys openpgp.EntityList
|
privateKeys openpgp.EntityList
|
||||||
|
addrs []*protonmail.Address
|
||||||
}
|
}
|
||||||
|
|
||||||
func (u *user) Send(from string, to []string, r io.Reader) error {
|
func (u *user) Send(from string, to []string, r io.Reader) error {
|
||||||
|
@ -65,7 +66,7 @@ func (u *user) Send(from string, to []string, r io.Reader) error {
|
||||||
|
|
||||||
fromAddrStr := fromList[0].Address
|
fromAddrStr := fromList[0].Address
|
||||||
var fromAddr *protonmail.Address
|
var fromAddr *protonmail.Address
|
||||||
for _, addr := range u.u.Addresses {
|
for _, addr := range u.addrs {
|
||||||
if strings.EqualFold(addr.Email, fromAddrStr) {
|
if strings.EqualFold(addr.Email, fromAddrStr) {
|
||||||
fromAddr = addr
|
fromAddr = addr
|
||||||
break
|
break
|
||||||
|
@ -360,9 +361,14 @@ func (be *backend) Login(username, password string) (smtp.User, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
addrs, err := c.ListAddresses()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: decrypt private keys in u.Addresses
|
// TODO: decrypt private keys in u.Addresses
|
||||||
|
|
||||||
return &user{c, u, privateKeys}, nil
|
return &user{c, u, privateKeys, addrs}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (be *backend) AnonymousLogin() (smtp.User, error) {
|
func (be *backend) AnonymousLogin() (smtp.User, error) {
|
||||||
|
|
Loading…
Reference in New Issue