|
|
- <?php
-
- namespace App\Helpers;
-
- /**
- *
- *
- *
- *
- */
- class NginxVhostHelper
- {
- // path for available files
- const SITES_AVAILABLE = '/etc/nginx/sites-available';
-
- // path for enabled files
- const SITES_ENABLED = '/etc/nginx/sites-enabled';
-
- // regex to get files for
- const REGEX_SSL_CERTIFICATE = '/\bssl_certificate\s+\K\S+/';
- const REGEX_SSL_CERTIFICATE_KEY = '/\bssl_certificate_key\s+\K\S+/';
-
- // ignore files
- const IGNORE_FILES = [
- '.', '..'
- ];
-
- /**
- *
- *
- *
- * @return array
- *
- */
- private function getSitesAvailable()
- {
- return scandir(self::SITES_AVAILABLE);
- }
-
- /**
- *
- *
- *
- * @return array
- *
- */
- private function getSitesEnabled()
- {
- return scandir(self::SITES_ENABLED);
- }
-
- /**
- * find path for certificates in .conf-files
- *
- *
- * ssl_certificate /etc/letsencrypt/live/<domain>/fullchain.pem;
- * ssl_certificate_key /etc/letsencrypt/live/<domain>/privkey.pem;
- *
- */
- private function getCertificate($path)
- {
- $result = [
- 'ssl' => false,
- 'ssl_certificate_exists' => false,
- 'ssl_certificate_expired_at' => false
- ];
-
- // getting .conf-file
- $content = file_get_contents($path);
-
- // check for path of sites
- preg_match(self::REGEX_SSL_CERTIFICATE, $content, $matches);
- preg_match(self::REGEX_SSL_CERTIFICATE_KEY, $content, $matches);
-
- // check for ssl certificates
- if (count($matches) >= 2) {
- $result['ssl'] = true;
-
- if (file_exists($matches[0]) && file_exists($matches[1])) {
- $result['ssl_certificate_exists'] = true;
- }
-
- exec('openssl x509 -noout -dates -in '.$path, $openssl);
-
- if (isset($openssl[1])) {
- $openssl = str_replace('notAfter=', '', $openssl[1]);
-
- }
- }
-
- return $result;
- }
-
- private function getVhost($filename, $enabled)
- {
- // getting full path
- $path = self::SITES_AVAILABLE.'/'.$filename;
-
- // getting certificates from a configuration
- $certificate = $this->getCertificate($path);
-
- $result = array_merge([
- 'domain' => str_replace('.conf', '', $filename),
- 'path' => $path,
- 'file' => $filename,
- 'enabled' => in_array($filename, $enabled),
- ], $certificate);
-
- return $result;
- }
-
- public function findOneByFilename($filename)
- {
- // getting enabled
- $enabled = $this->getSitesEnabled();
- return $this->getVhost($filename, $enabled);
- }
-
- /**
- * getting vhosts
- *
- */
- public function find()
- {
- $results = [];
-
- // getting available
- $available = $this->getSitesAvailable();
-
- // getting enabled
- $enabled = $this->getSitesEnabled();
-
- foreach($available as $filename)
- {
- if (!in_array($filename, self::IGNORE_FILES)) {
- $results[] = $this->getVhost($filename, $enabled);
- }
- }
-
- return $results;
- }
- }
|