NginxManager::listVhosts()   A
last analyzed

Complexity

Conditions 3
Paths 4

Size

Total Lines 15
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 12

Importance

Changes 0
Metric Value
dl 0
loc 15
ccs 0
cts 11
cp 0
rs 9.4285
c 0
b 0
f 0
cc 3
eloc 9
nc 4
nop 0
crap 12
1
<?php
2
3
namespace Portiere\WebServer;
4
5
use Symfony\Component\Finder\Finder;
6
7
/**
8
 * Class NginxManager.
9
 *
10
 * Manager handling Nginx web server actions
11
 *
12
 * @author Ignacio Velazquez <[email protected]>
13
 */
14
class NginxManager extends Manager
15
{
16
    /**
17
     * @var string Template filename
18
     */
19
    const TEMPLATE_FILE = 'nginx.php';
20
21
    /**
22
     * @var array
23
     */
24
    protected $config = [
25
        'sitesAvailablePath' => '/etc/nginx/sites-available/',
26
        'sitesEnabledPath' => '/etc/nginx/sites-enabled/',
27
        'logsDir' => '/var/log/nginx/',
28
    ];
29
30
    /**
31
     * Gets the full path of the available vhost file.
32
     *
33
     * @param VhostInterface $vhost
34
     *
35
     * @return string
36
     */
37 1
    public function getVhostAvailablePath(VhostInterface $vhost)
38
    {
39 1
        return "{$this->config['sitesAvailablePath']}{$vhost->getFilename()}";
40
    }
41
42
    /**
43
     * Gets the full path of the enabled vhost file.
44
     *
45
     * @param VhostInterface $vhost
46
     *
47
     * @return string
48
     */
49 1
    public function getVhostEnabledPath(VhostInterface $vhost)
50
    {
51 1
        return "{$this->config['sitesEnabledPath']}{$vhost->getFilename()}";
52
    }
53
54
    /**
55
     * Gets template for this web server.
56
     *
57
     * @param VhostInterface $vhost
58
     *
59
     * @return false|string
60
     */
61
    public function getTemplate(VhostInterface $vhost)
62
    {
63
        return $this->templating->render(self::TEMPLATE_FILE, [
64
            'server' => $this->config,
65
            'vhost' => $vhost,
66
        ]);
67
    }
68
69
    /**
70
     * {@inheritdoc}
71
     */
72
    public function createVhost(VhostInterface $vhost)
73
    {
74
        $template = $this->getTemplate($vhost);
75
76
        $this->fs->dumpFile($this->getVhostAvailablePath($vhost), $template);
0 ignored issues
show
Security Bug introduced by
It seems like $template defined by $this->getTemplate($vhost) on line 74 can also be of type false; however, Symfony\Component\Filesy...\Filesystem::dumpFile() does only seem to accept string, did you maybe forget to handle an error condition?

This check looks for type mismatches where the missing type is false. This is usually indicative of an error condtion.

Consider the follow example

<?php

function getDate($date)
{
    if ($date !== null) {
        return new DateTime($date);
    }

    return false;
}

This function either returns a new DateTime object or false, if there was an error. This is a typical pattern in PHP programming to show that an error has occurred without raising an exception. The calling code should check for this returned false before passing on the value to another function or method that may not be able to handle a false.

Loading history...
77
        $this->enableVhost($vhost);
78
    }
79
80
    /**
81
     * {@inheritdoc}
82
     */
83
    protected function enableVhost(VhostInterface $vhost)
84
    {
85
        $this->fs->symlink(
86
            $this->getVhostAvailablePath($vhost),
87
            "{$this->config['sitesEnabledPath']}{$vhost->getFilename()}"
88
        );
89
    }
90
91
    /**
92
     * {@inheritdoc}
93
     */
94
    public function deleteVhost(VhostInterface $vhost)
95
    {
96
        foreach ($this->getGeneratedFiles($vhost) as $file) {
97
            $this->fs->remove($file);
98
        }
99
    }
100
101
    /**
102
     * {@inheritdoc}
103
     */
104
    public function listVhosts()
105
    {
106
        $finder = new Finder();
107
        $enabled = $vhosts = [];
108
        foreach ($finder->files()->in($this->config['sitesEnabledPath']) as $file) {
109
            $enabled[] = $file->getFilename();
110
        }
111
112
        $finder = new Finder();
113
        foreach ($finder->files()->in($this->config['sitesAvailablePath']) as $file) {
114
            $vhosts[] = [$file->getFilename(), in_array($file->getFilename(), $enabled)];
115
        }
116
117
        return $vhosts;
118
    }
119
120
    /**
121
     * {@inheritdoc}
122
     */
123
    public function getGeneratedFiles(VhostInterface $vhost)
124
    {
125
        return [
126
            $this->getVhostAvailablePath($vhost),
127
            $this->getVhostEnabledPath($vhost),
128
            "{$this->config['logsDir']}{$vhost->getErrorLogFilename()}",
129
            "{$this->config['logsDir']}{$vhost->getAccessLogFilename()}",
130
        ];
131
    }
132
133
    /**
134
     * {@inheritdoc}
135
     */
136
    public function restartServer()
137
    {
138
        shell_exec('service nginx restart');
139
    }
140
}
141