Files
KeyHelp-Manager-for-WHMCS/PROJECT_STRUCTURE.md
2025-10-15 22:29:11 +02:00

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:

  1. keyhelpmanager_MetaData()

    • Gibt Modul-Metadaten zurück
    • DisplayName, API-Version, Port-Definitionen
  2. keyhelpmanager_ConfigOptions()

    • Definiert Server-Konfigurationsoptionen
    • Hostname, API-Key, SSL-Einstellungen
  3. keyhelpmanager_CreateAccount(array $params)

    • Erstellt neuen KeyHelp-Account
    • Generiert Username/Passwort falls nötig
    • Fügt Domain hinzu
    • Speichert Details in WHMCS
  4. keyhelpmanager_SuspendAccount(array $params)

    • Sperrt KeyHelp-Account
    • Setzt is_locked Flag
  5. keyhelpmanager_UnsuspendAccount(array $params)

    • Entsperrt KeyHelp-Account
    • Entfernt is_locked Flag
  6. keyhelpmanager_TerminateAccount(array $params)

    • Löscht KeyHelp-Account permanent
    • Entfernt alle zugehörigen Daten
    • Cleanup in WHMCS-Datenbank
  7. keyhelpmanager_ChangePassword(array $params)

    • Ändert Account-Passwort
    • Synchronisiert mit WHMCS
  8. keyhelpmanager_ClientArea(array $params)

    • Generiert Client Area Inhalt
    • Lädt Live-Statistiken von KeyHelp
    • Rendert Smarty-Template
  9. keyhelpmanager_LoginLink(array $params)

    • Single Sign-On für Admins
    • Erstellt Session-Token
    • Generiert direkten Login-Link
  10. 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/verbergen
    • copyToClipboard() - Text in Zwischenablage kopieren

Angezeigte Informationen:

  1. Login-Informationen:

    • KeyHelp Login-URL (klickbar)
    • Benutzername (mit Copy-Button)
    • Passwort (mit Show/Hide und Copy-Button)
    • Domain-Name
  2. Account-Statistiken:

    • Speicherplatz (Fortschrittsbalken)
    • Traffic/Bandbreite (Fortschrittsbalken)
    • Anzahl Domains
    • Anzahl Datenbanken
    • Anzahl E-Mail-Konten
  3. 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:

  1. tblhosting

    • Felder: username, password
    • Zweck: Speichert Account-Credentials
  2. tblcustomfields

    • Erstellt Custom Field: "KeyHelp User ID"
    • Typ: Text (Admin Only)
  3. 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

  1. API-Key-Schutz:

    • Verschlüsselte Speicherung in WHMCS
    • Maskierung in Module-Logs
    • Niemals im Frontend sichtbar
  2. 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
  3. SSL/TLS:

    • Konfigurierbare SSL-Verbindungen
    • Optionale Zertifikat-Verifizierung
    • Standard: SSL aktiviert
  4. Input-Validierung:

    • Alle Benutzereingaben werden validiert
    • Sanitization durch Capsule ORM
    • Exception-Handling für alle API-Calls
  5. 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

  1. Prefix-Convention:

    • Öffentliche Funktionen: keyhelpmanager_FunctionName()
    • Private Funktionen: _keyhelpmanager_FunctionName()
  2. Error-Handling:

    • Try-Catch-Blöcke um alle kritischen Operationen
    • Verständliche Fehlermeldungen für Endbenutzer
    • Detailliertes Logging für Admins
  3. Rollback-Mechanismus:

    • Bei fehlgeschlagener Domain-Erstellung: Benutzer wird gelöscht
    • Verhindert inkonsistente Zustände
  4. Separation of Concerns:

    • API-Logik in _keyhelpmanager_APIRequest()
    • Datenbank-Logik in separaten Funktionen
    • Template-Logik in .tpl-Datei

🔄 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-Verarbeitung
  • ext-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:

  1. Connection-Test:

    • Server-Konfiguration → Test Connection
  2. Account-Lifecycle:

    • Create → Verify in KeyHelp
    • Suspend → Verify locked
    • Unsuspend → Verify unlocked
    • Terminate → Verify deleted
  3. Client Area:

    • Login-Credentials sichtbar?
    • Statistiken werden geladen?
    • Copy-to-Clipboard funktioniert?
    • Responsive Design auf Mobile?
  4. 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

  1. Caching:

    • Custom Field IDs werden bei erster Abfrage ermittelt
    • Wiederverwendung innerhalb einer Request
  2. Lazy-Loading:

    • Statistiken nur bei Bedarf (Client Area)
    • Session-Tokens nur bei SSO
  3. Effiziente DB-Queries:

    • Verwendung von Eloquent ORM
    • Keine N+1 Query-Probleme
  4. 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