51 lines
1.2 KiB
TypeScript
51 lines
1.2 KiB
TypeScript
import { hasPermission, getUID } from "../libs/permissions.js";
|
|
import type { RouteOptions } from "../libs/types.js";
|
|
|
|
export function route(routeOptions: RouteOptions) {
|
|
const { fastify, prisma, tokens } = routeOptions;
|
|
|
|
/**
|
|
* Logs in to a user account.
|
|
*/
|
|
fastify.post(
|
|
"/api/v1/getPermissions",
|
|
{
|
|
schema: {
|
|
body: {
|
|
type: "object",
|
|
required: ["token"],
|
|
|
|
properties: {
|
|
token: { type: "string" },
|
|
},
|
|
},
|
|
},
|
|
},
|
|
async (req, res) => {
|
|
// @ts-expect-error: Fastify routes schema parsing is trustworthy, so we can "assume" invalid types
|
|
const body: {
|
|
token: string;
|
|
} = req.body;
|
|
|
|
const uid = await getUID(body.token, tokens, prisma);
|
|
|
|
if (!(await hasPermission(["permissions.see"], uid, prisma))) {
|
|
return res.status(403).send({
|
|
error: "Unauthorized",
|
|
});
|
|
}
|
|
|
|
const permissionsRaw = await prisma.permission.findMany({
|
|
where: {
|
|
userID: uid,
|
|
},
|
|
});
|
|
|
|
return {
|
|
success: true,
|
|
// Get the ones that we have, and transform them into just their name
|
|
data: permissionsRaw.filter(i => i.has).map(i => i.permission),
|
|
};
|
|
},
|
|
);
|
|
}
|