1
1
'use strict' ;
2
2
const express = require ( 'express' ) ;
3
+ const app = express ( ) ;
3
4
const http = require ( 'http' ) ;
4
5
const session = require ( 'express-session' ) ;
5
6
const bodyParser = require ( 'body-parser' ) ;
6
7
const cookieParser = require ( 'cookie-parser' ) ;
7
- const querystring = require ( 'querystring' ) ;
8
8
const srvConfig = require ( './config' ) ;
9
-
10
9
const mongoose = require ( 'mongoose' ) ;
11
- require ( './database/model/users' ) ;
12
- const db = mongoose . connection ;
13
- const Users = mongoose . model ( 'Users' ) ;
14
-
15
- const app = express ( ) ;
16
- const passport = require ( 'passport' ) ;
17
- const LocalStrategy = require ( 'passport-local' ) . Strategy ;
18
- const flash = require ( 'connect-flash' ) ;
19
-
20
- const authenticationMiddleware = require ( './middleware/authenticationMiddleware' ) ;
21
- const bcrypt = require ( 'bcryptjs' ) ;
10
+ const { CONNECTION_TYPE , DB_HOST , DB_USERNAME , DB_PASSWORD , DB_PORT , DB_NAME , DB_QUERY_PARAMS } = srvConfig ;
11
+ const dbAuthString = ( DB_USERNAME && DB_PASSWORD ) ? `${ srvConfig . DB_USERNAME } :${ srvConfig . DB_PASSWORD } @` : '' ;
12
+ let httpServer ;
22
13
23
- //Install middlewear
14
+ /**
15
+ * Configure middleware
16
+ */
24
17
app . use ( cookieParser ( ) ) ;
25
18
app . use ( bodyParser . json ( ) ) ;
26
19
app . use ( session ( {
27
20
saveUninitialized : true ,
28
21
secret : srvConfig . SESSION_SECRET ,
29
22
resave : true
30
23
} ) ) ;
31
- app . use ( passport . initialize ( ) ) ;
32
- app . use ( passport . session ( ) ) ;
33
- app . use ( flash ( ) ) ;
34
24
35
25
/**
36
26
* Include all API Routes
37
27
*/
38
28
app . use ( '/api' , require ( './routes/api' ) ) ;
39
29
40
-
41
- //ToDo: Refactor this to own route
42
- //Passport middleware for Authentication
43
- passport . use ( new LocalStrategy (
44
- function ( username , password , done ) {
45
- Users . findOne ( { username : username } , function ( err , user ) {
46
- if ( err ) {
47
- return done ( err ) ;
48
- }
49
- if ( ! user ) {
50
- return done ( null , false , { message : 'username-incorrect' } ) ;
51
- }
52
- if ( ! bcrypt . compareSync ( password , user . password ) ) {
53
- return done ( null , false , { message : 'password-incorrect' } ) ;
54
- }
55
- return done ( null , user ) ;
56
- } ) ;
57
- }
58
- ) ) ;
59
- passport . serializeUser ( function ( user , done ) {
60
- done ( null , user ) ;
61
-
62
- } ) ;
63
- passport . deserializeUser ( function ( user , done ) {
64
- done ( null , user ) ;
65
-
66
- } ) ;
67
-
68
-
69
- app . post ( '/login' ,
70
- passport . authenticate ( 'local' , {
71
- successFlash : 'Welcome!' ,
72
- failureFlash : true ,
73
- successRedirect : '/dashboard' ,
74
- failureRedirect : '/login' ,
75
- } )
76
- ) ;
77
-
78
- app . get ( '/login' , ( req , res ) => {
79
- res . json ( {
80
- success : false ,
81
- logout : true ,
82
- errorMsg : req . flash ( 'error' )
83
- } ) ;
84
- } ) ;
85
-
86
- app . post ( '/register' , async ( req , res ) => {
87
-
88
- //If usernameCheck
89
- let usernameCheck = req . query . usernameCheck ;
90
- if ( usernameCheck ) {
91
- let username = req . body . username ;
92
-
93
- if ( username !== '' ) {
94
- await Users . findOne ( { username : username } , function ( err , user ) {
95
- if ( err ) {
96
- return res . json ( {
97
- success : false ,
98
- error : true
99
- } ) ;
100
- }
101
- if ( ! user ) {
102
- return res . json ( {
103
- success : true ,
104
- } ) ;
105
- } else {
106
- return res . json ( {
107
- success : false ,
108
- } ) ;
109
- }
110
- } )
111
- }
112
- }
113
-
114
- let name = req . body . name ;
115
- let username = req . body . username ;
116
- let password = req . body . password ;
117
-
118
- if ( name && username && password ) {
119
-
120
- await Users . findOne ( { username : username } , async function ( err , user ) {
121
- if ( err ) {
122
- return res . json ( {
123
- success : false ,
124
- error : true
125
- } ) ;
126
- }
127
- if ( ! user ) {
128
- const salt = bcrypt . genSaltSync ( 10 ) ;
129
- const user = new Users ( {
130
- name : name ,
131
- username : username ,
132
- password : bcrypt . hashSync ( password , salt )
133
- } ) ;
134
-
135
- user . save ( function ( err , fluffy ) {
136
- if ( err ) return console . error ( err ) ;
137
- } ) ;
138
- return res . json ( {
139
- success : true ,
140
- } ) ;
141
- } else {
142
- return res . json ( {
143
- success : false ,
144
- } ) ;
145
- }
146
- } ) ;
147
- }
148
- } ) ;
149
-
150
- app . get ( '/logout' , function ( req , res ) {
151
- req . logout ( ) ;
152
- res . redirect ( '/login' ) ;
153
- } ) ;
154
-
155
- app . get ( '/dashboard' , authenticationMiddleware ( ) , ( req , res ) => {
156
- return res . json ( {
157
- success : true ,
158
- username : req . session . passport . user . username ,
159
- successMsg : req . flash ( 'success' )
160
- } ) ;
161
- } ) ;
162
-
163
- let httpServer ;
30
+ /**
31
+ * Configure http(s)Server
32
+ */
164
33
if ( srvConfig . HTTPS_ENABLED ) {
165
34
const privateKey = fs . readFileSync ( srvConfig . PRIVATE_KEY_PATH , 'utf8' ) ;
166
35
const certificate = fs . readFileSync ( srvConfig . CERTIFICATE_PATH , 'utf8' ) ;
@@ -173,8 +42,11 @@ if (srvConfig.HTTPS_ENABLED) {
173
42
httpServer = http . createServer ( { } , app ) ;
174
43
}
175
44
45
+ /**
46
+ * Start http server & connect to MongoDB
47
+ */
176
48
httpServer . listen ( srvConfig . SERVER_PORT , ( ) => {
177
- mongoose . connect ( `mongodb+srv ://${ srvConfig . DB_USERNAME } : ${ srvConfig . DB_PASSWORD } @ ${ srvConfig . DB_HOST } /${ srvConfig . DB_NAME } ${ srvConfig . DB_QUERY_PARAMS } ` , {
49
+ mongoose . connect ( `${ CONNECTION_TYPE } ://${ dbAuthString } ${ DB_HOST } : ${ DB_PORT } /${ DB_NAME } ${ DB_QUERY_PARAMS } ` , {
178
50
useNewUrlParser : true ,
179
51
useUnifiedTopology : true
180
52
} , ( ) => {
@@ -183,7 +55,7 @@ httpServer.listen(srvConfig.SERVER_PORT, () => {
183
55
} ) ;
184
56
185
57
/**
186
- * Socket.IO section
58
+ * Socket.io section
187
59
*/
188
60
const io = require ( 'socket.io' ) ( httpServer ) ;
189
61
io . on ( 'connection' , function ( socket ) {
0 commit comments