Update routes to API v4

This commit is contained in:
Michal Horejsek
2020-08-27 10:13:28 +02:00
parent af89931f05
commit 9218598140
19 changed files with 41 additions and 48 deletions

View File

@ -34,6 +34,7 @@ Changelog [format](http://keepachangelog.com/en/1.0.0/)
* golang.org/x/text v0.3.2 -> v0.3.3 * golang.org/x/text v0.3.2 -> v0.3.3
* Set first-start to false in bridge, not in frontend. * Set first-start to false in bridge, not in frontend.
* GODT-400 Refactor sendingInfo. * GODT-400 Refactor sendingInfo.
* GODT-513 Update routes to API v4.
### Fixed ### Fixed

View File

@ -15,8 +15,8 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with ProtonMail Bridge. If not, see <https://www.gnu.org/licenses/>. // along with ProtonMail Bridge. If not, see <https://www.gnu.org/licenses/>.
// Code generated by ./credits.sh at Wed 29 Jul 2020 10:20:09 AM CEST. DO NOT EDIT. // Code generated by ./credits.sh at Thu Aug 27 08:22:31 CEST 2020. DO NOT EDIT.
package bridge package bridge
const Credits = "github.com/0xAX/notificator;github.com/abiosoft/ishell;github.com/abiosoft/readline;github.com/allan-simon/go-singleinstance;github.com/andybalholm/cascadia;github.com/certifi/gocertifi;github.com/chzyer/logex;github.com/chzyer/test;github.com/cucumber/godog;github.com/docker/docker-credential-helpers;github.com/emersion/go-imap;github.com/emersion/go-imap-appendlimit;github.com/emersion/go-imap-idle;github.com/emersion/go-imap-move;github.com/emersion/go-imap-quota;github.com/emersion/go-imap-specialuse;github.com/emersion/go-imap-unselect;github.com/emersion/go-sasl;github.com/emersion/go-smtp;github.com/emersion/go-textwrapper;github.com/emersion/go-vcard;github.com/fatih/color;github.com/flynn-archive/go-shlex;github.com/getsentry/raven-go;github.com/golang/mock;github.com/google/go-cmp;github.com/google/uuid;github.com/gopherjs/gopherjs;github.com/go-resty/resty/v2;github.com/hashicorp/go-multierror;github.com/jameskeane/bcrypt;github.com/jaytaylor/html2text;github.com/jhillyerd/enmime;github.com/kardianos/osext;github.com/keybase/go-keychain;github.com/logrusorgru/aurora;github.com/mattn/go-runewidth;github.com/miekg/dns;github.com/myesui/uuid;github.com/nsf/jsondiff;github.com/olekukonko/tablewriter;github.com/pkg/errors;github.com/ProtonMail/bcrypt;github.com/ProtonMail/crypto;github.com/ProtonMail/docker-credential-helpers;github.com/ProtonMail/go-appdir;github.com/ProtonMail/go-apple-mobileconfig;github.com/ProtonMail/go-autostart;github.com/ProtonMail/go-imap-id;github.com/ProtonMail/gopenpgp/v2;github.com/ProtonMail/go-smtp;github.com/ProtonMail/go-vcard;github.com/sirupsen/logrus;github.com/skratchdot/open-golang;github.com/stretchr/testify;github.com/therecipe/qt;github.com/twinj/uuid;github.com/urfave/cli;go.etcd.io/bbolt;golang.org/x/crypto;golang.org/x/net;golang.org/x/text;gopkg.in/stretchr/testify.v1;;Font Awesome 4.7.0;;Qt 5.13 by Qt group;" const Credits = "github.com/0xAX/notificator;github.com/ProtonMail/bcrypt;github.com/ProtonMail/crypto;github.com/ProtonMail/docker-credential-helpers;github.com/ProtonMail/go-appdir;github.com/ProtonMail/go-apple-mobileconfig;github.com/ProtonMail/go-autostart;github.com/ProtonMail/go-imap-id;github.com/ProtonMail/go-smtp;github.com/ProtonMail/go-vcard;github.com/ProtonMail/gopenpgp/v2;github.com/abiosoft/ishell;github.com/abiosoft/readline;github.com/allan-simon/go-singleinstance;github.com/andybalholm/cascadia;github.com/certifi/gocertifi;github.com/chzyer/logex;github.com/chzyer/test;github.com/cucumber/godog;github.com/docker/docker-credential-helpers;github.com/emersion/go-imap;github.com/emersion/go-imap-appendlimit;github.com/emersion/go-imap-idle;github.com/emersion/go-imap-move;github.com/emersion/go-imap-quota;github.com/emersion/go-imap-specialuse;github.com/emersion/go-imap-unselect;github.com/emersion/go-sasl;github.com/emersion/go-smtp;github.com/emersion/go-textwrapper;github.com/emersion/go-vcard;github.com/fatih/color;github.com/flynn-archive/go-shlex;github.com/getsentry/raven-go;github.com/go-resty/resty/v2;github.com/golang/mock;github.com/google/go-cmp;github.com/google/uuid;github.com/gopherjs/gopherjs;github.com/hashicorp/go-multierror;github.com/jameshoulahan/go-imap;github.com/jameskeane/bcrypt;github.com/jaytaylor/html2text;github.com/jhillyerd/enmime;github.com/kardianos/osext;github.com/keybase/go-keychain;github.com/logrusorgru/aurora;github.com/mattn/go-runewidth;github.com/miekg/dns;github.com/myesui/uuid;github.com/nsf/jsondiff;github.com/olekukonko/tablewriter;github.com/pkg/errors;github.com/sirupsen/logrus;github.com/skratchdot/open-golang;github.com/stretchr/testify;github.com/therecipe/qt;github.com/twinj/uuid;github.com/urfave/cli;go.etcd.io/bbolt;golang.org/x/crypto;golang.org/x/net;golang.org/x/text;gopkg.in/stretchr/testify.v1;;Font Awesome 4.7.0;;Qt 5.13 by Qt group;"

View File

@ -179,7 +179,7 @@ func writeAttachment(w *multipart.Writer, att *Attachment, r io.Reader, sig io.R
// //
// The returned created attachment contains the new attachment ID and its size. // The returned created attachment contains the new attachment ID and its size.
func (c *client) CreateAttachment(att *Attachment, r io.Reader, sig io.Reader) (created *Attachment, err error) { func (c *client) CreateAttachment(att *Attachment, r io.Reader, sig io.Reader) (created *Attachment, err error) {
req, w, err := c.NewMultipartRequest("POST", "/attachments") req, w, err := c.NewMultipartRequest("POST", "/mail/v4/attachments")
if err != nil { if err != nil {
return return
} }
@ -213,7 +213,7 @@ type UpdateAttachmentSignatureReq struct {
func (c *client) UpdateAttachmentSignature(attachmentID, signature string) (err error) { func (c *client) UpdateAttachmentSignature(attachmentID, signature string) (err error) {
updateReq := &UpdateAttachmentSignatureReq{signature} updateReq := &UpdateAttachmentSignatureReq{signature}
req, err := c.NewJSONRequest("PUT", "/attachments/"+attachmentID+"/signature", updateReq) req, err := c.NewJSONRequest("PUT", "/mail/v4/attachments/"+attachmentID+"/signature", updateReq)
if err != nil { if err != nil {
return return
} }
@ -228,7 +228,7 @@ func (c *client) UpdateAttachmentSignature(attachmentID, signature string) (err
// DeleteAttachment removes an attachment. message is the message ID, att is the attachment ID. // DeleteAttachment removes an attachment. message is the message ID, att is the attachment ID.
func (c *client) DeleteAttachment(attID string) (err error) { func (c *client) DeleteAttachment(attID string) (err error) {
req, err := c.NewRequest("DELETE", "/attachments/"+attID, nil) req, err := c.NewRequest("DELETE", "/mail/v4/attachments/"+attID, nil)
if err != nil { if err != nil {
return return
} }
@ -249,7 +249,7 @@ func (c *client) GetAttachment(id string) (att io.ReadCloser, err error) {
return return
} }
req, err := c.NewRequest("GET", "/attachments/"+id, nil) req, err := c.NewRequest("GET", "/mail/v4/attachments/"+id, nil)
if err != nil { if err != nil {
return return
} }

View File

@ -95,7 +95,7 @@ func TestAttachment_UnmarshalJSON(t *testing.T) {
func TestClient_CreateAttachment(t *testing.T) { func TestClient_CreateAttachment(t *testing.T) {
s, c := newTestServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { s, c := newTestServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
Ok(t, checkMethodAndPath(r, "POST", "/attachments")) Ok(t, checkMethodAndPath(r, "POST", "/mail/v4/attachments"))
contentType, params, err := pmmime.ParseMediaType(r.Header.Get("Content-Type")) contentType, params, err := pmmime.ParseMediaType(r.Header.Get("Content-Type"))
if err != nil { if err != nil {
@ -153,7 +153,7 @@ func TestClient_CreateAttachment(t *testing.T) {
func TestClient_DeleteAttachment(t *testing.T) { func TestClient_DeleteAttachment(t *testing.T) {
s, c := newTestServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { s, c := newTestServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
Ok(t, checkMethodAndPath(r, "DELETE", "/attachments/"+testAttachment.ID)) Ok(t, checkMethodAndPath(r, "DELETE", "/mail/v4/attachments/"+testAttachment.ID))
b := &bytes.Buffer{} b := &bytes.Buffer{}
if n, _ := b.ReadFrom(r.Body); n != 0 { if n, _ := b.ReadFrom(r.Body); n != 0 {
@ -172,7 +172,7 @@ func TestClient_DeleteAttachment(t *testing.T) {
func TestClient_GetAttachment(t *testing.T) { func TestClient_GetAttachment(t *testing.T) {
s, c := newTestServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { s, c := newTestServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
Ok(t, checkMethodAndPath(r, "GET", "/attachments/"+testAttachment.ID)) Ok(t, checkMethodAndPath(r, "GET", "/mail/v4/attachments/"+testAttachment.ID))
fmt.Fprint(w, testAttachmentCleartext) fmt.Fprint(w, testAttachmentCleartext)
})) }))

View File

@ -236,7 +236,6 @@ func (c *client) doBuffered(req *http.Request, bodyBuffer []byte, retryUnauthori
req.Header.Set("User-Agent", c.cm.config.UserAgent) req.Header.Set("User-Agent", c.cm.config.UserAgent)
req.Header.Set("x-pm-appversion", c.cm.config.AppVersion) req.Header.Set("x-pm-appversion", c.cm.config.AppVersion)
req.Header.Set("x-pm-apiversion", strconv.Itoa(Version))
if c.uid != "" { if c.uid != "" {
req.Header.Set("x-pm-uid", c.uid) req.Header.Set("x-pm-uid", c.uid)

View File

@ -74,9 +74,6 @@ func TestClient_Do(t *testing.T) {
if h.Get("x-pm-appversion") != testClientConfig.AppVersion { if h.Get("x-pm-appversion") != testClientConfig.AppVersion {
t.Fatalf("Invalid app version header: expected %v, got %v", testClientConfig.AppVersion, h.Get("x-pm-appversion")) t.Fatalf("Invalid app version header: expected %v, got %v", testClientConfig.AppVersion, h.Get("x-pm-appversion"))
} }
if h.Get("x-pm-apiversion") != fmt.Sprintf("%v", Version) {
t.Fatalf("Invalid api version header: expected %v, got %v", Version, h.Get("x-pm-apiversion"))
}
if h.Get("x-pm-uid") != "" { if h.Get("x-pm-uid") != "" {
t.Fatalf("Expected no uid header when not authenticated, got %v", h.Get("x-pm-uid")) t.Fatalf("Expected no uid header when not authenticated, got %v", h.Get("x-pm-uid"))
} }

View File

@ -32,7 +32,7 @@ type Conversation struct{}
// CountConversations counts conversations by label. // CountConversations counts conversations by label.
func (c *client) CountConversations(addressID string) (counts []*ConversationsCount, err error) { func (c *client) CountConversations(addressID string) (counts []*ConversationsCount, err error) {
reqURL := "/conversations/count" reqURL := "/mail/v4/conversations/count"
if addressID != "" { if addressID != "" {
reqURL += ("?AddressID=" + addressID) reqURL += ("?AddressID=" + addressID)
} }

View File

@ -120,7 +120,7 @@ type ImportMsgRes struct {
func (c *client) Import(reqs []*ImportMsgReq) (resps []*ImportMsgRes, err error) { func (c *client) Import(reqs []*ImportMsgReq) (resps []*ImportMsgRes, err error) {
importReq := &ImportReq{Messages: reqs} importReq := &ImportReq{Messages: reqs}
req, w, err := c.NewMultipartRequest("POST", "/import") req, w, err := c.NewMultipartRequest("POST", "/mail/v4/messages/import")
if err != nil { if err != nil {
return return
} }

View File

@ -55,7 +55,7 @@ var testImportRes = &ImportMsgRes{
func TestClient_Import(t *testing.T) { // nolint[funlen] func TestClient_Import(t *testing.T) { // nolint[funlen]
s, c := newTestServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { s, c := newTestServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
Ok(t, checkMethodAndPath(r, "POST", "/import")) Ok(t, checkMethodAndPath(r, "POST", "/mail/v4/messages/import"))
contentType, params, err := pmmime.ParseMediaType(r.Header.Get("Content-Type")) contentType, params, err := pmmime.ParseMediaType(r.Header.Get("Content-Type"))
if err != nil { if err != nil {

View File

@ -500,7 +500,7 @@ type MessagesListRes struct {
// ListMessages gets message metadata. // ListMessages gets message metadata.
func (c *client) ListMessages(filter *MessagesFilter) (msgs []*Message, total int, err error) { func (c *client) ListMessages(filter *MessagesFilter) (msgs []*Message, total int, err error) {
req, err := c.NewRequest("GET", "/messages", nil) req, err := c.NewRequest("GET", "/mail/v4/messages", nil)
if err != nil { if err != nil {
return return
} }
@ -528,7 +528,7 @@ type MessagesCountsRes struct {
// CountMessages counts messages by label. // CountMessages counts messages by label.
func (c *client) CountMessages(addressID string) (counts []*MessagesCount, err error) { func (c *client) CountMessages(addressID string) (counts []*MessagesCount, err error) {
reqURL := "/messages/count" reqURL := "/mail/v4/messages/count"
if addressID != "" { if addressID != "" {
reqURL += ("?AddressID=" + addressID) reqURL += ("?AddressID=" + addressID)
} }
@ -554,7 +554,7 @@ type MessageRes struct {
// GetMessage retrieves a message. // GetMessage retrieves a message.
func (c *client) GetMessage(id string) (msg *Message, err error) { func (c *client) GetMessage(id string) (msg *Message, err error) {
req, err := c.NewRequest("GET", "/messages/"+id, nil) req, err := c.NewRequest("GET", "/mail/v4/messages/"+id, nil)
if err != nil { if err != nil {
return return
} }
@ -631,7 +631,7 @@ func (c *client) SendMessage(id string, sendReq *SendMessageReq) (sent, parent *
sendReq.Packages = []*MessagePackage{} sendReq.Packages = []*MessagePackage{}
} }
req, err := c.NewJSONRequest("POST", "/messages/"+id, sendReq) req, err := c.NewJSONRequest("POST", "/mail/v4/messages/"+id, sendReq)
if err != nil { if err != nil {
return return
} }
@ -661,7 +661,7 @@ type DraftReq struct {
func (c *client) CreateDraft(m *Message, parent string, action int) (created *Message, err error) { func (c *client) CreateDraft(m *Message, parent string, action int) (created *Message, err error) {
createReq := &DraftReq{Message: m, ParentID: parent, Action: action, AttachmentKeyPackets: []string{}} createReq := &DraftReq{Message: m, ParentID: parent, Action: action, AttachmentKeyPackets: []string{}}
req, err := c.NewJSONRequest("POST", "/messages", createReq) req, err := c.NewJSONRequest("POST", "/mail/v4/messages", createReq)
if err != nil { if err != nil {
return return
} }
@ -720,7 +720,7 @@ func (c *client) doMessagesAction(action string, ids []string) (err error) {
// You should not call this directly unless you know what you are doing (it can overload the server). // You should not call this directly unless you know what you are doing (it can overload the server).
func (c *client) doMessagesActionInner(action string, ids []string) (err error) { func (c *client) doMessagesActionInner(action string, ids []string) (err error) {
actionReq := &MessagesActionReq{IDs: ids} actionReq := &MessagesActionReq{IDs: ids}
req, err := c.NewJSONRequest("PUT", "/messages/"+action, actionReq) req, err := c.NewJSONRequest("PUT", "/mail/v4/messages/"+action, actionReq)
if err != nil { if err != nil {
return return
} }
@ -772,7 +772,7 @@ func (c *client) LabelMessages(ids []string, label string) (err error) {
func (c *client) labelMessages(ids []string, label string) (err error) { func (c *client) labelMessages(ids []string, label string) (err error) {
labelReq := &LabelMessagesReq{LabelID: label, IDs: ids} labelReq := &LabelMessagesReq{LabelID: label, IDs: ids}
req, err := c.NewJSONRequest("PUT", "/messages/label", labelReq) req, err := c.NewJSONRequest("PUT", "/mail/v4/messages/label", labelReq)
if err != nil { if err != nil {
return return
} }
@ -802,7 +802,7 @@ func (c *client) UnlabelMessages(ids []string, label string) (err error) {
func (c *client) unlabelMessages(ids []string, label string) (err error) { func (c *client) unlabelMessages(ids []string, label string) (err error) {
labelReq := &LabelMessagesReq{LabelID: label, IDs: ids} labelReq := &LabelMessagesReq{LabelID: label, IDs: ids}
req, err := c.NewJSONRequest("PUT", "/messages/unlabel", labelReq) req, err := c.NewJSONRequest("PUT", "/mail/v4/messages/unlabel", labelReq)
if err != nil { if err != nil {
return return
} }
@ -820,7 +820,7 @@ func (c *client) EmptyFolder(labelID, addressID string) (err error) {
if labelID == "" { if labelID == "" {
return errors.New("pmapi: labelID parameter is empty string") return errors.New("pmapi: labelID parameter is empty string")
} }
reqURL := "/messages/empty?LabelID=" + labelID reqURL := "/mail/v4/messages/empty?LabelID=" + labelID
if addressID != "" { if addressID != "" {
reqURL += ("&AddressID=" + addressID) reqURL += ("&AddressID=" + addressID)
} }

View File

@ -184,7 +184,7 @@ func TestMessage_Encrypt(t *testing.T) {
} }
func routeLabelMessages(tb testing.TB, w http.ResponseWriter, r *http.Request) string { func routeLabelMessages(tb testing.TB, w http.ResponseWriter, r *http.Request) string {
Ok(tb, checkMethodAndPath(r, "PUT", "/messages/label")) Ok(tb, checkMethodAndPath(r, "PUT", "/mail/v4/messages/label"))
return "messages/label/put_response.json" return "messages/label/put_response.json"
} }

View File

@ -134,9 +134,6 @@ func checkMethodAndPath(r *http.Request, method, path string) error {
if err := checkHeader(r.Header, "x-pm-appversion", "GoPMAPI_1.0.14"); err != nil { if err := checkHeader(r.Header, "x-pm-appversion", "GoPMAPI_1.0.14"); err != nil {
result = multierror.Append(result, err) result = multierror.Append(result, err)
} }
if err := checkHeader(r.Header, "x-pm-apiversion", "3"); err != nil {
result = multierror.Append(result, err)
}
if r.Method != method { if r.Method != method {
err := fmt.Errorf("Invalid request method expected %v, got %v", method, r.Method) err := fmt.Errorf("Invalid request method expected %v, got %v", method, r.Method)
result = multierror.Append(result, err) result = multierror.Append(result, err)

View File

@ -104,7 +104,7 @@ const (
// GetMailSettings gets contact details specified by contact ID. // GetMailSettings gets contact details specified by contact ID.
func (c *client) GetMailSettings() (settings MailSettings, err error) { func (c *client) GetMailSettings() (settings MailSettings, err error) {
req, err := c.NewRequest("GET", "/settings/mail", nil) req, err := c.NewRequest("GET", "/mail/v4/settings", nil)
if err != nil { if err != nil {
return return

View File

@ -143,7 +143,6 @@ func (r tlsReport) sendReport(uri, userAgent string) {
req.Header.Add("Content-Type", "application/json") req.Header.Add("Content-Type", "application/json")
req.Header.Set("User-Agent", userAgent) req.Header.Set("User-Agent", userAgent)
req.Header.Set("x-pm-apiversion", strconv.Itoa(Version))
req.Header.Set("x-pm-appversion", r.AppVersion) req.Header.Set("x-pm-appversion", r.AppVersion)
logrus.WithField("request", req).Warn("Reporting TLS mismatch") logrus.WithField("request", req).Warn("Reporting TLS mismatch")

View File

@ -43,11 +43,11 @@ func apiIsCalledWith(endpoint string, data *gherkin.DocString) error {
} }
func messageIsSentWithAPICall(data *gherkin.DocString) error { func messageIsSentWithAPICall(data *gherkin.DocString) error {
endpoint := "POST /messages" endpoint := "POST /mail/v4/messages"
if err := apiIsCalledWith(endpoint, data); err != nil { if err := apiIsCalledWith(endpoint, data); err != nil {
return err return err
} }
for _, request := range ctx.GetPMAPIController().GetCalls("POST", "/messages") { for _, request := range ctx.GetPMAPIController().GetCalls("POST", "/mail/v4/messages") {
if !checkAllRequiredFieldsForSendingMessage(request) { if !checkAllRequiredFieldsForSendingMessage(request) {
return fmt.Errorf("%s was not called with all required fields: %s", endpoint, request) return fmt.Errorf("%s was not called with all required fields: %s", endpoint, request)
} }

View File

@ -27,7 +27,7 @@ import (
) )
func (api *FakePMAPI) GetAttachment(attachmentID string) (io.ReadCloser, error) { func (api *FakePMAPI) GetAttachment(attachmentID string) (io.ReadCloser, error) {
if err := api.checkAndRecordCall(GET, "/attachments/"+attachmentID, nil); err != nil { if err := api.checkAndRecordCall(GET, "/mail/v4/attachments/"+attachmentID, nil); err != nil {
return nil, err return nil, err
} }
data := strings.NewReader("data") data := strings.NewReader("data")
@ -35,7 +35,7 @@ func (api *FakePMAPI) GetAttachment(attachmentID string) (io.ReadCloser, error)
} }
func (api *FakePMAPI) CreateAttachment(attachment *pmapi.Attachment, data io.Reader, signature io.Reader) (*pmapi.Attachment, error) { func (api *FakePMAPI) CreateAttachment(attachment *pmapi.Attachment, data io.Reader, signature io.Reader) (*pmapi.Attachment, error) {
if err := api.checkAndRecordCall(POST, "/attachments", nil); err != nil { if err := api.checkAndRecordCall(POST, "/mail/v4/attachments", nil); err != nil {
return nil, err return nil, err
} }
bytes, err := ioutil.ReadAll(data) bytes, err := ioutil.ReadAll(data)
@ -47,7 +47,7 @@ func (api *FakePMAPI) CreateAttachment(attachment *pmapi.Attachment, data io.Rea
} }
func (api *FakePMAPI) DeleteAttachment(attID string) error { func (api *FakePMAPI) DeleteAttachment(attID string) error {
if err := api.checkAndRecordCall(DELETE, "/attachments/"+attID, nil); err != nil { if err := api.checkAndRecordCall(DELETE, "/mail/v4/attachments/"+attID, nil); err != nil {
return err return err
} }
return nil return nil

View File

@ -20,7 +20,7 @@ package fakeapi
import "github.com/ProtonMail/proton-bridge/pkg/pmapi" import "github.com/ProtonMail/proton-bridge/pkg/pmapi"
func (api *FakePMAPI) CountMessages(addressID string) ([]*pmapi.MessagesCount, error) { func (api *FakePMAPI) CountMessages(addressID string) ([]*pmapi.MessagesCount, error) {
if err := api.checkAndRecordCall(GET, "/messages/count?AddressID="+addressID, nil); err != nil { if err := api.checkAndRecordCall(GET, "/mail/v4/messages/count?AddressID="+addressID, nil); err != nil {
return nil, err return nil, err
} }
return api.getCounts(addressID), nil return api.getCounts(addressID), nil

View File

@ -30,7 +30,7 @@ import (
var errWasNotUpdated = errors.New("message was not updated") var errWasNotUpdated = errors.New("message was not updated")
func (api *FakePMAPI) GetMessage(apiID string) (*pmapi.Message, error) { func (api *FakePMAPI) GetMessage(apiID string) (*pmapi.Message, error) {
if err := api.checkAndRecordCall(GET, "/messages/"+apiID, nil); err != nil { if err := api.checkAndRecordCall(GET, "/mail/v4/messages/"+apiID, nil); err != nil {
return nil, err return nil, err
} }
for _, message := range api.messages { for _, message := range api.messages {
@ -50,7 +50,7 @@ func (api *FakePMAPI) GetMessage(apiID string) (*pmapi.Message, error) {
// * Attachments // * Attachments
// * AutoWildcard // * AutoWildcard
func (api *FakePMAPI) ListMessages(filter *pmapi.MessagesFilter) ([]*pmapi.Message, int, error) { func (api *FakePMAPI) ListMessages(filter *pmapi.MessagesFilter) ([]*pmapi.Message, int, error) {
if err := api.checkAndRecordCall(GET, "/messages", filter); err != nil { if err := api.checkAndRecordCall(GET, "/mail/v4/messages", filter); err != nil {
return nil, 0, err return nil, 0, err
} }
pageSize := filter.PageSize pageSize := filter.PageSize
@ -151,7 +151,7 @@ func copyFilteredMessage(message *pmapi.Message) *pmapi.Message {
} }
func (api *FakePMAPI) CreateDraft(message *pmapi.Message, parentID string, action int) (*pmapi.Message, error) { func (api *FakePMAPI) CreateDraft(message *pmapi.Message, parentID string, action int) (*pmapi.Message, error) {
if err := api.checkAndRecordCall(POST, "/messages", &pmapi.DraftReq{ if err := api.checkAndRecordCall(POST, "/mail/v4/messages", &pmapi.DraftReq{
Message: message, Message: message,
ParentID: parentID, ParentID: parentID,
Action: action, Action: action,
@ -175,7 +175,7 @@ func (api *FakePMAPI) CreateDraft(message *pmapi.Message, parentID string, actio
} }
func (api *FakePMAPI) SendMessage(messageID string, sendMessageRequest *pmapi.SendMessageReq) (sent, parent *pmapi.Message, err error) { func (api *FakePMAPI) SendMessage(messageID string, sendMessageRequest *pmapi.SendMessageReq) (sent, parent *pmapi.Message, err error) {
if err := api.checkAndRecordCall(POST, "/messages/"+messageID, sendMessageRequest); err != nil { if err := api.checkAndRecordCall(POST, "/mail/v4/messages/"+messageID, sendMessageRequest); err != nil {
return nil, nil, err return nil, nil, err
} }
message, err := api.GetMessage(messageID) message, err := api.GetMessage(messageID)
@ -225,7 +225,7 @@ func (api *FakePMAPI) addMessage(message *pmapi.Message) {
} }
func (api *FakePMAPI) DeleteMessages(apiIDs []string) error { func (api *FakePMAPI) DeleteMessages(apiIDs []string) error {
err := api.deleteMessages(PUT, "/messages/delete", &pmapi.MessagesActionReq{ err := api.deleteMessages(PUT, "/mail/v4/messages/delete", &pmapi.MessagesActionReq{
IDs: apiIDs, IDs: apiIDs,
}, func(message *pmapi.Message) bool { }, func(message *pmapi.Message) bool {
return hasItem(apiIDs, message.ID) return hasItem(apiIDs, message.ID)
@ -242,7 +242,7 @@ func (api *FakePMAPI) DeleteMessages(apiIDs []string) error {
} }
func (api *FakePMAPI) EmptyFolder(labelID string, addressID string) error { func (api *FakePMAPI) EmptyFolder(labelID string, addressID string) error {
err := api.deleteMessages(DELETE, "/messages/empty?LabelID="+labelID+"&AddressID="+addressID, nil, func(message *pmapi.Message) bool { err := api.deleteMessages(DELETE, "/mail/v4/messages/empty?LabelID="+labelID+"&AddressID="+addressID, nil, func(message *pmapi.Message) bool {
return hasItem(message.LabelIDs, labelID) && message.AddressID == addressID return hasItem(message.LabelIDs, labelID) && message.AddressID == addressID
}) })
if err != nil { if err != nil {
@ -277,7 +277,7 @@ func (api *FakePMAPI) deleteMessages(method method, path string, request interfa
} }
func (api *FakePMAPI) LabelMessages(apiIDs []string, labelID string) error { func (api *FakePMAPI) LabelMessages(apiIDs []string, labelID string) error {
return api.updateMessages(PUT, "/messages/label", &pmapi.LabelMessagesReq{ return api.updateMessages(PUT, "/mail/v4/messages/label", &pmapi.LabelMessagesReq{
IDs: apiIDs, IDs: apiIDs,
LabelID: labelID, LabelID: labelID,
}, apiIDs, func(message *pmapi.Message) error { }, apiIDs, func(message *pmapi.Message) error {
@ -303,7 +303,7 @@ func (api *FakePMAPI) LabelMessages(apiIDs []string, labelID string) error {
} }
func (api *FakePMAPI) UnlabelMessages(apiIDs []string, labelID string) error { func (api *FakePMAPI) UnlabelMessages(apiIDs []string, labelID string) error {
return api.updateMessages(PUT, "/messages/unlabel", &pmapi.LabelMessagesReq{ return api.updateMessages(PUT, "/mail/v4/messages/unlabel", &pmapi.LabelMessagesReq{
IDs: apiIDs, IDs: apiIDs,
LabelID: labelID, LabelID: labelID,
}, apiIDs, func(message *pmapi.Message) error { }, apiIDs, func(message *pmapi.Message) error {
@ -321,7 +321,7 @@ func (api *FakePMAPI) UnlabelMessages(apiIDs []string, labelID string) error {
} }
func (api *FakePMAPI) MarkMessagesRead(apiIDs []string) error { func (api *FakePMAPI) MarkMessagesRead(apiIDs []string) error {
return api.updateMessages(PUT, "/messages/read", &pmapi.MessagesActionReq{ return api.updateMessages(PUT, "/mail/v4/messages/read", &pmapi.MessagesActionReq{
IDs: apiIDs, IDs: apiIDs,
}, apiIDs, func(message *pmapi.Message) error { }, apiIDs, func(message *pmapi.Message) error {
if message.Unread == 0 { if message.Unread == 0 {
@ -333,7 +333,7 @@ func (api *FakePMAPI) MarkMessagesRead(apiIDs []string) error {
} }
func (api *FakePMAPI) MarkMessagesUnread(apiIDs []string) error { func (api *FakePMAPI) MarkMessagesUnread(apiIDs []string) error {
err := api.updateMessages(PUT, "/messages/unread", &pmapi.MessagesActionReq{ err := api.updateMessages(PUT, "/mail/v4/messages/unread", &pmapi.MessagesActionReq{
IDs: apiIDs, IDs: apiIDs,
}, apiIDs, func(message *pmapi.Message) error { }, apiIDs, func(message *pmapi.Message) error {
if message.Unread == 1 { if message.Unread == 1 {

View File

@ -23,7 +23,7 @@ import (
) )
func (api *FakePMAPI) GetMailSettings() (pmapi.MailSettings, error) { func (api *FakePMAPI) GetMailSettings() (pmapi.MailSettings, error) {
if err := api.checkAndRecordCall(GET, "/settings/mail", nil); err != nil { if err := api.checkAndRecordCall(GET, "/mail/v4/settings", nil); err != nil {
return pmapi.MailSettings{}, err return pmapi.MailSettings{}, err
} }
return pmapi.MailSettings{}, nil return pmapi.MailSettings{}, nil