simple-fs-server/routes/doc/index.tsx
2023-01-06 18:24:27 +09:00

46 lines
1.3 KiB
TypeScript

import { Head } from "$fresh/runtime.ts";
import { HandlerContext, Handlers, PageProps } from "$fresh/server.ts";
import DocSearch from "../../islands/DocSearch.tsx";
import { Doc } from "../../src/collect.ts";
import { docCollector } from "../../src/store/doc.ts";
async function GET(req: Request, ctx: HandlerContext): Promise<Response> {
const authRequired = Deno.env.get("AUTH_REQUIRED") === "true";
if (authRequired) {
const login = ctx.state["login"];
if (!login) {
return new Response(null, {
status: 302,
headers: {
"Location": "/login",
"content-type": "text/plain",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET,HEAD,PUT,PATCH,POST,DELETE",
"Access-Control-Allow-Headers":
"Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With",
},
});
}
}
const docs = docCollector.getDocs();
return await ctx.render({ docs });
}
export const handler: Handlers = {
GET,
};
export default function Docs(props: PageProps<{ docs: Doc[] }>) {
const { docs } = props.data;
return (
<>
<Head>
<title>Simple file server - Doc</title>
</Head>
<div class="p-4 mx-auto max-w-screen-md">
<DocSearch docs={docs}></DocSearch>
</div>
</>
);
}