nobswebdev
adb1d7bca9
Fix Onion-Location on SPA responses behind nginx add_header.
...
Render the header inside location / so it is not dropped by other location headers; remove the ineffective server-level directive.
2026-10-28 23:12:08 +01:00
nobswebdev
b97fcc2b20
Add CSP sandbox on nginx hotlink image responses.
...
Block script in user content when /i/ is opened as a document, e.g. SVG opened in a tab.
2026-10-28 22:38:28 +01:00
nobswebdev
4a534a8007
Add production deployment guide and restrict CORS to development.
...
Document clearnet, TLS, and Tor setup; enable Nest CORS only in development and skip CORS_ORIGINS validation in production.
2026-10-28 22:07:32 +01:00
nobswebdev
915d62f09a
Trust nginx proxy and drop hotlink response headers from Nest.
...
Rate limits use X-Forwarded-For behind prod nginx; hotlink security headers are set on /i/ in nginx only.
2026-10-28 20:56:21 +01:00
nobswebdev
cb37a1e23c
Add prod nginx image with clearnet, onion, and SPA build.
...
Multi-stage frontend embed, envsubst entrypoint for TLS vhosts and upload body limits, shared locations with minimal response headers and zero access logs.
2026-10-28 20:56:21 +01:00
nobswebdev
4385a024a8
Add prod compose and backend production image.
...
Wire postgres, pgadmin, backend, nginx, and tor with nullcart-style layout; document clearnet and onion hostname env vars for deploy.
2026-10-28 20:56:05 +01:00
nobswebdev
f5024b84d8
Merge pull request 'Slave/lifecycle' ( #11 ) from slave/lifecycle into master
...
Reviewed-on: #11
2026-10-27 21:12:03 +00:00
nobswebdev
214fa0f875
Enforce maxViews atomically when reserving a view slot.
...
Use a conditional UPDATE with parenthesized OR so increment only applies to the target row and fails when the view cap is reached.
2026-10-27 22:09:48 +01:00
nobswebdev
3cf1d5e8aa
Fix drop lastViewedAt migration order for fresh databases.
...
Run the column drop after AddUploadTable so TypeORM does not execute ALTER before uploads exists.
2026-10-27 22:09:45 +01:00
nobswebdev
29407814cc
Add UploadCleanupService for cron purge and delete uploads.
...
Move token delete and storage purge off UploadService; enforce expiry and max views on GET without purging until the scheduled cleanup job runs.
2026-10-27 21:07:01 +01:00
nobswebdev
00ef845277
Add DeleteView one-click delete page at /d/:id?token=...
2026-10-27 19:13:40 +01:00
nobswebdev
c147a010b5
Enforce max views on access and purge after the last allowed view.
2026-10-27 18:30:35 +01:00
nobswebdev
9a2bc67b1d
Reject expired uploads on ZK and hotlink GET with 404.
...
Use dayjs to compare expiresAt before reading storage or incrementing view_count.
2026-10-27 15:30:03 +01:00
nobswebdev
481eb0bcd6
Add DELETE /api/uploads/:id with delete_token and unlink ciphertext.
...
Return 204 when the token hash matches; ignore missing files on unlink so the row is still removed.
2026-10-27 15:19:25 +01:00
nobswebdev
073e6ac1f2
Increment view_count after successful ZK and hotlink GETs.
...
Bump count only when ciphertext or decrypted image is ready; 404 paths do not increment. Cover both flows in UploadService tests.
2026-10-27 15:06:26 +01:00
nobswebdev
cb8a6a800d
Drop lastViewedAt from uploads because inactivity cleanup is out of scope.
...
Add a migration and remove the column from the Upload entity.
2026-10-27 14:55:27 +01:00
nobswebdev
eda4b8af6e
Merge pull request 'Slave/hotlink serve' ( #10 ) from slave/hotlink-serve into master
...
Reviewed-on: #10
2026-10-27 13:25:53 +00:00
nobswebdev
6407b64f26
Derive API origin from VITE_API_BASE_URL for hotlink image src.
...
Nest api config (baseUrl + baseUrlRoot) so dev cross-origin /i requests work without a separate app-env flag.
2026-10-27 14:03:30 +01:00
nobswebdev
dfc52749b2
Add hotlink viewer page at /h/:id/:secret.
2026-10-26 23:06:28 +01:00
nobswebdev
bf36b1d2aa
Restrict hotlink mimeType to image/* and harden image responses.
2026-10-26 23:06:23 +01:00
nobswebdev
5db90f02c5
Add GET /i/:id/:secret hotlink image decrypt stream.
2026-10-26 21:47:30 +01:00
nobswebdev
4517fe906a
Merge pull request 'Slave/zk viewer' ( #9 ) from slave/zk-viewer into master
...
Reviewed-on: #9
2026-10-26 19:24:05 +00:00
nobswebdev
82cdb6ffa3
Clear ZK viewer secrets and image blob when leaving the page.
2026-10-26 20:22:47 +01:00
nobswebdev
dc8e576679
add password prompt to ZK viewer for wrapped uploads
2026-10-26 20:06:54 +01:00
nobswebdev
112aa99f1e
add ViewerView decrypt from URL fragment via view store
2026-10-26 19:13:15 +01:00
nobswebdev
65bbc4537b
add GET /api/uploads/:id for zk ciphertext JSON
...
Expose ZK ciphertext and wrap fields for the viewer; return 404 for
missing, non-zk, or absent storage. Use injected upload repository and
shared isErrorEnoent for missing files.
2026-10-26 02:11:57 +01:00
nobswebdev
6aa9c7cd61
Merge pull request 'Slave/upload ui' ( #8 ) from slave/upload-ui into master
...
Reviewed-on: #8
2026-10-25 22:43:56 +00:00
nobswebdev
7b70788dcf
Point hotlink viewer links at the viewer page path.
...
Hotlink share links were using the zero-knowledge viewer URL. The direct image URL stays separate for embeds.
2026-10-25 23:39:33 +01:00
nobswebdev
ee9f80da5f
Remove unused resolveAxiosErrorMessage helper.
...
Upload UI uses predefined queue messages only; surfacing API response text is out of scope for this PR.
2026-10-25 22:23:01 +01:00
nobswebdev
42fe209164
Simplify upload modal, dropzone, and settings markup.
...
Remove redundant dialog ARIA wiring, hide the file input with hidden instead of sr-only, and trim footnote accessibility attributes that duplicated visible text.
2026-10-25 22:00:16 +01:00
nobswebdev
f5be0a0de3
Show copyable share links after batch upload completes.
...
Add share results panel gated by showShareLinks, build URLs from queue entry secrets, and align file name handling with the metadata inspector.
2026-10-25 22:00:16 +01:00
nobswebdev
f305ce7a39
Refactor metadata inspector with shared tab list and output panel.
...
Reuse InlineTabList for original/stripped tabs and a single pre block component to match patterns used elsewhere on the upload page.
2026-10-25 22:00:15 +01:00
nobswebdev
4e9a3368a6
Persist upload IDs and URL secrets on successful queue entries.
...
Store server response fields and mode-specific secrets so share links can be built client-side after upload without precomputed paths.
2026-10-25 22:00:05 +01:00
nobswebdev
5f6ee193e7
Configure share link origins from clearnet scheme and onion hostname.
...
Lets the frontend build full viewer and delete URLs for both networks without hardcoding host shape in components.
2026-10-25 22:00:05 +01:00
nobswebdev
95ed6e5f58
Add share URL builders and embed format helpers for uploaded images.
...
Centralize clearnet/onion paths, delete links, and BBCode/Markdown/HTML output with unit tests and escape-html for safe HTML snippets.
2026-10-25 22:00:01 +01:00
nobswebdev
b4cc26a632
Polish upload UI for dual queue status and batch confirm flow.
...
Metadata error confirm, success styling, upload-confirmed hiding of configure, and remove stale PR plan doc.
2026-10-23 18:34:17 +02:00
nobswebdev
271c2b7b2d
Execute batch uploads with metadata gates, encryption, and queue state.
...
Separate upload entries per file, ALTCHA on POST, and stripped-or-original fallback on metadata errors.
2026-10-23 18:34:13 +02:00
nobswebdev
fe643d9831
Add client ALTCHA proof-of-work and Vite env flags for uploads.
...
Expose enabled/max-number settings and wire altcha-lib for per-upload challenges.
2026-10-23 18:34:09 +02:00
nobswebdev
805665745b
Add batch upload configure modal and settings mapping utilities.
...
Users configure share mode, expiry, and max views before upload; batch summary confirms choices above the queue.
2026-10-22 03:14:02 +02:00
nobswebdev
3bb3258686
Pin dev Docker images to Node 22.23.4 for October 2026 security fixes.
2026-10-21 17:46:33 +02:00
nobswebdev
bd456451a4
Remove NEVER_MODE_INACTIVITY_DAYS env variable as idea of cleanup of inactive images changed
2026-10-21 15:03:53 +02:00
nobswebdev
d82d451448
Extract upload dropzone and queue UI with shared pick validation utils.
2026-10-20 22:20:16 +02:00
nobswebdev
3ab66c250c
Merge pull request 'Slave/client crypto' ( #7 ) from slave/client-crypto into master
...
Reviewed-on: #7
2026-10-20 17:30:03 +00:00
nobswebdev
47361a83b9
add optional Argon2id password wrap for zk uploads.
...
Wrap the image DEK for password-protected batches, keep the URL fragment as a separate secret, and extend prepare/decrypt helpers with tests.
2026-10-20 18:31:33 +02:00
nobswebdev
4376ed7ff1
Expand Vitest coverage for shared frontend utils.
...
Cover Axios error message extraction, generic error fallbacks, ArrayBuffer views used by Web Crypto, and share URL builders.
2026-10-19 23:05:46 +02:00
nobswebdev
afbd5e204c
Add client-side ZK and hotlink upload crypto with Pinia store.
...
Encrypt image bytes in the browser, keep keys out of POST bodies (URL fragment or path secret), and POST ciphertext via typed upload API helpers.
2026-10-19 23:05:33 +02:00
nobswebdev
0238858c8b
add frontend AES-GCM and base64 helpers with Vitest coverage.
2026-10-19 03:00:03 +02:00
nobswebdev
f2987da2fe
update upload validation to use shared AES-GCM size constants on the backend.
2026-10-19 02:59:52 +02:00
nobswebdev
7b9b8ec107
Merge pull request 'Slave/metadata pipeline' ( #6 ) from slave/metadata-pipeline into master
...
Reviewed-on: #6
2026-10-18 16:57:38 +00:00
nobswebdev
e1f0d01467
Restore Axios error.message when response body has no API message.
2026-10-18 18:22:15 +02:00