Issues (37)

app/Console/Commands/BunqImport.php (5 issues)

Labels
Severity
1
<?php
2
3
declare(strict_types=1);
4
/**
5
 * BunqImport.php
6
 * Copyright (c) 2020 [email protected].
7
 *
8
 * This file is part of the Firefly III bunq importer
9
 * (https://github.com/firefly-iii/bunq-importer).
10
 *
11
 * This program is free software: you can redistribute it and/or modify
12
 * it under the terms of the GNU Affero General Public License as
13
 * published by the Free Software Foundation, either version 3 of the
14
 * License, or (at your option) any later version.
15
 *
16
 * This program is distributed in the hope that it will be useful,
17
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19
 * GNU Affero General Public License for more details.
20
 *
21
 * You should have received a copy of the GNU Affero General Public License
22
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
23
 */
24
25
namespace App\Console\Commands;
26
27
use App\Console\HaveAccess;
28
use App\Console\StartDownload;
29
use App\Console\StartSync;
30
use App\Console\VerifyJSON;
31
use Illuminate\Console\Command;
32
33
/**
34
 * Class BunqImport.
35
 */
36
class BunqImport extends Command
37
{
38
    use HaveAccess, VerifyJSON, StartDownload, StartSync;
39
    /**
40
     * The console command description.
41
     *
42
     * @var string
43
     */
44
    protected $description = 'Import from bunq using a pre-defined configuration file.';
45
    /** @var string */
46
    protected $downloadIdentifier;
47
    /**
48
     * The name and signature of the console command.
49
     *
50
     * @var string
51
     */
52
    protected $signature = 'bunq:import {config : The JSON configuration file}';
53
54
    /**
55
     * Create a new command instance.
56
     *
57
     * @return void
58
     */
59
    public function __construct()
60
    {
61
        parent::__construct();
62
    }
63
64
    /**
65
     * Execute the console command.
66
     *
67
     * @return int
68
     */
69
    public function handle(): int
70
    {
71
        $access = $this->haveAccess();
72
        if (false === $access) {
73
            $this->error('Could not connect to your local Firefly III instance.');
74
75
            return 1;
76
        }
77
78
        $this->info(sprintf('Welcome to the Firefly III bunq importer, v%s', config('bunq.version')));
79
        app('log')->debug(sprintf('Now in %s', __METHOD__));
80
        $config = $this->argument('config');
81
82
        if (!file_exists($config) || (file_exists($config) && !is_file($config))) {
0 ignored issues
show
It seems like $config can also be of type string[]; however, parameter $filename of is_file() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

82
        if (!file_exists($config) || (file_exists($config) && !is_file(/** @scrutinizer ignore-type */ $config))) {
Loading history...
It seems like $config can also be of type string[]; however, parameter $filename of file_exists() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

82
        if (!file_exists(/** @scrutinizer ignore-type */ $config) || (file_exists($config) && !is_file($config))) {
Loading history...
83
            $message = sprintf('The importer can\'t import: configuration file "%s" does not exist or could not be read.', $config);
0 ignored issues
show
It seems like $config can also be of type string[]; however, parameter $args of sprintf() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

83
            $message = sprintf('The importer can\'t import: configuration file "%s" does not exist or could not be read.', /** @scrutinizer ignore-type */ $config);
Loading history...
84
            $this->error($message);
85
            app('log')->error($message);
86
87
            return 1;
88
        }
89
        $jsonResult = $this->verifyJSON($config);
0 ignored issues
show
It seems like $config can also be of type null and string[]; however, parameter $file of App\Console\Commands\BunqImport::verifyJSON() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

89
        $jsonResult = $this->verifyJSON(/** @scrutinizer ignore-type */ $config);
Loading history...
90
        if (false === $jsonResult) {
91
            $message = 'The importer can\'t import: could not decode the JSON in the config file.';
92
            $this->error($message);
93
94
            return 1;
95
        }
96
        $configuration = json_decode(file_get_contents($config), true, 512, JSON_THROW_ON_ERROR);
0 ignored issues
show
It seems like $config can also be of type string[]; however, parameter $filename of file_get_contents() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

96
        $configuration = json_decode(file_get_contents(/** @scrutinizer ignore-type */ $config), true, 512, JSON_THROW_ON_ERROR);
Loading history...
97
98
        $this->line('The import routine is about to start.');
99
        $this->line('This is invisible and may take quite some time.');
100
        $this->line('Once finished, you will see a list of errors, warnings and messages (if applicable).');
101
        $this->line('--------');
102
        $this->line('Running...');
103
        $result = $this->startDownload($configuration);
104
        if (0 === $result) {
105
            $this->line('Download from bunq complete.');
106
        }
107
        if (0 !== $result) {
108
            $this->warn('Download from bunq resulted in errors.');
109
110
            return $result;
111
        }
112
        $secondResult = $this->startSync($configuration);
113
        if (0 === $secondResult) {
114
            $this->line('Sync to Firefly III complete.');
115
        }
116
        if (0 !== $secondResult) {
117
            $this->warn('Sync to Firefly III resulted in errors.');
118
119
            return $secondResult;
120
        }
121
122
        return 0;
123
    }
124
}
125