diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/AfterWork.ra b/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/AfterWork.ra new file mode 100644 index 00000000..1f5a4dc3 Binary files /dev/null and b/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/AfterWork.ra differ diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/Daybreak.ra b/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/Daybreak.ra new file mode 100644 index 00000000..6f3ceb59 Binary files /dev/null and b/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/Daybreak.ra differ diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/DialingWebTV.ra b/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/DialingWebTV.ra new file mode 100644 index 00000000..87dac586 Binary files /dev/null and b/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/DialingWebTV.ra differ diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/Splash.ra b/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/Splash.ra new file mode 100644 index 00000000..f2b309db Binary files /dev/null and b/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/Splash.ra differ diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/WTVa.ra b/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/WTVa.ra new file mode 100644 index 00000000..fa299eca Binary files /dev/null and b/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/WTVa.ra differ diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/ghosttown.ra b/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/ghosttown.ra new file mode 100644 index 00000000..ef8c5065 Binary files /dev/null and b/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/ghosttown.ra differ diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/karTV.ra b/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/karTV.ra new file mode 100644 index 00000000..8dccf1d8 Binary files /dev/null and b/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/karTV.ra differ diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/majesty.ra b/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/majesty.ra new file mode 100644 index 00000000..dbcf06ef Binary files /dev/null and b/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/majesty.ra differ diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/mjstyWTV.ra b/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/mjstyWTV.ra new file mode 100644 index 00000000..a8795b6c Binary files /dev/null and b/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/mjstyWTV.ra differ diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/plingA.ra b/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/plingA.ra new file mode 100644 index 00000000..88d072c4 Binary files /dev/null and b/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/plingA.ra differ diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/plingB.ra b/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/plingB.ra new file mode 100644 index 00000000..340100a1 Binary files /dev/null and b/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/plingB.ra differ diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/seqJ.ra b/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/seqJ.ra new file mode 100644 index 00000000..c1cf32e8 Binary files /dev/null and b/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/seqJ.ra differ diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/snowy1.ra b/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/snowy1.ra new file mode 100644 index 00000000..6f38925a Binary files /dev/null and b/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/snowy1.ra differ diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/snowy2.ra b/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/snowy2.ra new file mode 100644 index 00000000..05c3f0d3 Binary files /dev/null and b/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/snowy2.ra differ diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/swelplng.ra b/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/swelplng.ra new file mode 100644 index 00000000..35f9742f Binary files /dev/null and b/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/swelplng.ra differ diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/tymplingA.ra b/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/tymplingA.ra new file mode 100644 index 00000000..aab8c77f Binary files /dev/null and b/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/tymplingA.ra differ diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/tymplingB.ra b/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/tymplingB.ra new file mode 100644 index 00000000..e3b88dd3 Binary files /dev/null and b/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/tymplingB.ra differ diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/world1.ra b/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/world1.ra new file mode 100644 index 00000000..d27468a6 Binary files /dev/null and b/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/world1.ra differ diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/world2.ra b/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/world2.ra new file mode 100644 index 00000000..57ee555e Binary files /dev/null and b/zefie_wtvp_minisrv/includes/ServiceVault/pnm/classicrom/world2.ra differ diff --git a/zefie_wtvp_minisrv/includes/ServiceVault/wtv-music/ragen/catchall.js b/zefie_wtvp_minisrv/includes/ServiceVault/wtv-music/ragen/catchall.js index be87d097..5be42660 100644 --- a/zefie_wtvp_minisrv/includes/ServiceVault/wtv-music/ragen/catchall.js +++ b/zefie_wtvp_minisrv/includes/ServiceVault/wtv-music/ragen/catchall.js @@ -16,13 +16,58 @@ if (minisrv_config.config.ServiceVaults) { throw ("ERROR: No Service Vaults defined!"); } +// Detect subdirectory structure of this catchall.js file and strip it from requests +// e.g., if at /ServiceVault/wtv-music/ragen/catchall.js, extract "ragen" +// if at /ServiceVault/wtv-music/ra/gen/catchall.js, extract "ra/gen" +let subDirPath = ''; +const currentDir = path.dirname(__filename); +const serviceVaultIdx = currentDir.indexOf('ServiceVault'); +console.log("DEBUG: currentDir =", currentDir, "serviceVaultIdx =", serviceVaultIdx); +if (serviceVaultIdx !== -1) { + const afterVault = currentDir.substring(serviceVaultIdx + 12); // 12 = length of 'ServiceVault' + console.log("DEBUG: afterVault =", afterVault); + const parts = afterVault.split(path.sep).filter(p => p); + console.log("DEBUG: parts =", parts); + if (parts.length > 1) { + // parts[0] is the service name (e.g., 'wtv-music'), parts[1+] are the subdirs + const subdirs = parts.slice(1); + subDirPath = '/' + subdirs.join('/'); + } +} +console.log("DEBUG: Detected subDirPath =", subDirPath); + const url_path = request_headers.request_url.split('?')[0]; const pathParts = url_path.split('/').filter(p => p); const serviceName = pathParts.length > 0 ? pathParts[0] : ''; -const remainingPath = '/' + pathParts.slice(1).join('/'); -const filename = remainingPath.split('/').pop().replace('.ram', ''); -const directory = remainingPath.endsWith('/') || !filename ? remainingPath.replace(/\/$/, '') : remainingPath.substring(0, remainingPath.lastIndexOf('/')); +let remainingPath = '/' + pathParts.slice(1).join('/'); +const hadTrailingSlash = request_headers.request_url.endsWith('/'); +console.log("DEBUG: Before stripping - subDirPath =", subDirPath, "remainingPath =", remainingPath); + +let strippedSubDir = ''; // Store what was stripped for link rebuilding +// Strip the subdirectory structure from the request path +if (subDirPath) { + if (remainingPath.startsWith(subDirPath + '/')) { + // Has something after the subdirectory, e.g., /ragen/classicrom + strippedSubDir = subDirPath; + remainingPath = remainingPath.substring(subDirPath.length); + } else if (remainingPath === subDirPath || remainingPath === subDirPath + '/') { + // Just the subdirectory itself, e.g., /ragen or /ragen/ + strippedSubDir = subDirPath; + remainingPath = '/'; + } +} + +console.log("DEBUG: After stripping - remainingPath =", remainingPath, "strippedSubDir =", strippedSubDir); + +// Restore trailing slash if original URL had one +if (hadTrailingSlash && !remainingPath.endsWith('/')) { + remainingPath += '/'; +} + +const filename = remainingPath.endsWith('/') ? '' : remainingPath.split('/').pop().replace('.ram', ''); +const directory = remainingPath.endsWith('/') ? remainingPath.replace(/\/$/, '') : remainingPath.substring(0, remainingPath.lastIndexOf('/')); +console.log("DEBUG: Request for service", serviceName, "with filename", filename, "and directory", directory, "remainingPath", remainingPath); let fileFound = false; const extensions = ['.ra', '.rm']; @@ -43,6 +88,8 @@ if (!filename || (request_headers.request_url.endsWith('/') && minisrv_config.se if (fs.statSync(fullPath).isFile() && (file.endsWith('.ra') || file.endsWith('.rm'))) { const baseFileName = file.substring(0, file.lastIndexOf('.')); allFiles.push(baseFileName + '.ram'); + } else if (fs.statSync(fullPath).isDirectory()) { + allFiles.push(file + '/'); } }); } @@ -51,7 +98,16 @@ if (!filename || (request_headers.request_url.endsWith('/') && minisrv_config.se if (allFiles.length > 0) { headers = `200 OK Content-type: text/html`; - data = `
+