11import User from "../models/userModel.js" ;
22import md5 from "md5" ;
3- import jwt from "jsonwebtoken" ;
4- import bcrypt from "bcrypt" ;
5-
6- const generateTokenAndPersonalKey = async ( user ) => {
7- try {
8- const payload = {
9- id : user . _id ,
10- username : user . username
11- } ;
12- const salt = await bcrypt . genSalt ( 6 ) ;
13- const secretKey = process . env . JWT_SECRET + salt ;
14- const token = jwt . sign ( payload , secretKey , { expiresIn : process . env . TOKEN_LIFE } ) ;
15- return { token : token , personalKey : salt } ; //return token and "salt" to use as user personalkey
16- } catch ( error ) {
17- throw new Error ( 'Token generation failed' ) ;
18- }
19- } ;
3+ import generateTokenAndPersonalKey from "../middleware/generateToken.js" ;
4+ import { sendResponse } from '../utils/response.js' ;
205
216export const registerController = async ( req , res ) => {
227 req . body . password = md5 ( req . body . password ) ;
238
249 const newUser = new User ( {
2510 username : req . body . username ,
26- password : req . body . password
11+ password : req . body . password ,
12+ role : req . body . role
2713 } ) ;
2814
2915 try {
3016 const foundUser = await User . findOne ( { username : req . body . username , password : req . body . password } ) ;
3117 if ( foundUser ) {
32- return res . status ( 400 ) . json ( { message : ' Email already exists' } ) ;
18+ return sendResponse ( res , 409 , "Conflict" , " Email already exists" ) ;
3319 }
34- const newTokenAndKey = await generateTokenAndPersonalKey ( newUser ) ;
35- const token = newTokenAndKey . token ;
36- const personalKey = newTokenAndKey . personalKey ;
37- newUser . personalKey = personalKey ;
38- await newUser . save ( ) ;
39- res . status ( 200 ) . json ( { token } ) ;
40- } catch ( error ) {
41- console . error ( error ) ;
42- res . status ( 400 ) . json ( { error : error . message } ) ;
20+ //verificação de email
21+ let savedUser = await newUser . save ( ) ;
22+ delete savedUser . password ;
23+ return sendResponse ( res , 200 , savedUser , "User registered successfully" ) ;
24+ } catch ( err ) {
25+ return sendResponse ( res , 400 , err . name , err . message ) ;
4326 }
4427} ;
4528
@@ -49,17 +32,16 @@ export const loginController = async (req, res) => {
4932 try {
5033 const user = await User . findOne ( { username : req . body . username , password : req . body . password } ) ;
5134 if ( ! user ) {
52- return res . status ( 401 ) . json ( { error : "Invalid username or password" } ) ;
35+ return sendResponse ( res , 401 , "Forbidden" , "Invalid username or password" ) ;
5336 }
5437 const newTokenAndKey = await generateTokenAndPersonalKey ( user ) ;
5538 const token = newTokenAndKey . token ;
5639 const personalKey = newTokenAndKey . personalKey ;
5740 user . personalKey = personalKey ;
5841 await user . save ( ) ;
59- res . status ( 200 ) . json ( { token } ) ;
60- } catch ( error ) {
61- console . error ( error ) ;
62- res . status ( 400 ) . json ( { error : error . message } ) ;
42+ return sendResponse ( res , 200 , token , "User logged successfully" ) ;
43+ } catch ( err ) {
44+ return sendResponse ( res , 400 , err . name , err . message ) ;
6345 }
6446} ;
6547
@@ -69,48 +51,14 @@ export const logoutController = async (req, res) => {
6951 try {
7052 const user = await User . findOne ( { username : req . body . username , password : req . body . password } ) ;
7153 if ( ! user ) {
72- return res . status ( 401 ) . json ( { error : "Invalid username or password" } ) ;
54+ return sendResponse ( res , 401 , "Forbidden" , "Invalid username or password" ) ;
7355 }
7456 //setting personalKey to default value, to invalidate the token
7557 user . personalKey = "-" ;
7658 await user . save ( ) ;
77- res . status ( 200 ) . json ( { message : 'You have been logged out successfully' } )
78- }
79- catch ( error ) {
80- console . error ( error ) ;
81- res . status ( 400 ) . json ( { error : error . message } ) ;
82- }
83- } ;
84-
85- export const authenticateToken = async ( req , res , next ) => {
86- const token = req . headers . authorization ;
87- if ( ! token ) {
88- return res . status ( 401 ) . json ( { error : "Authentication token is required" } ) ;
59+ return sendResponse ( res , 200 , null , "You have been logged out successfully" ) ;
8960 }
90-
91- try {
92- const decodedToken = jwt . decode ( token , { complete : true } ) ;
93- if ( ! decodedToken ) {
94- return res . status ( 403 ) . json ( { error : "Redirect to login" } ) ;
95- }
96-
97- const user = await User . findById ( decodedToken . payload . id ) ;
98- if ( ! user ) {
99- return res . status ( 401 ) . json ( { error : "User not found" } ) ;
100- }
101-
102- const secretKey = process . env . JWT_SECRET + user . personalKey ;
103- jwt . verify ( token , secretKey , ( err , decoded ) => {
104- if ( err ) {
105- return res . status ( 403 ) . json ( { error : "Redirect to login" } ) ;
106- }
107- req . user = decoded ;
108- next ( ) ;
109- } ) ;
110- } catch ( error ) {
111- console . error ( error ) ;
112- return res . status ( 403 ) . json ( { error : "Redirect to login" } ) ;
61+ catch ( err ) {
62+ return sendResponse ( res , 400 , err . name , err . message ) ;
11363 }
114- } ;
115-
116-
64+ } ;
0 commit comments