api.js |
|
Generated by CoffeeScript 1.9.1 |
(function() {
var auth, conf, group, ld, pad, passport, user;
ld = require('lodash');
passport = require('passport');
conf = require('./configuration.js');
user = require('./model/user.js');
group = require('./model/group.js');
pad = require('./model/pad.js');
auth = require('./auth.js');
module.exports = (function() {
var api, authAPI, configurationAPI, fn, groupAPI, padAPI, userAPI;
api = {};
api.initialRoute = '/mypads/api/';
api.init = function(app) {
auth.init(app);
authAPI(app);
configurationAPI(app);
userAPI(app);
groupAPI(app);
return padAPI(app);
};
fn = {};
fn.get = function(module, req, res) {
var e;
try {
return module.get(req.params.key, function(err, val) {
if (err) {
return res.send(404, {
error: err.message,
key: req.params.key
});
}
return res.send({
key: req.params.key,
value: val
});
});
} catch (_error) {
e = _error;
return res.send(400, {
error: e.message
});
}
};
fn.set = function(setFn, key, value, req, res) {
var e;
try {
return setFn(function(err, data) {
if (err) {
return res.send(400, {
error: err.message
});
}
return res.send({
success: true,
key: key || data._id,
value: data || value
});
});
} catch (_error) {
e = _error;
return res.send(400, {
error: e.message
});
}
};
fn.del = function(delFn, req, res) {
var key;
key = req.params.key;
return delFn(key, function(err) {
if (err) {
return res.send(404, {
error: err.message
});
}
return res.send({
success: true,
key: key
});
});
};
fn.ensureAuthentificated = function(req, res, next) {
if (!req.isAuthenticated() && !req.session.login) {
return res.send(401, {
error: 'you must be authenticated'
});
} else {
return next();
}
};
authAPI = function(app) {
var authRoute;
authRoute = api.initialRoute + "auth";
app.post(authRoute + "/login", function(req, res, next) {
return passport.authenticate('local', function(err, user, info) {
if (err) {
return res.send(400, {
error: err.message
});
}
if (!user) {
return res.send(400, {
error: info.message
});
}
return req.login(user, function(err) {
req.session.login = user.login;
if (err) {
return res.send(400, {
error: err
});
}
return res.send(200, {
success: true,
user: ld.omit(user, 'password')
});
});
})(req, res, next);
});
return app.get(authRoute + "/logout", function(req, res) {
if (req.isAuthenticated() || req.session.login) {
req.logout();
req.session.destroy();
return res.send(200, {
success: true
});
} else {
return res.send(400, {
error: 'not authenticated'
});
}
});
};
configurationAPI = function(app) {
var _set, confRoute;
confRoute = api.initialRoute + "configuration";
app.get(confRoute, fn.ensureAuthentificated, function(req, res) {
return conf.all(function(err, value) {
if (err) {
return res.send(400, {
error: err
});
}
return res.send({
value: value
});
});
});
app.get(confRoute + "/:key", fn.ensureAuthentificated, function(req, res) {
return conf.get(req.params.key, function(err, value) {
if (err) {
return res.send(404, {
error: err.message,
key: req.params.key
});
}
return res.send({
key: req.params.key,
value: value
});
});
});
_set = function(req, res) {
var key, setFn, value;
key = req.method === 'POST' ? req.body.key : req.params.key;
value = req.body.value;
setFn = ld.partial(conf.set, key, value);
return fn.set(setFn, key, value, req, res);
};
app.post(confRoute, fn.ensureAuthentificated, _set);
app.put(confRoute + "/:key", fn.ensureAuthentificated, _set);
return app["delete"](confRoute + "/:key", fn.ensureAuthentificated, ld.partial(fn.del, conf.del));
};
userAPI = function(app) {
var _set, userRoute;
userRoute = api.initialRoute + "user";
app.get(userRoute + "/:key", fn.ensureAuthentificated, ld.partial(fn.get, user));
_set = function(req, res) {
var key, setFn, value;
value = req.body;
if (req.method === 'POST') {
key = req.body.login;
} else {
key = req.params.key;
value.login = key;
value._id = user.ids[key];
}
setFn = ld.partial(user.set, value);
return fn.set(setFn, key, value, req, res);
};
app.post(userRoute, fn.ensureAuthentificated, _set);
app.put(userRoute + "/:key", fn.ensureAuthentificated, _set);
return app["delete"](userRoute + "/:key", fn.ensureAuthentificated, ld.partial(fn.del, user.del));
};
groupAPI = function(app) {
var _set, groupRoute;
groupRoute = api.initialRoute + "group";
app.get(groupRoute + "/:key", fn.ensureAuthentificated, ld.partial(fn.get, group));
_set = function(req, res) {
var setFn;
setFn = ld.partial(group.set, req.body);
return fn.set(setFn, req.body._id, req.body, req, res);
};
app.post(groupRoute, fn.ensureAuthentificated, _set);
app.put(groupRoute + "/:key", fn.ensureAuthentificated, _set);
return app["delete"](groupRoute + "/:key", fn.ensureAuthentificated, ld.partial(fn.del, group.del));
};
padAPI = function(app) {
var _set, padRoute;
padRoute = api.initialRoute + "pad";
app.get(padRoute + "/:key", fn.ensureAuthentificated, ld.partial(fn.get, pad));
_set = function(req, res) {
var setFn;
setFn = ld.partial(pad.set, req.body);
return fn.set(setFn, req.body._id, req.body, req, res);
};
app.post(padRoute, fn.ensureAuthentificated, _set);
app.put(padRoute + "/:key", fn.ensureAuthentificated, _set);
return app["delete"](padRoute + "/:key", fn.ensureAuthentificated, ld.partial(fn.del, pad.del));
};
return api;
})();
}).call(this);
|