- Python 100%
Review vom 10.10.2026: Die Probe deckte /api/resource, /api/v2/document, get_list, reportview und search_link nicht ab und bewies für Zertifikatsliste und Diskussionen nichts (keine Daten). Erweitert; dabei gefunden: veröffentlichte LMS Certificates sind für alle Lernenden lesbar (LMS-Regel). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CGdaffoUgL47hV3w9hGx2T |
||
|---|---|---|
| goeger_lms | ||
| tests | ||
| tools | ||
| .gitignore | ||
| LICENSE | ||
| pyproject.toml | ||
| README.md | ||
goeger_lms
Kleine Frappe-App für das LMS von Göger-IT (schulung.goeger-it.de). Sie trennt Teilnehmer verschiedener Kundenfirmen, die sich eine LMS-Site teilen: Kein Lernender und kein Gast erfährt Namen, E-Mail-Adressen, Abzeichen oder Bewertungen von Teilnehmern anderer Firmen.
Der LMS-Code selbst bleibt unverändert. Die App leitet undichte LMS-Methoden per
override_whitelisted_methods auf eigene Fassungen um (goeger_lms/guard.py) und beantwortet
Profilseiten für Nicht-Staff mit 404 (goeger_lms/renderers.py). Staff (System Manager,
Moderator, Course Creator, Batch Evaluator) bekommt immer das Original.
| LMS-Methode | für Lernende und Gäste |
|---|---|
lms.lms.api.get_profile_details |
nur das eigene Profil |
lms.lms.api.get_certified_participants |
leere Liste |
lms.lms.api.get_badges |
nur eigene Abzeichen |
lms.lms.utils.get_reviews |
Bewertungen ohne Verfasser |
lms.lms.utils.get_discussion_topics / get_discussion_replies |
nur Beiträge von Staff |
Seiten /lms/user/…, /lms/certified-participants |
404 |
Warum nicht einfach im Reverse-Proxy sperren?
Frappe 16 bietet jede Methode unter /api/method, /api/v1/method und /api/v2/method an und
nimmt zusätzlich das alte Formularfeld cmd auf jedem Pfad an. Eine Pfadsperre lässt sich damit
umgehen; die Umleitung im Hook gilt dagegen auf jedem Weg.
Nach jedem LMS-Update
python3 -I tools/sichtbarkeit_probe.py # Exit 0 = dicht
Die Probe legt zwei Test-Lernende mit Daten an, fragt als der eine alles über den anderen ab
(alle Wege, auch als Gast) und räumt danach auf. Sie braucht einen API-Schlüssel mit
Systemverwalter-Rechten in ~/.config/goeger/secrets.env (FRAPPE_API_KEY, FRAPPE_API_SECRET).
Tests
python3 -m unittest discover -s tests -v
Die Unit-Tests laufen ohne Frappe gegen Schein-Module und prüfen die Entscheidungslogik. Ob Frappe die Umleitungen wirklich nutzt, zeigt nur die Live-Probe.
Lizenz
AGPL-3.0, wie Frappe LMS.