35 lines
1.6 KiB
TypeScript
35 lines
1.6 KiB
TypeScript
|
import { getUserByAccessToken } from "./lib/db/users";
|
||
|
import { getHighestWeightedLanguage, getLocales } from "./lib/utils/langDriver";
|
||
|
import locationManager from "./lib/classes/managers/LocationManager";
|
||
|
import { defineMiddleware } from "astro/middleware";
|
||
|
import { APIContext, MiddlewareNext } from "astro";
|
||
|
import { ObjectId } from "mongodb";
|
||
|
|
||
|
const frontend = async (context: APIContext, next: MiddlewareNext) => {
|
||
|
const loggedToken = context.cookies.get('sessionToken')?.value ?? null;
|
||
|
const username = context.cookies.get('username')?.value ?? "";
|
||
|
if(loggedToken === null || username === "") return context.redirect('/logout');
|
||
|
|
||
|
const checkUser = await getUserByAccessToken(loggedToken);
|
||
|
if(checkUser === null || checkUser.username !== username) return context.redirect('/logout');
|
||
|
const user = locationManager.getUser(checkUser._id);
|
||
|
if(user === null) return context.redirect('/logout');
|
||
|
|
||
|
const lang = await getLocales(context.cookies.get('language')?.value ?? await getHighestWeightedLanguage(context.request.headers.get('accept-language')));
|
||
|
|
||
|
const activeId = context.cookies.get('currentPlanet')?.value ?? "0";
|
||
|
const active = locationManager.findId(new ObjectId(activeId));
|
||
|
|
||
|
if(active === null) return context.redirect('/logout');
|
||
|
|
||
|
context.locals.token = loggedToken;
|
||
|
context.locals.lang = lang;
|
||
|
context.locals.user = user;
|
||
|
context.locals.active = active;
|
||
|
|
||
|
return next();
|
||
|
}
|
||
|
|
||
|
export const onRequest = defineMiddleware(async (context, next) => {
|
||
|
return context.url.pathname.startsWith('/game') ? frontend(context, next) : next();
|
||
|
});
|