2021-11-18 05:58:37 +01:00
const express = require ( "express" ) ;
2021-11-16 07:18:59 +01:00
const bcrypt = require ( "bcrypt" ) ;
const randtoken = require ( "rand-token" ) ;
2021-11-21 02:16:15 +01:00
2021-11-16 07:18:59 +01:00
const router = express . Router ( ) ;
2021-11-21 02:16:15 +01:00
2021-11-18 05:58:37 +01:00
const db = require ( "../modules/db" ) ;
const mail = require ( "../modules/mail" ) ;
2021-11-21 02:16:15 +01:00
const auth = require ( "../auth/auth" ) ;
2021-11-16 07:18:59 +01:00
const saltRounds = 10 ;
2021-11-15 10:59:21 +01:00
2021-11-17 09:32:44 +01:00
let config ;
try {
2021-11-20 03:09:06 +01:00
config = require ( "../config" ) ;
2021-11-17 09:32:44 +01:00
} catch ( e ) {
2021-11-20 03:09:06 +01:00
console . log ( "No config file found" ) ;
process . exit ( 0 ) ;
2021-11-17 09:32:44 +01:00
}
2021-11-18 05:58:37 +01:00
router . get ( "/getproducts" , ( req , res ) => {
2021-11-20 03:09:06 +01:00
const conn = db . connect ( ) ;
conn . execute ( "SELECT * FROM `products`" , [ ] , function ( err , results ) {
res . json ( results ) ;
} ) ;
2021-11-18 05:58:37 +01:00
} ) ;
2021-11-15 10:59:21 +01:00
2021-11-18 05:58:37 +01:00
router . get ( "/getproduct" , ( req , res ) => {
2021-11-20 03:09:06 +01:00
const conn = db . connect ( ) ;
conn . execute (
"SELECT * FROM `products` WHERE `ID` = ?" ,
[ req . query . id ] ,
function ( err , results ) {
res . json ( results ) ;
}
) ;
2021-11-18 05:58:37 +01:00
} ) ;
2021-11-15 10:59:21 +01:00
2021-11-18 05:58:37 +01:00
router . post ( "/register" , async ( req , res ) => {
2021-11-20 03:09:06 +01:00
if (
! req . body . email ||
! req . body . password ||
! req . body . first _name ||
! req . body . last _name
) {
res . status ( 400 ) ;
res . json ( {
2021-11-18 05:58:37 +01:00
message : "Bad Request" ,
2021-11-20 03:09:06 +01:00
} ) ;
} else {
const conn = db . connect ( ) ;
conn . query (
"SELECT * FROM users WHERE email = ?" ,
[ req . body . email ] ,
async function ( error , response , fields ) {
2021-11-18 05:58:37 +01:00
if ( error ) {
2021-11-20 03:09:06 +01:00
res . status ( 400 ) ;
res . json ( {
message : "Bad Request" ,
} ) ;
2021-11-16 07:18:59 +01:00
} else {
2021-11-20 03:09:06 +01:00
if ( response . length > 0 ) {
2021-11-18 05:58:37 +01:00
res . status ( 400 ) ;
res . json ( {
2021-11-20 03:09:06 +01:00
message : "Bad Request" ,
2021-11-18 05:58:37 +01:00
} ) ;
2021-11-20 03:09:06 +01:00
} else {
const encryptedPassword = await bcrypt . hash (
req . body . password ,
saltRounds
) ;
var users = {
first _name : req . body . first _name ,
last _name : req . body . last _name ,
email : req . body . email ,
password : encryptedPassword ,
session : "[]" ,
} ;
conn . query (
"INSERT INTO users SET ?" ,
users ,
function ( error , response , fields ) {
if ( error ) {
res . status ( 400 ) ;
res . json ( {
message : "Bad Request" ,
} ) ;
2021-11-16 07:18:59 +01:00
} else {
2021-11-20 03:09:06 +01:00
conn . query (
'SELECT * FROM users WHERE email ="' + req . body . email + '"' ,
function ( err , result ) {
if ( err ) {
res . status ( 400 ) ;
res . json ( {
message : "Bad Request" ,
} ) ;
}
if ( result . length > 0 ) {
var token = randtoken . generate ( 20 ) ;
if ( result [ 0 ] . verify == 0 ) {
let subject = "Account Verification - Nekoya" ;
let content = ` <p>Hello!!! Please click this link <a href=" ${ config . host } /verify-mail?token= ${ token } ">link</a> to verify your account!!! Thanks!!!</p> ` ;
var sent = mail . send (
req . body . email ,
subject ,
content
) ;
if ( sent != "0" ) {
var data = {
token : token ,
} ;
conn . query (
'UPDATE users SET ? WHERE email ="' +
req . body . email +
'"' ,
data ,
function ( err , result ) {
if ( err ) {
res . status ( 400 ) ;
res . json ( {
message : "Bad Request" ,
} ) ;
} else {
res . status ( 200 ) ;
res . json ( {
message : "Register Verification Sent ~" ,
} ) ;
}
}
) ;
} else {
res . status ( 400 ) ;
res . json ( {
message : "Bad Request" ,
} ) ;
}
}
} else {
res . status ( 400 ) ;
res . json ( {
message : "Bad Request" ,
} ) ;
}
}
) ;
2021-11-16 07:18:59 +01:00
}
2021-11-20 03:09:06 +01:00
}
) ;
2021-11-17 09:22:12 +01:00
}
}
2021-11-20 03:09:06 +01:00
}
) ;
}
2021-11-18 05:58:37 +01:00
} ) ;
2021-11-16 07:18:59 +01:00
2021-11-18 05:58:37 +01:00
router . post ( "/login" , async ( req , res ) => {
2021-11-20 03:09:06 +01:00
if ( ! req . body . email || ! req . body . password ) {
res . status ( 400 ) ;
res . json ( {
message : "Bad Request" ,
} ) ;
} else {
const conn = db . connect ( ) ;
conn . query (
"SELECT * FROM users WHERE email = ?" ,
[ req . body . email ] ,
async function ( error , response , fields ) {
if ( ! response [ 0 ] ) {
res . status ( 205 ) ;
res . json ( {
message : "Sorry Your email is not registered in our system" ,
} ) ;
2021-11-17 09:51:52 +01:00
} else {
2021-11-20 03:09:06 +01:00
const passCheck = await bcrypt . compare (
req . body . password ,
response [ 0 ] . password
) ;
if ( error ) {
2021-11-18 05:58:37 +01:00
res . status ( 400 ) ;
res . json ( {
2021-11-20 03:09:06 +01:00
message : "Bad Request" ,
2021-11-18 05:58:37 +01:00
} ) ;
2021-11-20 03:09:06 +01:00
} else {
if ( response . length > 0 ) {
if ( passCheck ) {
if ( response [ 0 ] . verify == 0 ) {
res . status ( 204 ) ;
res . json ( {
message : "Sorry You haven't verified your email" ,
} ) ;
} else {
let token = randtoken . generate ( 256 ) ;
let session = JSON . parse ( response [ 0 ] . session ) ;
session . push ( {
user _agent : req . body . ua || req . headers [ "user-agent" ] ,
ip : req . body . ip ||
req . headers [ "x-forwarded-for" ] ||
req . socket . remoteAddress ,
session : token ,
} ) ;
conn . query (
'UPDATE users SET ? WHERE email ="' + req . body . email + '"' , {
session : JSON . stringify ( session ) ,
} ,
function ( err , result ) {
if ( err ) {
res . status ( 400 ) ;
res . json ( {
message : "Bad Request" ,
} ) ;
} else {
res . status ( 200 ) ;
res . json ( {
id : response [ 0 ] . id ,
first _name : response [ 0 ] . first _name ,
last _name : response [ 0 ] . last _name ,
email : response [ 0 ] . email ,
verify : response [ 0 ] . verify == 1 ? true : false ,
session _token : token ,
} ) ;
}
}
) ;
}
} else {
res . status ( 401 ) ;
res . json ( {
message : "Unauthorized" ,
} ) ;
}
} else {
res . status ( 400 ) ;
res . json ( {
message : "Bad Request" ,
} ) ;
}
2021-11-18 05:58:37 +01:00
}
2021-11-17 09:51:52 +01:00
}
2021-11-18 05:58:37 +01:00
}
2021-11-20 03:09:06 +01:00
) ;
}
2021-11-18 05:58:37 +01:00
} ) ;
2021-11-21 05:37:38 +01:00
router . post ( "/verify-mail" , async ( req , res ) => {
2021-11-21 01:26:36 +01:00
if ( ! req . body . token ) {
res . status ( 400 ) ;
res . json ( {
message : "Bad Request" ,
} ) ;
} else {
const conn = db . connect ( ) ;
conn . query (
'SELECT * FROM users WHERE token ="' + req . body . token + '"' ,
function ( err , result ) {
if ( err ) {
res . status ( 400 ) ;
res . json ( {
message : "Bad Request" ,
} ) ;
}
if ( result . length > 0 ) {
if ( result [ 0 ] . verify == 0 ) {
var data = {
verify : 1 ,
2021-11-21 05:37:38 +01:00
token : randtoken . generate ( 64 ) ,
2021-11-21 01:26:36 +01:00
} ;
2021-11-21 03:13:35 +01:00
conn . query (
2021-11-21 01:26:36 +01:00
'UPDATE users SET ? WHERE email ="' + result [ 0 ] . email + '"' ,
data ,
function ( err , result ) {
if ( err ) {
res . status ( 400 ) ;
res . json ( {
message : "Bad Request" ,
} ) ;
} else {
res . status ( 200 ) ;
res . json ( {
message : "Verified ~" ,
} ) ;
}
2021-11-20 03:09:06 +01:00
}
2021-11-21 01:26:36 +01:00
) ;
} else {
res . status ( 403 ) ;
res . json ( {
message : "Forbidden" ,
} ) ;
}
2021-11-20 03:09:06 +01:00
} else {
2021-11-21 01:26:36 +01:00
res . status ( 400 ) ;
2021-11-20 03:09:06 +01:00
res . json ( {
2021-11-21 01:26:36 +01:00
message : "Bad Request" ,
2021-11-20 03:09:06 +01:00
} ) ;
}
2021-11-17 09:51:52 +01:00
}
2021-11-21 01:26:36 +01:00
) ;
2021-11-17 09:51:52 +01:00
}
2021-11-20 03:09:06 +01:00
} ) ;
2021-11-21 07:40:10 +01:00
router . post ( "/request-reset-password" , async ( req , res ) => {
if ( ! req . body . email ) {
res . status ( 400 ) ;
res . json ( {
message : "Bad Request" ,
} ) ;
} else {
const conn = db . connect ( ) ;
conn . query (
"SELECT * FROM users WHERE email = ?" ,
[ req . body . email ] ,
async function ( error , response , fields ) {
if ( ! response [ 0 ] ) {
res . status ( 205 ) ;
res . json ( {
message : "Sorry Your email is not registered in our system" ,
} ) ;
} else {
let subject = "Reset Password - Nekoya" ;
let content = ` <p>Hello!!! Please click this link <a href=" ${ config . host } /reset-password?token= ${ response [ 0 ] . token } ">link</a> to reset your account password!!! Thanks!!!</p> ` ;
var sent = mail . send (
req . body . email ,
subject ,
content
) ;
if ( sent != "0" ) {
res . status ( 200 ) ;
res . json ( {
message : "Reset Password Verification Sent ~" ,
} ) ;
} else {
res . status ( 400 ) ;
res . json ( {
message : "Bad Request" ,
} ) ;
}
}
}
) ;
}
} ) ;
router . post ( "/reset-password" , async ( req , res ) => {
if ( ! req . query . token ) {
res . status ( 401 ) ;
res . json ( {
message : "Unauthorized" ,
} ) ;
} else {
auth . auth _checker ( req . query . token ) . then ( ( status ) => {
if ( status ) {
if ( ! req . body . password ) {
res . status ( 400 ) ;
res . json ( {
message : "Bad Request" ,
} ) ;
} else {
const conn = db . connect ( ) ;
conn . query (
'SELECT * FROM users WHERE token ="' + req . query . token + '"' ,
async function ( err , result ) {
if ( err ) {
res . status ( 400 ) ;
res . json ( {
message : "Bad Request" ,
} ) ;
}
if ( result . length > 0 ) {
const encryptedPassword = await bcrypt . hash (
req . body . password ,
saltRounds
) ;
var data = {
password : encryptedPassword ,
token : randtoken . generate ( 64 ) ,
} ;
conn . query (
'UPDATE users SET ? WHERE email ="' + result [ 0 ] . email + '"' ,
data ,
function ( err , result ) {
if ( err ) {
res . status ( 400 ) ;
res . json ( {
message : "Bad Request" ,
} ) ;
} else {
res . status ( 200 ) ;
res . json ( {
message : "Success Reset Password ~" ,
} ) ;
}
}
) ;
} else {
res . status ( 400 ) ;
res . json ( {
message : "Bad Request" ,
} ) ;
}
}
) ;
}
} else {
res . status ( 401 ) ;
res . json ( {
message : "Unauthorized" ,
} ) ;
}
} ) ;
}
} ) ;
2021-11-20 03:09:06 +01:00
router . post ( "/checkout" , async ( req , res ) => {
2021-11-21 02:16:15 +01:00
if ( ! req . query . key ) {
res . status ( 401 ) ;
2021-11-18 05:58:37 +01:00
res . json ( {
2021-11-21 02:16:15 +01:00
message : "Unauthorized" ,
2021-11-18 05:58:37 +01:00
} ) ;
2021-11-20 03:09:06 +01:00
} else {
2021-11-21 02:16:15 +01:00
auth . auth _checker ( req . query . key ) . then ( ( status ) => {
if ( status ) {
if (
! req . body . firstName ||
! req . body . lastName ||
! req . body . phoneNumber ||
! req . body . streetAddress1 ||
! req . body . streetAddress2 ||
! req . body . region ||
! req . body . province ||
! req . body . city ||
! req . body . district ||
! req . body . subDistrict ||
! req . body . postalCode ||
! req . body . logistic ||
! req . body . data
) {
2021-11-20 03:09:06 +01:00
res . status ( 400 ) ;
res . json ( {
message : "Bad Request" ,
} ) ;
} else {
2021-11-21 02:16:15 +01:00
const conn = db . connect ( ) ;
2021-11-20 03:09:06 +01:00
conn . query (
2021-11-21 05:25:28 +01:00
"SELECT * FROM users WHERE token = ?" ,
[ req . query . key ] ,
async function ( error , resp , fields ) {
2021-11-21 02:16:15 +01:00
if ( error ) {
2021-11-21 05:25:28 +01:00
res . status ( 401 ) ;
2021-11-21 02:16:15 +01:00
res . json ( {
2021-11-21 05:25:28 +01:00
message : "Unauthorized" ,
2021-11-21 02:16:15 +01:00
} ) ;
} else {
2021-11-21 05:25:28 +01:00
var data = {
firstName : req . body . firstName ,
lastName : req . body . lastName ,
phoneNumber : req . body . phoneNumber ,
streetAddress1 : req . body . streetAddress1 ,
streetAddress2 : req . body . streetAddress2 ,
region : req . body . region ,
province : req . body . province ,
city : req . body . city ,
district : req . body . district ,
subDistrict : req . body . subDistrict ,
postalCode : req . body . postalCode ,
logistic : req . body . logistic ,
paymentMethod : '-' ,
data : req . body . data ,
userId : resp [ 0 ] . id ,
paid : '0' ,
status : 'pending'
} ;
2021-11-21 02:16:15 +01:00
conn . query (
2021-11-21 05:25:28 +01:00
"INSERT INTO transactions SET ?" ,
data ,
function ( error , response , fields ) {
if ( error ) {
res . status ( 400 ) ;
res . json ( {
message : "Bad Request" ,
} ) ;
} else {
conn . query (
'SELECT * FROM transactions WHERE id ="' + response . insertId + '"' ,
function ( err , result ) {
if ( err ) {
res . status ( 400 ) ;
res . json ( {
message : "Bad Request" ,
} ) ;
} else {
res . status ( 201 ) ;
res . json ( {
'order_id' : result [ 0 ] . id ,
'data' : result [ 0 ] . data
} ) ;
}
} ) ;
}
2021-11-21 02:16:15 +01:00
}
2021-11-21 05:25:28 +01:00
) ;
2021-11-21 02:16:15 +01:00
}
2021-11-20 03:09:06 +01:00
}
2021-11-21 02:16:15 +01:00
) ;
2021-11-20 03:09:06 +01:00
}
2021-11-21 02:16:15 +01:00
} else {
res . status ( 401 ) ;
res . json ( {
message : "Unauthorized" ,
} ) ;
2021-11-20 03:09:06 +01:00
}
2021-11-21 02:16:15 +01:00
} ) ;
2021-11-18 05:58:37 +01:00
}
} ) ;
2021-11-17 09:51:52 +01:00
2021-11-21 03:56:58 +01:00
router . post ( "/transaction" , async ( req , res ) => {
if ( ! req . query . key ) {
res . status ( 401 ) ;
res . json ( {
message : "Unauthorized" ,
} ) ;
} else {
auth . auth _checker ( req . query . key ) . then ( ( status ) => {
if ( status ) {
const conn = db . connect ( ) ;
conn . query (
"SELECT * FROM users WHERE token = ?" ,
[ req . query . key ] ,
async function ( error , response , fields ) {
if ( error ) {
res . status ( 401 ) ;
res . json ( {
message : "Unauthorized" ,
} ) ;
} else {
conn . query (
"SELECT * FROM transactions WHERE userId = ?" ,
[ response [ 0 ] . id ] ,
async function ( error , resp , fields ) {
if ( error ) {
res . status ( 400 ) ;
res . json ( {
message : "Bad Request" ,
} ) ;
} else {
res . status ( 200 ) ;
res . json ( resp ) ;
}
}
) ;
}
}
) ;
} else {
res . status ( 401 ) ;
res . json ( {
message : "Unauthorized" ,
} ) ;
}
} ) ;
}
} ) ;
2021-11-21 06:30:35 +01:00
router . get ( "/subscribe" , ( req , res ) => {
if ( ! req . query . email ) {
res . status ( 400 ) ;
res . json ( {
message : "Bad Request" ,
} ) ;
} else {
const conn = db . connect ( ) ;
conn . execute (
"SELECT * FROM `subscribe` WHERE `email` = ?" ,
[ req . query . email ] ,
function ( err , results ) {
if ( ! results [ 0 ] ) {
let data = {
email : req . query . email ,
type : "email"
} ;
conn . query (
"INSERT INTO subscribe SET ?" ,
data ,
function ( err , resp ) {
if ( err ) {
res . status ( 400 ) ;
res . json ( {
message : "Bad Request" ,
} ) ;
} else {
res . status ( 201 ) ;
res . json ( {
message : "Success" ,
} ) ;
}
}
) ;
} else {
res . status ( 200 ) ;
res . json ( {
message : "Success" ,
} ) ;
}
}
) ;
}
} ) ;
2021-11-20 03:09:06 +01:00
module . exports = router ;