SurfSense/backend/server/tests
DESKTOP-RTLN3BA\$punk 80dd0d0b5f feat(license): serve signed job packs to Business licenses
POST /api/v1/license/job-pack checks the key with Keygen and the job
against the license's metadata.jobs, then serves the newest pack the
license and the app may get, from a private repository's releases or
JOB_PACKS_DIR, or 204 when the app already has it.

Each release is checked against contract 6 before it is served, and a
release that fails, or takes over 10 seconds to check, is refused and
remembered: the zip and name rules, the manifest, every signature line and
every listed file. The last good packs keep serving while the store fails.

Every license route now rate-limits by the client address from X-Real-Ip,
and the job pack route also by the key's hash; idle buckets go an hour
after their last use. scripts/list_job_packs.py shows what the store holds
and why a release is refused. cryptography becomes a direct dependency.
2026-11-04 12:47:29 -08:00
..
__init__.py refactor(backend): move plugins/ into backend/, run by server/ 2026-10-23 17:49:08 +02:00
test_backend_app.py feat(license): serve signed job packs to Business licenses 2026-11-04 12:47:29 -08:00