aegis-auth
Version:
A credentials-based auth solution for Next.js (and other Node projects) with IP rate-limiting, account lockouts, and sessions in DB.
41 lines • 1.56 kB
JavaScript
import { UAParser } from "ua-parser-js";
import { getCsrfToken, getSessionToken } from "../cookies";
export function parseRequest(request, config) {
var _a, _b, _c, _d;
const getHeader = (key) => {
if ("get" in request.headers && typeof request.headers.get === "function") {
return request.headers.get(key);
}
return undefined;
};
const sessionHeader = getHeader(config.session.cookieName) || "";
const csrfHeader = getHeader(config.csrf.cookieName) || "";
const sessionToken = getSessionToken({
cookieHeader: sessionHeader,
config,
});
const csrfToken = getCsrfToken({ cookieHeader: csrfHeader, config });
const userAgent = getHeader("user-agent");
const { ua, device, browser, os } = UAParser(userAgent);
let ipAddress = undefined;
const forwardedFor = getHeader("x-forwarded-for");
if (forwardedFor) {
const ips = Array.isArray(forwardedFor)
? forwardedFor[0]
: forwardedFor.split(",")[0];
ipAddress = ips.trim();
}
else {
ipAddress = (_a = getHeader("x-real-ip")) !== null && _a !== void 0 ? _a : undefined;
}
return {
sessionToken,
csrfToken,
userAgent: ua,
device: (_b = device.type) !== null && _b !== void 0 ? _b : "Desktop",
browser: (_c = browser.name) !== null && _c !== void 0 ? _c : "Unknown",
os: (_d = os.name) !== null && _d !== void 0 ? _d : "Unknown",
ipAddress: ipAddress,
};
}
//# sourceMappingURL=request.js.map