" . "

Account Suspended

" . "

This account has been suspended. Please contact support.

" ); // Rewrite vhost to serve suspension page if (WEB_SERVER === 'nginx') { $conf = "/etc/nginx/sites-available/novacpx-{$username}.conf"; if (file_exists($conf)) { $content = file_get_contents($conf); $content = preg_replace('/root\s+[^;]+;/', "root {$suspendedRoot};", $content); file_put_contents($conf, $content); } } else { $conf = "/etc/apache2/sites-available/novacpx-{$username}.conf"; if (file_exists($conf)) { $content = file_get_contents($conf); $content = preg_replace('/DocumentRoot\s+\S+/', "DocumentRoot {$suspendedRoot}", $content); file_put_contents($conf, $content); } } self::reload(); } public static function unsuspend(string $username, string $domain): void { // Re-create from DB $db = DB::getInstance(); $acct = $db->fetchOne("SELECT * FROM accounts WHERE username = ?", [$username]); if ($acct) { self::create($username, $domain, $acct['home_dir'] . '/public_html', $acct['php_version']); } } public static function remove(string $username, string $domain): void { if (WEB_SERVER === 'nginx') { $conf = "/etc/nginx/sites-available/novacpx-{$username}.conf"; $link = "/etc/nginx/sites-enabled/novacpx-{$username}.conf"; @unlink($conf); @unlink($link); } else { $conf = "/etc/apache2/sites-available/novacpx-{$username}.conf"; shell_exec("a2dissite novacpx-{$username} 2>/dev/null"); @unlink($conf); } self::reload(); } public static function enableSSL(string $username, string $domain, string $cert, string $key, string $chain = ''): void { $certDir = "/etc/novacpx/ssl/accounts/{$username}"; @mkdir($certDir, 0700, true); file_put_contents("{$certDir}/cert.pem", $cert); file_put_contents("{$certDir}/key.pem", $key); if ($chain) file_put_contents("{$certDir}/chain.pem", $chain); if (WEB_SERVER === 'nginx') { $conf = file_get_contents("/etc/nginx/sites-available/novacpx-{$username}.conf") ?: ''; if (!str_contains($conf, 'ssl_certificate')) { $conf = str_replace('listen 80;', "listen 443 ssl http2;\n listen 80;\n ssl_certificate {$certDir}/cert.pem;\n ssl_certificate_key {$certDir}/key.pem;", $conf); file_put_contents("/etc/nginx/sites-available/novacpx-{$username}.conf", $conf); } } else { $conf = file_get_contents("/etc/apache2/sites-available/novacpx-{$username}.conf") ?: ''; if (!str_contains($conf, 'SSLEngine')) { $conf = str_replace('', "\n SSLEngine on\n SSLCertificateFile {$certDir}/cert.pem\n SSLCertificateKeyFile {$certDir}/key.pem", $conf); $conf .= "\n\n ServerName {$domain}\n Redirect permanent / https://{$domain}/\n"; file_put_contents("/etc/apache2/sites-available/novacpx-{$username}.conf", $conf); } } self::reload(); } private static function writeNginx(string $username, string $domain, string $docRoot, string $phpVer, string $logDir): void { $sock = "/run/php/php{$phpVer}-fpm-{$username}.sock"; $conf = "/etc/nginx/sites-available/novacpx-{$username}.conf"; file_put_contents($conf, "server { listen 80; server_name {$domain} www.{$domain}; root {$docRoot}; index index.php index.html index.htm; access_log {$logDir}/access.log; error_log {$logDir}/error.log; location / { try_files \$uri \$uri/ /index.php?\$query_string; } location ~ \.php$ { fastcgi_pass unix:{$sock}; include fastcgi_params; fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name; fastcgi_param PHP_VALUE \"error_log={$logDir}/php.log\"; } location ~ /\\.ht { deny all; } location ~* \\.(jpg|jpeg|png|gif|ico|css|js|svg|woff2)$ { expires 30d; add_header Cache-Control public; } } "); @symlink($conf, "/etc/nginx/sites-enabled/novacpx-{$username}.conf"); } private static function writeApache(string $username, string $domain, string $docRoot, string $phpVer, string $logDir): void { $sock = "/run/php/php{$phpVer}-fpm-{$username}.sock"; $conf = "/etc/apache2/sites-available/novacpx-{$username}.conf"; file_put_contents($conf, " ServerName {$domain} ServerAlias www.{$domain} DocumentRoot {$docRoot} ErrorLog {$logDir}/error.log CustomLog {$logDir}/access.log combined Options -Indexes +FollowSymLinks +MultiViews AllowOverride All Require all granted SetHandler \"proxy:unix:{$sock}|fcgi://localhost/\" "); shell_exec("a2ensite novacpx-{$username} 2>/dev/null"); } private static function reload(): void { if (WEB_SERVER === 'nginx') { shell_exec("nginx -t 2>/dev/null && systemctl reload nginx 2>/dev/null"); } else { shell_exec("apache2ctl configtest 2>/dev/null && systemctl reload apache2 2>/dev/null"); } } }