From ef655c8298b8bbadb2bf8f36ffc3772b319476bd Mon Sep 17 00:00:00 2001 From: Ankit Dash Date: Tue, 23 Jul 2024 02:18:56 +0530 Subject: [PATCH] fixing parsing --- apps/studio-next/next.config.js | 2 +- apps/studio-next/src/app/api/crawler/route.tsx | 5 +++-- apps/studio-next/src/helpers/parser.ts | 14 +++++++++++--- apps/studio-next/src/middleware.ts | 3 ++- 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/apps/studio-next/next.config.js b/apps/studio-next/next.config.js index c8f88d6b1..ec3b149da 100644 --- a/apps/studio-next/next.config.js +++ b/apps/studio-next/next.config.js @@ -38,4 +38,4 @@ const nextConfig = { }, } -module.exports = nextConfig \ No newline at end of file +module.exports = nextConfig diff --git a/apps/studio-next/src/app/api/crawler/route.tsx b/apps/studio-next/src/app/api/crawler/route.tsx index 8346c4d64..008e00a01 100644 --- a/apps/studio-next/src/app/api/crawler/route.tsx +++ b/apps/studio-next/src/app/api/crawler/route.tsx @@ -2,6 +2,7 @@ import { NextRequest, NextResponse } from "next/server"; import parseURL from "@/helpers/parser"; import { DocumentInfo } from "@/types"; import axios from "axios"; +import { parse } from "path"; export async function GET(request: NextRequest) { const Base64searchParams = request.nextUrl.searchParams.get('base64'); @@ -16,11 +17,11 @@ export async function GET(request: NextRequest) { info = await parseURL(Base64searchParams); } if (URLsearchParams) { - // fetch the document + // fetch the document information from the URL try { const response = await axios.get(URLsearchParams); if (response.status === 200) { - info = response.data; + info = await parseURL(response.data); } else { return new NextResponse("Not a valid URL", { status: 500 }); } diff --git a/apps/studio-next/src/helpers/parser.ts b/apps/studio-next/src/helpers/parser.ts index fa9d3f310..92965a925 100644 --- a/apps/studio-next/src/helpers/parser.ts +++ b/apps/studio-next/src/helpers/parser.ts @@ -1,10 +1,18 @@ -import { Parser } from '@asyncapi/parser'; +import { Input, Parser } from '@asyncapi/parser'; import { DocumentInfo } from '@/types'; -export default async function parseURL(base64Document: string): Promise { +export default async function parseURL(asyncapiDocument: string): Promise { const parser = new Parser(); + + const base64Regex = /^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?$/; + + let decodedDocument: Input = ""; + if (base64Regex.test(asyncapiDocument)) { + decodedDocument = Buffer.from(asyncapiDocument, "base64").toString("utf-8"); + } else { + decodedDocument = asyncapiDocument; + } - const decodedDocument = Buffer.from(base64Document, "base64").toString("utf-8"); const { document, diagnostics } = await parser.parse(decodedDocument); if (diagnostics.length) { diff --git a/apps/studio-next/src/middleware.ts b/apps/studio-next/src/middleware.ts index 661d73e33..f69f15d78 100644 --- a/apps/studio-next/src/middleware.ts +++ b/apps/studio-next/src/middleware.ts @@ -5,11 +5,12 @@ export async function middleware(request: NextRequest) { const userAgents = crawlers.map(crawler => crawler.pattern); const requestInfo = userAgent(request); const res = NextResponse.next(); + const documentURL = request.nextUrl.searchParams.get("url"); for (const ua of userAgents) { if (requestInfo.ua.toLowerCase().includes(ua.toLowerCase())) { const encodedDocument = request.nextUrl.searchParams.get("base64"); - const documentURL = request.nextUrl.searchParams.get("url"); + if (!encodedDocument && !documentURL) { return res; }