mirror of
https://github.com/atlanticbiomedical/biomedjs.git
synced 2025-07-02 00:47:26 -04:00
Changes
This commit is contained in:
377
config/auth.js
377
config/auth.js
@ -8,203 +8,214 @@ var moment = require('moment');
|
||||
var ACCESS_TOKEN_URL = 'https://accounts.google.com/o/oauth2/token';
|
||||
var PEOPLE_API_URL = 'https://www.googleapis.com/plus/v1/people/me/openIdConnect';
|
||||
|
||||
module.exports = function(app, passport, config) {
|
||||
module.exports = function (app, passport, config) {
|
||||
|
||||
function createJWT(user) {
|
||||
var payload = {
|
||||
sub: user._id,
|
||||
iat: moment().unix(),
|
||||
exp: moment().add(14, 'days').unix()
|
||||
};
|
||||
function createJWT(user) {
|
||||
var payload = {
|
||||
sub: user._id,
|
||||
iat: moment().unix(),
|
||||
exp: moment().add(14, 'days').unix()
|
||||
};
|
||||
|
||||
return jwt.encode(payload, config.auth.jwtSecret);
|
||||
}
|
||||
return jwt.encode(payload, config.auth.jwtSecret);
|
||||
}
|
||||
|
||||
app.post('/auth2', function(req, res) {
|
||||
var params = {
|
||||
code: req.body.code,
|
||||
client_id: req.body.clientId,
|
||||
client_secret: config.auth.clientSecret,
|
||||
redirect_uri: req.body.redirectUri,
|
||||
grant_type: 'authorization_code'
|
||||
};
|
||||
app.post('/auth2', function (req, res) {
|
||||
var params = {
|
||||
code: req.body.code,
|
||||
client_id: req.body.clientId,
|
||||
client_secret: config.auth.clientSecret,
|
||||
redirect_uri: req.body.redirectUri,
|
||||
grant_type: 'authorization_code'
|
||||
};
|
||||
|
||||
request.post(ACCESS_TOKEN_URL, { json: true, form: params }, function(err, response, token) {
|
||||
console.log(token);
|
||||
request.post(ACCESS_TOKEN_URL, {json: true, form: params}, function (err, response, token) {
|
||||
console.log(token);
|
||||
|
||||
var accessToken = token.access_token;
|
||||
var headers = {
|
||||
Authorization: 'Bearer ' + accessToken
|
||||
};
|
||||
var accessToken = token.access_token;
|
||||
var headers = {
|
||||
Authorization: 'Bearer ' + accessToken
|
||||
};
|
||||
|
||||
request.get({ url: PEOPLE_API_URL, headers: headers, json: true }, function(err, response, profile) {
|
||||
if (profile.error) {
|
||||
return res.status(500).send({ message: profile.error.message });
|
||||
}
|
||||
request.get({url: PEOPLE_API_URL, headers: headers, json: true}, function (err, response, profile) {
|
||||
if (profile.error) {
|
||||
return res.status(500).send({message: profile.error.message});
|
||||
}
|
||||
|
||||
User.findOne({ email: profile.email.toLowerCase() }, function(err, user) {
|
||||
if (err) {
|
||||
return res.status(500).send(err);
|
||||
}
|
||||
User.findOne({email: profile.email.toLowerCase()}, function (err, user) {
|
||||
if (err) {
|
||||
return res.status(500).send(err);
|
||||
}
|
||||
|
||||
if (!user || !user.hasPermission('system.login')) {
|
||||
return res.status(403).send({ message: "You are not authorized to access this portal."});
|
||||
}
|
||||
// if (!user || !user.hasPermission('system.login')) {
|
||||
// return res.status(403).send({message: "You are not authorized to access this portal."});
|
||||
// }
|
||||
|
||||
user.accessToken = token.access_token;
|
||||
user.accessToken = token.access_token;
|
||||
|
||||
if (token.refresh_token) {
|
||||
user.refreshToken = token.refresh_token;
|
||||
}
|
||||
if (token.refresh_token) {
|
||||
user.refreshToken = token.refresh_token;
|
||||
}
|
||||
|
||||
if (profile.given_name) {
|
||||
user.name.first = profile.given_name;
|
||||
}
|
||||
if (profile.given_name) {
|
||||
user.name.first = profile.given_name;
|
||||
}
|
||||
|
||||
if (profile.family_name) {
|
||||
user.name.last = profile.family_name;
|
||||
}
|
||||
if (profile.family_name) {
|
||||
user.name.last = profile.family_name;
|
||||
}
|
||||
|
||||
if (profile.picture) {
|
||||
user.picture = profile.picture.replace('sz=50', 'sz=200');
|
||||
}
|
||||
if (profile.picture) {
|
||||
user.picture = profile.picture.replace('?sz=50', '');
|
||||
}
|
||||
|
||||
user.save()
|
||||
.then(function() {
|
||||
res.send({ token: createJWT(user) });
|
||||
});
|
||||
});
|
||||
});
|
||||
})
|
||||
});
|
||||
|
||||
|
||||
|
||||
app.get('/auth', function(req, res, next) {
|
||||
console.dir(req.headers);
|
||||
req.session.redirectUrl = req.headers['referer'];
|
||||
|
||||
passport.authenticate('google', {
|
||||
accessType: 'offline',
|
||||
scope: [
|
||||
'https://www.googleapis.com/auth/userinfo.profile',
|
||||
'https://www.googleapis.com/auth/userinfo.email',
|
||||
'https://www.googleapis.com/auth/calendar'
|
||||
]})(req, res, next);
|
||||
});
|
||||
|
||||
app.get('/auth/callback', function(req, res, next) {
|
||||
|
||||
var callbackHost = req.headers['x-forwarded-host'];
|
||||
if (!callbackHost) {
|
||||
callbackHost = "localhost:9000";
|
||||
}
|
||||
|
||||
var options = {
|
||||
callbackURL: 'http://' + callbackHost + '/auth/callback'
|
||||
};
|
||||
passport.authenticate('google', options, function(err, user, info) {
|
||||
var redirectUrl = '/';
|
||||
|
||||
if (err) { return next(err); }
|
||||
if (!user) { return res.redirect('/login/error'); }
|
||||
|
||||
log.setPrefix("[%d] %l ");
|
||||
log.info("User Logged In: %s %s", user.name.first, user.name.last);
|
||||
|
||||
res.cookie('atlbid', JSON.stringify(user._id), {signed:true});
|
||||
|
||||
if (req.session.redirectUrl) {
|
||||
redirectUrl = req.session.redirectUrl;
|
||||
req.session.redirectUrl = null;
|
||||
}
|
||||
|
||||
if (redirectUrl.indexOf('/login') != -1) {
|
||||
redirectUrl = '/';
|
||||
}
|
||||
|
||||
req.logIn(user, function(err) {
|
||||
if (err) { return next(err); }
|
||||
});
|
||||
|
||||
res.redirect(redirectUrl);
|
||||
})(req, res, next);
|
||||
});
|
||||
|
||||
function createAuthenticator(error) {
|
||||
return function(req, res, next) {
|
||||
var onError = function() {
|
||||
error(req, res, next);
|
||||
};
|
||||
|
||||
var onSuccess = function(user) {
|
||||
log.setPrefix(function(level) {
|
||||
return '[' + new Date().toUTCString() + '] ' + level.toUpperCase() + ' ' + user.name.first + ' ' + user.name.last + ' | ';
|
||||
});
|
||||
next();
|
||||
}
|
||||
|
||||
if (!req.isAuthenticated()) {
|
||||
if (!req.headers.authorization) {
|
||||
return onError();
|
||||
}
|
||||
|
||||
var token = req.headers.authorization.split(' ')[1];
|
||||
var payload = null;
|
||||
try {
|
||||
payload = jwt.decode(token, config.auth.jwtSecret);
|
||||
} catch (err) {
|
||||
return onError();
|
||||
}
|
||||
|
||||
if (payload.exp <= moment().unix()) {
|
||||
return onError();
|
||||
}
|
||||
|
||||
User.findById(payload.sub, function(err, user) {
|
||||
console.log('Loaded User');
|
||||
req.user = user;
|
||||
|
||||
onSuccess(user);
|
||||
});
|
||||
} else {
|
||||
onSuccess(req.user);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
requiresUiLogin: createAuthenticator(function(req, res, next) {
|
||||
res.redirect('/login');
|
||||
}),
|
||||
|
||||
requiresApiAccess: createAuthenticator(function(req, res, next) {
|
||||
res.send(403);
|
||||
})
|
||||
};
|
||||
|
||||
/*
|
||||
return {
|
||||
requiresUiLogin: function(req, res, next) {
|
||||
if (!req.isAuthenticated()) {
|
||||
return res.redirect('/login');
|
||||
}
|
||||
|
||||
log.setPrefix(function(level) {
|
||||
return '[' + new Date().toUTCString() + '] ' + level.toUpperCase() + ' ' + req.user.name.first + ' ' + req.user.name.last + ' | ';
|
||||
user.save()
|
||||
.then(function () {
|
||||
res.send({token: createJWT(user)});
|
||||
});
|
||||
next();
|
||||
},
|
||||
requiresApiAccess: function(req, res, next) {
|
||||
if (!req.isAuthenticated()) {
|
||||
return res.send(403);
|
||||
}
|
||||
});
|
||||
});
|
||||
})
|
||||
});
|
||||
|
||||
log.setPrefix(function(level) {
|
||||
return '[' + new Date().toUTCString() + '] ' + level.toUpperCase() + ' ' + req.user.name.first + ' ' + req.user.name.last + ' | ';
|
||||
});
|
||||
next();
|
||||
}
|
||||
};
|
||||
*/
|
||||
|
||||
app.get('/auth', function (req, res, next) {
|
||||
console.dir(req.headers);
|
||||
req.session.redirectUrl = req.headers['referer'];
|
||||
|
||||
passport.authenticate('google', {
|
||||
accessType: 'offline',
|
||||
scope: [
|
||||
'https://www.googleapis.com/auth/userinfo.profile',
|
||||
'https://www.googleapis.com/auth/userinfo.email',
|
||||
'https://www.googleapis.com/auth/calendar'
|
||||
]
|
||||
})(req, res, next);
|
||||
});
|
||||
|
||||
app.get('/auth/callback', function (req, res, next) {
|
||||
|
||||
var callbackHost = req.headers['x-forwarded-host'];
|
||||
if (!callbackHost) {
|
||||
callbackHost = "localhost:9000";
|
||||
}
|
||||
|
||||
var options = {
|
||||
callbackURL: 'http://' + callbackHost + '/auth/callback'
|
||||
};
|
||||
passport.authenticate('google', options, function (err, user, info) {
|
||||
var redirectUrl = '/';
|
||||
|
||||
if (err) {
|
||||
return next(err);
|
||||
}
|
||||
if (!user) {
|
||||
return res.redirect('/login/error');
|
||||
}
|
||||
|
||||
log.setPrefix("[%d] %l ");
|
||||
log.info("User Logged In: %s %s", user.name.first, user.name.last);
|
||||
|
||||
res.cookie('atlbid', JSON.stringify(user._id), {signed: true});
|
||||
|
||||
if (req.session.redirectUrl) {
|
||||
redirectUrl = req.session.redirectUrl;
|
||||
req.session.redirectUrl = null;
|
||||
}
|
||||
|
||||
if (redirectUrl.indexOf('/login') != -1) {
|
||||
redirectUrl = '/';
|
||||
}
|
||||
|
||||
req.logIn(user, function (err) {
|
||||
if (err) {
|
||||
return next(err);
|
||||
}
|
||||
});
|
||||
|
||||
res.redirect(redirectUrl);
|
||||
})(req, res, next);
|
||||
});
|
||||
|
||||
function createAuthenticator(error) {
|
||||
return function (req, res, next) {
|
||||
var onError = function () {
|
||||
error(req, res, next);
|
||||
};
|
||||
|
||||
var onSuccess = function (user) {
|
||||
log.setPrefix(function (level) {
|
||||
return '[' + new Date().toUTCString() + '] ' + level.toUpperCase() + ' ' + user.name.first + ' ' + user.name.last + ' | ';
|
||||
});
|
||||
next();
|
||||
}
|
||||
|
||||
if (!req.isAuthenticated()) {
|
||||
if (!req.headers.authorization) {
|
||||
return onError();
|
||||
}
|
||||
|
||||
var token = req.headers.authorization.split(' ')[1];
|
||||
var payload = null;
|
||||
try {
|
||||
payload = jwt.decode(token, config.auth.jwtSecret);
|
||||
} catch (err) {
|
||||
return onError();
|
||||
}
|
||||
|
||||
console.log(payload);
|
||||
|
||||
if (payload.exp <= moment().unix()) {
|
||||
return onError();
|
||||
}
|
||||
|
||||
User.findById(payload.sub, function (err, user) {
|
||||
if (user) {
|
||||
console.log('Loaded User');
|
||||
req.user = user;
|
||||
onSuccess(user);
|
||||
} else {
|
||||
onError();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
onSuccess(req.user);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
requiresUiLogin: createAuthenticator(function (req, res, next) {
|
||||
res.redirect('/login');
|
||||
}),
|
||||
|
||||
requiresApiAccess: createAuthenticator(function (req, res, next) {
|
||||
res.send(403);
|
||||
})
|
||||
};
|
||||
|
||||
/*
|
||||
return {
|
||||
requiresUiLogin: function(req, res, next) {
|
||||
if (!req.isAuthenticated()) {
|
||||
return res.redirect('/login');
|
||||
}
|
||||
|
||||
log.setPrefix(function(level) {
|
||||
return '[' + new Date().toUTCString() + '] ' + level.toUpperCase() + ' ' + req.user.name.first + ' ' + req.user.name.last + ' | ';
|
||||
});
|
||||
next();
|
||||
},
|
||||
requiresApiAccess: function(req, res, next) {
|
||||
if (!req.isAuthenticated()) {
|
||||
return res.send(403);
|
||||
}
|
||||
|
||||
log.setPrefix(function(level) {
|
||||
return '[' + new Date().toUTCString() + '] ' + level.toUpperCase() + ' ' + req.user.name.first + ' ' + req.user.name.last + ' | ';
|
||||
});
|
||||
next();
|
||||
}
|
||||
};
|
||||
*/
|
||||
};
|
||||
|
@ -1,44 +1,22 @@
|
||||
module.exports = {
|
||||
development: {
|
||||
root: require('path').normalize(__dirname + '/..'),
|
||||
debug: true,
|
||||
database: 'mongodb://wootbox.wootroot.me/biomed_prod',
|
||||
auth: {
|
||||
clientId: '223145213165.apps.googleusercontent.com',
|
||||
clientSecret: '8MRNar9E_pRTOGTQonPzYOW_',
|
||||
callback: 'http://devel.portal.atlanticbiomedical.com/auth/callback',
|
||||
accessToken: 'ya29.AHES6ZR-vUVEh7CZzsEeGFSHqFfXtU1-LHyEAidi0CKhDGQ',
|
||||
refreshToken: '1/exRXjTaGNlWEo-HZZWyn4NTwJ4TY3wKb-_npce21c50'
|
||||
},
|
||||
email: {
|
||||
user: 'api@atlanticbiomedical.com',
|
||||
password: 'success4'
|
||||
},
|
||||
mysql: {
|
||||
host: 'biomed.akira.gs',
|
||||
user: 'biomed_prod',
|
||||
password: 'wUw3RB8rrXX4HwKj',
|
||||
database: 'biomed_prod'
|
||||
}
|
||||
},
|
||||
prod: {
|
||||
root: require('path').normalize(__dirname + '/..'),
|
||||
debug: true,
|
||||
database: 'mongodb://localhost/biomed_prod',
|
||||
database: 'mongodb://localhost/biomed',
|
||||
auth: {
|
||||
clientId: '333768673996-8epedo3je5h59n4l97v4dv8nofs7qnee.apps.googleusercontent.com',
|
||||
clientSecret: 'afu9KhKxckWJ3Tk6uxzp9Pg6',
|
||||
callback: 'http://localhost:9000/auth/callback',
|
||||
// accessToken: 'ya29.AHES6ZT1Sj1vpgidR2I_ksLdlV_VeZUjkitnZ01cP6VRrknjUEVbuw',
|
||||
// refreshToken: '1/XQW9P9FNYm6jikTsV8HOIuPAo1APYhwTH5CLhq9263g'
|
||||
|
||||
accessToken: 'ya29.1.AADtN_Xjt0PK6YVs8q5csiQFXQg2ZDtrVhsH6P4a5zm0mHqhGx0Nnjx4Jk68Gw',
|
||||
refreshToken: '1/_5SkDLYmsi4XNaQyAzld-W5-GEqEqt5byH6VkI-j5QI',
|
||||
jwtSecret: '97v4dvcsiQFXQg28nofedo3jemsi4XNaQy5h59n4l97m0mHqhGx0Nnjxv4dv8n'
|
||||
},
|
||||
email: {
|
||||
user: 'api@atlanticbiomedical.com',
|
||||
password: 'success4'
|
||||
password: 'success4',
|
||||
|
||||
partsRequest: 'akirayasha@gmail.com',
|
||||
exception: 'akirayasha@gmail.com'
|
||||
},
|
||||
mysql: {
|
||||
host: 'localhost',
|
||||
|
30
config/db.js
Normal file
30
config/db.js
Normal file
@ -0,0 +1,30 @@
|
||||
'use strict';
|
||||
|
||||
const mongoose = require('mongoose');
|
||||
const models = [
|
||||
'CheckList',
|
||||
'Client',
|
||||
'Counter',
|
||||
'Device',
|
||||
'DeviceType',
|
||||
'Pm',
|
||||
'Post',
|
||||
'Tag',
|
||||
'TestRun',
|
||||
'TimeClockException',
|
||||
'TimeClockSpan',
|
||||
'User',
|
||||
'Workorder'
|
||||
];
|
||||
|
||||
module.exports = function() {
|
||||
return function(req, res, next) {
|
||||
req.db = {};
|
||||
|
||||
models.forEach((model) => {
|
||||
req.db[model] = mongoose.model(model);
|
||||
});
|
||||
|
||||
next();
|
||||
}
|
||||
};
|
@ -1,6 +1,9 @@
|
||||
var express = require('express');
|
||||
var cors = require('cors');
|
||||
var ClusterStore = require('strong-cluster-connect-store')(express.session);
|
||||
var validators = require('./validators');
|
||||
var db = require('./db');
|
||||
var promise = require('./promise');
|
||||
|
||||
module.exports = function(app, config, passport, piler) {
|
||||
app.set('showStackError', true);
|
||||
@ -16,6 +19,9 @@ module.exports = function(app, config, passport, piler) {
|
||||
|
||||
// bodyParser should be above methodOverride
|
||||
app.use(express.bodyParser());
|
||||
app.use(validators());
|
||||
app.use(db());
|
||||
app.use(promise());
|
||||
app.use(express.methodOverride());
|
||||
|
||||
app.use(express.session({ store: new ClusterStore(), secret: 'atlantic_biomed_server_secret' }));
|
||||
@ -40,9 +46,4 @@ module.exports = function(app, config, passport, piler) {
|
||||
// routes should be last
|
||||
app.use(app.router);
|
||||
});
|
||||
|
||||
// app.configure('development', function() {
|
||||
// // enable live update in development mode.
|
||||
// piler.liveUpdate();
|
||||
// });
|
||||
}
|
||||
|
36
config/promise.js
Normal file
36
config/promise.js
Normal file
@ -0,0 +1,36 @@
|
||||
'use strict';
|
||||
|
||||
const mongoose = require('mongoose');
|
||||
|
||||
module.exports = function() {
|
||||
return function(req, res, next) {
|
||||
res.promise = (promise) => {
|
||||
promise
|
||||
.then((data) => {
|
||||
res.json({
|
||||
data
|
||||
});
|
||||
})
|
||||
.catch((error) => {
|
||||
if (typeof error === 'string') {
|
||||
return res.json(400, {
|
||||
error: {
|
||||
message: error
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (error.name === 'ValidationError') {
|
||||
return res.json(400, {
|
||||
error: error
|
||||
});
|
||||
}
|
||||
|
||||
console.log(error.stack);
|
||||
res.json(500, 'Internal error');
|
||||
});
|
||||
};
|
||||
|
||||
next();
|
||||
};
|
||||
};
|
308
config/routes.js
308
config/routes.js
@ -1,140 +1,168 @@
|
||||
var log = require('log4node');
|
||||
|
||||
module.exports = function(app, auth, piler, calendar, directory, config) {
|
||||
|
||||
piler.addCssUrl("//fonts.googleapis.com/css?family=Open+Sans:400,300");
|
||||
piler.addCssFile("/css/biomed.less");
|
||||
|
||||
piler.addJsUrl("//ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js");
|
||||
piler.addJsUrl("//ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.js");
|
||||
piler.addJsUrl("//ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular-route.js");
|
||||
piler.addJsUrl("//ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular-resource.js");
|
||||
piler.addJsUrl("http://d3js.org/d3.v2.js");
|
||||
piler.addJsUrl("https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.js")
|
||||
|
||||
piler.addJsFile("/js/lib/moment.js");
|
||||
piler.addJsFile("/js/lib/bootstrap-datepicker.js");
|
||||
piler.addJsFile("/js/lib/dialog.js");
|
||||
piler.addJsFile("/js/lib/select2.js");
|
||||
piler.addJsFile("/js/lib/dropzone.js");
|
||||
piler.addJsFile("/js/lib/hashids.js");
|
||||
piler.addJsFile("/js/app.js");
|
||||
piler.addJsFile("/js/controllers.js");
|
||||
piler.addJsFile("/js/controllers/checkLists.js");
|
||||
piler.addJsFile("/js/controllers/devices.js");
|
||||
piler.addJsFile("/js/controllers/deviceTypes.js");
|
||||
piler.addJsFile("/js/controllers/testRuns.js");
|
||||
piler.addJsFile("/js/directives.js");
|
||||
piler.addJsFile("/js/filters.js");
|
||||
piler.addJsFile("/js/services.js");
|
||||
|
||||
app.get('/crash', function(req, res) {
|
||||
console.log('Commiting Suicide for Science!');
|
||||
process.nextTick(function() {
|
||||
throw new Error("Ermergerd!");
|
||||
});
|
||||
});
|
||||
|
||||
app.all('/api/*', auth.requiresApiAccess);
|
||||
|
||||
var posts = require('../app/controllers/posts');
|
||||
app.get('/api/posts', posts.index);
|
||||
app.get('/api/posts/:post_id', posts.get);
|
||||
app.post('/api/posts', posts.create);
|
||||
app.post('/api/posts/upload', posts.upload);
|
||||
app.post('/api/posts/:post_id', posts.update);
|
||||
app.del('/api/posts/:post_id', posts.destroy);
|
||||
|
||||
var clients = require('../app/controllers/clients');
|
||||
app.get('/api/clients', clients.index);
|
||||
app.get('/api/clients/isUnique', clients.isUnique);
|
||||
app.get('/api/clients/frequencies', clients.frequencies);
|
||||
app.get('/api/clients/:client_id', clients.get);
|
||||
app.get('/api/clients/:client_id/workorders', clients.workorders);
|
||||
app.get('/api/clients/:client_id/tags', clients.tags);
|
||||
app.get('/api/clients/:client_id/devices', clients.devices);
|
||||
app.post('/api/clients', clients.create);
|
||||
app.post('/api/clients/:client_id', clients.update);
|
||||
app.del('/api/clients/:client_id', clients.destroy);
|
||||
|
||||
var workorders = require('../app/controllers/workorders')(config, calendar);
|
||||
app.get('/api/workorders', workorders.index);
|
||||
app.get('/api/workorders/:workorder_id', workorders.get);
|
||||
app.post('/api/workorders', workorders.create);
|
||||
app.post('/api/workorders/:workorder_id', workorders.update);
|
||||
app.del('/api/workorders/:workorder_id', workorders.destroy);
|
||||
|
||||
var devices = require('../app/controllers/devices');
|
||||
app.get('/api/devices', devices.index);
|
||||
app.get('/api/devices/isUnique', devices.isUnique);
|
||||
app.get('/api/devices/:device_id', devices.get);
|
||||
app.get('/api/devices/:device_id/test_runs', devices.testRuns);
|
||||
app.post('/api/devices', devices.create);
|
||||
app.post('/api/devices/:device_id', devices.update);
|
||||
|
||||
var deviceTypes = require('../app/controllers/deviceTypes');
|
||||
app.get('/api/device_types', deviceTypes.index);
|
||||
app.get('/api/device_types/categories', deviceTypes.categories);
|
||||
app.get('/api/device_types/makes', deviceTypes.makes);
|
||||
app.get('/api/device_types/models', deviceTypes.models);
|
||||
app.post('/api/device_types/images', deviceTypes.upload);
|
||||
app.get('/api/device_types/:device_type_id', deviceTypes.get);
|
||||
app.post('/api/device_types', deviceTypes.create);
|
||||
app.post('/api/device_types/:device_type_id', deviceTypes.update);
|
||||
|
||||
var checkLists = require('../app/controllers/checkLists');
|
||||
app.get('/api/check_lists', checkLists.index);
|
||||
app.get('/api/check_lists/:check_list_id', checkLists.get);
|
||||
app.post('/api/check_lists', checkLists.create);
|
||||
app.post('/api/check_lists/:check_list_id', checkLists.update);
|
||||
|
||||
var testRuns = require('../app/controllers/testRuns')(config);
|
||||
app.get('/api/test_runs', testRuns.index);
|
||||
app.get('/api/test_runs/:test_run_id', testRuns.get);
|
||||
app.post('/api/test_runs', testRuns.create);
|
||||
app.post('/api/test_runs/:test_run_id', testRuns.update);
|
||||
|
||||
var timeclock = require('../app/controllers/timeclock')();
|
||||
app.get('/api/timeclock', timeclock.index);
|
||||
app.post('/api/timeclock/clock_in', timeclock.clockIn);
|
||||
app.post('/api/timeclock/clock_out', timeclock.clockOut);
|
||||
app.get('/api/timeclock/workorder/:id', timeclock.workorderDetails);
|
||||
|
||||
var pms = require('../app/controllers/pms');
|
||||
app.get('/api/pms', pms.index);
|
||||
|
||||
var schedule = require('../app/controllers/schedule');
|
||||
app.get('/api/schedule', schedule.index);
|
||||
|
||||
var users = require('../app/controllers/users')(config, directory);
|
||||
app.get('/api/users', users.index);
|
||||
app.get('/api/users/details', users.details);
|
||||
app.post('/api/users', users.create);
|
||||
app.post('/api/users/:user_id', users.update);
|
||||
app.get('/api/users/:user_id/clocks', users.clocks);
|
||||
|
||||
var account = require('../app/controllers/account')(config);
|
||||
app.get('/api/account', account.profile);
|
||||
app.post('/api/account/impersonate', account.impersonate);
|
||||
|
||||
var messages = require('../app/controllers/messages')(config);
|
||||
app.post('/api/messages/send', messages.send);
|
||||
|
||||
var tags = require('../app/controllers/tags')(piler);
|
||||
app.post('/api/tags', tags.post);
|
||||
|
||||
var clock = require('../app/controllers/clock')(piler);
|
||||
app.post('/api/clock', clock.post);
|
||||
|
||||
var site = require('../app/controllers/site')(piler);
|
||||
|
||||
var login = require('../app/controllers/login')(piler);
|
||||
app.get('/login', login.login);
|
||||
app.get('/login/error', login.error);
|
||||
app.get('/logout', login.logout);
|
||||
|
||||
var home = require('../app/controllers/home')(piler);
|
||||
|
||||
app.get('/', tags.index, auth.requiresUiLogin, clock.index, site.index, home.index);
|
||||
app.get('*', tags.index, auth.requiresUiLogin, clock.index, site.index, home.index);
|
||||
};
|
||||
var log = require('log4node');
|
||||
|
||||
var routes = require('../app/routes');
|
||||
|
||||
module.exports = function (app, auth, piler, calendar, directory, config) {
|
||||
|
||||
piler.addCssUrl("//fonts.googleapis.com/css?family=Open+Sans:400,300");
|
||||
piler.addCssFile("/css/biomed.less");
|
||||
|
||||
piler.addJsUrl("//ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js");
|
||||
piler.addJsUrl("//ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.js");
|
||||
piler.addJsUrl("//ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular-route.js");
|
||||
piler.addJsUrl("//ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular-resource.js");
|
||||
piler.addJsUrl("http://d3js.org/d3.v2.js");
|
||||
piler.addJsUrl("https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.js")
|
||||
|
||||
piler.addJsFile("/js/lib/moment.js");
|
||||
piler.addJsFile("/js/lib/bootstrap-datepicker.js");
|
||||
piler.addJsFile("/js/lib/dialog.js");
|
||||
piler.addJsFile("/js/lib/select2.js");
|
||||
piler.addJsFile("/js/lib/dropzone.js");
|
||||
piler.addJsFile("/js/lib/hashids.js");
|
||||
piler.addJsFile("/js/app.js");
|
||||
piler.addJsFile("/js/controllers.js");
|
||||
piler.addJsFile("/js/controllers/checkLists.js");
|
||||
piler.addJsFile("/js/controllers/devices.js");
|
||||
piler.addJsFile("/js/controllers/deviceTypes.js");
|
||||
piler.addJsFile("/js/controllers/testRuns.js");
|
||||
piler.addJsFile("/js/directives.js");
|
||||
piler.addJsFile("/js/filters.js");
|
||||
piler.addJsFile("/js/services.js");
|
||||
|
||||
app.get('/crash', function (req, res) {
|
||||
console.log('Commiting Suicide for Science!');
|
||||
process.nextTick(function () {
|
||||
throw new Error("Ermergerd!");
|
||||
});
|
||||
});
|
||||
|
||||
app.all('/api/*', auth.requiresApiAccess);
|
||||
|
||||
var posts = require('../app/controllers/posts');
|
||||
app.get('/api/posts', posts.index);
|
||||
app.get('/api/posts/:post_id', posts.get);
|
||||
app.post('/api/posts', posts.create);
|
||||
app.post('/api/posts/upload', posts.upload);
|
||||
app.post('/api/posts/:post_id', posts.update);
|
||||
app.del('/api/posts/:post_id', posts.destroy);
|
||||
|
||||
var clients = require('../app/controllers/clients');
|
||||
app.get('/api/clients', clients.index);
|
||||
app.get('/api/clients/isUnique', clients.isUnique);
|
||||
app.get('/api/clients/frequencies', clients.frequencies);
|
||||
app.get('/api/clients/:client_id', clients.get);
|
||||
app.get('/api/clients/:client_id/workorders', clients.workorders);
|
||||
app.get('/api/clients/:client_id/tags', clients.tags);
|
||||
app.get('/api/clients/:client_id/devices', clients.devices);
|
||||
app.post('/api/clients', clients.create);
|
||||
app.post('/api/clients/:client_id', clients.update);
|
||||
app.del('/api/clients/:client_id', clients.destroy);
|
||||
|
||||
var workorders = require('../app/controllers/workorders')(config, calendar);
|
||||
app.get('/api/workorders', workorders.index);
|
||||
app.get('/api/workorders/:workorder_id', workorders.get);
|
||||
app.post('/api/workorders', workorders.create);
|
||||
app.post('/api/workorders/:workorder_id', workorders.update);
|
||||
app.del('/api/workorders/:workorder_id', workorders.destroy);
|
||||
|
||||
var devices = require('../app/controllers/devices');
|
||||
app.get('/api/devices', devices.index);
|
||||
app.get('/api/devices/isUnique', devices.isUnique);
|
||||
app.get('/api/devices/:device_id', devices.get);
|
||||
app.get('/api/devices/:device_id/test_runs', devices.testRuns);
|
||||
app.post('/api/devices', devices.create);
|
||||
app.post('/api/devices/:device_id', devices.update);
|
||||
|
||||
var deviceTypes = require('../app/controllers/deviceTypes');
|
||||
app.get('/api/device_types', deviceTypes.index);
|
||||
app.get('/api/device_types/categories', deviceTypes.categories);
|
||||
app.get('/api/device_types/makes', deviceTypes.makes);
|
||||
app.get('/api/device_types/models', deviceTypes.models);
|
||||
app.post('/api/device_types/images', deviceTypes.upload);
|
||||
app.get('/api/device_types/:device_type_id', deviceTypes.get);
|
||||
app.post('/api/device_types', deviceTypes.create);
|
||||
app.post('/api/device_types/:device_type_id', deviceTypes.update);
|
||||
|
||||
var checkLists = require('../app/controllers/checkLists');
|
||||
app.get('/api/check_lists', checkLists.index);
|
||||
app.get('/api/check_lists/:check_list_id', checkLists.get);
|
||||
app.post('/api/check_lists', checkLists.create);
|
||||
app.post('/api/check_lists/:check_list_id', checkLists.update);
|
||||
|
||||
var testRuns = require('../app/controllers/testRuns')(config);
|
||||
app.get('/api/test_runs', testRuns.index);
|
||||
app.get('/api/test_runs/:test_run_id', testRuns.get);
|
||||
app.post('/api/test_runs', testRuns.create);
|
||||
app.post('/api/test_runs/:test_run_id', testRuns.update);
|
||||
|
||||
var timeclock = require('../app/controllers/timeclock')();
|
||||
app.get('/api/timeclock', timeclock.index);
|
||||
app.post('/api/timeclock/clock_in', timeclock.clockIn);
|
||||
app.post('/api/timeclock/clock_out', timeclock.clockOut);
|
||||
app.get('/api/timeclock/users/:user_id', timeclock.spansForUser);
|
||||
app.get('/api/timeclock/workorder/:id', timeclock.workorderDetails);
|
||||
|
||||
var timesheet = require('../app/controllers/timesheet')();
|
||||
app.get('/api/timesheet/summary', timesheet.summary);
|
||||
app.get('/api/timesheet/:user_id/daysWorked', timesheet.daysWorked);
|
||||
app.get('/api/timesheet/:user_id/summary', timesheet.userSummary);
|
||||
|
||||
var pms = require('../app/controllers/pms');
|
||||
app.get('/api/pms', pms.index);
|
||||
|
||||
var schedule = require('../app/controllers/schedule');
|
||||
app.get('/api/schedule', schedule.index);
|
||||
|
||||
var users = require('../app/controllers/users')(config, directory);
|
||||
app.get('/api/users', users.index);
|
||||
app.get('/api/users/details', users.details);
|
||||
app.get('/api/users/:user_id', users.get);
|
||||
app.post('/api/users', users.create);
|
||||
app.post('/api/users/:user_id', users.update);
|
||||
app.get('/api/users/:user_id/clocks', users.clocks);
|
||||
|
||||
var account = require('../app/controllers/account')(config);
|
||||
app.get('/api/account', account.profile);
|
||||
app.post('/api/account/impersonate', account.impersonate);
|
||||
|
||||
var messages = require('../app/controllers/messages')(config);
|
||||
app.post('/api/messages/send', messages.send);
|
||||
|
||||
var tags = require('../app/controllers/tags')(piler);
|
||||
app.post('/api/tags', tags.post);
|
||||
|
||||
var site = require('../app/controllers/site')(piler);
|
||||
|
||||
var login = require('../app/controllers/login')(piler);
|
||||
app.get('/login', login.login);
|
||||
app.get('/login/error', login.error);
|
||||
app.get('/logout', login.logout);
|
||||
|
||||
var home = require('../app/controllers/home')(piler);
|
||||
|
||||
|
||||
|
||||
// Exceptions
|
||||
app.get('/api/v2/exceptions', routes.exceptions.index);
|
||||
|
||||
// Spans
|
||||
app.get('/api/v2/spans', routes.spans.index);
|
||||
app.post('/api/v2/spans/:id', routes.spans.update);
|
||||
|
||||
// Users
|
||||
app.get('/api/v2/users/:id/daysWorked', routes.users.daysWorked);
|
||||
app.get('/api/v2/users/:id/weeksWorked', routes.users.weeksWorked);
|
||||
app.get('/api/v2/users/:id/timeClock', routes.users.timeClock);
|
||||
app.get('/api/v2/users/:id', routes.users.fetch);
|
||||
app.post('/api/v2/users/:id', routes.users.update);
|
||||
|
||||
// Workorders
|
||||
app.get('/api/v2/workorders/:id/timeClock', routes.workorders.timeClock);
|
||||
|
||||
// Misc
|
||||
app.post('/api/v2/misc/partsRequest', routes.misc.partsRequest);
|
||||
|
||||
app.get('/', tags.index, auth.requiresUiLogin, site.index, home.index);
|
||||
app.get('*', tags.index, auth.requiresUiLogin, site.index, home.index);
|
||||
};
|
||||
|
25
config/validators.js
Normal file
25
config/validators.js
Normal file
@ -0,0 +1,25 @@
|
||||
|
||||
'use strict';
|
||||
|
||||
var moment = require('moment');
|
||||
var expressValidator = require('express-validator');
|
||||
|
||||
module.exports = function() {
|
||||
return expressValidator({
|
||||
customValidators: {
|
||||
isWeek
|
||||
},
|
||||
customSanitizers: {
|
||||
toMoment
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
function isWeek(str) {
|
||||
let week = moment(str, 'YYYY-MM-DD');
|
||||
return week.isValid() && week.weekday() === 0;
|
||||
}
|
||||
|
||||
function toMoment(str) {
|
||||
return moment(str);
|
||||
}
|
Reference in New Issue
Block a user