wildcard.php bootstrapt osTicket über ../main.inc.php, lädt include/plugins/api-key-wildcard/api.wildcard.inc.php und api.tickets.php. Es definiert WildcardTicketApiController als Unterklasse von TicketApiController, deren requireApiKey() an WildcardApiController delegiert. Anschließend wird der Dispatcher aufgebaut, das Signal api gesendet und der Pfad aufgelöst.
WildcardApiController.requireApiKey() arbeitet in dieser Reihenfolge:
401 Valid API key required.wildcard_getIdByKey(): ohne Treffer 401 API key not found or IP not authorized.401 API key not active.0.0.0.0 noch die Absender-IP: 401 Source IP not authorized.0.0.0.0 und log_wildcard_access aktiv: Debug-Eintrag, danach wird der Key zurückgegeben.Die SQL-Bedingung der Suche lautet:
SELECT id FROM API_KEY_TABLE WHERE apikey = ? AND (ipaddr = ? OR ipaddr = "0.0.0.0")
Die Standard-API prüft dagegen nur auf die exakte IP. Schritt 4 ist nach der SQL-Suche eine zusätzliche Absicherung.
| Klasse | Aufgabe | Wichtige Methoden |
|---|---|---|
ApiKeyWildcardPlugin |
Plugin-Klasse, Singleton | bootstrap(), enable(), disable(), performUpdate() (public) |
ApiKeyWildcardConfig |
Konfigurationsfelder | getOptions() |
PluginInstaller |
Endpoint-Datei kopieren, löschen | install() und update() geben ein Array mit Fehlern zurück, uninstall() gibt bool zurück |
HtaccessManager |
Änderungen an api/.htaccess |
applyAll() gibt ein Array mit Fehlern zurück, addMultiViews(), addWildcardRule(), removeWildcardRule(), removeMultiViews() geben bool zurück |
PluginConstants |
Konstanten (Slug, Dateiname, 0.0.0.0, Kommentare, Dateimodus 0755) |
|
WildcardApiController |
API-Key-Prüfung mit Wildcard | requireApiKey() |
WildcardTicketApiController |
Ticket-Controller mit dieser Prüfung (in wildcard.php) |
requireApiKey() |
enable() gibt true oder ein Array mit Fehlern zurück. disable() gibt immer true zurück, die Ergebnisse der einzelnen Schritte werden nicht ausgewertet. performUpdate() gibt ein Array mit allen Fehlern zurück, sonst true.
Bei jedem bootstrap() liest das Plugin installed_version aus der Konfiguration und vergleicht sie per version_compare mit der Version aus plugin.php. Ist der Wert leer oder niedriger, läuft performUpdate(): Die Endpoint-Datei wird neu kopiert, api/.htaccess (falls vorhanden) ergänzt und die neue Version gespeichert. Bei Erfolg schreibt performUpdate() eine Zeile ins PHP-Error-Log (Installation oder Update). Eine gleiche oder höhere installierte Version löst kein Update aus.
enable() schreibt kein Installations- oder Update-Log. Es schreibt nur dann ins PHP-Error-Log, wenn es die Singleton-Instanz automatisch anlegt: [API Key Wildcard] Auto-created singleton instance bei Erfolg, [API Key Wildcard] Failed to auto-create instance: ... bei einem Fehler.
api| Signal | Gesendet von | Zweck |
|---|---|---|
api |
wildcard.php |
Gibt anderen Plugins die Möglichkeit, Routen am Dispatcher des Wildcard-Endpoints zu registrieren. Diese Routen nutzen ihre eigene Key-Prüfung. |
Die Plugin-Klasse selbst verbindet sich mit keinem Signal.
Auszug aus dem Repository. Das ist nicht der Inhalt des Release-ZIP.
osticket-api-key-wildcard/
├── plugin.php # Registrierung (ID, Name, Plugin-Klasse)
├── class.ApiKeyWildcard.php # Plugin-Klasse und Konfiguration
├── class.PluginConstants.php # Konstanten
├── class.PluginInstaller.php # Endpoint-Datei kopieren und löschen
├── class.HtaccessManager.php # Änderungen an api/.htaccess
├── api.wildcard.inc.php # WildcardApiController und Hilfsfunktionen
├── wildcard.php # Endpoint, wird nach api/ kopiert
├── .htaccess # Referenz, nur im Repository, vom Plugin nicht verwendet
├── README.md
├── CHANGELOG.md
├── LICENSE
├── .releaseinclude # Dateien des Release-ZIP
├── .gitignore
└── .github/ # CI-Workflow
Das Release-ZIP enthält laut .releaseinclude nur *.php, README.md, README-de.md, LICENSE und CHANGELOG.md. Die .htaccess ist daher nicht im ZIP. Die Datei README-de.md steht in .releaseinclude, existiert im Repository aber nicht.