mirror of
https://github.com/usmannasir/cyberpanel.git
synced 2025-12-15 12:59:42 +01:00
103 lines
2.7 KiB
Python
103 lines
2.7 KiB
Python
|
|
#!/usr/bin/env python3
|
||
|
|
"""
|
||
|
|
Lightweight regression test for the /imunifyav route.
|
||
|
|
|
||
|
|
Authenticates by injecting a valid CyberPanel session (using the first Administrator record),
|
||
|
|
requests both /imunifyav and /ImunifyAV, and records the HTTP status alongside the
|
||
|
|
imunify-antivirus service state.
|
||
|
|
"""
|
||
|
|
import json
|
||
|
|
import os
|
||
|
|
import subprocess
|
||
|
|
import sys
|
||
|
|
from datetime import datetime
|
||
|
|
from pathlib import Path
|
||
|
|
|
||
|
|
ROOT_DIR = Path(__file__).resolve().parents[2]
|
||
|
|
sys.path.append(str(ROOT_DIR))
|
||
|
|
|
||
|
|
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "CyberCP.settings")
|
||
|
|
|
||
|
|
import django # noqa: E402
|
||
|
|
django.setup()
|
||
|
|
|
||
|
|
from django.test import Client # noqa: E402
|
||
|
|
from loginSystem.models import Administrator # noqa: E402
|
||
|
|
|
||
|
|
LOG_PATH = ROOT_DIR / "test_logs" / "imunifyav_route.log"
|
||
|
|
LOG_PATH.parent.mkdir(parents=True, exist_ok=True)
|
||
|
|
|
||
|
|
|
||
|
|
def get_service_state():
|
||
|
|
try:
|
||
|
|
output = subprocess.check_output(
|
||
|
|
["systemctl", "is-active", "imunify-antivirus"],
|
||
|
|
stderr=subprocess.STDOUT,
|
||
|
|
timeout=10,
|
||
|
|
text=True,
|
||
|
|
).strip()
|
||
|
|
return output
|
||
|
|
except (FileNotFoundError, subprocess.CalledProcessError, subprocess.TimeoutExpired):
|
||
|
|
return "unavailable"
|
||
|
|
|
||
|
|
|
||
|
|
def perform_request(client, path):
|
||
|
|
try:
|
||
|
|
response = client.get(path, follow=True)
|
||
|
|
return response.status_code, None
|
||
|
|
except Exception as exc: # pragma: no cover - diagnostic logging
|
||
|
|
return None, str(exc)
|
||
|
|
|
||
|
|
|
||
|
|
def build_client():
|
||
|
|
admin = Administrator.objects.first()
|
||
|
|
if not admin:
|
||
|
|
return None, "No administrator records available to seed the session."
|
||
|
|
|
||
|
|
client = Client()
|
||
|
|
session = client.session
|
||
|
|
session["userID"] = admin.pk
|
||
|
|
session.save()
|
||
|
|
return client, None
|
||
|
|
|
||
|
|
|
||
|
|
def log_result(entry):
|
||
|
|
entry["timestamp"] = datetime.utcnow().isoformat() + "Z"
|
||
|
|
with open(LOG_PATH, "a", encoding="utf-8") as handle:
|
||
|
|
handle.write(json.dumps(entry, ensure_ascii=False) + "\n")
|
||
|
|
|
||
|
|
|
||
|
|
def main():
|
||
|
|
client, client_error = build_client()
|
||
|
|
service_state = get_service_state()
|
||
|
|
results = {
|
||
|
|
"module": "imunifyav_route_check",
|
||
|
|
"service_state": service_state,
|
||
|
|
"retry": 0,
|
||
|
|
"errors": [],
|
||
|
|
"responses": {},
|
||
|
|
}
|
||
|
|
|
||
|
|
if client is None:
|
||
|
|
results["errors"].append(client_error or "Unable to initialize Django test client.")
|
||
|
|
log_result(results)
|
||
|
|
print(json.dumps(results, indent=2))
|
||
|
|
sys.exit(1)
|
||
|
|
|
||
|
|
for path in ("/imunifyav/", "/ImunifyAV/"):
|
||
|
|
status_code, error = perform_request(client, path)
|
||
|
|
results["responses"][path] = status_code
|
||
|
|
if error:
|
||
|
|
results["errors"].append(f"{path}: {error}")
|
||
|
|
|
||
|
|
log_result(results)
|
||
|
|
print(json.dumps(results, indent=2))
|
||
|
|
|
||
|
|
if results["errors"]:
|
||
|
|
sys.exit(1)
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
main()
|
||
|
|
|