No description
- Login: replace fragile unique_id/email check with proper HTTP 200 trust + explicit meta.rc=error detection (matches Art-of-WiFi reference impl) - Login: add TOKEN cookie fallback for CSRF token extraction in case the X-CSRF-Token response header is absent (some firmware versions) - getVouchers(): pass explicit 'GET' method instead of relying on cURL default - apiRequest(): use CURLOPT_HTTPGET for GET requests; send CURLOPT_POSTFIELDS as empty object for POST with no data; CSRF header only on non-GET requests - Remove array_filter() header construction, replace with clean conditional append https://claude.ai/code/session_01UsuvFAmmeagtQa14QA4iaq |
||
|---|---|---|
| admin | ||
| includes | ||
| config.php | ||
| cron_sync.php | ||
| cron_test.php | ||
| database.sql | ||
| index.php | ||
| install.php | ||
| login.php | ||
| login_simple.php | ||
| logout.php | ||
| m365_callback.php | ||
| m365_debug.php | ||
| Readme.md | ||
| test.php | ||
UniFi Voucher Management System
Webbasiertes System zur Verwaltung von WLAN-Vouchers für UniFi OS mit Multi-Site-Unterstützung, Benutzerverwaltung und Microsoft 365 Integration.
Features
- Voucher-Erstellung mit QR-Code-Anzeige und E-Mail-Versand
- Multi-Site-Support – mehrere UniFi-Standorte verwalten
- Benutzerverwaltung mit granularer Site-Zugriffskontrolle
- Authentifizierung via lokale Accounts oder Microsoft 365 OAuth
- CSV-Export aller Vouchers pro Site
- Admin-Dashboard mit Live-Statistiken und Sync-Funktion
- Öffentlicher Zugriff – optional ohne Login nutzbar
- CSRF-Schutz, bcrypt-Passwörter, Prepared Statements, Login-Rate-Limiting
Anforderungen
- PHP 7.4+, MySQL 5.7+ / MariaDB 10.2+, Apache/Nginx
- PHP-Extensions: PDO, PDO_MySQL, cURL, mbstring, JSON
- UniFi Network Application 7.0+ mit UniFi OS (z.B. UDM, UDR, UniFi OS Server)
Installation
git clone https://github.com/friloo/unifi-voucher-tool.git
cd unifi-voucher-tool
- Dateien auf den Webserver hochladen
http://ihre-domain.de/install.phpöffnen- Den 5-Schritte-Assistenten durchlaufen:
- Schritt 1: Datenbank-Verbindungsdaten
- Schritt 2: Administrator-Account (Name, E-Mail, Passwort)
- Schritt 3: Allgemeine Einstellungen (Titel, Logo, öffentlicher Zugriff)
- Schritt 4: Microsoft 365 Integration (optional)
- Schritt 5: Installation abschließen
install.phpnach erfolgreicher Installation löschen
Sites konfigurieren
- Administration → Sites verwalten → Neue Site hinzufügen
- Felder ausfüllen:
- Name: Anzeigename (z.B. „Hauptgebäude")
- Site ID: UniFi Site ID (meist
default) - Controller URL:
https://unifi.example.com:11443 - Benutzername / Passwort: UniFi Admin-Zugangsdaten
- Verbindung testen klicken, dann speichern
Voucher erstellen
- Startseite öffnen (Login je nach Konfiguration optional)
- Voucher-Name, Anzahl Geräte und Standort wählen
- Voucher erstellen – Code und QR-Code werden sofort angezeigt
- Code per E-Mail senden oder ausdrucken
Konfiguration
config.php
Wird automatisch durch den Installer erstellt:
<?php
define('DB_HOST', 'localhost');
define('DB_NAME', 'unifi_voucher');
define('DB_USER', 'username');
define('DB_PASS', 'password');
define('SESSION_LIFETIME', 3600);
date_default_timezone_set('Europe/Berlin');
Microsoft 365 OAuth (optional)
- Im Azure Portal eine App-Registrierung anlegen
- Umleitungs-URI:
https://ihre-domain.de/m365_callback.php - API-Berechtigungen:
User.Read,email,profile,openid - Client ID, Client Secret und Tenant ID in Administration → Einstellungen eintragen
Cron-Job (empfohlen)
Automatische Synchronisation alle 30 Minuten:
*/30 * * * * curl -s "https://ihre-domain.de/cron_sync.php?token=IHR_CRON_TOKEN"
Den Token finden Sie unter Administration → Einstellungen → Cron.
Sicherheit
# .htaccess – sensible Dateien sperren
<FilesMatch "^(config\.php|database\.sql|.*\.md)$">
Order Allow,Deny
Deny from all
</FilesMatch>
-- Dedizierter Datenbank-Benutzer
CREATE USER 'unifi_voucher'@'localhost' IDENTIFIED BY 'sicheres_passwort';
GRANT SELECT, INSERT, UPDATE, DELETE ON unifi_voucher.* TO 'unifi_voucher'@'localhost';
Problembehandlung
Login funktioniert nicht:
- Datenbankverbindung und PHP-Session-Konfiguration prüfen
UniFi-Verbindung schlägt fehl:
- Controller-URL im Browser testen
- Port 11443 für UniFi OS verwenden (nicht 8443)
- Benutzername, Passwort und Site ID prüfen
- cURL-Extension muss aktiviert sein
UniFi OS: HTTP 404 oder 401:
- Login-Endpunkt ist
/api/auth/login(nicht/api/login) - API-Pfade benötigen Präfix
/proxy/network/api/s/{site}/... - Älterer UniFi Network Controller (ohne UniFi OS) wird ab Version 2.1.0 nicht mehr unterstützt
Voucher werden nicht erstellt:
- UniFi Controller Logs prüfen
- API-Berechtigungen des Admin-Accounts prüfen
- Site ID korrekt? (zu finden in der UniFi Controller URL)
Microsoft 365 Login funktioniert nicht:
- Redirect URI in Azure AD prüfen
- Client ID, Secret und Tenant ID kontrollieren
API-Dokumentation
Login (UniFi OS):
POST /api/auth/login
Body: {"username": "admin", "password": "password"}
Response-Header: X-CSRF-Token: <token>
Voucher erstellen:
POST /proxy/network/api/s/{site_id}/cmd/hotspot
X-CSRF-Token: <token>
Body: {"cmd": "create-voucher", "expire": 480, "n": 1, "note": "Name", "quota": 1}
Vouchers abrufen:
GET /proxy/network/api/s/{site_id}/stat/voucher
Voucher löschen:
POST /proxy/network/api/s/{site_id}/cmd/hotspot
X-CSRF-Token: <token>
Body: {"cmd": "delete-voucher", "_id": "<voucher_id>"}
Roadmap
- Voucher-Templates (vordefinierte Laufzeiten)
- Bulk-Voucher-Erstellung
- Erweiterte Reporting-Funktionen
- Docker-Container
- Mehrsprachigkeit
Version: 2.1.0 | Autor: Friederich Loheide | Letztes Update: April 2026