Schutz gegen kursierende Partner-Codes (Rene: 'Bonus-Codes kursieren gerne das Internet')
1. QR-URL verrät den Code nicht mehr: /q/{token} → /?qr=TOKEN (vorher stand
der tippbare Code in der Adresszeile jedes Scanners). Registrierung löst
den Code server-seitig aus dem Token auf (auch ohne ref_code).
2. Notbremse: partner_codes.active — Admin kann Codes pausieren (Einlösung
gesperrt, Info-Endpoint 404, Historie/QR-Kontingente bleiben) und
reaktivieren. UI: ⏸/▶-Toggle + pausiert-Badge in der Codes-Tabelle.
3. max_uses im Anlege-Formular standardmäßig 50 statt unbegrenzt.
Tests: QR-only-Registrierung, Pause→keine Einlösung→Reaktivierung,
Redirect ohne Klartext-Code. Suite: 54 passed.
This commit is contained in:
parent
21bcc6b962
commit
2927ae2672
11 changed files with 136 additions and 39 deletions
|
|
@ -86,14 +86,14 @@
|
|||
<title>Ban Yaro</title>
|
||||
|
||||
<!-- Theme + theme-color Statusleiste vor CSS setzen -->
|
||||
<script src="/js/boot-early.js?v=1264"></script>
|
||||
<script src="/js/boot-early.js?v=1265"></script>
|
||||
|
||||
<!-- CSS: Reihenfolge ist wichtig — ?v= zwingt Browser zur Neuladung -->
|
||||
<link rel="stylesheet" href="/css/design-system.css?v=1264">
|
||||
<link rel="stylesheet" href="/css/layout.css?v=1264">
|
||||
<link rel="stylesheet" href="/css/components.css?v=1264">
|
||||
<link rel="stylesheet" href="/css/utilities.css?v=1264">
|
||||
<link rel="stylesheet" href="/css/lists.css?v=1264">
|
||||
<link rel="stylesheet" href="/css/design-system.css?v=1265">
|
||||
<link rel="stylesheet" href="/css/layout.css?v=1265">
|
||||
<link rel="stylesheet" href="/css/components.css?v=1265">
|
||||
<link rel="stylesheet" href="/css/utilities.css?v=1265">
|
||||
<link rel="stylesheet" href="/css/lists.css?v=1265">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
|
|
@ -616,11 +616,11 @@
|
|||
<div id="modal-container"></div>
|
||||
|
||||
<!-- JS: Reihenfolge ist wichtig — erst Basis, dann Features -->
|
||||
<script src="/js/api.js?v=1264"></script>
|
||||
<script src="/js/ui.js?v=1264"></script>
|
||||
<script src="/js/app.js?v=1264"></script>
|
||||
<script src="/js/worlds.js?v=1264"></script>
|
||||
<script src="/js/offline-indicator.js?v=1264"></script>
|
||||
<script src="/js/api.js?v=1265"></script>
|
||||
<script src="/js/ui.js?v=1265"></script>
|
||||
<script src="/js/app.js?v=1265"></script>
|
||||
<script src="/js/worlds.js?v=1265"></script>
|
||||
<script src="/js/offline-indicator.js?v=1265"></script>
|
||||
|
||||
<!-- Feature-Seiten werden lazy geladen -->
|
||||
|
||||
|
|
@ -630,7 +630,7 @@
|
|||
|
||||
|
||||
<!-- Boot: Offline-Banner + SW-Registration (extrahiert für CSP) -->
|
||||
<script src="/js/boot.js?v=1264"></script>
|
||||
<script src="/js/boot.js?v=1265"></script>
|
||||
|
||||
|
||||
</body>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue