aboutsummaryrefslogtreecommitdiff
path: root/routes
diff options
context:
space:
mode:
authornanalelfe <nargiza.nosirova@mail.utoronto.ca>2016-07-25 23:36:16 +0000
committernanalelfe <nargiza.nosirova@mail.utoronto.ca>2016-07-25 23:36:16 +0000
commit0d8073039faa903ee0f12e68064c89b5f27cdf14 (patch)
tree221688160f73edd753a35d3d240022154078ee88 /routes
parent9f1b0d9f1c807e02a415b5b8a2509dc6445f08b3 (diff)
parent10f1c442e27d82d1fc2c94d1bc0a2ad27917b287 (diff)
Merge branch 'master' of https://github.com/HumairAK/solutions_repo
Diffstat (limited to 'routes')
-rw-r--r--routes/admin.js320
-rw-r--r--routes/index.js15
2 files changed, 249 insertions, 86 deletions
diff --git a/routes/admin.js b/routes/admin.js
index 24c5910..565d2dd 100644
--- a/routes/admin.js
+++ b/routes/admin.js
@@ -4,115 +4,250 @@ var router = express.Router();
var csrf = require('csurf'); // Cross-Site Request Forgery prevention
var passport = require('passport');
var passport_file = require('../config/passport.js');
-
+var express_validator = require ("express-validator");
+app = express();
var csrfProtection = csrf();
router.use(csrfProtection); // router is protected
+app.use(express_validator({
+ customValidators:{
+ validRadio: function (value) {
+ if (value==undefined){
+ return false;
+ }else{
+ return true;
+ }
+ },isCommaSeparated: function(value){
+ if (value.match(/[^,\s][^\,]*[^,\s]*/g)){
+ return true;
+ }else{
+ return false;
+ }
+ },isValidDate:function (value) {
+ if (value.match(/^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$/)){
+ return true;
+ }else{
+ return false;
+ }
+ }
+ }
+}));
+
router.get('/', isAdmin, function(req,res){
console.log(req.session.messages);
- res.render('admin', {csrfToken: req.csrfToken()});
+ res.render('admin', {csrfToken: req.csrfToken(), success: req.session.success, errors: req.session.errors});
+ req.session.errors = null;
req.session.messages = null;
});
/* Adds exam from front-end */
router.post('/add/exam', function(req,res){
- var course_code = req.body.course_code,
- year = req.body.year,
- type = req.body.type,
- term = req.body.term,
- instructors = parseStringArray(req.body.instructors),
- page_count = req.body.page_count,
- questions_count = req.body.questions_count,
- questions_list = parseStringArray(req.body.questions_list),
- upload_date = req.body.upload_date,
- uploaded_by = req.body.uploaded_by;
-
- var fields = [
- course_code, // String
- year, // Int
- term, // String
- type, // String
- instructors, // Array of strings
- page_count, // Int
- questions_count, // Int
- upload_date, // String
- uploaded_by]; // String
-
- dbFile.add_exam(fields, questions_list, function(examAdded, statusMsg){
- if(examAdded){
- req.session.messages = {success : statusMsg};
- }else{
- req.session.messages = {error : statusMsg};
- }
- console.log(statusMsg);
+ req.sanitize('course_code').escape();
+ req.sanitize('course_code').trim();
+ req.check('course_code','Course code cannot be empty').notEmpty();
+
+ req.sanitize('year').escape();
+ req.sanitize('year').trim();
+ req.check('year','Invalid year').isInt();
+
+ req.checkBody('type','Please select a type of exam').validRadio();
+ req.checkBody('term','Please select a term for the exam').validRadio();
+
+ req.sanitize('instructors').trim();
+ req.check('instructors','Invalid instructors format').isCommaSeparated();
+
+ req.sanitize('page_count').trim();
+ req.check('page_count','Invalid page count').isInt();
+
+ req.sanitize('questions_count').trim();
+ req.check('questions_count','Invalid questions count').isInt();
+
+ req.sanitize('questions_list').trim();
+ req.check('questions_list','Invalid questions format').isCommaSeparated();
+
+ req.sanitize('upload_date').trim();
+ req.check('upload_date','Invalid date format').isValidDate();
+
+ req.sanitize('uploaded_by').trim();
+ req.sanitize('uploaded_by').escape();
+ req.check('uploaded_by','Invalid user name format').notEmpty();
+
+ var errors = req.validationErrors();
+
+ if (errors){
+ console.log(errors);
+ req.session.errors = errors;
+ req.session.success = false;
res.redirect('/admin');
- });
+ }else{
+
+ var course_code = req.body.course_code,
+ year = req.body.year,
+ type = req.body.type,
+ term = req.body.term,
+ instructors = parseStringArray(req.body.instructors),
+ page_count = req.body.page_count,
+ questions_count = req.body.questions_count,
+ questions_list = parseStringArray(req.body.questions_list),
+ upload_date = req.body.upload_date,
+ uploaded_by = req.body.uploaded_by;
+
+ var fields = [
+ course_code, // String
+ year, // Int
+ term, // String
+ type, // String
+ instructors, // Array of strings
+ page_count, // Int
+ questions_count, // Int
+ upload_date, // String
+ uploaded_by]; // String
+ dbFile.add_exam(fields, questions_list, function(examAdded, statusMsg){
+ if(examAdded){
+ req.session.messages = {success : statusMsg};
+ }else{
+ req.session.messages = {error : statusMsg};
+ }
+ console.log(statusMsg);
+ res.redirect('/admin');
+ });
+ }
});
/* Adds course from front-end */
router.post('/add/course', function(req,res){
- var course_code = req.body.course_code,
- title = req.body.title;
-
- dbFile.add_course(course_code, title, function(courseAdded, statusMsg){
- if(courseAdded){
- req.session.messages = {success : statusMsg};
- }else{
- req.session.messages = {error : statusMsg};
- }
- console.log(statusMsg);
+
+ req.sanitize('course_code').escape();
+ req.sanitize('course_code').trim();
+ req.check('course_code','Course code cannot be empty').notEmpty();
+
+ req.sanitize('title').escape();
+ req.sanitize('title').trim();
+ req.check('title','Invalid title').isAlpha();
+
+ var errors = req.validationErrors();
+
+ if (errors){
+ console.log(errors);
+ req.session.errors = errors;
+ req.session.success = false;
res.redirect('/admin');
- });
+ }else{
+ var course_code = req.body.course_code,
+ title = req.body.title;
+ dbFile.add_course(course_code, title, function(courseAdded, statusMsg){
+ if(courseAdded){
+ req.session.messages = {success : statusMsg};
+ }else{
+ req.session.messages = {error : statusMsg};
+ }
+ console.log(statusMsg);
+ res.redirect('/admin');
+ });
+ }
});
/* Add a new admin, redirect to admin panel */
router.post('/add/admin', function(req,res){
- var admin_data = {
- fname: req.body.fname,
- lname: req.body.lname,
- username: req.body.username,
- password: passport_file.encryptPassword(req.body.password)
- };
-
- dbFile.addAdmin(admin_data, function(success, error, statusMsg){
- if(success){
- req.session.messages = {success : statusMsg};
- }else{
- req.session.messages = {error : statusMsg};
- }
- console.log(statusMsg);
+ req.assert('fname', 'Please enter a valid first name.').notEmpty().withMessage('First name required.').isAlpha();
+ req.check('lname', 'Please enter a valid first name.').notEmpty().withMessage('Last name required.').isAlpha();
+ req.check('usrname', 'Enter a valid username').notEmpty().withMessage('Username required.');
+ req.check('password', "Password should be between 6 and 12 characters.")
+ .notEmpty().withMessage('Password required').isLength({min: 6, max: 12});
+
+ var errors = req.validationErrors();
+ if (errors) {
+ console.log(errors);
+ req.session.errors = errors;
+ req.session.success = false;
res.redirect('/admin');
- });
+ }else{
+ var admin_data = {
+ fname: req.body.fname,
+ lname: req.body.lname,
+ username: req.body.username,
+ password: passport_file.encryptPassword(req.body.password)
+ };
+
+ dbFile.addAdmin(admin_data, function(success, error, statusMsg){
+ if(success){
+ req.session.messages = {success : statusMsg};
+ }else{
+ req.session.messages = {error : statusMsg};
+ }
+ console.log(statusMsg);
+ res.redirect('/admin');
+ });
+
+ }
});
/* Remove an exam route, redirect to admin panel */
router.post('/remove/exam', function(req,res){
- var course_code = req.body.course_code,
- year = req.body.year,
- term = req.body.term,
- type = req.body.type,
- campus = req.body.campus;
-
- var fields = [course_code, year, term, type];
-
- dbFile.remove_exam(fields, function(examRemoved, statusMsg){
- if(examRemoved){
- req.session.messages = {success : statusMsg};
- } else {
- req.session.messages = {error : statusMsg};
- }
- console.log(statusMsg);
+ req.sanitize('course_code').escape();
+ req.sanitize('course_code').trim();
+ req.check('course_code','Course code cannot be empty').notEmpty();
+
+ req.sanitize('year').escape();
+ req.sanitize('year').trim();
+ req.check('year','Invalid year').isInt();
+
+ req.checkBody('type','Please select a type of exam').validRadio();
+ req.checkBody('term','Please select a term for the exam').validRadio();
+ req.checkBody('campus','Please select a campus for the exam').validRadio();
+
+
+ var errors = req.validationErrors();
+ if (errors){
+ console.log(errors);
+ req.session.errors = errors;
+ req.session.success = false;
res.redirect('/admin');
- });
+
+ }else{
+
+ var course_code = req.body.course_code,
+ year = req.body.year,
+ term = req.body.term,
+ type = req.body.type,
+ campus = req.body.campus;
+
+ course_code = course_code.toUpperCase();
+
+ var fields = [course_code, year, term, type];
+
+ dbFile.remove_exam(fields, function(examRemoved, statusMsg){
+ if(examRemoved){
+ req.session.messages = {success : statusMsg};
+ } else {
+ req.session.messages = {error : statusMsg};
+ }
+ console.log(statusMsg);
+ res.redirect('/admin');
+ });
+ }
});
/* Remove a course route, redirect to admin panel */
router.post('/remove/course', function(req,res){
- var course_code = req.body.course_code;
- dbFile.remove_course(course_code, function(courseRemoved, statusMsg){
+
+ req.sanitize('course_code').escape();
+ req.sanitize('course_code').trim();
+ req.check('course_code','Course code cannot be empty').notEmpty();
+
+ var errors = req.validationErrors();
+
+ if (errors){
+ req.session.errors = errors;
+ req.session.success = false;
+ res.redirect('/admin');
+ }else{
+ var course_code = req.body.course_code;
+ course_code = course_code.toUpperCase();
+ dbFile.remove_course(course_code, function(courseRemoved, statusMsg){
if(courseRemoved){
req.session.messages = {success : statusMsg};
} else {
@@ -121,21 +256,34 @@ router.post('/remove/course', function(req,res){
console.log(statusMsg);
res.redirect('/admin');
});
+ }
+
});
/* Remove a user route, redirect to admin panel */
router.post('/remove/user', function(req,res){
- var username = req.body.username;
- dbFile.remove_user(username, function(userRemoved, statusMsg){
- if(userRemoved){
- req.session.messages = {success : statusMsg};
- } else {
- req.session.messages = {error : statusMsg};
- }
- console.log(statusMsg);
- res.redirect('/admin');
- });
+ req.sanitize('username').trim();
+ req.sanitize('username').escape();
+ req.check('username','Invalid user name format').notEmpty();
+
+ var errors = validationErrors();
+ if (errors){
+ req.session.errors = errors;
+ req.session.success = false;
+ res.redirect('/admin');
+ }else{
+ var username = req.body.username;
+ dbFile.remove_user(username, function(userRemoved, statusMsg){
+ if(userRemoved){
+ req.session.messages = {success : statusMsg};
+ } else {
+ req.session.messages = {error : statusMsg};
+ }
+ console.log(statusMsg);
+ res.redirect('/admin');
+ });
+ }
});
diff --git a/routes/index.js b/routes/index.js
index 6218dd1..347c91a 100644
--- a/routes/index.js
+++ b/routes/index.js
@@ -24,6 +24,20 @@ router.get('/about', function(req, res, next) {
res.render('about');
});
+/* Router for rendering public user profile of a given user */
+router.get('/public_profile/:username', function(req,res,next){
+ var username = req.params.username;
+ dbFile.retrieveUser(username, function(success, error, user, statusMsg){
+ if(success){
+ res.render('public_profile.hbs', {user: user});
+ }else{
+ req.session.messages = {error : statusMsg};
+ res.redirect('/user/' + username);
+ }
+ });
+
+});
+
/* Render/GET user_solutions page */
router.get('/user_solutions', function(req, res, next) {
res.render('user_solutions');
@@ -84,6 +98,7 @@ router.get('/user/:query', function(req,res,next){
if(success){
console.log(result);
res.render('user_search', {users : result, query : query});
+ req.session.messages = null;
}else{
console.log(result);
res.redirect('/');