Page MenuHomeSealhub

mount.ts
No OneTemporary

mount.ts

import Router from "@koa/router";
import Koa, { Context } from "koa";
import { Middlewares } from "sealious";
import { Mountable } from "./page/mountable";
async function handleHtmlPromise(ctx: Context, next: Koa.Next) {
await next();
if (ctx.body instanceof Promise) {
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
ctx.body = await ctx.body;
}
ctx.set("content-type", "text/html;charset=utf-8");
}
export function mount(
router: Router,
url: string | { rawURL: string },
mountable: Mountable
): void {
const raw_url = typeof url === "string" ? url : url.rawURL;
router.use(
raw_url,
Middlewares.extractContext(),
Middlewares.parseBody(),
handleHtmlPromise
);
mountable.init();
// to automatically add trailing slashes:
router.get(raw_url.slice(0, -1), async (ctx, next) => {
const url2 = ctx.URL;
if (!url2.pathname.endsWith("/")) {
url2.pathname += "/";
ctx.redirect(url2.pathname);
}
await next();
});
router.use(raw_url, async (ctx, next) => {
ctx.set("content-type", "text/html;charset=utf-8");
const access_result = await mountable.canAccess(ctx);
if (!access_result.canAccess) {
ctx.status = 403;
ctx.body = access_result.message || "no access";
return;
}
await next();
});
mountable.mount(router, raw_url);
}

File Metadata

Mime Type
text/x-java
Expires
Tue, May 27, 23:47 (1 d, 17 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
625870
Default Alt Text
mount.ts (1 KB)

Event Timeline