import { Request } from "express"; import jwt from "jsonwebtoken"; import { UnauthorizedError } from "../4-models/errors-model"; import Role from "../4-models/role-model"; import UserModel from "../4-models/user-model"; const secret = "You can not crack my password! Idan Laav" function getNewToken(user: UserModel): string { const payload = { user }; const token = jwt.sign(payload, secret, { expiresIn: "1d" }); return token; } function verifyToken(request: Request): Promise { return new Promise((resolve, reject) => { const header = request.headers.authorization; if(!header) { reject(new UnauthorizedError("No token sent")); return } const token = header.substring(7) if(!token) { reject(new UnauthorizedError("No token sent")); return } jwt.verify(token, secret, (err, payload)=> { if(err) { reject(new UnauthorizedError("Invalid or expired token")); return } resolve(true) }); return token; }); } function getTokenRole(request: Request): Role { const header = request.headers.authorization; const token = header.substring(7); const payload = jwt.decode(token); const user = (payload as any).user[0]; return user.Role } export default { getNewToken, verifyToken, getTokenRole }