Fehlende mit Token, und die Rechnung vergleicht die Schreibweise genau
POST /api/fehlende stellt dieselbe Frage wie das Dashboard (welche Namen
haben kein Bild?), mit Token statt Sitzung. Das Fotostudio soll "fehlt" so
beantworten, wie der Laden es sieht -- fuer die Kleidung sind das rund 8.000
Namen, mit /exists ebenso viele Anfragen, hier zwei.
Die Rechnung steht jetzt EINMAL in server/src/fehlende.ts; die Dashboard-Route
ruft sie auf. Die Antwortform bleibt (da als Zahl), dazu kommt `schreibweise`.
DABEI GEFUNDEN: die alte Rechnung schrieb jeden Namen klein, "weil so
abgelegt wird". Seit a373b96 (22.08.) stimmt das nicht mehr. Gemessen am
03.10. ueber /f/: items/WEAPON_PISTOL.png 200, items/weapon_pistol.png 404 --
die Abfrage meldete also jede Waffe als fehlend, die da lag. Jetzt wird genau
verglichen; liegt etwas nur unter anderer Schreibweise, steht es zusaetzlich
in `schreibweise` (umbenennen statt neu aufnehmen). docs/API.md sagte
dasselbe Falsche und riet zu item:lower() -- berichtigt.
Geprueft in einem eigenen Container gegen eine Kopie der Datenbank (per
SQLite-Sicherung gezogen, danach geloescht), mit Wegwerf-Token: 13/13 --
401 ohne Token, 400 mit Text bei kaputtem JSON, fehlendem Platzhalter, ohne
Namen und bei 5001 Namen; WEAPON_PISTOL da, weapon_pistol fehlt und steht in
schreibweise, ein erfundener Name fehlt ohne schreibweise. Ernstfall: 7.928
lokale Kleidungsbilder des Fotostudios, 2.591 davon liegen im Dienst (33 %,
eine Stichprobe ueber /f/ hatte 11 von 40 ergeben).
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
73c9f310c0
commit
6677b559f2
4 files changed
+236
-91
No files matched your search
@@ -22,6 +22,7 @@
|
||||
import { Hono } from 'hono'
|
||||
import type { Context, Next } from 'hono'
|
||||
import { config } from '../config.js'
|
||||
import { FehlendeFehler, fehlendeRechnen } from '../fehlende.js'
|
||||
import { meldeUpload } from '../meldung.js'
|
||||
import { db, logEvent, now, type Media, type Token } from '../db.js'
|
||||
import { fesselText, tokenAllows, tokenFromHeader, tokenPrefixes } from '../auth.js'
|
||||
@@ -142,6 +143,7 @@ uploadRoutes.use('/media/*', requireToken)
|
||||
// eine Auskunft ohne Token waere genau das Loch, das die Abfrageform schliessen
|
||||
// soll.
|
||||
uploadRoutes.use('/zugang', requireToken)
|
||||
uploadRoutes.use('/fehlende', requireToken)
|
||||
uploadRoutes.use('/exists', requireToken)
|
||||
uploadRoutes.use('/exists/*', requireToken)
|
||||
|
||||
@@ -473,6 +475,35 @@ uploadRoutes.get('/zugang', (c) => {
|
||||
})
|
||||
})
|
||||
|
||||
/** Wozu fehlt ein Bild -- dieselbe Frage wie im Dashboard, mit Token.
|
||||
*
|
||||
* WOZU, ergaenzt am 03.10.2026. Das Fotostudio soll "fehlt" so beantworten,
|
||||
* wie der Laden es sieht: liegt es HIER oder nicht. Mit /exists waeren das
|
||||
* fuer die Kleidung rund 8.000 Anfragen; hier sind es zwei (hoechstens
|
||||
* FEHLENDE_HOECHSTENS Namen je Anfrage).
|
||||
*
|
||||
* KEINE ORDNERFESSEL, genau wie bei /exists: was hier beantwortet wird, ist
|
||||
* ueber /f/ ohnehin oeffentlich abrufbar. Der Token haelt nur Fremde davon ab,
|
||||
* den Dienst mit Sammelabfragen zu beschaeftigen.
|
||||
*
|
||||
* Kein .webp/.png am Ende der Adresse -- die Proxy-Falle von /exists/<pfad>
|
||||
* (siehe unten) kann hier nicht zuschnappen.
|
||||
*/
|
||||
uploadRoutes.post('/fehlende', async (c) => {
|
||||
let body: { muster?: unknown; namen?: unknown } | null = null
|
||||
try {
|
||||
body = await c.req.json()
|
||||
} catch {
|
||||
return c.json({ error: 'Kein gueltiges JSON' }, 400)
|
||||
}
|
||||
try {
|
||||
return c.json(fehlendeRechnen(body?.muster, body?.namen))
|
||||
} catch (err) {
|
||||
if (err instanceof FehlendeFehler) return c.json({ error: err.message }, 400)
|
||||
throw err
|
||||
}
|
||||
})
|
||||
|
||||
uploadRoutes.get('/exists', (c) => {
|
||||
const roh = c.req.query('pfad') ?? c.req.query('path') ?? ''
|
||||
if (!roh) return c.json({ error: 'Abfrage "pfad" fehlt' }, 400)
|
||||
|
||||
Reference in new issue
Block a user