mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-12 23:40:45 +00:00
38 lines
1.1 KiB
TypeScript
38 lines
1.1 KiB
TypeScript
import type { Express } from "express";
|
|
import express from "express";
|
|
import { browserMutationGuardMiddleware } from "./csrf.js";
|
|
import { isAuthorizedBrowserRequest } from "./http-auth.js";
|
|
|
|
export function installBrowserCommonMiddleware(app: Express) {
|
|
app.use((req, res, next) => {
|
|
const ctrl = new AbortController();
|
|
const abort = () => ctrl.abort(new Error("request aborted"));
|
|
req.once("aborted", abort);
|
|
res.once("close", () => {
|
|
if (!res.writableEnded) {
|
|
abort();
|
|
}
|
|
});
|
|
// Make the signal available to browser route handlers (best-effort).
|
|
(req as unknown as { signal?: AbortSignal }).signal = ctrl.signal;
|
|
next();
|
|
});
|
|
app.use(express.json({ limit: "1mb" }));
|
|
app.use(browserMutationGuardMiddleware());
|
|
}
|
|
|
|
export function installBrowserAuthMiddleware(
|
|
app: Express,
|
|
auth: { token?: string; password?: string },
|
|
) {
|
|
if (!auth.token && !auth.password) {
|
|
return;
|
|
}
|
|
app.use((req, res, next) => {
|
|
if (isAuthorizedBrowserRequest(req, auth)) {
|
|
return next();
|
|
}
|
|
res.status(401).send("Unauthorized");
|
|
});
|
|
}
|