Skip to content
Snippets Groups Projects
Commit fa827f3a authored by Markus Grigull's avatar Markus Grigull
Browse files

Add project model and route

Add UML class and use-case diagram (StarUML application).
Add admin user from config if no admin user found.
parent f2657291
No related branches found
No related tags found
No related merge requests found
VILLAS.mdj 0 → 100644
This diff is collapsed.
// include
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
// project model
var projectSchema = new Schema({
name: { type: String, required: true },
owner: { type: Schema.Types.ObjectId, ref: 'User', required: true }
});
module.exports = mongoose.model('Project', projectSchema);
......@@ -8,7 +8,8 @@ var Schema = mongoose.Schema;
var userSchema = new Schema({
username: { type: String, unique: true, required: true },
password: { type: String, required: true },
adminLevel: { type: Number, default: 0 }
adminLevel: { type: Number, default: 0 },
projects: [{ type: Schema.Types.ObjectId, ref: 'Project' }]
});
userSchema.methods.verifyPassword = function(password, callback) {
......
// include
var express = require('express');
var Project = require('../models/project');
var auth = require('../auth');
// create router
var router = express.Router();
// all project routes need authentication
router.use('/projects', auth.validateToken);
// authorize user function
function authorizeUser(req, project) {
// get logged-in user id
var userId = req.decoded._doc._id;
var userAdminLevel = req.decoded._doc.adminLevel;
if (project.owner == userId) {
return true;
} else if (userAdminLevel >= 1) {
return true;
}
return false;
}
// routes
router.get('/projects', function(req, res) {
// get all projects
Project.find(function(err, projects) {
if (err) {
return res.send(err);
}
res.json(projects);
});
});
router.route('/projects').post(function(req, res) {
// create new project
var project = new Project(req.body);
project.save(function(err) {
if (err) {
return res.send(err);
}
res.send({ success: true, message: 'Project added' });
});
});
router.route('/projects/:id').put(function(req, res) {
// get project
Project.findOne({ _id: req.params.id }, function(err, project) {
if (err) {
return res.send(err);
}
if (!authorizeUser(req, project)) {
return res.send({ success: false, message: 'User not authorized' });
}
// update all properties
for (property in req.body) {
project[property] = req.body[property];
}
// save the changes
project.save(function(err) {
if (err) {
return res.send(err);
}
res.send({ success: true, message: 'Project updated' });
});
});
});
router.route('/projects/:id').get(function(req, res) {
Project.findOne({ _id: req.params.id }, function(err, project) {
if (err) {
return res.send(err);
}
if (!authorizeUser(req, project)) {
return res.send({ success: false, message: 'User not authorized' });
}
res.send(project);
});
});
router.route('/projects/:id').delete(function(req, res) {
Project.findOne({ _id: req.params.id }, function(err, project) {
if (err) {
return res.send(err);
}
if (!authorizeUser(req, project)) {
return res.send({ success: false, message: 'User not authorized' });
}
Project.remove({ _id: req.params.id }, function(err) {
if (err) {
return res.send(err);
}
res.send({ success: true, message: 'Project deleted' });
});
});
});
module.exports = router;
......@@ -13,7 +13,7 @@ var router = express.Router();
router.use('/users', auth.validateToken);
// routes
router.get('/users', auth.validateAdminLevel(1), function(req, res) {
router.route('/users').get(auth.validateAdminLevel(1), function(req, res) {
// get all users
User.find(function(err, users) {
if (err) {
......@@ -28,8 +28,6 @@ router.route('/users').post(function(req, res) {
// create new user
var user = new User(req.body);
console.log(req.body);
user.save(function(err) {
if (err) {
return res.send(err);
......
......@@ -8,6 +8,7 @@ var morgan = require('morgan');
var config = require('./config');
var users = require('./routes/users');
var projects = require('./routes/projects');
var User = require('./models/user');
......@@ -24,8 +25,33 @@ mongoose.connect(config.databaseURL + config.databaseName);
// register routes
app.use('/api/v1', users);
app.use('/api/v1', projects);
// start the app
app.listen(config.port, function() {
console.log('Express server listening on port ' + config.port);
});
// add admin account
if (config.admin) {
// check if admin account exists
User.findOne({ username: config.admin.username }, function(err, user) {
if (err) {
console.log(err);
return;
}
if (!user) {
// create new admin user
var newUser = User({ username: config.admin.username, password: config.admin.password, adminLevel: 1});
newUser.save(function(err) {
if (err) {
console.log(err);
return;
}
console.log('Created default admin user from config file');
});
}
});
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment