GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Test Failed
Push — master ( 44f5f8...8d9d8e )
by Anton
02:15
created

src/Host/Host.php (1 issue)

Labels
Severity

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
/* (c) Anton Medvedev <[email protected]>
3
 *
4
 * For the full copyright and license information, please view the LICENSE
5
 * file that was distributed with this source code.
6
 */
7
8
namespace Deployer\Host;
9
10
use Deployer\Configuration\Configuration;
11
use Deployer\Component\Ssh\Arguments;
12
use Deployer\Deployer;
13
14
class Host
15
{
16
    private $config;
17
    private $sshArguments;
18
19 24
    public function __construct(string $hostname)
20
    {
21 24
        $parent = null;
22 24
        if (Deployer::get()) {
23 22
            $parent = Deployer::get()->config;
24
        }
25 24
        $this->config = new Configuration($parent);
0 ignored issues
show
It seems like $parent defined by \Deployer\Deployer::get()->config on line 23 can also be of type array<string,string|arra...string>|boolean|null"}>; however, Deployer\Configuration\C...guration::__construct() does only seem to accept null|object<Deployer\Configuration\Configuration>, maybe add an additional type check?

If a method or function can return multiple different values and unless you are sure that you only can receive a single value in this context, we recommend to add an additional type check:

/**
 * @return array|string
 */
function returnsDifferentValues($x) {
    if ($x) {
        return 'foo';
    }

    return array();
}

$x = returnsDifferentValues($y);
if (is_array($x)) {
    // $x is an array.
}

If this a common case that PHP Analyzer should handle natively, please let us know by opening an issue.

Loading history...
26 24
        $this->set('alias', $hostname);
27 24
        $this->set('hostname', preg_replace('/\/.+$/', '', $hostname));
28 24
        $this->sshArguments = new Arguments();
29 24
    }
30
31 11
    public function getConfig()
32
    {
33 11
        return $this->config;
34
    }
35
36 24
    public function set(string $name, $value)
37
    {
38 24
        $this->config->set($name, $value);
39 24
        return $this;
40
    }
41
42 1
    public function add(string $name, array $value)
43
    {
44 1
        $this->config->add($name, $value);
45 1
        return $this;
46
    }
47
48
    public function has(string $name): bool
49
    {
50
        return $this->config->has($name);
51
    }
52
53 17
    public function get(string $name, $default = null)
54
    {
55 17
        return $this->config->get($name, $default);
56
    }
57
58 18
    public function getAlias()
59
    {
60 18
        return $this->config->get('alias');
61
    }
62
63
    public function setTag(string $tag)
64
    {
65
        $this->config->set('tag', $tag);
66
        return $this;
67
    }
68
69 11
    public function getTag(): string
70
    {
71 11
        return $this->config->get('tag', $this->generateTag());
72
    }
73
74 1
    public function setHostname(string $hostname)
75
    {
76 1
        $this->config->set('hostname', $hostname);
77 1
        return $this;
78
    }
79
80 3
    public function getHostname()
81
    {
82 3
        return $this->config->get('hostname');
83
    }
84
85 1
    public function setRemoteUser($user)
86
    {
87 1
        $this->config->set('remote_user', $user);
88 1
        return $this;
89
    }
90
91 2
    public function getRemoteUser()
92
    {
93 2
        return $this->config->get('remote_user');
94
    }
95
96 1
    public function setPort(int $port)
97
    {
98 1
        $this->config->set('port', $port);
99 1
        return $this;
100
    }
101
102 3
    public function getPort()
103
    {
104 3
        return $this->config->get('port');
105
    }
106
107 1
    public function setConfigFile(string $file)
108
    {
109 1
        $this->config->set('config_file', $file);
110 1
        return $this;
111
    }
112
113 3
    public function getConfigFile()
114
    {
115 3
        return $this->config->get('config_file');
116
    }
117
118 1
    public function setIdentityFile($file)
119
    {
120 1
        $this->config->set('identity_file', $file);
121 1
        return $this;
122
    }
123
124 4
    public function getIdentityFile()
125
    {
126 4
        return $this->config->get('identity_file');
127
    }
128
129 1
    public function setForwardAgent(bool $on)
130
    {
131 1
        $this->config->set('forward_agent', $on);
132 1
        return $this;
133
    }
134
135 3
    public function getForwardAgent()
136
    {
137 3
        return $this->config->get('forward_agent');
138
    }
139
140 1
    public function setSshMultiplexing(bool $on)
141
    {
142 1
        $this->config->set('ssh_multiplexing', $on);
143 1
        return $this;
144
    }
145
146 2
    public function getSshMultiplexing()
147
    {
148 2
        return $this->config->get('ssh_multiplexing');
149
    }
150
151
    public function setShell(string $command)
152
    {
153
        $this->config->set('shell', $command);
154
        return $this;
155
    }
156
157
    public function getShell(): string
158
    {
159
        return $this->config->get('shell');
160
    }
161
162
    public function setDeployPath(string $path)
163
    {
164
        $this->config->set('deploy_path', $path);
165
        return $this;
166
    }
167
168
    public function getDeployPath()
169
    {
170
        return $this->config->get('deploy_path');
171
    }
172
173 2
    public function getConnectionString(): string
174
    {
175 2
        if ($this->get('remote_user', '') !== '') {
176
            return $this->get('remote_user') . '@' . $this->get('hostname');
177
        }
178 2
        return $this->get('hostname');
179
    }
180
181 3
    public function getSshArguments()
182
    {
183 3
        $this->initOptions();
184 3
        return $this->sshArguments;
185
    }
186
187
    // TODO: Migrate to configuration.
188
189 2
    public function setSshOptions(array $options)
190
    {
191 2
        $this->sshArguments = $this->sshArguments->withOptions($options);
192 2
        return $this;
193
    }
194
195
    // TODO: Migrate to configuration.
196
197 2
    public function setSshFlags(array $flags)
198
    {
199 2
        $this->sshArguments = $this->sshArguments->withFlags($flags);
200 2
        return $this;
201
    }
202
203 3
    private function initOptions()
204
    {
205 3
        if ($this->getPort()) {
206 3
            $this->sshArguments = $this->sshArguments->withFlag('-p', $this->getPort());
207
        }
208
209 3
        if ($this->getConfigFile()) {
210 2
            $this->sshArguments = $this->sshArguments->withFlag('-F', $this->getConfigFile());
211
        }
212
213 3
        if ($this->getIdentityFile()) {
214 2
            $this->sshArguments = $this->sshArguments->withFlag('-i', $this->getIdentityFile());
215
        }
216
217 3
        if ($this->getForwardAgent()) {
218 3
            $this->sshArguments = $this->sshArguments->withFlag('-A');
219
        }
220 3
    }
221
222 11
    private function generateTag()
223
    {
224 11
        if (defined('NO_ANSI')) {
225 10
            return $this->getAlias();
226
        }
227
228 1
        if ($this->getAlias() === 'localhost') {
229
            return $this->getAlias();
230
        }
231
232 1
        if (getenv('COLORTERM') === 'truecolor') {
233
            $hsv = function ($h, $s, $v) {
234
                $r = $g = $b = $i = $f = $p = $q = $t = 0;
235
                $i = floor($h * 6);
236
                $f = $h * 6 - $i;
237
                $p = $v * (1 - $s);
238
                $q = $v * (1 - $f * $s);
239
                $t = $v * (1 - (1 - $f) * $s);
240
                switch ($i % 6) {
241
                    case 0:
242
                        $r = $v;
243
                        $g = $t;
244
                        $b = $p;
245
                        break;
246
                    case 1:
247
                        $r = $q;
248
                        $g = $v;
249
                        $b = $p;
250
                        break;
251
                    case 2:
252
                        $r = $p;
253
                        $g = $v;
254
                        $b = $t;
255
                        break;
256
                    case 3:
257
                        $r = $p;
258
                        $g = $q;
259
                        $b = $v;
260
                        break;
261
                    case 4:
262
                        $r = $t;
263
                        $g = $p;
264
                        $b = $v;
265
                        break;
266
                    case 5:
267
                        $r = $v;
268
                        $g = $p;
269
                        $b = $q;
270
                        break;
271
                }
272
                $r = round($r * 255);
273
                $g = round($g * 255);
274
                $b = round($b * 255);
275
                return "\x1b[38;2;{$r};{$g};{$b}m";
276
            };
277
278
            $total = 100;
279
            $colors = [];
280
            for ($i = 0; $i < $total; $i++) {
281
                $colors[] = $hsv($i / $total, 1, .9);
282
            }
283
284
            $alias = $this->getAlias();
285
            $tag = $colors[abs(crc32($alias)) % count($colors)];
286
287
            return "{$tag}{$alias}\x1b[0m";
288
        }
289
290
291
        $colors = [
292 1
            'fg=cyan;options=bold',
293
            'fg=green;options=bold',
294
            'fg=yellow;options=bold',
295
            'fg=cyan',
296
            'fg=blue',
297
            'fg=yellow',
298
            'fg=magenta',
299
            'fg=blue;options=bold',
300
            'fg=green',
301
            'fg=magenta;options=bold',
302
            'fg=red;options=bold',
303
        ];
304 1
        $alias = $this->getAlias();
305 1
        $tag = $colors[abs(crc32($alias)) % count($colors)];
306
307 1
        return "<{$tag}>{$alias}</>";
308
    }
309
}
310