mirror of
https://github.com/usmannasir/cyberpanel.git
synced 2025-12-15 12:59:42 +01:00
- Added a static method to ensure ImunifyAV assets are created and permissions set correctly in CageFS.py. - Updated the URL routing in urls.py to include paths for ImunifyAV, supporting both legacy and new routes. - Modified the ImunifyAV HTML template to use Django's URL template tag for better maintainability. - Enhanced the cyberpanel_fixes.sh script to ensure ImunifyAV UI assets are installed during fixes. - Improved database user resolution and password handling in mysqlUtilities.py for better security and reliability. This update enhances the integration and management of ImunifyAV within the CyberPanel environment.
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()
|
|
|