82 lines
2.0 KiB
Markdown
82 lines
2.0 KiB
Markdown
# Share Inbox Service
|
|
|
|
Kleiner privater PHP-Service zum Einsammeln von Inhalten per HTTP und zum späteren Abrufen als JSON.
|
|
|
|
## Hinweis zu KI-Unterstützung
|
|
|
|
Hinweis: Teile dieses Repositories wurden unter Einsatz generativer KI erstellt oder überarbeitet. Die Verantwortung für Inhalt und Veröffentlichung liegt beim Maintainer.
|
|
|
|
## Lizenz
|
|
|
|
Dieses Repository steht unter der [MIT-Lizenz](LICENSE).
|
|
|
|
## Funktionen
|
|
|
|
- `POST /share` speichert eingehende Daten.
|
|
- `GET /inbox` listet gespeicherte Einträge.
|
|
- Storage kann per Flag zwischen `ndjson` und `sqlite` umgeschaltet werden.
|
|
|
|
## Voraussetzungen
|
|
|
|
- PHP 8.1+ mit aktiviertem `pdo_sqlite`, falls `sqlite` genutzt werden soll
|
|
|
|
## Konfiguration
|
|
|
|
1. Beispielkonfiguration kopieren:
|
|
|
|
```sh
|
|
cp .env.example .env
|
|
```
|
|
|
|
2. Wichtige Variablen:
|
|
|
|
- `INBOX_SECRET`: Shared Secret für `POST /share`
|
|
- `INBOX_MAX_BODY_BYTES`: maximales Request-Body-Limit
|
|
- `INBOX_STORAGE_DIR`: Speicherort außerhalb des Webroots, Standard `var/inbox`
|
|
- `INBOX_STORAGE_BACKEND`: `ndjson` oder `sqlite`
|
|
- `INBOX_CORS_ALLOW_ORIGINS`: kommaseparierte Liste erlaubter Origins oder `*`
|
|
|
|
## Lokal starten
|
|
|
|
```sh
|
|
php -S 127.0.0.1:8080 -t src/public src/public/index.php
|
|
```
|
|
|
|
## Beispiele
|
|
|
|
Request speichern:
|
|
|
|
```sh
|
|
curl -X POST http://127.0.0.1:8080/share \
|
|
-H "Content-Type: application/json" \
|
|
-H "X-Inbox-Secret: change-me" \
|
|
-d '{"type":"url","content":"https://example.com"}'
|
|
```
|
|
|
|
Inbox lesen:
|
|
|
|
```sh
|
|
curl "http://127.0.0.1:8080/inbox?limit=20"
|
|
```
|
|
|
|
## Tests
|
|
|
|
Die Tests benötigen keine externen PHP-Abhängigkeiten und starten den eingebauten PHP-Server selbst.
|
|
|
|
```sh
|
|
php tests/run.php
|
|
```
|
|
|
|
Zusätzlich gibt es weiter einen kleinen manuellen Smoke-Test für eine bereits laufende Instanz:
|
|
|
|
```sh
|
|
chmod +x bin/smoke-test.sh
|
|
INBOX_SECRET=change-me bin/smoke-test.sh
|
|
```
|
|
|
|
## Hinweise
|
|
|
|
- Laufzeitdaten liegen standardmäßig unter `var/inbox/` und damit nicht im Webroot.
|
|
- Fehlerdetails gehen ins PHP-Error-Log, nicht mehr an Clients.
|
|
- `sqlite` ist als optionaler Modus gedacht; Standard bleibt `ndjson`.
|