$username, 'site_dir' => $siteDir, 'domain' => $domain, 'domain_type' => $domainType, 'protocol' => $protocol, 'creation_date' => date("Y-m-d H:i:s"), ]); } function dirsStatuses($username, $domainType, $protocol) { $dbDirs = query('select', 'sites', [ 'username' => $username, 'domain_type' => $domainType, 'protocol' => $protocol, ], 'site_dir'); $dirs = []; foreach (listFsDirs($username) as $fsDir) $dirs[$fsDir] = in_array($fsDir, $dbDirs); return $dirs; } function htDeleteSite($dir, $domainType, $protocol) { if ($domainType === 'onion') { // Delete Tor config if (unlink(CONF['ht']['tor_config_path'] . '/' . $_SESSION['username'] . '/' . $dir) !== true) output(500, 'Failed to delete Tor configuration.'); // Reload Tor exec(CONF['ht']['sudo_path'] . " " . CONF['ht']['systemctl_path'] . " reload " . CONF['ht']['tor_service'], $output, $code); if ($code !== 0) output(500, 'Failed to reload Tor.'); // Delete Tor keys exec(CONF['ht']['sudo_path'] . ' -u ' . CONF['ht']['tor_user'] . ' ' . CONF['ht']['rm_path'] . ' --recursive ' . CONF['ht']['tor_keys_path'] . '/' . $_SESSION['username'] . '/' . $dir, $output, $code); if ($code !== 0) output(500, 'Failed to delete Tor keys.'); } // Delete Nginx config $domain = query('select', 'sites', [ 'username' => $_SESSION['username'], 'domain_type' => $domainType, 'protocol' => $protocol, 'site_dir' => $dir, ], 'domain')[0]; if (unlink(CONF['ht']['nginx_config_path'] . '/' . $domain . '.conf') !== true) output(500, 'Failed to delete Nginx configuration.'); // Reload Nginx exec(CONF['ht']['sudo_path'] . ' ' . CONF['ht']['systemctl_path'] . ' reload nginx', result_code: $code); if ($code !== 0) output(500, 'Failed to reload Nginx.'); if ($domainType === 'dns') { // Delete Let's Encrypt certificate exec(CONF['ht']['sudo_path'] . " " . CONF['ht']['certbot_path'] . " delete --quiet --cert-name " . $domain, $output, $code); if ($code !== 0) output(500, 'Certbot failed to delete the Let\'s Encrypt certificate.'); } // Delete from database query('delete', 'sites', [ 'username' => $_SESSION['username'], 'domain_type' => $domainType, 'protocol' => $protocol, 'site_dir' => $dir, ]); }