in src/msha/auth/index.ts [90:169]
export async function processAuth(request: http.IncomingMessage, response: http.ServerResponse, rewriteUrl?: string, customAuth?: SWAConfigFileAuth) {
let defaultStatus = 200;
const context: Context = {
invocationId: new Date().getTime().toString(36) + Math.random().toString(36).slice(2),
bindingData: undefined,
res: {},
};
const { func, bindingData } = await routeMatcher(rewriteUrl || request.url, customAuth);
if (func) {
context.bindingData = bindingData;
try {
await func(context, request, customAuth);
for (const key in context.res.headers) {
const element = context.res.headers[key];
if (element) {
response.setHeader(key, element);
}
}
// set auth cookies
if (context.res.cookies) {
const serializedCookies = context.res.cookies?.map((cookie) => {
if (cookie.expires) {
cookie.expires = new Date(cookie.expires);
}
return serializeCookie(cookie.name as string, cookie.value as string, cookie);
});
response.setHeader("Set-Cookie", serializedCookies);
}
// enable CORS for all requests
response.setHeader("Access-Control-Allow-Origin", request.headers.origin || "*");
response.setHeader("Access-Control-Allow-Methods", "GET,OPTIONS");
response.setHeader("Access-Control-Allow-Credentials", "true");
// set JSON response by default (if no content type was set)
if (response.hasHeader("Content-Type") === false) {
response.setHeader("Content-Type", "application/json");
}
// if response type is JSON, serialize body response
if (response.getHeader("Content-Type")?.toString().includes("json") && typeof context.res.body === "object") {
context.res.body = JSON.stringify(context.res.body) as string;
}
} catch (error) {
let errorMessage = `An error occurred while processing the request!`;
if (error instanceof Error) {
errorMessage = error.message;
}
logger.error(errorMessage);
defaultStatus = 500;
context.res = newResponse({
context,
status: 500,
body: {
error: errorMessage,
},
});
}
} else {
defaultStatus = 404;
context.res = newResponse({
context,
status: 404,
headers: { ["Content-Type"]: "text/plain" },
body: "We couldn't find that page, please check the URL and try again.",
});
}
const statusCode = context.res.status || defaultStatus;
response.writeHead(statusCode);
response.end(context.res.body);
return statusCode;
}