45 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			45 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>
 | |
|     </>
 | |
|   );
 | |
| }
 |