Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: mterenzio/fission
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 0.2.0
Choose a base ref
...
head repository: mterenzio/fission
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: master
Choose a head ref
  • 9 commits
  • 8 files changed
  • 2 contributors

Commits on Aug 21, 2014

  1. Copy the full SHA
    37dc1ff View commit details
  2. Merge pull request #9 from mterenzio/matt

    updated version in package.json
    mterenzio committed Aug 21, 2014
    Copy the full SHA
    85df60a View commit details

Commits on Aug 26, 2014

  1. Implemented

    - addition of is_public, data_created, date_updated and id_creator
    - update route to adapt these stuff.
    khurrumqureshi committed Aug 26, 2014
    Copy the full SHA
    982c588 View commit details
  2. Merge branch 'master' of https://github.com/mterenzio/fission

    khurrumqureshi committed Aug 26, 2014
    Copy the full SHA
    9ab67a1 View commit details
  3. Implemented as discussed

    khurrumqureshi committed Aug 26, 2014
    Copy the full SHA
    60e7a3e View commit details

Commits on Aug 28, 2014

  1. Implemented custom logic for authentication.

    khurrumqureshi committed Aug 28, 2014
    Copy the full SHA
    8915466 View commit details

Commits on Sep 5, 2014

  1. Implementing unit testing

    khurrumqureshi committed Sep 5, 2014
    Copy the full SHA
    068d258 View commit details

Commits on Sep 6, 2014

  1. Implementing Unit Testing

    khurrumqureshi committed Sep 6, 2014
    Copy the full SHA
    7875763 View commit details

Commits on Sep 12, 2014

  1. Implemented paging and sorting.

    khurrumqureshi committed Sep 12, 2014
    Copy the full SHA
    813c775 View commit details
Showing with 380 additions and 21 deletions.
  1. +15 −3 controllers/storystream.js
  2. +61 −8 controllers/user.js
  3. +3 −1 lib/passport-config.js
  4. +9 −0 model/News.js
  5. +5 −3 package.json
  6. +21 −6 routes/index.js
  7. +1 −0 server.js
  8. +265 −0 test/route.js
18 changes: 15 additions & 3 deletions controllers/storystream.js
Original file line number Diff line number Diff line change
@@ -19,7 +19,12 @@ module.exports = {

getAllData: function(req, res, next){
var model = storyStreamModel;
model.find({}, function(err, results){
var offset = req.query.offset ? req.query.offset : 0;
var limit = req.query.limit ? req.query.limit : 50;
model.find(
{},
{skip: offset*limit, limit: limit, sort:{date_created:-1}},
function(err, results){
if(err)
return next(new customError.Database(err));

@@ -122,7 +127,15 @@ module.exports = {

queryData: function(req, res, next){
var model = storyStreamModel;
model.find(req.body, function(err, results){
var offset = req.query.offset ? req.query.offset : 0;
var limit = req.query.limit ? req.query.limit : 50;
var data = req.body;
var sortCondition = data.sort ? data.sort : {date_created:-1};
model.find(
data,
{},
{skip: offset*limit, limit: limit, sort:sortCondition},
function(err, results){
if(err)
return next(new customError.Database(err));

@@ -155,7 +168,6 @@ module.exports = {
function getModel(modelName, callback){
var modelName = modelName.replace(/^[a-z]/, function(m){ return m.toUpperCase() });
var filePath = path.join('./model/'+modelName+".js");
console.log(modelName);
fs.exists(filePath, function(exist){
console.log(exist);
if(exist){
69 changes: 61 additions & 8 deletions controllers/user.js
Original file line number Diff line number Diff line change
@@ -47,7 +47,7 @@ module.exports = {
var fileContents = fs.readFileSync(filePath);
var filenameParts = filename.split('.');
var modelName = filenameParts[0].replace(/^[a-z]/, function(m){ return m.toUpperCase() });
User.findeOne({models:modelName}, function(err, user){
User.findOne({models:modelName}, function(err, user){
if(err || user!=null)
return next(new customError.Database("Model already exist with same name."));
User.findOne({_id: req.userId}, function(err, user){
@@ -61,12 +61,16 @@ module.exports = {
if(index > -1)
return next(new customError.InvalidContent("You have already created model with same name"));

fileContents += ",\nis_public: {type:Boolean, default:true},";
fileContents += "\ndate_created: {type:Date, default: Date.now()},";
fileContents += "\ndate_updated: {type:Date, default: Date.now()},";
fileContents += "\nid_creator: {type: Schema.Types.ObjectId, ref:'Users'}";
var newfile = "// app/models/" + modelName + ".js\n\n";
newfile += "var mongoose = require('mongoose');\n";
newfile += "var Schema = mongoose.Schema;\n";
newfile += "var " + modelName + "Schema = new Schema(";
newfile += "var " + modelName + "Schema = new Schema({";
newfile += fileContents;
newfile += ");\n";
newfile += "});\n";
newfile += "module.exports = mongoose.model('" + modelName + "', " + modelName + "Schema);"
var target_path = path.join("./model/", modelName+".js");

@@ -86,7 +90,10 @@ module.exports = {

addData: function(req, res, next){
var model = req.model;
new model(req.body).save(function(err, objectCreated){
var data = req.body;
data["id_creator"] = req.userId;

new model(data).save(function(err, objectCreated){
if(err)
return next(new customError.Database(err));

@@ -96,7 +103,25 @@ module.exports = {

getAllData: function(req, res, next){
var model = req.model;
model.find({}, function(err, results){
var condition = {};
var offset = req.query.offset ? req.query.offset : 0;
var limit = req.query.limit ? req.query.limit : 50;
if(req.is_authenticated)
condition = {
$or:[
{is_public:true},
{id_creator:req.userId, is_public:false}
]};
else
condition = {
is_public:true
};

model.find(
condition,
{},
{skip: offset*limit, limit: limit, sort:{date_created:-1}},
function(err, results){
res.send(results);
})
},
@@ -110,7 +135,14 @@ module.exports = {
if(result==null)
return next(new customError.InvalidArgument("Data does not exist."));

res.send(result);
if(req.is_authenticated)
res.send(result);
else{
if(!result.is_public)
return next(new customError.NotAuthorized("You are not authorized to view this item."));

res.send(result);
}
})
},

@@ -129,6 +161,7 @@ module.exports = {
result[key] = data[key];
}

result["id_updated"] = Date.now();
result.save(function(err, updatedRecord){
if(err)
return next(new customError.Database(err));
@@ -158,11 +191,31 @@ module.exports = {

queryData: function(req, res, next){
var model = req.model;
model.find(req.body, function(err, results){
var data = req.body;
var offset = req.query.offset ? req.query.offset : 0;
var limit = req.query.limit ? req.query.limit : 50;
var sortCondition = data.sort ? data.sort : {date_created:-1};
model.find(
data,
{},
{skip: offset*limit, limit: limit, sort:sortCondition},
function(err, results){
if(err)
return next(new customError.Database(err));

res.send(results);
var toReturn = [];
for(var i=0;i<results.length;i++){
var item = results[i];
if(req.is_authenticated){
if(item.is_public || item.id_creator == req.userId)
toReturn.push(item);
}
else{
if(item.is_public)
toReturn.push(item);
}
}
res.send(toReturn);
})
}
}
4 changes: 3 additions & 1 deletion lib/passport-config.js
Original file line number Diff line number Diff line change
@@ -8,9 +8,11 @@ module.exports = function(passport){
function(req, token, done) {
// asynchronous validation, for effect...
process.nextTick(function () {
console.log(token);
User.findOne({apiKey:token},function(err,user){
if (err) { return done(new customError.NotAuthorized("You are not authorized")); }
if (err || user==null) { return done(new customError.NotAuthorized("You are not authorized")); }

console.log(user);
req["userId"] = user._id;
return done(null, user);
})
9 changes: 9 additions & 0 deletions model/News.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
// app/models/News.js

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var NewsSchema = new Schema({
title: String,
description: String
});
module.exports = mongoose.model('News', NewsSchema);
8 changes: 5 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "Fission",
"version": "0.0.1",
"version": "0.2.0",
"engines": {
"node": "0.10.x",
"npm": "1.2.x"
@@ -25,6 +25,8 @@
"connect-busboy":"0.0.1",
"jade": "1.3.1",
"node-uuid": "1.4.1",
"password-hash": "1.2.2"
"password-hash": "1.2.2",
"supertest": "0.13.0",
"should": "4.0.4"
}
}
}
27 changes: 21 additions & 6 deletions routes/index.js
Original file line number Diff line number Diff line change
@@ -13,23 +13,24 @@ module.exports.routes = function(app){
router.post('/users/login', userController.login);

var middleWares = [passport.authenticate('bearer', { session: false }), verifyUserModel];
var getMiddleWares = [verifyModelExist, authenticate];
router.post('/modeluploader', passport.authenticate('bearer', { session: false }), userController.uploadModel);
router.get('/modeluploader',function(req, res, next){
res.render("upload_form.jade");
})

router.post("/:modelname", middleWares, userController.addData);
router.get("/:modelname/all", verifyModelExist, userController.getAllData);
router.get("/:modelname/:id", verifyModelExist, userController.getData);
router.put("/:modelname/:id", middleWares, userController.updateData);
router.delete("/:modelname/:id", middleWares, userController.deleteData);
router.post("/:modelname/query", verifyModelExist, userController.queryData);
router.post("/storystream", passport.authenticate('bearer', { session: false }), storyStreamController.addData);
router.get("/storystream/all", passport.authenticate('bearer', { session: false }), storyStreamController.getAllData);
router.get("/storystream/:id", passport.authenticate('bearer', { session: false }), storyStreamController.getData);
router.put("/storystream/:id", passport.authenticate('bearer', { session: false }), storyStreamController.updateData);
router.delete("/storystream/:id", passport.authenticate('bearer', { session: false }), storyStreamController.deleteData);
router.post("/storystream/query", passport.authenticate('bearer', { session: false }), storyStreamController.queryData);
router.post("/:modelname", middleWares, userController.addData);
router.get("/:modelname/all", getMiddleWares, userController.getAllData);
router.get("/:modelname/:id", getMiddleWares, userController.getData);
router.put("/:modelname/:id", middleWares, userController.updateData);
router.delete("/:modelname/:id", middleWares, userController.deleteData);
router.post("/:modelname/query", getMiddleWares, userController.queryData);
app.use('/', router);
}

@@ -58,3 +59,17 @@ function verifyModelExist(req, res, next){
next(new customError.InvalidArgument("Model does not exist"));
})
}

function authenticate(req, res, next){
passport.authenticate('bearer', { session: false }, function(err, user, info) {
if (err) { return next(err); }

if(!user){
req["is_authenticated"] = false;
return next();
}

req["is_authenticated"] = true;
next();
})(req, res, next);
}
1 change: 1 addition & 0 deletions server.js
Original file line number Diff line number Diff line change
@@ -82,6 +82,7 @@ db.connectDatabase(function(db){

// Setup Express error handler middleware!
app.use(function(err, req, res, next){
console.log(err);
res.send(err.code,{error:err});
});

Loading