11import Users from "../models/user.js" ;
22import bcrypt from "bcrypt" ;
33import jwt from "jsonwebtoken" ;
4+ import {
5+ registerValidation ,
6+ loginValidation
7+ } from "../config/validation.js"
8+ import crypto from "crypto"
49
5- export const getUsers = async ( req , res ) => {
10+ export const getToken = async ( req , res , next ) => {
11+ const {
12+ token
13+ } = req . body
14+ const tokenExist = await Users . findOne ( {
15+ where : {
16+ refresh_token : token
17+ }
18+ } )
19+ if ( ! tokenExist ) return res . status ( 403 ) . json ( {
20+ status : res . statusCode ,
21+ message : "Unauthorized" ,
22+ } ) ;
23+ next ( ) ;
24+ }
25+
26+ export const getUsers = async ( req , res ) => {
627 try {
728 const users = await Users . findAll ( {
829 attributes : [ 'id' , 'name' , 'email' ]
930 } ) ;
1031 return res . status ( 200 ) . json ( {
1132 status : res . statusCode ,
1233 message : "Sukses" ,
13- data : users } ) ;
34+ data : users
35+ } ) ;
1436 } catch ( error ) {
15- console . log ( error ) ;
37+ console . log ( error ) ;
1638 }
1739}
1840
19- export const Register = async ( req , res ) => {
20- const { name, email, password, rePassword} = req . body ;
21- if ( password !== rePassword )
22- return res . status ( 400 ) . json ( {
23- status : res . statusCode ,
24- message : 'Password dan rePassword tidak cocok !' } ) ;
41+ export const Register = async ( req , res ) => {
42+ const {
43+ name,
44+ email,
45+ password,
46+ rePassword
47+ } = req . body ;
48+
49+ const { error } = await registerValidation ( req . body )
50+ if ( error ) {
51+ return res . status ( 400 ) . json ( {
52+ status : res . statusCode ,
53+ message : error . details [ 0 ] . message
54+ } ) ;
55+ }
2556
26- // const emailExist = await Users.findOne({email: req.body.email})
27- // if(emailExist) return res.status(400).json({
28- // status: res.statusCode,
29- // message: 'Email Sudah digunakan !'
30- // })
57+
58+ if ( password !== rePassword )
59+ return res . status ( 400 ) . json ( {
60+ status : res . statusCode ,
61+ message : 'Password dan rePassword tidak cocok !'
62+ } ) ;
63+
64+ const emailExist = await Users . findOne ( {
65+ where : {
66+ email : req . body . email
67+ }
68+ } )
69+ if ( emailExist ) return res . status ( 400 ) . json ( {
70+ status : res . statusCode ,
71+ message : 'Email Sudah digunakan !'
72+ } )
3173
3274 const salt = await bcrypt . genSalt ( 10 ) ;
3375 const hashPassword = await bcrypt . hash ( req . body . password , salt ) ;
@@ -43,56 +85,99 @@ export const Register = async(req, res)=> {
4385 res . status ( 200 ) . json ( {
4486 status : res . statusCode ,
4587 message : 'Berhasil membuat user baru' ,
46- data : saveUser } )
47- } catch ( err ) {
88+ data : saveUser
89+ } )
90+ } catch ( err ) {
4891 res . status ( 400 ) . json ( {
4992 status : res . statusCode ,
5093 message : 'Gagal membuat user baru'
5194 } )
5295 }
5396}
5497
55- export const Login = async ( req , res ) => {
56- // try {
57- const user = await Users . findAll ( {
58- where : {
59- email : req . body . email
60- }
61- } ) ;
62-
63- if ( user == '' ) {
64- return res . status ( 400 ) . json ( {
65- status :res . statusCode ,
66- message : 'Email tidak ditemukan'
67- } ) ;
98+ export const Login = async ( req , res ) => {
99+ const user = await Users . findAll ( {
100+ where : {
101+ email : req . body . email
68102 }
69- const match = await bcrypt . compare ( req . body . password , user [ 0 ] . password ) ;
70- if ( ! match ) { return res . status ( 404 ) . json ( { message : "wrong password" } ) ; }
71- const idUser = user [ 0 ] . id ;
72- const name = user [ 0 ] . name ;
73- const email = user [ 0 ] . email ;
74- const accessToken = jwt . sign ( { idUser, name, email} , process . env . ACCESS_TOKEN_SECRET , {
75- expiresIn : '20s'
76- } ) ;
77- const refreshToken = jwt . sign ( { idUser, name, email} , process . env . REFRESH_TOKEN_SECRET , {
78- expiresIn : '7d'
79- } ) ;
80- await Users . update ( { refresh_token :refreshToken } , {
81- where : {
82- id : idUser
83- }
84- } ) ;
85- res . cookie ( 'refreshToken' , refreshToken , {
86- httpOnly : true ,
87- maxAge : 24 * 60 * 60 * 1000
103+ } ) ;
104+
105+ if ( user == '' ) {
106+ return res . status ( 400 ) . json ( {
107+ status : res . statusCode ,
108+ message : 'Email tidak ditemukan'
88109 } ) ;
89- res . status ( 200 ) . json ( {
90- status :res . statusCode ,
91- message : 'Berhasil Login' ,
92- token : accessToken
110+ }
111+ const match = await bcrypt . compare ( req . body . password , user [ 0 ] . password ) ;
112+ if ( ! match ) {
113+ return res . status ( 403 ) . json ( {
114+ message : "wrong password"
93115 } ) ;
116+ }
117+
118+ const idUser = user [ 0 ] . id ;
119+ const name = user [ 0 ] . name ;
120+ const email = user [ 0 ] . email ;
121+ const accessToken = jwt . sign ( {
122+ idUser,
123+ name,
124+ email
125+ } ,
126+ process . env . ACCESS_TOKEN_SECRET , {
127+ expiresIn : '60s'
128+ }
129+ ) ;
130+ const refreshToken = jwt . sign ( {
131+ idUser,
132+ name,
133+ email
134+ } ,
135+ process . env . REFRESH_TOKEN_SECRET , {
136+ expiresIn : '1d'
137+ }
138+ ) ;
139+ await Users . update ( {
140+ refresh_token : refreshToken
141+ } , {
142+ where : {
143+ id : idUser
144+ }
145+ } ) ;
146+ res . cookie ( 'refreshToken' , refreshToken , {
147+ httpOnly : true ,
148+ maxAge : 24 * 60 * 60 * 1000
149+ } ) ;
150+ res . status ( 200 ) . json ( {
151+ status : res . statusCode ,
152+ message : 'Berhasil Login' ,
153+ token : accessToken
154+ } ) ;
155+ }
94156
95- // } catch (error) {
96- // res.status(404).json({message: "Email tidak ditemukan"});
97- // }
157+ export const Logout = async ( req , res ) => {
158+ const refreshToken = req . cookies . refreshToken ;
159+ if ( ! refreshToken ) return res . status ( 401 ) . json ( {
160+ status : res . statusCode ,
161+ message : "No Token Found"
162+ } ) ;
163+ const user = await Users . findAll ( {
164+ where : {
165+ refresh_token : refreshToken
166+ }
167+ } ) ;
168+ if ( ! user [ 0 ] ) return res . status ( 401 ) . json ( {
169+ status : res . statusCode ,
170+ message : "No User Found"
171+ } ) ;
172+ const idUser = user [ 0 ] . id
173+ await Users . update ( { refresh_token : null } , {
174+ where : {
175+ id : idUser
176+ }
177+ } ) ;
178+ res . clearCookie ( 'refreshToken' )
179+ return res . status ( 200 ) . json ( {
180+ status : res . statusCode ,
181+ message : "Logged out successfully"
182+ } ) ;
98183}
0 commit comments