fix(server): normalize encoded directory headers

This commit is contained in:
Bohdan Triapitsyn
2026-06-24 00:43:11 +03:00
parent c3cf914fda
commit 08b866136e
4 changed files with 101 additions and 16 deletions
@@ -64,14 +64,18 @@ export const createProjectDirectoryRuntime = (dependencies) => {
const queryDirectory = Array.isArray(req.query?.directory)
? req.query.directory[0]
: req.query?.directory;
const requested = headerDirectory || queryDirectory || null;
const requested = [headerDirectory, queryDirectory].filter(Boolean);
if (requested) {
const validated = await validateDirectoryPath(requested);
if (!validated.ok) {
return { directory: null, error: validated.error };
if (requested.length > 0) {
let lastError = null;
for (const candidate of requested) {
const validated = await validateDirectoryPath(candidate);
if (validated.ok) {
return { directory: validated.directory, error: null };
}
lastError = validated.error;
}
return { directory: validated.directory, error: null };
return { directory: null, error: lastError };
}
const readSettings = typeof getReadSettingsFromDiskMigrated === 'function'
@@ -119,18 +123,21 @@ export const createProjectDirectoryRuntime = (dependencies) => {
const queryDirectory = Array.isArray(req.query?.directory)
? req.query.directory[0]
: req.query?.directory;
const requested = headerDirectory || queryDirectory || null;
const requested = [headerDirectory, queryDirectory].filter(Boolean);
if (!requested) {
if (requested.length === 0) {
return { directory: null, error: null };
}
const validated = await validateDirectoryPath(requested);
if (!validated.ok) {
return { directory: null, error: validated.error };
let lastError = null;
for (const candidate of requested) {
const validated = await validateDirectoryPath(candidate);
if (validated.ok) {
return { directory: validated.directory, error: null };
}
lastError = validated.error;
}
return { directory: validated.directory, error: null };
return { directory: null, error: lastError };
};
return {