nuxt-security
Version:
🛡️ Security Module for Nuxt based on HTTP Headers and Middleware
33 lines (32 loc) • 1.24 kB
JavaScript
import { createRouter, toRouteMatcher } from "radix3";
import { defuReplaceArray } from "../../../utils/merge";
const nitroAppSecurityOptions = {};
export function getAppSecurityOptions() {
return nitroAppSecurityOptions;
}
export function resolveSecurityRules(event) {
if (!event.context.security) {
event.context.security = {};
}
if (!event.context.security.rules) {
const router = createRouter({ routes: structuredClone(nitroAppSecurityOptions) });
const matcher = toRouteMatcher(router);
const matches = matcher.matchAll(event.path.split("?")[0]);
const rules = defuReplaceArray({}, ...matches.reverse());
event.context.security.rules = rules;
}
return event.context.security.rules;
}
export function resolveSecurityRoute(event) {
if (!event.context.security) {
event.context.security = {};
}
if (!event.context.security.route) {
const routeNames = Object.fromEntries(Object.entries(nitroAppSecurityOptions).map(([name]) => [name, { name }]));
const router = createRouter({ routes: routeNames });
const match = router.lookup(event.path.split("?")[0]);
const route = match?.name ?? "";
event.context.security.route = route;
}
return event.context.security.route;
}