mirror of
https://github.com/basketikun/infinite-canvas.git
synced 2026-07-24 15:24:06 +08:00
fe3294ed60
- 新增UserAuth中间件用于验证用户登录状态和权限 - 移除Linux.do登录中的redirectUri和minimumTrustLevel配置项 - 修改Linux.do登录流程以支持动态构建回调URL - 将API v1接口组迁移至需要用户认证的路由 - 在远程AI服务调用中添加用户令牌认证 - 修复被封禁用户的认证检查逻辑 - 更新登录重定向函数以处理请求来源 - 添加RequestOrigin函数解析转发的主机和协议头
61 lines
2.0 KiB
TypeScript
61 lines
2.0 KiB
TypeScript
import type { NextRequest } from "next/server";
|
|
|
|
export const runtime = "nodejs";
|
|
export const maxDuration = 300;
|
|
|
|
type RouteContext = {
|
|
params: Promise<{ path: string[] }>;
|
|
};
|
|
|
|
function proxyHeaders(request: NextRequest) {
|
|
const headers = new Headers(request.headers);
|
|
headers.delete("host");
|
|
headers.delete("content-length");
|
|
headers.delete("connection");
|
|
headers.set("x-forwarded-host", request.nextUrl.host);
|
|
headers.set("x-forwarded-proto", request.nextUrl.protocol.replace(":", ""));
|
|
return headers;
|
|
}
|
|
|
|
function responseHeaders(response: Response) {
|
|
const headers = new Headers(response.headers);
|
|
headers.delete("content-length");
|
|
headers.delete("content-encoding");
|
|
headers.delete("transfer-encoding");
|
|
return headers;
|
|
}
|
|
|
|
async function proxy(request: NextRequest, context: RouteContext) {
|
|
const { path } = await context.params;
|
|
const apiBaseUrl = process.env.API_BASE_URL || "http://127.0.0.1:8080";
|
|
const target = `${apiBaseUrl.replace(/\/$/, "")}/api/${path.map(encodeURIComponent).join("/")}${request.nextUrl.search}`;
|
|
const hasBody = request.method !== "GET" && request.method !== "HEAD";
|
|
|
|
try {
|
|
const response = await fetch(target, {
|
|
method: request.method,
|
|
headers: proxyHeaders(request),
|
|
body: hasBody ? request.body : undefined,
|
|
duplex: hasBody ? "half" : undefined,
|
|
redirect: "manual",
|
|
} as RequestInit & { duplex?: "half" });
|
|
|
|
return new Response(response.body, {
|
|
status: response.status,
|
|
statusText: response.statusText,
|
|
headers: responseHeaders(response),
|
|
});
|
|
} catch (error) {
|
|
console.error("Failed to proxy", target, error);
|
|
return Response.json({ code: 1, data: null, msg: "接口连接失败,请确认后端服务已启动" }, { status: 502 });
|
|
}
|
|
}
|
|
|
|
export const GET = proxy;
|
|
export const HEAD = proxy;
|
|
export const POST = proxy;
|
|
export const PUT = proxy;
|
|
export const PATCH = proxy;
|
|
export const DELETE = proxy;
|
|
export const OPTIONS = proxy;
|