peter
b2d34e6e6c
feat(files): API tokens — a machine reaches the library folder by folder
...
A user can make a token for a machine of theirs (`/api/tokens`, signed-in only): `sfl_` + 32
random bytes + a checksum, only its SHA-256 kept, shown once. Sent as a Bearer header it is
honoured on six `/api/files` routes only — folders, list, file, hash, upload, delete — and there
only in the folders its grants name, with the rights they give (list / read / write / delete).
One check, `FilesCaller.may`, in every route; a folder or file out of reach answers like a
missing one; the files shared with the user are never in reach. A token beats a cookie on the
same request.
The Hub preset makes the user's one Hub folder (a new folder kind) and grants it every right.
Refused tokens are slowed down per client, a runaway machine per token; last use is stamped at
most once a minute; making and revoking a token is audited, and a token's uploads and deletes
name it in their audit rows.
2026-10-14 18:40:23 +02:00
..
2026-10-05 00:19:38 +02:00
2026-10-14 18:40:23 +02:00
2026-10-05 00:19:39 +02:00
2026-10-10 15:35:12 +02:00
2026-09-19 19:19:29 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-14 18:40:23 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:50 +02:00
2026-10-05 00:19:39 +02:00
2026-09-29 21:21:19 +02:00
2026-10-11 05:34:25 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-09-27 13:58:23 +02:00
2026-10-05 00:19:39 +02:00
2026-09-18 03:16:15 +02:00
2026-10-05 00:19:39 +02:00
2026-10-12 22:19:37 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 03:16:27 +02:00
2026-10-12 20:54:47 +02:00
2026-10-11 03:30:34 +02:00
2026-10-14 18:40:23 +02:00
2026-10-11 04:42:55 +02:00
2026-10-05 03:16:27 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-11 05:34:25 +02:00
2026-08-23 07:43:06 +02:00
2026-10-11 03:30:34 +02:00
2026-09-04 20:29:33 +02:00
2026-10-05 00:19:39 +02:00
2026-09-04 20:29:33 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-11 03:30:34 +02:00
2026-09-19 19:19:30 +02:00
2026-09-19 05:54:19 +02:00
2026-08-23 07:43:06 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-08-23 07:43:06 +02:00
2026-10-06 21:02:07 +02:00
2026-10-13 03:15:59 +02:00
2026-10-13 02:32:49 +02:00
2026-10-12 15:28:31 +02:00
2026-09-19 04:51:31 +02:00
2026-10-10 21:56:47 +02:00
2026-08-28 02:37:56 +02:00
2026-10-05 01:13:06 +02:00
2026-10-05 00:19:39 +02:00
2026-09-19 07:34:17 +02:00
2026-10-05 00:19:39 +02:00
2026-10-11 05:34:25 +02:00
2026-09-19 01:33:32 +02:00
2026-10-05 03:16:13 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-09-01 23:31:49 +02:00
2026-10-04 17:53:19 +02:00
2026-10-05 00:19:50 +02:00
2026-10-13 00:14:09 +02:00
2026-10-11 04:42:55 +02:00
2026-10-13 00:14:09 +02:00
2026-10-13 00:14:09 +02:00
2026-10-05 00:19:39 +02:00
2026-08-23 07:43:06 +02:00
2026-09-29 22:46:04 +02:00
2026-08-23 07:43:06 +02:00
2026-10-05 00:19:39 +02:00
2026-08-23 07:43:06 +02:00
2026-08-23 07:43:06 +02:00
2026-10-11 03:30:34 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-11 05:34:25 +02:00
2026-10-05 03:16:27 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-09-19 19:19:30 +02:00
2026-10-08 21:18:48 +02:00
2026-09-19 19:19:30 +02:00
2026-10-08 22:12:43 +02:00
2026-10-08 21:18:48 +02:00
2026-10-09 01:22:00 +02:00
2026-10-10 00:03:08 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-09-19 18:21:06 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-10 00:03:08 +02:00
2026-10-05 00:19:39 +02:00
2026-10-06 22:31:48 +02:00
2026-10-05 00:19:39 +02:00
2026-10-09 23:46:39 +02:00
2026-10-06 22:31:48 +02:00
2026-10-07 23:16:25 +02:00
2026-10-05 00:19:39 +02:00
2026-09-27 13:58:23 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-06 23:55:41 +02:00
2026-10-11 05:34:25 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-04 17:53:19 +02:00
2026-10-05 00:19:38 +02:00
2026-10-06 23:55:41 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:50 +02:00
2026-10-11 04:42:55 +02:00
2026-08-23 07:43:06 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:38 +02:00
2026-10-05 00:19:39 +02:00
2026-08-23 07:43:06 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-11 05:34:25 +02:00
2026-10-13 02:32:49 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-08-23 07:43:06 +02:00
2026-08-23 07:43:06 +02:00
2026-10-12 22:19:37 +02:00
2026-10-12 22:19:37 +02:00
2026-09-05 04:02:57 +02:00
2026-10-05 00:19:38 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00
2026-10-11 03:30:34 +02:00
2026-10-13 00:14:09 +02:00
2026-09-18 22:50:37 +02:00
2026-09-19 04:51:31 +02:00
2026-10-05 00:19:39 +02:00
2026-10-05 00:19:39 +02:00