mirror of
https://github.com/ProtonMail/proton-bridge.git
synced 2025-12-10 04:36:43 +00:00
Sentry report after parser panic
This commit is contained in:
@ -167,5 +167,5 @@ func (ie *ImportExport) getPMAPIProvider(address string) (*transfer.PMAPIProvide
|
|||||||
log.WithError(err).Info("Address does not exist, using all addresses")
|
log.WithError(err).Info("Address does not exist, using all addresses")
|
||||||
}
|
}
|
||||||
|
|
||||||
return transfer.NewPMAPIProvider(ie.clientManager, user.ID(), addressID)
|
return transfer.NewPMAPIProvider(ie.config.GetAPIConfig(), ie.clientManager, user.ID(), addressID)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -27,6 +27,7 @@ import (
|
|||||||
|
|
||||||
// PMAPIProvider implements import and export to/from ProtonMail server.
|
// PMAPIProvider implements import and export to/from ProtonMail server.
|
||||||
type PMAPIProvider struct {
|
type PMAPIProvider struct {
|
||||||
|
clientConfig *pmapi.ClientConfig
|
||||||
clientManager ClientManager
|
clientManager ClientManager
|
||||||
userID string
|
userID string
|
||||||
addressID string
|
addressID string
|
||||||
@ -37,8 +38,9 @@ type PMAPIProvider struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewPMAPIProvider returns new PMAPIProvider.
|
// NewPMAPIProvider returns new PMAPIProvider.
|
||||||
func NewPMAPIProvider(clientManager ClientManager, userID, addressID string) (*PMAPIProvider, error) {
|
func NewPMAPIProvider(config *pmapi.ClientConfig, clientManager ClientManager, userID, addressID string) (*PMAPIProvider, error) {
|
||||||
provider := &PMAPIProvider{
|
provider := &PMAPIProvider{
|
||||||
|
clientConfig: config,
|
||||||
clientManager: clientManager,
|
clientManager: clientManager,
|
||||||
userID: userID,
|
userID: userID,
|
||||||
addressID: addressID,
|
addressID: addressID,
|
||||||
|
|||||||
@ -25,6 +25,7 @@ import (
|
|||||||
|
|
||||||
pkgMessage "github.com/ProtonMail/proton-bridge/pkg/message"
|
pkgMessage "github.com/ProtonMail/proton-bridge/pkg/message"
|
||||||
"github.com/ProtonMail/proton-bridge/pkg/pmapi"
|
"github.com/ProtonMail/proton-bridge/pkg/pmapi"
|
||||||
|
"github.com/ProtonMail/proton-bridge/pkg/sentry"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -211,7 +212,15 @@ func (p *PMAPIProvider) parseMessage(msg Message) (m *pmapi.Message, r []io.Read
|
|||||||
// Instead of crashing we try to convert to regular error.
|
// Instead of crashing we try to convert to regular error.
|
||||||
defer func() {
|
defer func() {
|
||||||
if r := recover(); r != nil {
|
if r := recover(); r != nil {
|
||||||
err = fmt.Errorf("%v", r)
|
err = fmt.Errorf("panic while parse: %v", r)
|
||||||
|
if sentryErr := sentry.ReportSentryCrash(
|
||||||
|
p.clientConfig.ClientID,
|
||||||
|
p.clientConfig.AppVersion,
|
||||||
|
p.clientConfig.UserAgent,
|
||||||
|
err,
|
||||||
|
); sentryErr != nil {
|
||||||
|
log.Error("Sentry crash report failed: ", sentryErr)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
message, _, _, attachmentReaders, err := pkgMessage.Parse(bytes.NewBuffer(msg.Body), "", "")
|
message, _, _, attachmentReaders, err := pkgMessage.Parse(bytes.NewBuffer(msg.Body), "", "")
|
||||||
|
|||||||
@ -33,7 +33,7 @@ func TestPMAPIProviderMailboxes(t *testing.T) {
|
|||||||
defer m.ctrl.Finish()
|
defer m.ctrl.Finish()
|
||||||
|
|
||||||
setupPMAPIClientExpectationForExport(&m)
|
setupPMAPIClientExpectationForExport(&m)
|
||||||
provider, err := NewPMAPIProvider(m.clientManager, "user", "addressID")
|
provider, err := NewPMAPIProvider(m.pmapiConfig, m.clientManager, "user", "addressID")
|
||||||
r.NoError(t, err)
|
r.NoError(t, err)
|
||||||
|
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
@ -78,7 +78,7 @@ func TestPMAPIProviderTransferTo(t *testing.T) {
|
|||||||
defer m.ctrl.Finish()
|
defer m.ctrl.Finish()
|
||||||
|
|
||||||
setupPMAPIClientExpectationForExport(&m)
|
setupPMAPIClientExpectationForExport(&m)
|
||||||
provider, err := NewPMAPIProvider(m.clientManager, "user", "addressID")
|
provider, err := NewPMAPIProvider(m.pmapiConfig, m.clientManager, "user", "addressID")
|
||||||
r.NoError(t, err)
|
r.NoError(t, err)
|
||||||
|
|
||||||
rules, rulesClose := newTestRules(t)
|
rules, rulesClose := newTestRules(t)
|
||||||
@ -96,7 +96,7 @@ func TestPMAPIProviderTransferFrom(t *testing.T) {
|
|||||||
defer m.ctrl.Finish()
|
defer m.ctrl.Finish()
|
||||||
|
|
||||||
setupPMAPIClientExpectationForImport(&m)
|
setupPMAPIClientExpectationForImport(&m)
|
||||||
provider, err := NewPMAPIProvider(m.clientManager, "user", "addressID")
|
provider, err := NewPMAPIProvider(m.pmapiConfig, m.clientManager, "user", "addressID")
|
||||||
r.NoError(t, err)
|
r.NoError(t, err)
|
||||||
|
|
||||||
rules, rulesClose := newTestRules(t)
|
rules, rulesClose := newTestRules(t)
|
||||||
@ -114,7 +114,7 @@ func TestPMAPIProviderTransferFromDraft(t *testing.T) {
|
|||||||
defer m.ctrl.Finish()
|
defer m.ctrl.Finish()
|
||||||
|
|
||||||
setupPMAPIClientExpectationForImportDraft(&m)
|
setupPMAPIClientExpectationForImportDraft(&m)
|
||||||
provider, err := NewPMAPIProvider(m.clientManager, "user", "addressID")
|
provider, err := NewPMAPIProvider(m.pmapiConfig, m.clientManager, "user", "addressID")
|
||||||
r.NoError(t, err)
|
r.NoError(t, err)
|
||||||
|
|
||||||
rules, rulesClose := newTestRules(t)
|
rules, rulesClose := newTestRules(t)
|
||||||
@ -133,9 +133,9 @@ func TestPMAPIProviderTransferFromTo(t *testing.T) {
|
|||||||
setupPMAPIClientExpectationForExport(&m)
|
setupPMAPIClientExpectationForExport(&m)
|
||||||
setupPMAPIClientExpectationForImport(&m)
|
setupPMAPIClientExpectationForImport(&m)
|
||||||
|
|
||||||
source, err := NewPMAPIProvider(m.clientManager, "user", "addressID")
|
source, err := NewPMAPIProvider(m.pmapiConfig, m.clientManager, "user", "addressID")
|
||||||
r.NoError(t, err)
|
r.NoError(t, err)
|
||||||
target, err := NewPMAPIProvider(m.clientManager, "user", "addressID")
|
target, err := NewPMAPIProvider(m.pmapiConfig, m.clientManager, "user", "addressID")
|
||||||
r.NoError(t, err)
|
r.NoError(t, err)
|
||||||
|
|
||||||
rules, rulesClose := newTestRules(t)
|
rules, rulesClose := newTestRules(t)
|
||||||
|
|||||||
@ -23,6 +23,7 @@ import (
|
|||||||
|
|
||||||
"github.com/ProtonMail/gopenpgp/v2/crypto"
|
"github.com/ProtonMail/gopenpgp/v2/crypto"
|
||||||
transfermocks "github.com/ProtonMail/proton-bridge/internal/transfer/mocks"
|
transfermocks "github.com/ProtonMail/proton-bridge/internal/transfer/mocks"
|
||||||
|
"github.com/ProtonMail/proton-bridge/pkg/pmapi"
|
||||||
pmapimocks "github.com/ProtonMail/proton-bridge/pkg/pmapi/mocks"
|
pmapimocks "github.com/ProtonMail/proton-bridge/pkg/pmapi/mocks"
|
||||||
gomock "github.com/golang/mock/gomock"
|
gomock "github.com/golang/mock/gomock"
|
||||||
)
|
)
|
||||||
@ -34,6 +35,7 @@ type mocks struct {
|
|||||||
panicHandler *transfermocks.MockPanicHandler
|
panicHandler *transfermocks.MockPanicHandler
|
||||||
clientManager *transfermocks.MockClientManager
|
clientManager *transfermocks.MockClientManager
|
||||||
pmapiClient *pmapimocks.MockClient
|
pmapiClient *pmapimocks.MockClient
|
||||||
|
pmapiConfig *pmapi.ClientConfig
|
||||||
|
|
||||||
keyring *crypto.KeyRing
|
keyring *crypto.KeyRing
|
||||||
}
|
}
|
||||||
@ -48,6 +50,7 @@ func initMocks(t *testing.T) mocks {
|
|||||||
panicHandler: transfermocks.NewMockPanicHandler(mockCtrl),
|
panicHandler: transfermocks.NewMockPanicHandler(mockCtrl),
|
||||||
clientManager: transfermocks.NewMockClientManager(mockCtrl),
|
clientManager: transfermocks.NewMockClientManager(mockCtrl),
|
||||||
pmapiClient: pmapimocks.NewMockClient(mockCtrl),
|
pmapiClient: pmapimocks.NewMockClient(mockCtrl),
|
||||||
|
pmapiConfig: &pmapi.ClientConfig{},
|
||||||
keyring: newTestKeyring(),
|
keyring: newTestKeyring(),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user