protonmail: add some messages API calls

This commit is contained in:
emersion 2017-09-18 14:41:50 +02:00
parent 466bff2428
commit d04c241914
No known key found for this signature in database
GPG Key ID: 0FDE7BE0E88F5E48
2 changed files with 168 additions and 0 deletions

16
protonmail/attachments.go Normal file
View File

@ -0,0 +1,16 @@
package protonmail
type Attachment struct {
ID string
Name string
Size int
MIMEType string
KeyPackets string
//Headers map[string]string
}
type AttachmentKey struct {
ID string
Key string
Algo string
}

152
protonmail/messages.go Normal file
View File

@ -0,0 +1,152 @@
package protonmail
import (
"net/http"
)
type MessageType int
const (
MessageInbox MessageType = iota
MessageDraft
MessageSent
MessageInboxAndSent
)
type MessageEncryption int
type MessageAddress struct {
Address string
Name string
}
type Message struct {
ID string
Order int64
Subject string
IsRead int
Type MessageType
Sender *MessageAddress
ReplyTo *MessageAddress
ToList []*MessageAddress
Time int64
Size int64
IsEncrypted MessageEncryption
ExpirationTime int64
IsReplied int
IsRepliedAll int
IsForwarded int
SpamScore int
AddressID string
Body string
MIMEType string
CCList []*MessageAddress
BCCList []*MessageAddress
Header string
Attachments []*Attachment
LabelIDs []string
ExternalID string
}
func (c *Client) GetMessage(id string) (*Message, error) {
req, err := c.newRequest(http.MethodGet, "/messages/"+id, nil)
if err != nil {
return nil, err
}
var respData struct {
resp
Message *Message
}
if err := c.doJSON(req, &respData); err != nil {
return nil, err
}
return respData.Message, nil
}
func (c *Client) CreateDraftMessage(msg *Message, parentID string) (*Message, error) {
reqData := struct {
Message *Message
ParentID string `json:",omitempty"`
Action *int `json:",omitempty"`
}{msg, parentID, nil}
req, err := c.newJSONRequest(http.MethodPost, "/messages", &reqData)
if err != nil {
return nil, err
}
var respData struct {
resp
Message *Message
}
if err := c.doJSON(req, &respData); err != nil {
return nil, err
}
return respData.Message, nil
}
func (c *Client) UpdateDraftMessage(msg *Message) (*Message, error) {
reqData := struct {
Message *Message
}{msg}
req, err := c.newJSONRequest(http.MethodPut, "/messages/"+msg.ID, &reqData)
if err != nil {
return nil, err
}
var respData struct {
resp
Message *Message
}
if err := c.doJSON(req, &respData); err != nil {
return nil, err
}
return respData.Message, nil
}
type MessageKeyPacket struct {
ID string
KeyPackets string
}
type MessagePackageType int
type MessagePackage struct {
Address string
Type MessagePackageType
Body string
KeyPackets []*MessageKeyPacket
Token string
EncToken string
PasswordHint string `json:",omitempty"`
}
type MessageOutgoing struct {
ID string
ClearBody string
ExpirationTime int64
AttachmentKeys []*AttachmentKey
Packages []*MessagePackage
}
func (c *Client) SendMessage(msg *MessageOutgoing) (sent, parent *Message, err error) {
req, err := c.newJSONRequest(http.MethodPut, "/messages/"+msg.ID, msg)
if err != nil {
return nil, nil, err
}
var respData struct {
resp
Sent, Parent *Message
}
if err := c.doJSON(req, &respData); err != nil {
return nil, nil, err
}
return respData.Sent, respData.Parent, nil
}