NQ-58 & NQ-57

This commit is contained in:
Dennis Postma 2024-06-06 19:03:55 +02:00
parent cf24ab1af9
commit ccf14fcd6b
3 changed files with 38 additions and 9 deletions

View File

@ -3,16 +3,22 @@
* https://stackoverflow.com/questions/76131891/what-is-the-best-method-for-socket-io-authentication * https://stackoverflow.com/questions/76131891/what-is-the-best-method-for-socket-io-authentication
* *
*/ */
import {Application, Request, Response} from 'express'; import {Application, Request, Response} from 'express';
import UserService from '../services/UserService'; import UserService from '../services/UserService';
import jwt from "jsonwebtoken"; import jwt from "jsonwebtoken";
import config from "./Config"; import config from "./Config";
import {loginAccountSchema, registerAccountSchema} from "./ZodTypes";
async function addAuthRoutes(app: Application) { async function addAuthRoutes(app: Application) {
app.post('/login', async (req: Request, res: Response) => { app.post('/login', async (req: Request, res: Response) => {
const { username, password } = req.body; const { username, password } = req.body;
try {
loginAccountSchema.parse({ username, password });
} catch (error: any) {
return res.status(400).json({ message: error.errors[0].message });
}
const userService = new UserService(); const userService = new UserService();
const user = await userService.login(username, password); const user = await userService.login(username, password);
@ -20,12 +26,19 @@ async function addAuthRoutes(app: Application) {
const token = jwt.sign({ id: user.id }, config.JWT_SECRET, { expiresIn: '1h' }); const token = jwt.sign({ id: user.id }, config.JWT_SECRET, { expiresIn: '1h' });
return res.status(200).json({ token }); return res.status(200).json({ token });
} }
return res.status(401).json({ message: 'Invalid credentials' });
return res.status(400).json({ message: 'Failed to login' });
}); });
app.post('/register', async (req: Request, res: Response) => { app.post('/register', async (req: Request, res: Response) => {
const { username, password } = req.body; const { username, password } = req.body;
try {
registerAccountSchema.parse({ username, password });
} catch (error: any) {
return res.status(400).json({ message: error.errors[0].message });
}
const userService = new UserService(); const userService = new UserService();
const user = await userService.register(username, password); const user = await userService.register(username, password);
@ -33,6 +46,7 @@ async function addAuthRoutes(app: Application) {
const token = jwt.sign({ id: user.id }, config.JWT_SECRET, { expiresIn: '1h' }); const token = jwt.sign({ id: user.id }, config.JWT_SECRET, { expiresIn: '1h' });
return res.status(200).json({ token }); return res.status(200).json({ token });
} }
return res.status(400).json({ message: 'Failed to register user' }); return res.status(400).json({ message: 'Failed to register user' });
}); });

View File

@ -1,7 +1,27 @@
import { z } from 'zod'; import { z } from 'zod';
export const loginAccountSchema = z.object({
username: z.string().min(3, {
message: 'Username must be at least 3 characters long'
}).max(255),
password: z.string().min(8, {
message: 'Password must be at least 8 characters long'
}).max(255)
});
export const registerAccountSchema = z.object({
username: z.string().min(3, {
message: 'Username must be at least 3 characters long'
}).max(255),
password: z.string().min(8, {
message: 'Password must be at least 8 characters long'
}).max(255)
});
export const ZCharacterCreate = z.object({ export const ZCharacterCreate = z.object({
name: z.string().min(3).max(255) name: z.string().min(3, {
message: 'Name must be at least 3 characters long'
}).max(255)
}); });
export const ZCharacterDelete = z.object({ export const ZCharacterDelete = z.object({

View File

@ -1,11 +1,6 @@
{ {
"compilerOptions": { "compilerOptions": {
/* Visit https://aka.ms/tsconfig to read more about this file */ /* Visit https://aka.ms/tsconfig to read more about this file */
"baseUrl": ".",
"paths": {
"@/*": ["./src/*"]
},
// include logo.txt from ./src to dist
"outDir": "./dist", "outDir": "./dist",
"target": "ES2022", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ "target": "ES2022", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
"module": "commonjs", /* Specify what module code is generated. */ "module": "commonjs", /* Specify what module code is generated. */
@ -15,4 +10,4 @@
"strict": true, /* Enable all strict type-checking options. */ "strict": true, /* Enable all strict type-checking options. */
"skipLibCheck": true, /* Skip type checking of declaration files. */ "skipLibCheck": true, /* Skip type checking of declaration files. */
} }
} }