@@ -3,143 +3,155 @@ const express = require("express");
33const bodyParser = require ( "body-parser" ) ;
44const app = express ( ) ;
55const router = express . Router ( ) ;
6- const cookieParser = require ( ' cookie-parser' ) ;
6+ const cookieParser = require ( " cookie-parser" ) ;
77require ( "dotenv-safe" ) . load ( ) ;
8- const jwt = require ( ' jsonwebtoken' ) ;
9- var mongo = require ( ' mongodb' )
8+ const jwt = require ( " jsonwebtoken" ) ;
9+ var mongo = require ( " mongodb" ) ;
1010
1111// Configures everything needed for the app
12- app . use ( express . static ( ' static' ) ) ;
13- app . use ( ' /css' , express . static ( ' ./css' ) ) ;
14- app . use ( ' /js' , express . static ( ' ./js' ) ) ;
15- app . use ( ' /images' , express . static ( ' ./images' ) ) ;
16- app . set ( ' views' , ' static/views' ) ;
17- app . engine ( ' html' , require ( ' ejs' ) . renderFile ) ;
18- app . set ( ' view engine' , ' html' ) ;
12+ app . use ( express . static ( " static" ) ) ;
13+ app . use ( " /css" , express . static ( " ./css" ) ) ;
14+ app . use ( " /js" , express . static ( " ./js" ) ) ;
15+ app . use ( " /images" , express . static ( " ./images" ) ) ;
16+ app . set ( " views" , " static/views" ) ;
17+ app . engine ( " html" , require ( " ejs" ) . renderFile ) ;
18+ app . set ( " view engine" , " html" ) ;
1919app . use ( bodyParser . json ( ) ) ;
20- app . use ( bodyParser . urlencoded ( { extended : true } ) ) ;
21- app . use ( cookieParser ( ) )
20+ app . use ( bodyParser . urlencoded ( { extended : true } ) ) ;
21+ app . use ( cookieParser ( ) ) ;
2222
2323// Creates a connection to the database
24- var port = process . env . MONGO_PORT
25- var MongoClient = require ( ' mongodb' ) . MongoClient ;
26- var url = "mongodb://db:27017/stego"
24+ var port = process . env . MONGO_PORT ;
25+ var MongoClient = require ( " mongodb" ) . MongoClient ;
26+ var url = "mongodb://db:27017/stego" ;
2727
2828// Connect to the database
29- MongoClient . connect ( url , function ( err , db ) {
30- if ( err ) throw err ;
31- console . log ( "Database created!" ) ;
32- db . close ( ) ;
29+ MongoClient . connect ( url , function ( err , db ) {
30+ if ( err ) throw err ;
31+ console . log ( "Database created!" ) ;
32+ db . close ( ) ;
3333} ) ;
3434
3535// Create "users" collection
36- var url = "mongodb://db:27017/stego"
37- MongoClient . connect ( url , function ( err , db ) {
36+ var url = "mongodb://db:27017/stego" ;
37+ MongoClient . connect ( url , function ( err , db ) {
38+ if ( err ) throw err ;
39+ var dbo = db . db ( "stego" ) ;
40+ dbo . createCollection ( "users" , function ( err , ress ) {
3841 if ( err ) throw err ;
39- var dbo = db . db ( "stego" ) ;
40- dbo . createCollection ( "users" , function ( err , ress ) {
41- if ( err ) throw err ;
42- console . log ( "Users collection created!" ) ;
43- db . close ( ) ;
44- } )
42+ console . log ( "Users collection created!" ) ;
43+ db . close ( ) ;
44+ } ) ;
4545} ) ;
4646
4747// Add "admin" default user to the database
48- MongoClient . connect ( url , function ( err , db ) {
48+ MongoClient . connect ( url , function ( err , db ) {
49+ if ( err ) throw err ;
50+ var dbo = db . db ( "stego" ) ;
51+ var myobj = { username : process . env . USER , password : process . env . PASS } ;
52+ dbo . collection ( "users" ) . insertOne ( myobj , function ( err , res ) {
4953 if ( err ) throw err ;
50- var dbo = db . db ( "stego" ) ;
51- var myobj = { username : "admin" , password : "admin" } ;
52- dbo . collection ( "users" ) . insertOne ( myobj , function ( err , res ) {
53- if ( err ) throw err ;
54- console . log ( "Admin user added to the database" ) ;
55- db . close ( ) ;
56- } ) ;
54+ console . log ( "Admin user added to the database" ) ;
55+ db . close ( ) ;
56+ } ) ;
5757} ) ;
5858
5959// User login route, get webpage
60- router . get ( "/login" , function ( req , res ) {
61- res . render ( "login.html" ) ;
62- } )
60+ router . get ( "/login" , function ( req , res ) {
61+ res . render ( "login.html" ) ;
62+ } ) ;
6363
6464// User login route, submit POST request to server
65- router . post ( "/login" , function ( req , res ) {
66- var username = req . body . user . name ;
67- var password = req . body . user . password ;
68-
69- // Verifies user credentials
70- function VerifiesUser ( callback ) {
71- MongoClient . connect ( url , function ( err , db ) {
72- if ( err ) throw err ;
73- var dbo = db . db ( "stego" ) ;
74- var query = { username : username , password : password } ;
75- dbo . collection ( "users" ) . find ( query ) . toArray ( function ( err , result ) {
76- if ( err ) throw err ;
77- db . close ( ) ;
78- if ( result . length == 0 ) {
79- callback ( 'not_found' )
80- } else {
81- callback ( result [ 0 ] . username ) ;
82- }
83- } ) ;
65+ router . post ( "/login" , function ( req , res ) {
66+ var username = req . body . user . name ;
67+ var password = req . body . user . password ;
68+
69+ // Verifies user credentials
70+ function VerifiesUser ( callback ) {
71+ MongoClient . connect ( url , function ( err , db ) {
72+ if ( err ) throw err ;
73+ var dbo = db . db ( "stego" ) ;
74+ var query = { username : username , password : password } ;
75+ dbo
76+ . collection ( "users" )
77+ . find ( query )
78+ . toArray ( function ( err , result ) {
79+ if ( err ) throw err ;
80+ db . close ( ) ;
81+ if ( result . length == 0 ) {
82+ callback ( "not_found" ) ;
83+ } else {
84+ callback ( result [ 0 ] . username ) ;
85+ }
8486 } ) ;
85- } ;
86-
87- VerifiesUser ( ( username ) => {
88- if ( username == "admin" ) {
89- var token = jwt . sign ( { username } , process . env . SECRET , {
90- expiresIn : 300 // Token expires in 5 minutes
91- } ) ;
92- res . cookie ( 'nodejsSessionToken' , token ) . redirect ( 301 , "/admin" ) ;
93- } else {
94- res . status ( 500 ) . send ( 'Invalid username or password!' ) . redirect ( 301 , "/logout" ) ;
95- }
9687 } ) ;
97- } )
88+ }
89+
90+ // User: admin, password: admin, userRole: 1 //normal 2 //admin
91+
92+ VerifiesUser ( ( username ) => {
93+ if ( username == process . env . USER ) {
94+ var token = jwt . sign ( { username } , process . env . SECRET , {
95+ expiresIn : 300 , // Token expires in 5 minutes
96+ } ) ;
97+ res . cookie ( "SessionToken" , token ) . redirect ( 301 , "/as-admin" ) ;
98+ } else {
99+ res
100+ . status ( 500 )
101+ . send ( "Invalid username or password!" )
102+ . redirect ( 301 , "/logout" ) ;
103+ }
104+ } ) ;
105+ } ) ;
98106
99107// Logout route to deauthorize user session tokens
100- router . get ( "/logout" , function ( req , res ) {
101- res . status ( 200 ) . clearCookie ( 'nodejsSessionToken' ) . redirect ( 301 , "/" ) ;
108+ router . get ( "/logout" , function ( req , res ) {
109+ res . status ( 200 ) . clearCookie ( "SessionToken" ) . redirect ( 301 , "/" ) ;
102110} ) ;
103111
104112// Admin maintenance page
105113router . get ( "/admin" , verifyJWT , ( req , res , next ) => {
106- res . status ( 200 ) . render ( "admin.html" ) ;
114+ res . status ( 200 ) . render ( "admin.html" ) ;
107115} ) ;
108116
109117// Change password route
110- router . get ( "/changepassword" , verifyJWT , function ( req , res , next ) {
111- // Code to change user password in the database
112- } )
118+ router . get ( "/changepassword" , verifyJWT , function ( req , res , next ) {
119+ // Code to change user password in the database
120+ } ) ;
113121
114122// Healthcheck route
115- router . get ( "/healthcheck" , function ( req , res ) {
116- res . send ( "WORKING" ) ;
117- } )
123+ router . get ( "/healthcheck" , function ( req , res ) {
124+ res . send ( "WORKING" ) ;
125+ } ) ;
118126
119127// Main page
120- router . get ( "/" , function ( req , res ) {
121- res . render ( "index.html" )
122- } )
128+ router . get ( "/" , function ( req , res ) {
129+ res . render ( "index.html" ) ;
130+ } ) ;
123131
124132// Returns the error web-page if none other is found
125- app . use ( '/' , router ) ;
126- app . use ( function ( req , res , next ) {
127- res . status ( 404 ) . render ( "error.html" )
133+ app . use ( "/" , router ) ;
134+ app . use ( function ( req , res , next ) {
135+ res . status ( 404 ) . render ( "error.html" ) ;
128136} ) ;
129137// Listen on port 10006
130138app . listen ( 10006 , ( ) => {
131- console . log ( "Server running on port 10006!" ) ;
132- } )
139+ console . log ( "Server running on port 10006!" ) ;
140+ } ) ;
133141
134142// Verifies the JWT token
135- function verifyJWT ( req , res , next ) {
136- var token = req . cookies . nodejsSessionToken ;
137- if ( ! token ) return res . status ( 401 ) . send ( { auth : false , message : 'No token provided' } ) ;
138-
139- jwt . verify ( token , process . env . SECRET , function ( err , decoded ) {
140- if ( err ) return res . status ( 500 ) . send ( { auth : false , message : 'Failed to authenticate token.' } ) ;
141-
142- req . userId = decoded . id ;
143- next ( ) ;
144- } ) ;
145- }
143+ function verifyJWT ( req , res , next ) {
144+ var token = req . cookies . SessionToken ;
145+ if ( ! token )
146+ return res . status ( 401 ) . send ( { auth : false , message : "No token provided" } ) ;
147+
148+ jwt . verify ( token , process . env . SECRET , function ( err , decoded ) {
149+ if ( err )
150+ return res
151+ . status ( 500 )
152+ . send ( { auth : false , message : "Failed to authenticate token." } ) ;
153+
154+ req . userId = decoded . id ;
155+ next ( ) ;
156+ } ) ;
157+ }
0 commit comments