diff --git a/go.mod b/go.mod index 0dbedd2b..2440049e 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.18 require ( github.com/0xAX/notificator v0.0.0-20220220101646-ee9b8921e557 github.com/Masterminds/semver/v3 v3.1.1 - github.com/ProtonMail/gluon v0.14.2-0.20230228123113-22bea5989bff + github.com/ProtonMail/gluon v0.14.2-0.20230228154054-7b2d621cdfd0 github.com/ProtonMail/go-autostart v0.0.0-20210130080809-00ed301c8e9a github.com/ProtonMail/go-proton-api v0.3.1-0.20230209110241-fe7894c4931a github.com/ProtonMail/go-rfc5322 v0.11.0 diff --git a/go.sum b/go.sum index cec74c48..bb2f0b2e 100644 --- a/go.sum +++ b/go.sum @@ -28,10 +28,8 @@ github.com/ProtonMail/bcrypt v0.0.0-20211005172633-e235017c1baf h1:yc9daCCYUefEs github.com/ProtonMail/bcrypt v0.0.0-20211005172633-e235017c1baf/go.mod h1:o0ESU9p83twszAU8LBeJKFAAMX14tISa0yk4Oo5TOqo= github.com/ProtonMail/docker-credential-helpers v1.1.0 h1:+kvUIpwWcbtP3WFv5sSvkFn/XLzSqPOB5AAthuk9xPk= github.com/ProtonMail/docker-credential-helpers v1.1.0/go.mod h1:mK0aBveCxhnQ756AmaTfXMZDeULvheYVhF/MWMErN5g= -github.com/ProtonMail/gluon v0.14.2-0.20230227135029-cef8f5824680 h1:NGp7LfbsKePRHBgMcgquycHx3CSuS7255i0wanAiCuY= -github.com/ProtonMail/gluon v0.14.2-0.20230227135029-cef8f5824680/go.mod h1:z2AxLIiBCT1K+0OBHyaDI7AEaO5qI6/BEC2TE42vs4Q= -github.com/ProtonMail/gluon v0.14.2-0.20230228123113-22bea5989bff h1:bEd2MwK3RFDPzq5mTrS1fZ9Ihjqkz2cnIQ7FbO0Dd8I= -github.com/ProtonMail/gluon v0.14.2-0.20230228123113-22bea5989bff/go.mod h1:z2AxLIiBCT1K+0OBHyaDI7AEaO5qI6/BEC2TE42vs4Q= +github.com/ProtonMail/gluon v0.14.2-0.20230228154054-7b2d621cdfd0 h1:wLUaWZ15jn14V7TJ/mXvAPQEjsoX2d3KDxbBgohzt/c= +github.com/ProtonMail/gluon v0.14.2-0.20230228154054-7b2d621cdfd0/go.mod h1:z2AxLIiBCT1K+0OBHyaDI7AEaO5qI6/BEC2TE42vs4Q= github.com/ProtonMail/go-autostart v0.0.0-20210130080809-00ed301c8e9a h1:D+aZah+k14Gn6kmL7eKxoo/4Dr/lK3ChBcwce2+SQP4= github.com/ProtonMail/go-autostart v0.0.0-20210130080809-00ed301c8e9a/go.mod h1:oTGdE7/DlWIr23G0IKW3OXK9wZ5Hw1GGiaJFccTvZi4= github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= diff --git a/internal/user/imap.go b/internal/user/imap.go index 96e9c306..bcef92ea 100644 --- a/internal/user/imap.go +++ b/internal/user/imap.go @@ -92,7 +92,7 @@ func (conn *imapConnector) CreateMailbox(ctx context.Context, name []string) (im defer conn.goPollAPIEvents(false) if len(name) < 2 { - return imap.Mailbox{}, fmt.Errorf("invalid mailbox name %q", name) + return imap.Mailbox{}, fmt.Errorf("invalid mailbox name %q: %w", name, connector.ErrOperationNotAllowed) } switch name[0] { @@ -103,13 +103,13 @@ func (conn *imapConnector) CreateMailbox(ctx context.Context, name []string) (im return conn.createLabel(ctx, name[1:]) default: - return imap.Mailbox{}, fmt.Errorf("invalid mailbox name %q", name) + return imap.Mailbox{}, fmt.Errorf("invalid mailbox name %q: %w", name, connector.ErrOperationNotAllowed) } } func (conn *imapConnector) createLabel(ctx context.Context, name []string) (imap.Mailbox, error) { if len(name) != 1 { - return imap.Mailbox{}, fmt.Errorf("a label cannot have children") + return imap.Mailbox{}, fmt.Errorf("a label cannot have children: %w", connector.ErrOperationNotAllowed) } return safe.LockRetErr(func() (imap.Mailbox, error) { @@ -144,7 +144,7 @@ func (conn *imapConnector) createFolder(ctx context.Context, name []string) (ima } if parentID == "" { - return imap.Mailbox{}, fmt.Errorf("parent folder %q does not exist", name[:len(name)-1]) + return imap.Mailbox{}, fmt.Errorf("parent folder %q does not exist: %w", name[:len(name)-1], connector.ErrOperationNotAllowed) } } @@ -171,7 +171,7 @@ func (conn *imapConnector) UpdateMailboxName(ctx context.Context, labelID imap.M defer conn.goPollAPIEvents(false) if len(name) < 2 { - return fmt.Errorf("invalid mailbox name %q", name) + return fmt.Errorf("invalid mailbox name %q: %w", name, connector.ErrOperationNotAllowed) } switch name[0] { @@ -182,14 +182,14 @@ func (conn *imapConnector) UpdateMailboxName(ctx context.Context, labelID imap.M return conn.updateLabel(ctx, labelID, name[1:]) default: - return fmt.Errorf("invalid mailbox name %q", name) + return fmt.Errorf("invalid mailbox name %q: %w", name, connector.ErrOperationNotAllowed) } }, conn.apiLabelsLock) } func (conn *imapConnector) updateLabel(ctx context.Context, labelID imap.MailboxID, name []string) error { if len(name) != 1 { - return fmt.Errorf("a label cannot have children") + return fmt.Errorf("a label cannot have children: %w", connector.ErrOperationNotAllowed) } label, err := conn.client.GetLabel(ctx, string(labelID), proton.LabelTypeLabel) @@ -225,7 +225,7 @@ func (conn *imapConnector) updateFolder(ctx context.Context, labelID imap.Mailbo } if parentID == "" { - return fmt.Errorf("parent folder %q does not exist", name[:len(name)-1]) + return fmt.Errorf("parent folder %q does not exist: %w", name[:len(name)-1], connector.ErrOperationNotAllowed) } } @@ -276,7 +276,7 @@ func (conn *imapConnector) CreateMessage( defer conn.goPollAPIEvents(false) if mailboxID == proton.AllMailLabel { - return imap.Message{}, nil, fmt.Errorf("not allowed") + return imap.Message{}, nil, connector.ErrOperationNotAllowed } // Compute the hash of the message (to match it against SMTP messages). @@ -383,7 +383,7 @@ func (conn *imapConnector) AddMessagesToMailbox(ctx context.Context, messageIDs defer conn.goPollAPIEvents(false) if mailboxID == proton.AllMailLabel { - return fmt.Errorf("not allowed") + return connector.ErrOperationNotAllowed } return conn.client.LabelMessages(ctx, mapTo[imap.MessageID, string](messageIDs), string(mailboxID)) @@ -394,7 +394,7 @@ func (conn *imapConnector) RemoveMessagesFromMailbox(ctx context.Context, messag defer conn.goPollAPIEvents(false) if mailboxID == proton.AllMailLabel { - return fmt.Errorf("not allowed") + return connector.ErrOperationNotAllowed } if err := conn.client.UnlabelMessages(ctx, mapTo[imap.MessageID, string](messageIDs), string(mailboxID)); err != nil { @@ -444,7 +444,7 @@ func (conn *imapConnector) MoveMessages(ctx context.Context, messageIDs []imap.M (labelFromID == proton.SentLabel && labelToID == proton.InboxLabel) || labelFromID == proton.AllMailLabel || labelToID == proton.AllMailLabel { - return false, fmt.Errorf("not allowed") + return false, connector.ErrOperationNotAllowed } shouldExpungeOldLocation := func() bool {