Nur noch, was zum Installieren und Betreiben des Lizenzservers noetig ist
Entfernt: Tests, Architekturdokumentation und die Anwendung TESM. Beides liegt im Entwicklungsrepository alientim/TESM-DEV. Neu: packages/tesm-licensing-server -- die Serverhaelfte des Lizenzprotokolls (issue_license, resign_license, build_master_response, verify_client_request, Schluesselerzeugung). Sie war bisher Teil von tesm-licensing und lag damit auch in jeder Client-Installation. Die gemeinsame Haelfte bleibt in tesm-licensing und wird von beiden Seiten benutzt. install.sh installiert diese Serverhaelfte ausschliesslich fuer --app tesm-license und bricht ab, wenn sie fehlt. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -4,11 +4,24 @@ Ausgabe und Verwaltung der Lizenzen fuer TESM: Kunde -> Ticket -> Lizenz,
|
||||
Aktivierung online und offline, Kundenportal, Selbstbedienung, Versand ueber
|
||||
MS Graph und eine Hierarchie aus Unter-Lizenzservern.
|
||||
|
||||
Die verwaltete Anwendung liegt in einem eigenen Repository:
|
||||
[alientim/tesm](https://gitea.int.eertmoed.net/alientim/tesm). Beide teilen sich
|
||||
den Kern (`packages/tesm-core`) und das Lizenzprotokoll
|
||||
(`packages/tesm-licensing`); diese Pakete sind hier mit enthalten, damit sich
|
||||
das Repository allein installieren laesst.
|
||||
**Dieses Repository enthaelt genau das, was zum Installieren und Betreiben des
|
||||
Lizenzservers gebraucht wird** -- nichts darueber hinaus:
|
||||
|
||||
```
|
||||
apps/tesm-license die Anwendung
|
||||
packages/tesm-core gemeinsamer Kern (Anmeldung, Rechte, Sicherung, nginx, ...)
|
||||
packages/tesm-licensing Lizenzprotokoll, gemeinsame Haelfte
|
||||
packages/tesm-licensing-server Lizenzprotokoll, Serverhaelfte: ausstellen, erneuern, antworten
|
||||
deploy/ install.sh, update.sh, release.sh, systemd, privilegierter Helfer
|
||||
docs/ Betrieb und Sicherheit
|
||||
```
|
||||
|
||||
Die verwaltete Anwendung liegt hier **nicht** mit drin.
|
||||
|
||||
| Wo sonst noch | |
|
||||
|---|---|
|
||||
| [alientim/tesm](https://gitea.int.eertmoed.net/alientim/tesm) | TESM selbst |
|
||||
| [alientim/TESM-DEV](https://gitea.int.eertmoed.net/alientim/TESM-DEV) | Entwicklung: beide Anwendungen, Tests, Architekturdoku |
|
||||
|
||||
## Zweige
|
||||
|
||||
@@ -19,7 +32,7 @@ das Repository allein installieren laesst.
|
||||
|
||||
---
|
||||
|
||||
## Installation auf einem Server
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
sudo bash deploy/install.sh --app tesm-license --https --domain lizenz.firma.de
|
||||
@@ -52,6 +65,23 @@ Health-Check mit automatischem Rollback.
|
||||
|
||||
---
|
||||
|
||||
## Betrieb von der Kommandozeile
|
||||
|
||||
```bash
|
||||
sudo -u tesm-license tesm-license-admin status
|
||||
sudo -u tesm-license tesm-license-admin init-key # Signaturschluessel
|
||||
sudo -u tesm-license tesm-license-admin bootstrap # Grunddaten
|
||||
sudo -u tesm-license tesm-license-admin create-admin
|
||||
sudo -u tesm-license tesm-license-admin migrate-legacy # Altbestand uebernehmen
|
||||
```
|
||||
|
||||
`migrate-legacy` liest die SQLite-Datei eines alten Lizenzservers **nur
|
||||
lesend**, uebernimmt dessen Signaturschluessel und stellt die Lizenzen mit ihrer
|
||||
restlichen Laufzeit neu aus. Wird der Schluessel nicht uebernommen, muessen
|
||||
Kunden den Ausstellerwechsel einmal bestaetigen.
|
||||
|
||||
---
|
||||
|
||||
## Release bauen
|
||||
|
||||
```bash
|
||||
@@ -65,42 +95,6 @@ genau einmal.
|
||||
|
||||
---
|
||||
|
||||
## Entwicklung
|
||||
|
||||
```bash
|
||||
python -m venv .venv && . .venv/bin/activate
|
||||
pip install -e packages/tesm-licensing -e packages/tesm-core -e apps/tesm-license
|
||||
pip install pytest
|
||||
pytest tests -q
|
||||
```
|
||||
|
||||
Ohne gesetzte Umgebungsvariablen legt die Anwendung ihre Daten unter
|
||||
`instance/tesm-license/` im Arbeitsverzeichnis an -- kein Zugriff auf `/srv`
|
||||
oder `/var/log` noetig.
|
||||
|
||||
```bash
|
||||
TESM_LICENSE_DEBUG=1 flask --app tesm_license run
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Verwaltung von der Kommandozeile
|
||||
|
||||
```bash
|
||||
sudo -u tesm-license tesm-license-admin status
|
||||
sudo -u tesm-license tesm-license-admin init-key # Signaturschluessel
|
||||
sudo -u tesm-license tesm-license-admin bootstrap # Grunddaten
|
||||
sudo -u tesm-license tesm-license-admin create-admin
|
||||
sudo -u tesm-license tesm-license-admin migrate-legacy # Altbestand uebernehmen
|
||||
```
|
||||
|
||||
`migrate-legacy` liest die SQLite-Datei eines alten Lizenzservers **nur lesend**,
|
||||
uebernimmt dessen Signaturschluessel und stellt die Lizenzen mit ihrer
|
||||
restlichen Laufzeit neu aus. Wird der Schluessel nicht uebernommen, muessen
|
||||
Kunden den Ausstellerwechsel einmal bestaetigen.
|
||||
|
||||
---
|
||||
|
||||
## Lizenzprotokoll in Kurzform
|
||||
|
||||
* Ed25519, getrennte Signaturkontexte je Nachrichtenart
|
||||
@@ -115,6 +109,8 @@ Kunden den Ausstellerwechsel einmal bestaetigen.
|
||||
brach im Vorgaenger die Bindung.
|
||||
* Offline-Aktivierung ueber einen kurzen Code in beide Richtungen; die Lizenz
|
||||
bleibt auf dem Server als "Aktivierung offen" markiert, bis sie zurueckkommt.
|
||||
* Keine Lizenz ohne `master_endpoint`: eine Ausstellung ohne Endpunkt wird
|
||||
abgelehnt statt eine Lizenz zu erzeugen, die sich nie aktivieren kann.
|
||||
|
||||
---
|
||||
|
||||
@@ -122,31 +118,11 @@ Kunden den Ausstellerwechsel einmal bestaetigen.
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
| [docs/ARCHITEKTUR.md](docs/ARCHITEKTUR.md) | Aufbau, Schnitte und die Gruende dafuer |
|
||||
| [docs/SICHERHEIT.md](docs/SICHERHEIT.md) | Anmeldung, Sitzungen, CSRF, Geheimnisse, Rechtetrennung |
|
||||
| [docs/BETRIEB.md](docs/BETRIEB.md) | Installation, Update, HTTPS, Sicherung, Fehlersuche |
|
||||
| [docs/SICHERHEIT.md](docs/SICHERHEIT.md) | Anmeldung, Sitzungen, CSRF, Geheimnisse, Rechtetrennung |
|
||||
|
||||
---
|
||||
|
||||
## Tests
|
||||
|
||||
```bash
|
||||
pytest tests -q
|
||||
```
|
||||
|
||||
Dazu zwei Skripte, die **auf dem Zielhost gegen laufende Installationen**
|
||||
sprechen -- ueber nginx, gunicorn und echtes TLS. Sie werden nicht
|
||||
mitinstalliert (`install.sh` laesst `tests/` aus); bei Bedarf dorthin kopieren:
|
||||
|
||||
```bash
|
||||
python3 tests/e2e_license_server.py https://lizenz.host admin 'Passwort'
|
||||
python3 tests/e2e_license.py https://lizenz.host https://host admin 'Passwort' http://127.0.0.1:5001
|
||||
```
|
||||
|
||||
Das zweite spielt den vollstaendigen Lizenz-Lebenszyklus ueber **beide**
|
||||
Anwendungen durch: ausstellen, herunterladen, einspielen, online aktivieren,
|
||||
Module pruefen, Heartbeat, neue Revision, Widerruf. Es braucht deshalb auch eine
|
||||
laufende TESM-Installation.
|
||||
Aufbau und Entwurfsentscheidungen stehen in `docs/ARCHITEKTUR.md` im
|
||||
Entwicklungsrepository, ebenso die Tests.
|
||||
|
||||
---
|
||||
|
||||
@@ -158,6 +134,4 @@ laufende TESM-Installation.
|
||||
Argumentpruefung.
|
||||
* **CSRF-Schutz ueberhaupt.** Der Vorgaenger hatte keinen.
|
||||
* **Rechte werden serverseitig geprueft**, nicht nur im Template ausgeblendet.
|
||||
* **Keine Lizenz ohne Endpunkt.** Eine Ausstellung ohne `master_endpoint` wird
|
||||
abgelehnt statt eine Lizenz zu erzeugen, die sich nie aktivieren kann.
|
||||
* **Verschachtelte Datenbankverbindungen sind ein Fehler**, kein Deadlock.
|
||||
|
||||
Reference in New Issue
Block a user