10 KiB
KeyHelp Manager - Projektstruktur
Entwickelt von: Kevin Feiler / AVVGO
Version: 1.0.0
📁 Verzeichnisstruktur
keyweb-module/
├── modules/
│ └── servers/
│ └── keyhelpmanager/
│ ├── keyhelpmanager.php # Haupt-Modul-Datei (846 Zeilen)
│ └── templates/
│ └── clientarea.tpl # Client Area Smarty-Template
│
├── .gitignore # Git Ignore-Datei
├── CHANGELOG.md # Versions-Historie
├── composer.json # Composer Dependencies
├── INSTALLATION.md # Detaillierte Installationsanleitung
├── LICENSE # MIT Lizenz
├── PROJECT_STRUCTURE.md # Diese Datei
└── README.md # Haupt-Dokumentation
📄 Datei-Übersicht
Hauptmodul: keyhelpmanager.php
Größe: ~846 Zeilen
Zweck: Kernfunktionalität des WHMCS Provisioning Moduls
Öffentliche WHMCS-Funktionen:
-
keyhelpmanager_MetaData()- Gibt Modul-Metadaten zurück
- DisplayName, API-Version, Port-Definitionen
-
keyhelpmanager_ConfigOptions()- Definiert Server-Konfigurationsoptionen
- Hostname, API-Key, SSL-Einstellungen
-
keyhelpmanager_CreateAccount(array $params)- Erstellt neuen KeyHelp-Account
- Generiert Username/Passwort falls nötig
- Fügt Domain hinzu
- Speichert Details in WHMCS
-
keyhelpmanager_SuspendAccount(array $params)- Sperrt KeyHelp-Account
- Setzt
is_lockedFlag
-
keyhelpmanager_UnsuspendAccount(array $params)- Entsperrt KeyHelp-Account
- Entfernt
is_lockedFlag
-
keyhelpmanager_TerminateAccount(array $params)- Löscht KeyHelp-Account permanent
- Entfernt alle zugehörigen Daten
- Cleanup in WHMCS-Datenbank
-
keyhelpmanager_ChangePassword(array $params)- Ändert Account-Passwort
- Synchronisiert mit WHMCS
-
keyhelpmanager_ClientArea(array $params)- Generiert Client Area Inhalt
- Lädt Live-Statistiken von KeyHelp
- Rendert Smarty-Template
-
keyhelpmanager_LoginLink(array $params)- Single Sign-On für Admins
- Erstellt Session-Token
- Generiert direkten Login-Link
-
keyhelpmanager_TestConnection(array $params)- Testet API-Verbindung
- Gibt KeyHelp-Version zurück
Private Hilfsfunktionen:
API-Kommunikation:
_keyhelpmanager_APIRequest()- Zentrale API-Request-Funktion mit Guzzle
Account-Management:
_keyhelpmanager_GenerateUsername()- Generiert Username aus Domain_keyhelpmanager_GeneratePassword()- Generiert sicheres Passwort (16 Zeichen)_keyhelpmanager_SaveAccountDetails()- Speichert in WHMCS-DB_keyhelpmanager_GetAccountDetails()- Lädt aus WHMCS-DB_keyhelpmanager_GetUserId()- Holt KeyHelp User-ID_keyhelpmanager_UpdateAccountDetail()- Aktualisiert einzelnes Detail_keyhelpmanager_DeleteAccountDetails()- Löscht gespeicherte Details
Custom Fields:
_keyhelpmanager_GetCustomFieldId()- Holt/erstellt Custom Field ID
Formatierung:
_keyhelpmanager_FormatBytes()- Formatiert Bytes → KB/MB/GB/TB_keyhelpmanager_CalculatePercent()- Berechnet Prozentsatz
Template: clientarea.tpl
Größe: ~258 Zeilen
Typ: Smarty Template
Zweck: Client Area Darstellung
Features:
- Bootstrap 3/4 kompatibles Layout
- FontAwesome Icons
- Responsive Design
- JavaScript-Funktionen:
togglePassword()- Passwort anzeigen/verbergencopyToClipboard()- Text in Zwischenablage kopieren
Angezeigte Informationen:
-
Login-Informationen:
- KeyHelp Login-URL (klickbar)
- Benutzername (mit Copy-Button)
- Passwort (mit Show/Hide und Copy-Button)
- Domain-Name
-
Account-Statistiken:
- Speicherplatz (Fortschrittsbalken)
- Traffic/Bandbreite (Fortschrittsbalken)
- Anzahl Domains
- Anzahl Datenbanken
- Anzahl E-Mail-Konten
-
Call-to-Action:
- "Jetzt zu KeyHelp einloggen" Button
🔌 KeyHelp API-Endpunkte
Das Modul nutzt folgende KeyHelp API v2 Endpunkte:
| Endpunkt | Methode | Zweck | Verwendet in |
|---|---|---|---|
/api/v2/users |
POST | Benutzer erstellen | CreateAccount |
/api/v2/users/{id} |
GET | Benutzer-Details | GetAccountDetails |
/api/v2/users/{id} |
PUT | Benutzer aktualisieren | SuspendAccount, UnsuspendAccount, ChangePassword |
/api/v2/users/{id} |
DELETE | Benutzer löschen | TerminateAccount |
/api/v2/domains |
POST | Domain hinzufügen | CreateAccount |
/api/v2/users/{id}/statistics |
GET | Statistiken abrufen | ClientArea |
/api/v2/sessions |
POST | SSO-Session erstellen | LoginLink |
/api/v2/server/version |
GET | Server-Version | TestConnection |
💾 WHMCS-Datenbank-Interaktionen
Verwendete Tabellen:
-
tblhosting- Felder:
username,password - Zweck: Speichert Account-Credentials
- Felder:
-
tblcustomfields- Erstellt Custom Field: "KeyHelp User ID"
- Typ: Text (Admin Only)
-
tblcustomfieldsvalues- Speichert KeyHelp User-ID pro Service
- Verknüpfung über
relid(Service-ID)
Verwendetes ORM:
- Laravel Eloquent Capsule (von WHMCS bereitgestellt)
- Sichere Queries ohne SQL-Injection-Risiko
🔒 Sicherheitsfeatures
-
API-Key-Schutz:
- Verschlüsselte Speicherung in WHMCS
- Maskierung in Module-Logs
- Niemals im Frontend sichtbar
-
Passwort-Sicherheit:
- Kryptografisch sichere Generierung (
random_int()) - 16 Zeichen Länge
- Gemischte Zeichensätze (a-z, A-Z, 0-9, Sonderzeichen)
- Verschlüsselte Speicherung in WHMCS
- Kryptografisch sichere Generierung (
-
SSL/TLS:
- Konfigurierbare SSL-Verbindungen
- Optionale Zertifikat-Verifizierung
- Standard: SSL aktiviert
-
Input-Validierung:
- Alle Benutzereingaben werden validiert
- Sanitization durch Capsule ORM
- Exception-Handling für alle API-Calls
-
Session-Token:
- Temporäre SSO-Tokens (5 Minuten Gültigkeit)
- Automatischer Ablauf
📝 Logging
WHMCS Module Log:
- Alle API-Requests werden protokolliert
- Automatische Maskierung sensibler Daten
- Abrufbar unter:
Utilities → Logs → Module Log
Logged werden:
- API-Endpunkt und Methode
- Request-Body (API-Key maskiert)
- Response-Status und Body
- Fehler und Exceptions
🎨 Design-Patterns
-
Prefix-Convention:
- Öffentliche Funktionen:
keyhelpmanager_FunctionName() - Private Funktionen:
_keyhelpmanager_FunctionName()
- Öffentliche Funktionen:
-
Error-Handling:
- Try-Catch-Blöcke um alle kritischen Operationen
- Verständliche Fehlermeldungen für Endbenutzer
- Detailliertes Logging für Admins
-
Rollback-Mechanismus:
- Bei fehlgeschlagener Domain-Erstellung: Benutzer wird gelöscht
- Verhindert inkonsistente Zustände
-
Separation of Concerns:
- API-Logik in
_keyhelpmanager_APIRequest() - Datenbank-Logik in separaten Funktionen
- Template-Logik in
.tpl-Datei
- API-Logik in
🔄 Workflow-Diagramme
Account-Erstellung:
WHMCS Payment Cleared
↓
keyhelpmanager_CreateAccount()
↓
Validiere Parameter
↓
Generiere Username/Passwort (falls nötig)
↓
API: POST /users (Benutzer erstellen)
↓
Erfolg?
↙ ↘
Ja Nein → Return Error
↓
API: POST /domains (Domain hinzufügen)
↓
Erfolg?
↙ ↘
Ja Nein → Rollback: DELETE User → Return Error
↓
Speichere Details in WHMCS
↓
Return "success"
↓
Account ist aktiv
Single Sign-On:
Admin klickt "Login to KeyHelp"
↓
keyhelpmanager_LoginLink()
↓
Lade User-ID aus WHMCS
↓
API: POST /sessions (mit User-ID)
↓
Erhalte Session-Token
↓
Generiere Login-URL mit Token
↓
Redirect zu KeyHelp
↓
Auto-Login ohne Passwort
📦 Abhängigkeiten
PHP-Extensions:
ext-json- JSON-Verarbeitungext-curl- HTTP-Requests
Composer-Pakete:
guzzlehttp/guzzle^7.0 - HTTP-Client (von WHMCS bereitgestellt)
WHMCS-Komponenten:
- Laravel Eloquent Capsule (ORM)
- Smarty Template Engine
- Module Log System
- Custom Fields System
- Encryption Functions
🧪 Testing-Empfehlungen
Manuelle Tests:
-
Connection-Test:
- Server-Konfiguration → Test Connection
-
Account-Lifecycle:
- Create → Verify in KeyHelp
- Suspend → Verify locked
- Unsuspend → Verify unlocked
- Terminate → Verify deleted
-
Client Area:
- Login-Credentials sichtbar?
- Statistiken werden geladen?
- Copy-to-Clipboard funktioniert?
- Responsive Design auf Mobile?
-
Admin SSO:
- Login-Link funktioniert?
- Automatischer Login ohne Passwort?
- Token läuft nach 5 Min. ab?
Automatisierte Tests (Geplant):
- PHPUnit-Tests für alle Funktionen
- Mock-API-Responses
- Database-Transaktionen für Tests
📊 Code-Statistiken
- Gesamt-Zeilen: ~1.400+
- PHP-Code: ~846 Zeilen
- Smarty-Template: ~258 Zeilen
- Dokumentation: ~1.200+ Zeilen (README, INSTALLATION, etc.)
- Funktionen: 21 (10 öffentlich, 11 privat)
- API-Endpunkte: 8
🚀 Performance-Optimierungen
-
Caching:
- Custom Field IDs werden bei erster Abfrage ermittelt
- Wiederverwendung innerhalb einer Request
-
Lazy-Loading:
- Statistiken nur bei Bedarf (Client Area)
- Session-Tokens nur bei SSO
-
Effiziente DB-Queries:
- Verwendung von Eloquent ORM
- Keine N+1 Query-Probleme
-
API-Timeouts:
- 30 Sekunden Timeout für API-Requests
- Verhindert hängende Requests
🔮 Geplante Erweiterungen (Roadmap)
Siehe CHANGELOG.md → [Unreleased]
- Multi-Language Support
- E-Mail-Account-Verwaltung
- Datenbank-Management
- SSL-Zertifikat-Management
- Ressourcen-Upgrade/Downgrade
- Webhook-Support
📞 Support
Entwickler: Kevin Feiler
Firma: AVVGO
Website: https://avvgo.de
E-Mail: info@avvgo.de
Copyright (c) 2024 Kevin Feiler / AVVGO
Lizenz: MIT License