diff --git a/app/Import/Configuration/SpectreConfigurator.php b/app/Import/Configuration/SpectreConfigurator.php index 126e964601..b6ad288491 100644 --- a/app/Import/Configuration/SpectreConfigurator.php +++ b/app/Import/Configuration/SpectreConfigurator.php @@ -130,6 +130,7 @@ class SpectreConfigurator implements ConfiguratorInterface switch ($stage) { case 'has-token': // redirect to Spectre. + Log::info('User is being redirected to Spectre.'); return 'import.spectre.redirect'; break; case 'have-accounts': diff --git a/app/Import/Routine/SpectreRoutine.php b/app/Import/Routine/SpectreRoutine.php index fe41577046..2327dcebd4 100644 --- a/app/Import/Routine/SpectreRoutine.php +++ b/app/Import/Routine/SpectreRoutine.php @@ -315,7 +315,12 @@ class SpectreRoutine implements RoutineInterface } } if (is_null($final)) { - throw new FireflyException('No valid login attempt found.'); + Log::error('Could not find a valid login for this user.'); + $this->repository->addError($this->job, 0, 'Spectre connection failed. Did you use invalid credentials, press Cancel or failed the 2FA challenge?'); + $this->repository->setTotalSteps($this->job, 1); + $this->repository->setStepsDone($this->job, 1); + $this->repository->setStatus($this->job,'error'); + return; } // add some steps done @@ -457,6 +462,7 @@ class SpectreRoutine implements RoutineInterface // update job: $this->job->status = 'finished'; $this->job->save(); + return; } diff --git a/app/Repositories/ImportJob/ImportJobRepository.php b/app/Repositories/ImportJob/ImportJobRepository.php index 21d2156b13..dfc2d56fca 100644 --- a/app/Repositories/ImportJob/ImportJobRepository.php +++ b/app/Repositories/ImportJob/ImportJobRepository.php @@ -42,6 +42,20 @@ class ImportJobRepository implements ImportJobRepositoryInterface /** @var User */ private $user; + /** + * @param ImportJob $job + * @param int $index + * @param string $error + * + * @return ImportJob + */ + public function addError(ImportJob $job, int $index, string $error): ImportJob + { + $job->addError($index, $error); + + return $job; + } + /** * @param ImportJob $job * @param int $steps @@ -277,6 +291,46 @@ class ImportJobRepository implements ImportJobRepositoryInterface return $job; } + /** + * @param ImportJob $job + * @param string $status + * + * @return ImportJob + */ + public function setStatus(ImportJob $job, string $status): ImportJob + { + $job->status = $status; + $job->save(); + + return $job; + } + + /** + * @param ImportJob $job + * @param int $count + * + * @return ImportJob + */ + public function setStepsDone(ImportJob $job, int $steps): ImportJob + { + $job->setStepsDone($steps); + + return $job; + } + + /** + * @param ImportJob $job + * @param int $count + * + * @return ImportJob + */ + public function setTotalSteps(ImportJob $job, int $count): ImportJob + { + $job->setTotalSteps($count); + + return $job; + } + /** * @param User $user */ @@ -311,30 +365,4 @@ class ImportJobRepository implements ImportJobRepositoryInterface { return $job->uploadFileContents(); } - - /** - * @param ImportJob $job - * @param int $count - * - * @return ImportJob - */ - public function setStepsDone(ImportJob $job, int $steps): ImportJob - { - $job->setStepsDone($steps); - - return $job; - } - - /** - * @param ImportJob $job - * @param int $count - * - * @return ImportJob - */ - public function setTotalSteps(ImportJob $job, int $count): ImportJob - { - $job->setTotalSteps($count); - - return $job; - } } diff --git a/app/Repositories/ImportJob/ImportJobRepositoryInterface.php b/app/Repositories/ImportJob/ImportJobRepositoryInterface.php index 1834901226..ac37ee0369 100644 --- a/app/Repositories/ImportJob/ImportJobRepositoryInterface.php +++ b/app/Repositories/ImportJob/ImportJobRepositoryInterface.php @@ -32,6 +32,15 @@ use Symfony\Component\HttpFoundation\File\UploadedFile; interface ImportJobRepositoryInterface { + /** + * @param ImportJob $job + * @param int $index + * @param string $error + * + * @return ImportJob + */ + public function addError(ImportJob $job, int $index, string $error): ImportJob; + /** * @param ImportJob $job * @param int $steps @@ -113,6 +122,14 @@ interface ImportJobRepositoryInterface */ public function setExtendedStatus(ImportJob $job, array $array): ImportJob; + /** + * @param ImportJob $job + * @param string $status + * + * @return ImportJob + */ + public function setStatus(ImportJob $job, string $status): ImportJob; + /** * @param ImportJob $job * @param int $count diff --git a/public/js/ff/import/status.js b/public/js/ff/import/status.js index fc65d88ace..77a4b25d80 100644 --- a/public/js/ff/import/status.js +++ b/public/js/ff/import/status.js @@ -118,13 +118,12 @@ function reportOnJobStatus(data) { // show text: $('#import-status-more-info').html(data.finishedText); break; - case "errored": - // TODO this view is not yet used. + case "error": // hide all possible boxes: $('.statusbox').hide(); // fill in some details: - var errorMessage = data.error_message; + var errorMessage = data.errors.join(", "); $('.fatal_error_txt').text(errorMessage);