diff --git a/snippets-manager-front b/snippets-manager-front index f8a75e9..ec9bc1b 160000 --- a/snippets-manager-front +++ b/snippets-manager-front @@ -1 +1 @@ -Subproject commit f8a75e9cdd351cf2d484c91f033cdbd9fee7558a +Subproject commit ec9bc1bb4b8b83af341c5439ba4e97897f915cc6 diff --git a/src/routers/category.ts b/src/routers/category.ts index f54e8e2..489f9cf 100644 --- a/src/routers/category.ts +++ b/src/routers/category.ts @@ -2,7 +2,7 @@ import { Category, Prisma, PrismaClient } from "@prisma/client" import express, { RequestHandler } from "express" import { z } from "zod" import { getPaginationLinks, Pagination, queryPaginationParser } from "../utils/pagination.js" -import { userIdMiddleware } from "./user.js" +import { parseJwtUserId, userIdMiddleware } from "./user.js" const categoryRouter = express.Router() const prisma = new PrismaClient() @@ -37,7 +37,8 @@ const categoryGet: RequestHandler = async (req, res) => { const pagination = queryPaginationParser.parse(req.query) try { - categories = await findCategories(req.body.userId, pagination) + const userId = parseJwtUserId(req.cookies.jwt) + categories = await findCategories(userId ?? -1, pagination) } catch (error: any) { res.status(400).json({ message: error.issues ?? error }) return @@ -55,10 +56,11 @@ const categoryGetUnique: RequestHandler = async (req, res) => { let category: Category | null = null try { + const userId = parseJwtUserId(req.cookies.jwt) category = await prisma.category.findFirst({ where: { id: paramsIdParser.parse(req.params).id, - user_id: req.body.userId, + user_id: userId, }, }) } catch (error: any) { @@ -71,19 +73,19 @@ const categoryGetUnique: RequestHandler = async (req, res) => { const categoryPost: RequestHandler = async (req, res) => { try { - const newCategory = categoryPostParser.parse(req.body) - await prisma.category.create({ + const userId = parseJwtUserId(req.cookies.jwt) + const parsedCategory = categoryPostParser.parse(req.body) + const newCategorey = await prisma.category.create({ data: { - name: newCategory.name, - user_id: req.body.userId, + name: parsedCategory.name, + user_id: userId ?? -1, }, }) + res.json({ message: "Category successfully added.", id: newCategorey.id }) } catch (error: any) { res.status(400).json({ message: error.issues ?? error }) return } - - res.json({ message: "Category successfully added." }) } const categoryUpdate: RequestHandler = async (req, res) => { @@ -91,10 +93,11 @@ const categoryUpdate: RequestHandler = async (req, res) => { try { const categoryToUpdate = categoryUpdateParser.parse(req.body) + const userId = parseJwtUserId(req.cookies.jwt) updated = await prisma.category.updateMany({ where: { id: paramsIdParser.parse(req.params).id, - user_id: req.body.userId, + user_id: userId, }, data: { name: categoryToUpdate.name, @@ -112,10 +115,11 @@ const categoryDelete: RequestHandler = async (req, res) => { let deleted: Prisma.BatchPayload try { + const userId = parseJwtUserId(req.cookies.jwt) deleted = await prisma.category.deleteMany({ where: { id: paramsIdParser.parse(req.params).id, - user_id: req.body.userId, + user_id: userId, }, }) } catch (error: any) { diff --git a/src/routers/front.ts b/src/routers/front.ts index b503a57..f37ca49 100644 --- a/src/routers/front.ts +++ b/src/routers/front.ts @@ -11,6 +11,6 @@ const getAll: RequestHandler = async (req, res) => { } frontRouter.use(express.static("snippets-manager-front/dist")) -frontRouter.get("/*", getAll) +frontRouter.get("/", getAll) export default frontRouter diff --git a/src/routers/session.ts b/src/routers/session.ts index 0d06b18..ff35a71 100644 --- a/src/routers/session.ts +++ b/src/routers/session.ts @@ -67,14 +67,21 @@ export const userRouterPostLogin: RequestHandler = async (req, res) => { return } - const jwtToken = jwt.sign({ userId: user?.id }, getJwtSecret(), { expiresIn: "1h" }) + const jwtToken = jwt.sign({ userId: user?.id }, getJwtSecret(), { expiresIn: "2h" }) res.cookie("jwt", jwtToken, { httpOnly: true, secure: true, + expires: new Date(new Date().getTime() + 7200000), sameSite: "strict", }).json({ message: "Logged in! httpOnly cookie set." }) } +export const userRouterPostLogout: RequestHandler = async (req, res) => { + res.clearCookie("jwt", { httpOnly: true, secure: true, sameSite: "strict" }).json({ + message: "httpOnly cookie removed.", + }) +} + export const userRouterPostRegister: RequestHandler = async (req, res) => { const loginData = parseLoginData(req.body) if (loginData == undefined) { @@ -95,6 +102,7 @@ export const userRouterPostRegister: RequestHandler = async (req, res) => { } sessionRouter.post("/login", userRouterPostLogin) +sessionRouter.post("/logout", userRouterPostLogout) sessionRouter.post("/register", userRouterPostRegister) export default sessionRouter