Skip to content

Commit 1eed745

Browse files
committed
alpha
1 parent 25c2d5a commit 1eed745

File tree

145 files changed

+21713
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

145 files changed

+21713
-0
lines changed

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
node_modules/
2+
node_modules/*

Gulpfile.js

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
var gulp = require('gulp');
2+
var sass = require('gulp-sass');
3+
var nodemon = require('gulp-nodemon');
4+
5+
6+
/*
7+
* sass compilation task
8+
**********************/
9+
gulp.task('sass', function() {
10+
gulp.src(['./public/scss/app.scss','./public/scss/response.scss'])
11+
.pipe(sass().on('error', sass.logError))
12+
.pipe(gulp.dest('./public/css/'))
13+
});
14+
15+
/*
16+
* nodemon task
17+
*********************************/
18+
gulp.task('nodemon',function(cb){
19+
var called = false;
20+
var initialized = false;
21+
return nodemon({
22+
script:'./bin/www',
23+
ext:'js',
24+
watch:['./routes/','./controllers/','./models/','./bin'],
25+
legacyWatch:true,
26+
});
27+
})
28+
29+
gulp.task('sass:watch',function(){
30+
gulp.watch('./public/scss/*.scss',['sass']);
31+
})
32+
33+
34+
/*
35+
* defaul task - nodemon and sass:watch
36+
*******************************************************/
37+
gulp.task('default',['nodemon','sass:watch']);

app.js

+61
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
var express = require('express');
2+
var path = require('path');
3+
var favicon = require('serve-favicon');
4+
var logger = require('morgan');
5+
var CONFIG = require('./bin/config');
6+
var cookieParser = require('cookie-parser');
7+
var bodyParser = require('body-parser');
8+
var session = require('express-session');
9+
var index = require('./routes/home');
10+
var session = require('express-session');
11+
var flash = require('connect-flash');
12+
var routes = require('./routes/');
13+
var app = express();
14+
var cors = require('cors');
15+
var passportObj = require('./bin/passport');
16+
// view engine setup
17+
app.set('views', path.join(__dirname, 'views'));
18+
app.set('view engine', 'ejs');
19+
app.use(cors());
20+
// uncomment after placing your favicon in /public
21+
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
22+
app.use(logger('dev'));
23+
app.use(bodyParser.json({limit:'50mb'}));
24+
app.use(bodyParser.urlencoded({ extended: false , limit:'50mb'}));
25+
app.use(cookieParser());
26+
app.use(express.static(path.join(__dirname, 'public')));
27+
28+
app.use(session({
29+
secret:CONFIG.SECRET,
30+
saveUninitialized:true,
31+
resave:true
32+
}));
33+
app.use(flash());
34+
app.use(passportObj.initialize());
35+
app.use(passportObj.startSession());
36+
37+
app.use('/', index);
38+
39+
40+
Object.keys(routes).forEach((routeName) => {
41+
app.use('/'+routeName, routes[routeName]);
42+
})
43+
// catch 404 and forward to error handler
44+
app.use(function(req, res, next) {
45+
var err = new Error('Not Found');
46+
err.status = 404;
47+
next(err);
48+
});
49+
50+
// error handler
51+
app.use(function(err, req, res, next) {
52+
// set locals, only providing error in development
53+
res.locals.message = err.message;
54+
res.locals.error = req.app.get('env') === 'development' ? err : {};
55+
56+
// render the error page
57+
res.status(err.status || 500);
58+
res.render('error');
59+
});
60+
61+
module.exports = app;

bin/config.js

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
module.exports = {
2+
3+
"SESSION_SECRET":"RESPONSE",
4+
"ROLES":{
5+
"ADMIN":"admin",
6+
"SECURITY_TEAM":"security_team",
7+
"RESIDENT":"resident"
8+
},
9+
"DATABASE":"mongodb://localhost/response_center",
10+
"DATABASE_PROD":"mongodb://h0m36r0wn:[email protected]:45299/response_center",
11+
"SECRET":"SOS",
12+
"REPORT_TYPES":{
13+
"EMERGENCY":"emergency",
14+
"FIRE":"fire",
15+
"EQUAKE":"earthquake",
16+
"FLOOD":"flood",
17+
"MED_EMERGENCY":"medical_emergency",
18+
"BURGLARY":"burglary",
19+
"INTIMIDATION":"intimidation",
20+
"HEINOUS":"heinous_crime",
21+
"ACCIDENT":"accident",
22+
"OTHER":"other"
23+
}
24+
}

bin/passport.js

+81
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
'use strict';
2+
var passport = require('passport');
3+
var LocalStrategy = require('passport-local');
4+
var UserMdl = require('../models/Users_mdl');
5+
var CONFIG = require('./config');
6+
class Passport{
7+
constructor(){
8+
this.strategy = new LocalStrategy({
9+
usernameField:'email', passwordField:'password', passReqToCallback:true
10+
}, function(req, email, password, next){
11+
UserMdl.findUserByEmail(email).then((userObj) => {
12+
if(userObj){
13+
if(userObj.password === password){
14+
return next(null, userObj);
15+
}else{
16+
return next(null, false,req.flash('loginMessage','Email and password does not match'))
17+
}
18+
}else{
19+
return next(null, false, req.flash('loginMessage','The email you entered does not exists'))
20+
}
21+
22+
})
23+
})
24+
}
25+
26+
initialize(){
27+
passport.use(this.strategy);
28+
passport.serializeUser((user, done ) => {
29+
done(null, user);
30+
})
31+
passport.deserializeUser((user, done) => {
32+
done(null, user);
33+
})
34+
return passport.initialize();
35+
}
36+
37+
startSession(){
38+
return passport.session();
39+
}
40+
41+
authenticate(){
42+
return passport.authenticate('local',{
43+
failureRedirect:'/response/signin',
44+
failureFlash:true
45+
});
46+
}
47+
48+
checkAuthentication(req, res, next){
49+
if(req.isAuthenticated()){
50+
return next();
51+
}else{
52+
res.redirect('/response/signin');
53+
}
54+
}
55+
56+
validateProfile(req, res ,next){
57+
switch(req.user.role){
58+
case CONFIG.ROLES.SECURITY_TEAM :
59+
res.redirect('/admin/map');
60+
break;
61+
case CONFIG.ROLE.ADMIN :
62+
res.redirect('/admin/dashboard');
63+
break;
64+
default:
65+
res.redirect('/response/signout');
66+
}
67+
}
68+
69+
logout(req, res, next){
70+
req.logout();
71+
req.session.destroy();
72+
res.redirect('/response/signin');
73+
}
74+
}
75+
76+
77+
let passportObj = new Passport();
78+
module.exports = passportObj;
79+
80+
81+

bin/www

+107
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
#!/usr/bin/env node
2+
'use strict';
3+
/**
4+
* Module dependencies.
5+
*/
6+
7+
var app = require('../app');
8+
var debug = require('debug')('response-center:server');
9+
var http = require('http');
10+
var mongoose = require('mongoose');
11+
var CONFIG = require('./config');
12+
var db = mongoose.connect(CONFIG.DATABASE);
13+
var conn = mongoose.connection;
14+
mongoose.Promise = global.Promise;
15+
16+
/**
17+
* Get port from environment and store in Express.
18+
*/
19+
20+
var port = normalizePort(process.env.PORT || '3000');
21+
app.set('port', port);
22+
23+
/**
24+
* Create HTTP server.
25+
*/
26+
27+
var server = http.createServer(app);
28+
var io = require('socket.io')(server, {origins:'*:*'});
29+
/**
30+
* Listen on provided port, on all network interfaces.
31+
*/
32+
33+
34+
conn.on('error', console.error.bind(console, 'connection error'));
35+
conn.on('open', () => {
36+
server.listen(port);
37+
server.on('error', onError);
38+
server.on('listening', onListening);
39+
io.on('connection', (socket) => {
40+
console.log('user connected');
41+
socket.on('sos', (location) => {
42+
console.log('sos recieved');
43+
io.emit('sendSos', location)
44+
})
45+
})
46+
})
47+
48+
49+
/**
50+
* Normalize a port into a number, string, or false.
51+
*/
52+
53+
function normalizePort(val) {
54+
var port = parseInt(val, 10);
55+
56+
if (isNaN(port)) {
57+
// named pipe
58+
return val;
59+
}
60+
61+
if (port >= 0) {
62+
// port number
63+
return port;
64+
}
65+
66+
return false;
67+
}
68+
69+
/**
70+
* Event listener for HTTP server "error" event.
71+
*/
72+
73+
function onError(error) {
74+
if (error.syscall !== 'listen') {
75+
throw error;
76+
}
77+
78+
var bind = typeof port === 'string'
79+
? 'Pipe ' + port
80+
: 'Port ' + port;
81+
82+
// handle specific listen errors with friendly messages
83+
switch (error.code) {
84+
case 'EACCES':
85+
console.error(bind + ' requires elevated privileges');
86+
process.exit(1);
87+
break;
88+
case 'EADDRINUSE':
89+
console.error(bind + ' is already in use');
90+
process.exit(1);
91+
break;
92+
default:
93+
throw error;
94+
}
95+
}
96+
97+
/**
98+
* Event listener for HTTP server "listening" event.
99+
*/
100+
101+
function onListening() {
102+
var addr = server.address();
103+
var bind = typeof addr === 'string'
104+
? 'pipe ' + addr
105+
: 'port ' + addr.port;
106+
debug('Listening on ' + bind);
107+
}

0 commit comments

Comments
 (0)