Dead code removed: - Module.php: remove assignBackupPlan(), getSelfServiceCurrencies() (no callers) - Cache.php: remove forgetPattern() (no callers, no-op on filesystem) - module.js: remove vfLoadSelfServiceReport() (no UI trigger) Stale files removed: - .releaserc.json (orphaned, conflicts with tag-based workflow) - .github/workflows/api-sync-check.yml (baseline never populated) - docs/openapi-baseline.yaml (placeholder stub) - scripts/generate-endpoint-doc.sh (broken grep patterns) Security fixes: - AdminHTML: cast $serverId to (int), cast $serviceId to (int) - admin.php: add explicit break after every output() call, sanitize error msgs File hygiene: - Move modify.sql into modules/servers/VirtFusionDirect/ (matches README docs) - Fix CHANGELOG.md: remove duplicate 1.0.0 entry, clean up mixed git host URLs Documentation: - CLAUDE.md: full rewrite with current architecture, Cache class, development rules (try/catch, ownership validation, HTTP methods, caching policy) - README.md: remove stale IPv4 removal references, add new features (traffic, backups, VNC toggle, password reset, OS gallery, copy buttons), add Cache.php to file structure, remove "Primary IPv4 Protection" known issue Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
120 lines
5.1 KiB
PHP
120 lines
5.1 KiB
PHP
<?php
|
|
|
|
namespace WHMCS\Module\Server\VirtFusionDirect;
|
|
|
|
class AdminHTML
|
|
{
|
|
|
|
public static function options($systemUrl, $serviceId)
|
|
{
|
|
$systemUrl = htmlspecialchars($systemUrl, ENT_QUOTES, 'UTF-8');
|
|
return <<<EOT
|
|
<button onclick="impersonateServerOwner('${serviceId}', '${systemUrl}')" type="button" class="btn btn-primary">Impersonate Server Owner</button>
|
|
<span class="text-info"> A valid VirtFusion admin session in the same browser is required for this functionality to work.</span>
|
|
EOT;
|
|
}
|
|
|
|
public static function serverObject($serverObject)
|
|
{
|
|
$serverObject = htmlspecialchars($serverObject, ENT_QUOTES, 'UTF-8');
|
|
return <<<EOT
|
|
<textarea class="form-control" name="modulefields[1]" rows="10" style="width: 100%" disabled>${serverObject}</textarea>
|
|
EOT;
|
|
|
|
}
|
|
|
|
public static function serverId($serverId)
|
|
{
|
|
$serverId = (int) $serverId;
|
|
return <<<EOT
|
|
<input type="text" class="form-control input-200 input-inline" name="modulefields[0]" size="20" value="${serverId}" />
|
|
<span class="text-info"> Changing the Sever ID manually is not recommended. Alterations to this field are usually handled automatically.</span>
|
|
EOT;
|
|
}
|
|
|
|
public static function serverInfo($systemUrl, $serviceId)
|
|
{
|
|
$systemUrl = htmlspecialchars($systemUrl, ENT_QUOTES, 'UTF-8');
|
|
$serviceId = (int) $serviceId;
|
|
$cacheV = time();
|
|
return <<<EOT
|
|
<link href="${systemUrl}modules/servers/VirtFusionDirect/templates/css/module.css?v=${cacheV}" rel="stylesheet">
|
|
<script src="${systemUrl}modules/servers/VirtFusionDirect/templates/js/module.js?v=${cacheV}"></script>
|
|
<div id="vf-loader" class="vf-loader">
|
|
<div id="vf-loading"></div>
|
|
</div>
|
|
<div id="vf-server-info-error">
|
|
<div class="alert alert-warning mb-0">
|
|
<div id="vf-server-info-error-message"></div>
|
|
</div>
|
|
</div>
|
|
<div id="vf-server-info" class="row mb-2">
|
|
<div class="col-12">
|
|
<div class="row">
|
|
<div class="col-md-6">
|
|
<div class="row p-1">
|
|
<div class="col-xs-4 col-4 text-right vf-bold">
|
|
Name:
|
|
</div>
|
|
<div class="col-xs-8 col-8" id="vf-data-server-name">
|
|
</div>
|
|
</div>
|
|
<div class="row p-1">
|
|
<div class="col-xs-4 col-4 text-right vf-bold">
|
|
Hostname:
|
|
</div>
|
|
<div class="col-xs-8 col-8" id="vf-data-server-hostname">
|
|
</div>
|
|
</div>
|
|
<div class="row p-1">
|
|
<div class="col-xs-4 col-4 text-right vf-bold">
|
|
Memory:
|
|
</div>
|
|
<div class="col-xs-8 col-8" id="vf-data-server-memory">
|
|
</div>
|
|
</div>
|
|
<div class="row p-1">
|
|
<div class="col-xs-4 col-4 text-right vf-bold">
|
|
CPU:
|
|
</div>
|
|
<div class="col-xs-8 col-8" id="vf-data-server-cpu">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<div class="row p-1">
|
|
<div class="col-xs-4 col-4 text-right vf-bold">
|
|
IPv4:
|
|
</div>
|
|
<div class="col-xs-8 col-8" id="vf-data-server-ipv4">
|
|
</div>
|
|
</div>
|
|
<div class="row p-1">
|
|
<div class="col-xs-4 col-4 text-right vf-bold">
|
|
IPv6:
|
|
</div>
|
|
<div class="col-xs-8 col-8" id="vf-data-server-ipv6">
|
|
</div>
|
|
</div>
|
|
<div class="row p-1">
|
|
<div class="col-xs-4 col-4 text-right vf-bold">
|
|
Storage:
|
|
</div>
|
|
<div class="col-xs-8 col-8" id="vf-data-server-storage">
|
|
</div>
|
|
</div>
|
|
<div class="row p-1">
|
|
<div class="col-xs-4 col-4 text-right vf-bold">
|
|
Traffic:
|
|
</div>
|
|
<div class="col-xs-8 col-8" id="vf-data-server-traffic">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<script>vfServerDataAdmin("${serviceId}","${systemUrl}");</script>
|
|
EOT;
|
|
}
|
|
} |