Merge pull request #39 from scelaris/pr1

protonmail: Fix sending messages after API update.
This commit is contained in:
emersion 2018-10-21 00:33:57 +02:00 committed by GitHub
commit d807968415
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 37 additions and 7 deletions

View File

@ -31,6 +31,7 @@ type Address struct {
Receive int Receive int
Status AddressStatus Status AddressStatus
Type AddressType Type AddressType
Order int
DisplayName string DisplayName string
Signature string // HTML Signature string // HTML
HasKeys int HasKeys int

View File

@ -403,7 +403,7 @@ type MessagePackageSet struct {
Body string // Encrypted body data packet Body string // Encrypted body data packet
// Only if cleartext is sent // Only if cleartext is sent
BodyKey string BodyKey *MessageBodyKey `json:",omitempty"`
AttachmentKeys map[string]string AttachmentKeys map[string]string
bodyKey *packet.EncryptedKey bodyKey *packet.EncryptedKey
@ -411,6 +411,11 @@ type MessagePackageSet struct {
signature int signature int
} }
type MessageBodyKey struct {
Algorithm string
Key string
}
func NewMessagePackageSet(attachmentKeys map[string]*packet.EncryptedKey) *MessagePackageSet { func NewMessagePackageSet(attachmentKeys map[string]*packet.EncryptedKey) *MessagePackageSet {
return &MessagePackageSet{ return &MessagePackageSet{
Addresses: make(map[string]*MessagePackage), Addresses: make(map[string]*MessagePackage),
@ -494,8 +499,11 @@ func (set *MessagePackageSet) AddCleartext(addr string) (*MessagePackage, error)
set.Addresses[addr] = pkg set.Addresses[addr] = pkg
set.Type |= MessagePackageCleartext set.Type |= MessagePackageCleartext
if set.BodyKey == "" || set.AttachmentKeys == nil { if set.BodyKey == nil || set.AttachmentKeys == nil {
set.BodyKey = base64.StdEncoding.EncodeToString(set.bodyKey.Key) set.BodyKey = &MessageBodyKey{
Algorithm: "aes256",
Key: base64.StdEncoding.EncodeToString(set.bodyKey.Key),
}
set.AttachmentKeys = make(map[string]string, len(set.attachmentKeys)) set.AttachmentKeys = make(map[string]string, len(set.attachmentKeys))
for att, key := range set.attachmentKeys { for att, key := range set.attachmentKeys {
@ -563,7 +571,7 @@ type OutgoingMessage struct {
} }
func (c *Client) SendMessage(msg *OutgoingMessage) (sent, parent *Message, err error) { func (c *Client) SendMessage(msg *OutgoingMessage) (sent, parent *Message, err error) {
req, err := c.newJSONRequest(http.MethodPost, "/messages/send/"+msg.ID, msg) req, err := c.newJSONRequest(http.MethodPost, "/messages/"+msg.ID, msg)
if err != nil { if err != nil {
return nil, nil, err return nil, nil, err
} }

View File

@ -70,13 +70,28 @@ func (c *Client) GetCurrentUser() (*User, error) {
return nil, err return nil, err
} }
var respData struct { var userData struct {
resp resp
User *User User *User
} }
if err := c.doJSON(req, &respData); err != nil { if err := c.doJSON(req, &userData); err != nil {
return nil, err return nil, err
} }
return respData.User, nil req, err = c.newRequest(http.MethodGet, "/addresses", 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
} }

View File

@ -95,6 +95,11 @@ func (u *user) Send(from string, to []string, r io.Reader) error {
return errors.New("sender address key hasn't been decrypted") return errors.New("sender address key hasn't been decrypted")
} }
senderAddress := &protonmail.MessageAddress{
Address: fromAddr.Email,
Name: fromAddr.DisplayName,
}
msg := &protonmail.Message{ msg := &protonmail.Message{
ToList: toPMAddressList(toList), ToList: toPMAddressList(toList),
CCList: toPMAddressList(ccList), CCList: toPMAddressList(ccList),
@ -102,6 +107,7 @@ func (u *user) Send(from string, to []string, r io.Reader) error {
Subject: subject, Subject: subject,
Header: formatHeader(mr.Header), Header: formatHeader(mr.Header),
AddressID: fromAddr.ID, AddressID: fromAddr.ID,
Sender: senderAddress,
} }
// Create an empty draft // Create an empty draft