diff --git a/src/hooks.server.ts b/src/hooks.server.ts index f3aa1f67b8..d0643f32df 100644 --- a/src/hooks.server.ts +++ b/src/hooks.server.ts @@ -2,7 +2,7 @@ import * as Sentry from '@sentry/sveltekit'; import type { Handle } from '@sveltejs/kit'; import redirects from './redirects.json'; import { sequence } from '@sveltejs/kit/hooks'; -import { getMarkdownContent, processMarkdownWithPartials } from '$lib/server/markdown'; +import { getMarkdownContent } from '$lib/server/markdown'; import { type GithubUser } from '$routes/(init)/init/(utils)/auth'; import { createInitSessionClient } from '$routes/(init)/init/(utils)/appwrite'; import type { AppwriteUser } from '$lib/utils/console'; @@ -24,9 +24,7 @@ const markdownHandler: Handle = async ({ event, resolve }) => { return new Response('Not found', { status: 404 }); } - const processedContent = await processMarkdownWithPartials(content); - - return new Response(processedContent, { + return new Response(content, { status: 200, headers: { 'Content-Type': 'text/markdown; charset=utf-8' diff --git a/src/lib/server/markdown.ts b/src/lib/server/markdown.ts index 3803e3a2a2..cbc9c6ac3d 100644 --- a/src/lib/server/markdown.ts +++ b/src/lib/server/markdown.ts @@ -2,53 +2,6 @@ import { readFile } from 'fs/promises'; import { join, normalize, resolve } from 'path'; import { generateDynamicMarkdown, hasDynamicMarkdownGenerator } from './markdown-generators'; -const partialsCache = new Map(); - -export async function processMarkdownWithPartials(content: string): Promise { - const partialsDir = join(process.cwd(), 'src', 'partials'); - const resolvedPartialsDir = resolve(partialsDir); - const partialRegex = /\{%\s*partial\s+file="([^"]+)"\s*\/%\}/g; - - const matches = [...content.matchAll(partialRegex)]; - if (matches.length === 0) return content; - - let result = content; - for (const match of matches) { - const partialFile = match[1]; - const fullMatch = match[0]; - - if (!partialsCache.has(partialFile)) { - try { - const normalizedPartialFile = normalize(partialFile).replace( - /^(\.\.(\/|\\|$))+/, - '' - ); - const partialPath = resolve(partialsDir, normalizedPartialFile); - - if ( - !partialPath.startsWith(resolvedPartialsDir + '/') && - partialPath !== resolvedPartialsDir - ) { - console.warn(`Partial path traversal attempt detected: ${partialFile}`); - partialsCache.set(partialFile, ''); - continue; - } - - const partialContent = await readFile(partialPath, 'utf-8'); - partialsCache.set(partialFile, partialContent); - } catch { - console.warn(`Partial not found: ${partialFile}`); - partialsCache.set(partialFile, ''); - } - } - - const partialContent = partialsCache.get(partialFile) || ''; - result = result.replaceAll(fullMatch, partialContent); - } - - return result; -} - /** * Gets markdown content for a route. * - For dynamic routes with registered generators, generates markdown from data sources