core&ui: cors (#498)

This commit is contained in:
undefined authored and GitHub committed 2023-01-27 23:22:58 +08:00
1 parent 46eb761079
commit d8f5193a24
10 files changed
+135 -76

No files matched your search

+7 -2
View File
@@ -19,10 +19,15 @@ export const UiContextBase: UiContextBase = {
export default async (ctx: KoaContext, next: Next) => {
// Base Layer
const { domainId, domainInfo } = ctx;
const [xff, xhost] = system.getMany(['server.xff', 'server.xhost']);
const request: HydroRequest = {
method: ctx.request.method.toLowerCase(),
...pick(ctx.request, ['host', 'hostname', 'ip', 'headers']),
...pick(ctx, ['query', 'path', 'params', 'originalPath', 'querystring', 'cookies']),
host: ctx.request.headers[xhost?.toLowerCase() || ''] as string || ctx.request.host,
hostname: ctx.request.hostname,
ip: ctx.request.headers[xff?.toLowerCase() || ''] as string || ctx.request.ip,
headers: ctx.request.headers,
cookies: ctx.cookies,
...pick(ctx, ['query', 'path', 'params', 'originalPath', 'querystring']),
body: ctx.request.body,
files: ctx.request.files as any,
referer: ctx.request.headers.referer || '',
+1 -1
View File
@@ -21,7 +21,7 @@ export default async (ctx: KoaContext, next) => {
ctx.pendingError = new NotFoundError(args.domainId);
args.domainId = 'system';
}
if (request.method === 'post' && request.headers.referer) {
if (request.method === 'post' && request.headers.referer && !ctx.cors) {
const host = new URL(request.headers.referer).host;
if (host !== request.host) ctx.pendingError = new CsrfTokenError(host);
}