From 9758fe75f940fa527233e00fcc094dad5b1a460a Mon Sep 17 00:00:00 2001 From: Nicolas Date: Sat, 19 Sep 2026 14:49:47 +0200 Subject: [PATCH] update config --- config.example.json | 3 ++- config.schema.json | 5 +++++ src/config.ts | 13 ++++++++++--- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/config.example.json b/config.example.json index b7ceeea..0eb9469 100644 --- a/config.example.json +++ b/config.example.json @@ -15,7 +15,8 @@ "label": "Vidéos", "dir": "./uploads/videos", "allowDirectories": true, - "allowedMimeTypes": ["video/*"] + "allowedMimeTypes": ["video/*"], + "permissions": "0o666" }, { "name": "divers", "label": "Divers", "dir": "./uploads/divers" } ], diff --git a/config.schema.json b/config.schema.json index d810a73..c6d12d0 100644 --- a/config.schema.json +++ b/config.schema.json @@ -48,6 +48,11 @@ } } ] + }, + "permissions":{ + "type":"string", + "default":"0o666", + "description": "Mode d'écriture sur le disque" } } } diff --git a/src/config.ts b/src/config.ts index f2b6eff..c7f5235 100644 --- a/src/config.ts +++ b/src/config.ts @@ -60,6 +60,12 @@ export interface DropTarget { * valeur globale `allowedMimeTypes`. Toujours résolu après parsing. */ allowedMimeTypes: MimePolicy; + + /** + * Mode de permission d'écriture + * Par défaut 0o666 + */ + permission: string; } /** Liste non vide de cibles de dépôt ; la première est la cible par défaut. */ @@ -204,7 +210,7 @@ function parseMimePolicy(value: unknown, label = 'allowedMimeTypes'): MimePolicy if (!valid) { throw new ConfigError( `${label} : entrée invalide « ${entry} » ` + - '(formes acceptées : "type/sous-type", "type/*", "*/*", "*")', + '(formes acceptées : "type/sous-type", "type/*", "*/*", "*")', ); } } @@ -231,7 +237,7 @@ function parseSessionKey(value: unknown): Buffer { if (key.length !== SESSION_KEY_BYTES) { throw new ConfigError( `session.key doit être ${String(SESSION_KEY_BYTES)} octets encodés en base64 ` + - `(décodé : ${String(key.length)} octets). Générer avec : openssl rand -base64 32`, + `(décodé : ${String(key.length)} octets). Générer avec : openssl rand -base64 32`, ); } return key; @@ -257,7 +263,7 @@ function parseSession(value: unknown): SessionConfig { key: parseSessionKey(raw.key), maxAgeSeconds: Math.round( optionalPositiveNumber(raw.maxAgeHours, DEFAULTS.sessionMaxAgeHours, 'session.maxAgeHours') * - 3600, + 3600, ), }; } @@ -386,6 +392,7 @@ function parseTargets(value: unknown, defaultMimePolicy: MimePolicy): DropTarget raw.allowedMimeTypes === undefined || raw.allowedMimeTypes === null ? defaultMimePolicy : parseMimePolicy(raw.allowedMimeTypes, `targets[${String(index)}].allowedMimeTypes`), + permission: optionalString(raw.label, `targets[${String(index)}].permission`) ?? "0o666" }; };