Commit Graph
31 Commits
Author SHA1 Message Date
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 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 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 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 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 f2987da2fe update upload validation to use shared AES-GCM size constants on the backend. 2026-10-19 02:59:52 +02:00
nobswebdev 8b42dbb962 Use Node 22 in dev Docker images for file-type v22. 2026-10-12 21:45:44 +02:00
nobswebdev d4529376c6 Add single-image zk and hotlink upload API with service tests.
Replace batch DTOs with per-mode endpoints, persist ciphertext with file-type
checks, and return a hashed delete token for future revocation.
2026-10-12 20:18:40 +02:00
nobswebdev 7f99256863 Verify ALTCHA before upload body parse with single-use replay store.
Run challenge TTL and replay tracking in middleware, remove the guard, and
wire ScheduleModule for pruning used solutions.
2026-10-12 20:18:36 +02:00
nobswebdev 96383a7426 Restructure upload validation env and colocate config types.
Move app config shapes under types/config, replace batch upload env vars with
per-image bytes and JSON body padding, and extend IsBase64 for decoded limits.
2026-10-12 20:18:22 +02:00
nobswebdev c762223200 Add zk and hotlink upload create DTOs with batch options.
Split item shapes, array caps from config, and password-protected zk item transform.
2026-10-07 00:36:16 +02:00
nobswebdev fa36b27d1b Add isBase64 and NullOr validators for upload DTOs.
Include toBase64 helper and focused specs for base64 and null-or field rules.
2026-10-07 00:36:13 +02:00
nobswebdev 493843cc42 Move upload caps into validation config env vars.
Replace MAX_IMAGES_PER_UPLOAD with VALIDATION_UPLOAD_* limits mirrored on the frontend VITE_* names.
2026-10-07 00:36:10 +02:00
nobswebdev 64180d21e7 validate env booleans as true/false strings only.
Avoid @IsBoolean with implicit conversion mismatching isEnabled(); add tests and shared BOOLEAN_STRING_VALUES.
2026-10-06 19:44:31 +02:00
nobswebdev b16678bf74 add dockerignore for backend and frontend dev images.
Prevent copying host node_modules, dist, and build artifacts into Docker build context.
2026-10-06 19:44:13 +02:00
nobswebdev 7e4a889b50 add upload rate limiter per IP to backend.
Nest throttler with nullcart-style default profile and upload override via throttleProfiles.
2026-10-06 18:59:44 +02:00
nobswebdev 84f8a85214 add ALTCHA verification guard for uploads.
Verify body.altcha when ALTCHA_ENABLED; export AltchaGuard only. Drop unused StorageModule export.
2026-10-06 15:04:31 +02:00
nobswebdev 87376ea37f add ALTCHA challenge endpoint and env config.
GET /api/altcha/challenge, nullcart-style env validation, and ALTCHA_ENABLED wiring.
2026-10-05 23:53:28 +02:00
nobswebdev a8070da39d add local ciphertext storage module to backend.
Bind-mount backend/uploads in dev; path helpers with traversal guards and Jest coverage for StorageService.
2026-10-05 23:01:31 +02:00
nobswebdev fb1cb1d6b0 add migration and entities for uploads upload_zk upload_hotlink. 2026-10-05 22:14:26 +02:00
nobswebdev 64041aa9a8 add TypeORM postgres config and migration runner. 2026-10-05 20:54:50 +02:00
nobswebdev 572844bc73 add backend Docker dev service with hot reload.
Wire Nest into dev compose with src bind mount and health-check probe.
2026-09-27 23:06:19 +02:00
nobswebdev a785ce775f add NestJS skeleton and GET /api/health-check.
Thin API bootstrap with config module and nullcart-style health route for Docker checks.
2026-09-27 23:05:28 +02:00
nobswebdev 90c2bbdbdd add monorepo layout and root README 2026-09-27 22:29:19 +02:00