Commit Graph

14 Commits

Author SHA1 Message Date
Antigravity b4706ae101 fix: enforce single-view on burn-after-read pastes server-side
Previously the burn was triggered client-side with a 1.5 s delay,
leaving a window where opening the paste in two tabs (or two quick
requests) would both successfully serve the content before either
burn request reached the server.

Fix: on GET /<paste_id> for a burn paste, the server now does an
atomic conditional UPDATE:

    UPDATE pastes SET burn_claimed=1, views=views+1
    WHERE id=? AND burn_claimed=0

SQLite serialises writes, so only one concurrent request can ever
see rowcount > 0. The first request claims the slot and gets the
page; every subsequent request immediately gets 410 Gone — the
encrypted blob is never served to them.

The client-side /api/burn call still fires after successful
decryption to physically delete the row, keeping the data lifetime
as short as possible.
2026-05-16 12:55:11 +01:00
Antigravity 3c15f1e2c7 feat: burn-after-read (self-destruct) paste option
- Add 🔥 Burn checkbox on the create page (next to Discuss)
- New DB columns: burn_after_read (INTEGER) and burn_token (TEXT) with
  automatic migration for existing databases
- POST /api/burn/<paste_id> endpoint: validates a one-time burn_token
  (constant-time comparison), deletes paste + comments atomically
- burn_token embedded as a JSON island in view.html so paste_view.js
  can read it without Jinja in external scripts
- After successful decryption, scheduleBurn() fires 1.5 s later so
  the user has time to read/copy before the paste is destroyed
- showBurnBanner() inserts a warm amber warning strip (slides in with
  animation) informing the viewer the paste will self-destruct
- Burn is intentionally NOT persisted to localStorage — it's a
  deliberate per-paste choice, not a sticky preference
- Server responds 200 even if paste is already gone (idempotent)
2026-05-16 12:31:47 +01:00
ComputerTech 89e194a435 feat: discussions (comments) on pastes with optional nickname and E2E encryption 2026-04-06 20:50:07 +01:00
ComputerTech be6b102d16 fix: self-heal rate_limits table if missing (pre-migration DBs) 2026-04-06 19:24:52 +01:00
ComputerTech cc9b184277 fix: call init_db() at module level so rate_limits table is created under gunicorn 2026-04-06 19:18:28 +01:00
ComputerTech 8365b38673 Implement user deletion tokens, admin panel, and security hardening 2026-03-31 12:05:06 +01:00
ComputerTech cdbd700c2e Allow configuring paste ID and encryption key lengths in config.json 2026-03-28 01:15:14 +00:00
ComputerTech a46cba7143 Remove 'Never' expiry (1-year max) and fix Raw blob URL issue 2026-03-28 01:00:52 +00:00
ComputerTech 53b908e651 Fix the clear button and improve rate limiting 2026-03-27 16:04:26 +00:00
ComputerTech 0bb85da6bb Comprehensive security & reliability audit: hardened CSP, fixed vulnerabilities, improved theme management, and added line numbers toggle. 2026-03-27 15:22:53 +00:00
ComputerTech 6d05b40021 Fix: UTC expiry, ID-collision retry, init_db leak, view_paste race, debug warning, Prism SRI hashes 2026-03-27 12:16:03 +00:00
ComputerTech 8339d0f2d9 Security: headers, input validation, db connection safety 2026-03-27 01:30:48 +00:00
ComputerTech 89a7c33adb Fix plaintext POST pastes rendering without encryption key 2026-03-26 21:27:52 +00:00
ComputerTech 14be14e437 Initial commit — Bastebin 2026-03-26 14:44:36 +00:00