Sentry report after parser panic

This commit is contained in:
Michal Horejsek
2020-08-31 17:23:22 +02:00
parent 1d2e584799
commit bc07896436
5 changed files with 23 additions and 9 deletions

View File

@ -167,5 +167,5 @@ func (ie *ImportExport) getPMAPIProvider(address string) (*transfer.PMAPIProvide
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)
}

View File

@ -27,6 +27,7 @@ import (
// PMAPIProvider implements import and export to/from ProtonMail server.
type PMAPIProvider struct {
clientConfig *pmapi.ClientConfig
clientManager ClientManager
userID string
addressID string
@ -37,8 +38,9 @@ type PMAPIProvider struct {
}
// 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{
clientConfig: config,
clientManager: clientManager,
userID: userID,
addressID: addressID,

View File

@ -25,6 +25,7 @@ import (
pkgMessage "github.com/ProtonMail/proton-bridge/pkg/message"
"github.com/ProtonMail/proton-bridge/pkg/pmapi"
"github.com/ProtonMail/proton-bridge/pkg/sentry"
"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.
defer func() {
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), "", "")

View File

@ -33,7 +33,7 @@ func TestPMAPIProviderMailboxes(t *testing.T) {
defer m.ctrl.Finish()
setupPMAPIClientExpectationForExport(&m)
provider, err := NewPMAPIProvider(m.clientManager, "user", "addressID")
provider, err := NewPMAPIProvider(m.pmapiConfig, m.clientManager, "user", "addressID")
r.NoError(t, err)
tests := []struct {
@ -78,7 +78,7 @@ func TestPMAPIProviderTransferTo(t *testing.T) {
defer m.ctrl.Finish()
setupPMAPIClientExpectationForExport(&m)
provider, err := NewPMAPIProvider(m.clientManager, "user", "addressID")
provider, err := NewPMAPIProvider(m.pmapiConfig, m.clientManager, "user", "addressID")
r.NoError(t, err)
rules, rulesClose := newTestRules(t)
@ -96,7 +96,7 @@ func TestPMAPIProviderTransferFrom(t *testing.T) {
defer m.ctrl.Finish()
setupPMAPIClientExpectationForImport(&m)
provider, err := NewPMAPIProvider(m.clientManager, "user", "addressID")
provider, err := NewPMAPIProvider(m.pmapiConfig, m.clientManager, "user", "addressID")
r.NoError(t, err)
rules, rulesClose := newTestRules(t)
@ -114,7 +114,7 @@ func TestPMAPIProviderTransferFromDraft(t *testing.T) {
defer m.ctrl.Finish()
setupPMAPIClientExpectationForImportDraft(&m)
provider, err := NewPMAPIProvider(m.clientManager, "user", "addressID")
provider, err := NewPMAPIProvider(m.pmapiConfig, m.clientManager, "user", "addressID")
r.NoError(t, err)
rules, rulesClose := newTestRules(t)
@ -133,9 +133,9 @@ func TestPMAPIProviderTransferFromTo(t *testing.T) {
setupPMAPIClientExpectationForExport(&m)
setupPMAPIClientExpectationForImport(&m)
source, err := NewPMAPIProvider(m.clientManager, "user", "addressID")
source, err := NewPMAPIProvider(m.pmapiConfig, m.clientManager, "user", "addressID")
r.NoError(t, err)
target, err := NewPMAPIProvider(m.clientManager, "user", "addressID")
target, err := NewPMAPIProvider(m.pmapiConfig, m.clientManager, "user", "addressID")
r.NoError(t, err)
rules, rulesClose := newTestRules(t)

View File

@ -23,6 +23,7 @@ import (
"github.com/ProtonMail/gopenpgp/v2/crypto"
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"
gomock "github.com/golang/mock/gomock"
)
@ -34,6 +35,7 @@ type mocks struct {
panicHandler *transfermocks.MockPanicHandler
clientManager *transfermocks.MockClientManager
pmapiClient *pmapimocks.MockClient
pmapiConfig *pmapi.ClientConfig
keyring *crypto.KeyRing
}
@ -48,6 +50,7 @@ func initMocks(t *testing.T) mocks {
panicHandler: transfermocks.NewMockPanicHandler(mockCtrl),
clientManager: transfermocks.NewMockClientManager(mockCtrl),
pmapiClient: pmapimocks.NewMockClient(mockCtrl),
pmapiConfig: &pmapi.ClientConfig{},
keyring: newTestKeyring(),
}