GODT-803 Fix import to wrong target address
This commit is contained in:
@ -38,7 +38,7 @@ func (f *frontendCLI) importLocalMessages(c *ishell.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
t, err := f.ie.GetLocalImporter(user.GetPrimaryAddress(), path)
|
t, err := f.ie.GetLocalImporter(user.Username(), user.GetPrimaryAddress(), path)
|
||||||
f.transfer(t, err, false, true)
|
f.transfer(t, err, false, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,7 +68,7 @@ func (f *frontendCLI) importRemoteMessages(c *ishell.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
t, err := f.ie.GetRemoteImporter(user.GetPrimaryAddress(), username, password, host, port)
|
t, err := f.ie.GetRemoteImporter(user.Username(), user.GetPrimaryAddress(), username, password, host, port)
|
||||||
f.transfer(t, err, false, true)
|
f.transfer(t, err, false, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -81,7 +81,7 @@ func (f *frontendCLI) exportMessagesToEML(c *ishell.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
t, err := f.ie.GetEMLExporter(user.GetPrimaryAddress(), path)
|
t, err := f.ie.GetEMLExporter(user.Username(), user.GetPrimaryAddress(), path)
|
||||||
f.transfer(t, err, true, false)
|
f.transfer(t, err, true, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -94,7 +94,7 @@ func (f *frontendCLI) exportMessagesToMBOX(c *ishell.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
t, err := f.ie.GetMBOXExporter(user.GetPrimaryAddress(), path)
|
t, err := f.ie.GetMBOXExporter(user.Username(), user.GetPrimaryAddress(), path)
|
||||||
f.transfer(t, err, true, false)
|
f.transfer(t, err, true, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -165,6 +165,7 @@ Column {
|
|||||||
textColor : Style.main.textBlue
|
textColor : Style.main.textBlue
|
||||||
onClicked: {
|
onClicked: {
|
||||||
dialogExport.currentIndex = 0
|
dialogExport.currentIndex = 0
|
||||||
|
dialogExport.account = account
|
||||||
dialogExport.address = account
|
dialogExport.address = account
|
||||||
dialogExport.show()
|
dialogExport.show()
|
||||||
}
|
}
|
||||||
@ -321,6 +322,7 @@ Column {
|
|||||||
textBold: true
|
textBold: true
|
||||||
textColor: Style.main.textBlue
|
textColor: Style.main.textBlue
|
||||||
onClicked: {
|
onClicked: {
|
||||||
|
dialogExport.account = account
|
||||||
dialogExport.address = listalias[index]
|
dialogExport.address = listalias[index]
|
||||||
dialogExport.show()
|
dialogExport.show()
|
||||||
}
|
}
|
||||||
@ -339,6 +341,7 @@ Column {
|
|||||||
textBold: true
|
textBold: true
|
||||||
textColor: enabled ? Style.main.textBlue : Style.main.textDisabled
|
textColor: enabled ? Style.main.textBlue : Style.main.textDisabled
|
||||||
onClicked: {
|
onClicked: {
|
||||||
|
dialogImport.account = account
|
||||||
dialogImport.address = listalias[index]
|
dialogImport.address = listalias[index]
|
||||||
dialogImport.show()
|
dialogImport.show()
|
||||||
}
|
}
|
||||||
|
|||||||
@ -35,6 +35,7 @@ Dialog {
|
|||||||
|
|
||||||
title : set_title()
|
title : set_title()
|
||||||
|
|
||||||
|
property string account
|
||||||
property string address
|
property string address
|
||||||
property alias finish: finish
|
property alias finish: finish
|
||||||
|
|
||||||
@ -428,7 +429,7 @@ Dialog {
|
|||||||
onTriggered : {
|
onTriggered : {
|
||||||
switch (currentIndex) {
|
switch (currentIndex) {
|
||||||
case 0:
|
case 0:
|
||||||
go.loadStructureForExport(root.address)
|
go.loadStructureForExport(root.account, root.address)
|
||||||
sourceFoldersInput.hasItems = (transferRules.rowCount() > 0)
|
sourceFoldersInput.hasItems = (transferRules.rowCount() > 0)
|
||||||
break
|
break
|
||||||
case 2:
|
case 2:
|
||||||
|
|||||||
@ -34,6 +34,7 @@ Dialog {
|
|||||||
|
|
||||||
isDialogBusy: currentIndex==3 || currentIndex==4
|
isDialogBusy: currentIndex==3 || currentIndex==4
|
||||||
|
|
||||||
|
property string account
|
||||||
property string address
|
property string address
|
||||||
property string inputPath : ""
|
property string inputPath : ""
|
||||||
property bool isFromFile : inputEmail.text == "" && root.inputPath != ""
|
property bool isFromFile : inputEmail.text == "" && root.inputPath != ""
|
||||||
@ -1032,6 +1033,7 @@ Dialog {
|
|||||||
root.isFromIMAP,
|
root.isFromIMAP,
|
||||||
root.inputPath,
|
root.inputPath,
|
||||||
inputEmail.text, inputPassword.text, inputServer.text, inputPort.text,
|
inputEmail.text, inputPassword.text, inputServer.text, inputPort.text,
|
||||||
|
root.account,
|
||||||
root.address
|
root.address
|
||||||
)
|
)
|
||||||
break
|
break
|
||||||
|
|||||||
@ -29,7 +29,7 @@ const (
|
|||||||
TypeMBOX = "MBOX"
|
TypeMBOX = "MBOX"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (f *FrontendQt) LoadStructureForExport(addressOrID string) {
|
func (f *FrontendQt) LoadStructureForExport(username, addressOrID string) {
|
||||||
errCode := errUnknownError
|
errCode := errUnknownError
|
||||||
var err error
|
var err error
|
||||||
defer func() {
|
defer func() {
|
||||||
@ -41,7 +41,7 @@ func (f *FrontendQt) LoadStructureForExport(addressOrID string) {
|
|||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
if f.transfer, err = f.ie.GetEMLExporter(addressOrID, ""); err != nil {
|
if f.transfer, err = f.ie.GetEMLExporter(username, addressOrID, ""); err != nil {
|
||||||
// The only error can be problem to load PM user and address.
|
// The only error can be problem to load PM user and address.
|
||||||
errCode = errPMLoadFailed
|
errCode = errPMLoadFailed
|
||||||
return
|
return
|
||||||
|
|||||||
@ -26,7 +26,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// wrapper for QML
|
// wrapper for QML
|
||||||
func (f *FrontendQt) setupAndLoadForImport(isFromIMAP bool, sourcePath, sourceEmail, sourcePassword, sourceServer, sourcePort, targetAddress string) {
|
func (f *FrontendQt) setupAndLoadForImport(isFromIMAP bool, sourcePath, sourceEmail, sourcePassword, sourceServer, sourcePort, targetUsername, targetAddress string) {
|
||||||
errCode := errUnknownError
|
errCode := errUnknownError
|
||||||
var err error
|
var err error
|
||||||
defer func() {
|
defer func() {
|
||||||
@ -39,7 +39,7 @@ func (f *FrontendQt) setupAndLoadForImport(isFromIMAP bool, sourcePath, sourceEm
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
if isFromIMAP {
|
if isFromIMAP {
|
||||||
f.transfer, err = f.ie.GetRemoteImporter(targetAddress, sourceEmail, sourcePassword, sourceServer, sourcePort)
|
f.transfer, err = f.ie.GetRemoteImporter(targetUsername, targetAddress, sourceEmail, sourcePassword, sourceServer, sourcePort)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
switch {
|
switch {
|
||||||
case errors.Is(err, &transfer.ErrIMAPConnection{}):
|
case errors.Is(err, &transfer.ErrIMAPConnection{}):
|
||||||
@ -54,7 +54,7 @@ func (f *FrontendQt) setupAndLoadForImport(isFromIMAP bool, sourcePath, sourceEm
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
f.transfer, err = f.ie.GetLocalImporter(targetAddress, sourcePath)
|
f.transfer, err = f.ie.GetLocalImporter(targetUsername, targetAddress, sourcePath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// The only error can be problem to load PM user and address.
|
// The only error can be problem to load PM user and address.
|
||||||
errCode = errPMLoadFailed
|
errCode = errPMLoadFailed
|
||||||
|
|||||||
@ -77,8 +77,8 @@ type GoQMLInterface struct {
|
|||||||
_ string `property:"credentialsNotRemoved"`
|
_ string `property:"credentialsNotRemoved"`
|
||||||
_ string `property:"versionCheckFailed"`
|
_ string `property:"versionCheckFailed"`
|
||||||
//
|
//
|
||||||
_ func(isAvailable bool) `signal:"setConnectionStatus"`
|
_ func(isAvailable bool) `signal:"setConnectionStatus"`
|
||||||
_ func() `slot:"checkInternet"`
|
_ func() `slot:"checkInternet"`
|
||||||
|
|
||||||
_ func() `slot:"setToRestart"`
|
_ func() `slot:"setToRestart"`
|
||||||
|
|
||||||
@ -108,14 +108,14 @@ type GoQMLInterface struct {
|
|||||||
|
|
||||||
_ func(description, client, address string) bool `slot:"sendBug"`
|
_ func(description, client, address string) bool `slot:"sendBug"`
|
||||||
_ func(address string) bool `slot:"sendImportReport"`
|
_ func(address string) bool `slot:"sendImportReport"`
|
||||||
_ func(address string) `slot:"loadStructureForExport"`
|
_ func(username, address string) `slot:"loadStructureForExport"`
|
||||||
_ func() string `slot:"leastUsedColor"`
|
_ func() string `slot:"leastUsedColor"`
|
||||||
_ func(username string, name string, color string, isLabel bool, sourceID string) bool `slot:"createLabelOrFolder"`
|
_ func(username string, name string, color string, isLabel bool, sourceID string) bool `slot:"createLabelOrFolder"`
|
||||||
_ func(fpath, address, fileType string, attachEncryptedBody bool) `slot:"startExport"`
|
_ func(fpath, address, fileType string, attachEncryptedBody bool) `slot:"startExport"`
|
||||||
_ func(email string, importEncrypted bool) `slot:"startImport"`
|
_ func(email string, importEncrypted bool) `slot:"startImport"`
|
||||||
_ func() `slot:"resetSource"`
|
_ func() `slot:"resetSource"`
|
||||||
|
|
||||||
_ func(isFromIMAP bool, sourcePath, sourceEmail, sourcePassword, sourceServe, sourcePort, targetAddress string) `slot:"setupAndLoadForImport"`
|
_ func(isFromIMAP bool, sourcePath, sourceEmail, sourcePassword, sourceServe, sourcePort, targetUsername, targetAddress string) `slot:"setupAndLoadForImport"`
|
||||||
|
|
||||||
_ string `property:"progressInit"`
|
_ string `property:"progressInit"`
|
||||||
|
|
||||||
|
|||||||
@ -114,10 +114,10 @@ func (b *bridgeWrap) GetUser(query string) (User, error) {
|
|||||||
type ImportExporter interface {
|
type ImportExporter interface {
|
||||||
UserManager
|
UserManager
|
||||||
|
|
||||||
GetLocalImporter(string, string) (*transfer.Transfer, error)
|
GetLocalImporter(string, string, string) (*transfer.Transfer, error)
|
||||||
GetRemoteImporter(string, string, string, string, string) (*transfer.Transfer, error)
|
GetRemoteImporter(string, string, string, string, string, string) (*transfer.Transfer, error)
|
||||||
GetEMLExporter(string, string) (*transfer.Transfer, error)
|
GetEMLExporter(string, string, string) (*transfer.Transfer, error)
|
||||||
GetMBOXExporter(string, string) (*transfer.Transfer, error)
|
GetMBOXExporter(string, string, string) (*transfer.Transfer, error)
|
||||||
ReportBug(osType, osVersion, description, accountName, address, emailClient string) error
|
ReportBug(osType, osVersion, description, accountName, address, emailClient string) error
|
||||||
ReportFile(osType, osVersion, accountName, address string, logdata []byte) error
|
ReportFile(osType, osVersion, accountName, address string, logdata []byte) error
|
||||||
}
|
}
|
||||||
|
|||||||
@ -118,9 +118,9 @@ func (ie *ImportExport) ReportFile(osType, osVersion, accountName, address strin
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetLocalImporter returns transferrer from local EML or MBOX structure to ProtonMail account.
|
// GetLocalImporter returns transferrer from local EML or MBOX structure to ProtonMail account.
|
||||||
func (ie *ImportExport) GetLocalImporter(address, path string) (*transfer.Transfer, error) {
|
func (ie *ImportExport) GetLocalImporter(username, address, path string) (*transfer.Transfer, error) {
|
||||||
source := transfer.NewLocalProvider(path)
|
source := transfer.NewLocalProvider(path)
|
||||||
target, err := ie.getPMAPIProvider(address)
|
target, err := ie.getPMAPIProvider(username, address)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -132,12 +132,12 @@ func (ie *ImportExport) GetLocalImporter(address, path string) (*transfer.Transf
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetRemoteImporter returns transferrer from remote IMAP to ProtonMail account.
|
// GetRemoteImporter returns transferrer from remote IMAP to ProtonMail account.
|
||||||
func (ie *ImportExport) GetRemoteImporter(address, username, password, host, port string) (*transfer.Transfer, error) {
|
func (ie *ImportExport) GetRemoteImporter(username, address, remoteUsername, remotePassword, host, port string) (*transfer.Transfer, error) {
|
||||||
source, err := transfer.NewIMAPProvider(username, password, host, port)
|
source, err := transfer.NewIMAPProvider(remoteUsername, remotePassword, host, port)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
target, err := ie.getPMAPIProvider(address)
|
target, err := ie.getPMAPIProvider(username, address)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -149,8 +149,8 @@ func (ie *ImportExport) GetRemoteImporter(address, username, password, host, por
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetEMLExporter returns transferrer from ProtonMail account to local EML structure.
|
// GetEMLExporter returns transferrer from ProtonMail account to local EML structure.
|
||||||
func (ie *ImportExport) GetEMLExporter(address, path string) (*transfer.Transfer, error) {
|
func (ie *ImportExport) GetEMLExporter(username, address, path string) (*transfer.Transfer, error) {
|
||||||
source, err := ie.getPMAPIProvider(address)
|
source, err := ie.getPMAPIProvider(username, address)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -163,8 +163,8 @@ func (ie *ImportExport) GetEMLExporter(address, path string) (*transfer.Transfer
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetMBOXExporter returns transferrer from ProtonMail account to local MBOX structure.
|
// GetMBOXExporter returns transferrer from ProtonMail account to local MBOX structure.
|
||||||
func (ie *ImportExport) GetMBOXExporter(address, path string) (*transfer.Transfer, error) {
|
func (ie *ImportExport) GetMBOXExporter(username, address, path string) (*transfer.Transfer, error) {
|
||||||
source, err := ie.getPMAPIProvider(address)
|
source, err := ie.getPMAPIProvider(username, address)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -176,8 +176,8 @@ func (ie *ImportExport) GetMBOXExporter(address, path string) (*transfer.Transfe
|
|||||||
return transfer.New(ie.panicHandler, newExportMetricsManager(ie), logsPath, ie.cache.GetTransferDir(), source, target)
|
return transfer.New(ie.panicHandler, newExportMetricsManager(ie), logsPath, ie.cache.GetTransferDir(), source, target)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ie *ImportExport) getPMAPIProvider(address string) (*transfer.PMAPIProvider, error) {
|
func (ie *ImportExport) getPMAPIProvider(username, address string) (*transfer.PMAPIProvider, error) {
|
||||||
user, err := ie.Users.GetUser(address)
|
user, err := ie.Users.GetUser(username)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
@ -60,9 +60,9 @@ func userImportsLocalFilesToAddress(bddUserID, bddAddressID string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func userImportsLocalFilesToAddressWithRules(bddUserID, bddAddressID string, rules *gherkin.DataTable) error {
|
func userImportsLocalFilesToAddressWithRules(bddUserID, bddAddressID string, rules *gherkin.DataTable) error {
|
||||||
return doTransfer(bddUserID, bddAddressID, rules, func(address string) (*transfer.Transfer, error) {
|
return doTransfer(bddUserID, bddAddressID, rules, func(username, address string) (*transfer.Transfer, error) {
|
||||||
path := ctx.GetTransferLocalRootForImport()
|
path := ctx.GetTransferLocalRootForImport()
|
||||||
return ctx.GetImportExport().GetLocalImporter(address, path)
|
return ctx.GetImportExport().GetLocalImporter(username, address, path)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -81,9 +81,9 @@ func userImportsRemoteMessagesToAddress(bddUserID, bddAddressID string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func userImportsRemoteMessagesToAddressWithRules(bddUserID, bddAddressID string, rules *gherkin.DataTable) error {
|
func userImportsRemoteMessagesToAddressWithRules(bddUserID, bddAddressID string, rules *gherkin.DataTable) error {
|
||||||
return doTransfer(bddUserID, bddAddressID, rules, func(address string) (*transfer.Transfer, error) {
|
return doTransfer(bddUserID, bddAddressID, rules, func(username, address string) (*transfer.Transfer, error) {
|
||||||
imapServer := ctx.GetTransferRemoteIMAPServer()
|
imapServer := ctx.GetTransferRemoteIMAPServer()
|
||||||
return ctx.GetImportExport().GetRemoteImporter(address, imapServer.Username, imapServer.Password, imapServer.Host, imapServer.Port)
|
return ctx.GetImportExport().GetRemoteImporter(username, address, imapServer.Username, imapServer.Password, imapServer.Host, imapServer.Port)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -102,9 +102,9 @@ func userExportsAddressToEMLFiles(bddUserID, bddAddressID string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func userExportsAddressToEMLFilesWithRules(bddUserID, bddAddressID string, rules *gherkin.DataTable) error {
|
func userExportsAddressToEMLFilesWithRules(bddUserID, bddAddressID string, rules *gherkin.DataTable) error {
|
||||||
return doTransfer(bddUserID, bddAddressID, rules, func(address string) (*transfer.Transfer, error) {
|
return doTransfer(bddUserID, bddAddressID, rules, func(username, address string) (*transfer.Transfer, error) {
|
||||||
path := ctx.GetTransferLocalRootForExport()
|
path := ctx.GetTransferLocalRootForExport()
|
||||||
return ctx.GetImportExport().GetEMLExporter(address, path)
|
return ctx.GetImportExport().GetEMLExporter(username, address, path)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -123,20 +123,20 @@ func userExportsAddressToMBOXFiles(bddUserID, bddAddressID string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func userExportsAddressToMBOXFilesWithRules(bddUserID, bddAddressID string, rules *gherkin.DataTable) error {
|
func userExportsAddressToMBOXFilesWithRules(bddUserID, bddAddressID string, rules *gherkin.DataTable) error {
|
||||||
return doTransfer(bddUserID, bddAddressID, rules, func(address string) (*transfer.Transfer, error) {
|
return doTransfer(bddUserID, bddAddressID, rules, func(username, address string) (*transfer.Transfer, error) {
|
||||||
path := ctx.GetTransferLocalRootForExport()
|
path := ctx.GetTransferLocalRootForExport()
|
||||||
return ctx.GetImportExport().GetMBOXExporter(address, path)
|
return ctx.GetImportExport().GetMBOXExporter(username, address, path)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// Helpers.
|
// Helpers.
|
||||||
|
|
||||||
func doTransfer(bddUserID, bddAddressID string, rules *gherkin.DataTable, getTransferrer func(string) (*transfer.Transfer, error)) error {
|
func doTransfer(bddUserID, bddAddressID string, rules *gherkin.DataTable, getTransferrer func(string, string) (*transfer.Transfer, error)) error {
|
||||||
account := ctx.GetTestAccountWithAddress(bddUserID, bddAddressID)
|
account := ctx.GetTestAccountWithAddress(bddUserID, bddAddressID)
|
||||||
if account == nil {
|
if account == nil {
|
||||||
return godog.ErrPending
|
return godog.ErrPending
|
||||||
}
|
}
|
||||||
transferrer, err := getTransferrer(account.Address())
|
transferrer, err := getTransferrer(account.Username(), account.Address())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return internalError(err, "failed to init transfer")
|
return internalError(err, "failed to init transfer")
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user