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.
Passed
Pull Request — master (#1061)
by Maxim
04:23 queued 01:35
created

SshExtension::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 1
dl 0
loc 4
ccs 0
cts 4
cp 0
crap 2
rs 10
c 0
b 0
f 0
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\Server\Remote;
9
10
use Deployer\Server\ServerInterface;
11
use Deployer\Server\Configuration;
12
use Ssh;
13
14
class SshExtension implements ServerInterface
15
{
16
    /**
17
     * @var Configuration
18
     */
19
    private $configuration;
20
21
    /**
22
     * SSH session.
23
     * @var Ssh\Session
24
     */
25
    private $session;
26
27
    /**
28
     * Array of created directories during upload.
29
     * @var array
30
     */
31
    private $directories = [];
32
33
    /**
34
     * @param Configuration $configuration
35
     */
36
    public function __construct(Configuration $configuration)
37
    {
38
        $this->configuration = $configuration;
39
    }
40
41
    /**
42
     * {@inheritdoc}
43
     */
44
    public function connect()
45
    {
46
        $serverConfig = $this->getConfiguration();
47
        $configuration = new Ssh\Configuration($serverConfig->getHost(), $serverConfig->getPort());
48
49
        switch ($serverConfig->getAuthenticationMethod()) {
50
            case Configuration::AUTH_BY_PASSWORD:
51
                $authentication = new Ssh\Authentication\Password(
52
                    $serverConfig->getUser(),
53
                    $serverConfig->getPassword()
54
                );
55
                break;
56
57
            case Configuration::AUTH_BY_CONFIG:
58
                $configuration = new Ssh\SshConfigFileConfiguration(
59
                    $serverConfig->getConfigFile(),
60
                    $serverConfig->getHost(),
61
                    $serverConfig->getPort()
62
                );
63
                $authentication = $configuration->getAuthentication(
64
                    $serverConfig->getPassword(),
65
                    $serverConfig->getUser()
66
                );
67
68
                break;
69
70
            case Configuration::AUTH_BY_IDENTITY_FILE:
71
                $authentication = new Ssh\Authentication\PublicKeyFile(
72
                    $serverConfig->getUser(),
73
                    $serverConfig->getPublicKey(),
74
                    $serverConfig->getPrivateKey(),
75
                    $serverConfig->getPassPhrase()
76
                );
77
78
                break;
79
80
            case Configuration::AUTH_BY_PEM_FILE:
81
                throw new \RuntimeException('If you want to use pem file, switch to using PhpSecLib.');
82
83
            case Configuration::AUTH_BY_AGENT:
84
                $authentication = new \Ssh\Authentication\Agent(
85
                    $serverConfig->getUser()
86
                );
87
                break;
88
89
            default:
90
                throw new \RuntimeException('You need to specify authentication method.');
91
        }
92
93
        $this->session = new Ssh\Session($configuration, $authentication);
94
    }
95
96
    /**
97
     * Check if not connected and connect.
98
     */
99
    public function checkConnection()
100
    {
101
        if (null === $this->session) {
102
            $this->connect();
103
        }
104
    }
105
106
    /**
107
     * {@inheritdoc}
108
     */
109
    public function run($command)
110
    {
111
        $this->checkConnection();
112
113
        $pty = $this->getConfiguration()->getPty();
114
        return $this->session->getExec()->run($command, $pty);
115
    }
116
117
    /**
118
     * {@inheritdoc}
119
     */
120
    public function upload($local, $remote)
121
    {
122
        $this->checkConnection();
123
124
        $remote = str_replace(DIRECTORY_SEPARATOR, '/', $remote);
125
        $dir = str_replace(DIRECTORY_SEPARATOR, '/', dirname($remote));
126
127
        if (!isset($this->directories[$dir])) {
128
            $this->session->getSftp()->mkdir($dir, -1, true);
129
            $this->directories[$dir] = true;
130
        }
131
132
        if ($this->session->getSftp()->send($local, $remote) === false) {
133
            throw new \RuntimeException('Can not upload file.');
134
        }
135
    }
136
137
    /**
138
     * {@inheritdoc}
139
     */
140
    public function download($local, $remote)
141
    {
142
        $this->checkConnection();
143
144
        if (!$this->session->getSftp()->receive($remote, $local)) {
145
            throw new \RuntimeException('Can not download file.');
146
        }
147
    }
148
149
    /**
150
     * @return Configuration
151
     */
152
    public function getConfiguration()
153
    {
154
        return $this->configuration;
155
    }
156
}
157