export async function processAuth()

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;
}