|
@@ -0,0 +1,379 @@
|
|
|
+var Response = require("./Response");
|
|
|
+var R= Response;
|
|
|
+var E = require("./Errors");
|
|
|
+
|
|
|
+var fs = require("fs");
|
|
|
+var UserManager = require("./users");
|
|
|
+
|
|
|
+
|
|
|
+var AUTH_USER="auth_user"
|
|
|
+var AUTH_PASSWORD="auth_password"
|
|
|
+var USER = "user";
|
|
|
+var PASSWORD = "password";
|
|
|
+var PROJECT = "project";
|
|
|
+var DATA = "data";
|
|
|
+var RESOURCE = "res";
|
|
|
+
|
|
|
+function send(res, err, data, log)
|
|
|
+{
|
|
|
+ if(err!=0)
|
|
|
+ {
|
|
|
+ var stack = new Error().stack;
|
|
|
+ console.log(stack);
|
|
|
+ }
|
|
|
+ if(log != undefined)
|
|
|
+ {
|
|
|
+ console.log(log);
|
|
|
+ }
|
|
|
+ Response.writeResponse(res, err, data)
|
|
|
+}
|
|
|
+
|
|
|
+function sendSuccess(res, data)
|
|
|
+{
|
|
|
+ return send(res, E.SUCCESS, data);
|
|
|
+}
|
|
|
+
|
|
|
+function getQueryParam(req, param)
|
|
|
+{
|
|
|
+ if (req.method == "POST") {
|
|
|
+ return req.body[param];
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return req.query[param];
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+module.exports = class Server {
|
|
|
+ constructor()
|
|
|
+ {
|
|
|
+ this.users=new UserManager();
|
|
|
+ }
|
|
|
+
|
|
|
+ /*
|
|
|
+ ** Utils
|
|
|
+ */
|
|
|
+ getUserQuery(req, res)
|
|
|
+ {
|
|
|
+ var name = getQueryParam(req, AUTH_USER);
|
|
|
+ if(typeof name != 'string' || name.length<1 )
|
|
|
+ return send(res, E.AUTH_FAILED, AUTH_USER);
|
|
|
+
|
|
|
+ var user = this.users.getUser(name);
|
|
|
+ if(user==null) return null;
|
|
|
+ return user;
|
|
|
+ }
|
|
|
+
|
|
|
+ getUser(req, res)
|
|
|
+ {
|
|
|
+ var name = req.params[USER];
|
|
|
+ if(typeof name != 'string' || name.length<1 )
|
|
|
+ return send(res, E.EINVAL, USER);
|
|
|
+
|
|
|
+ var user = this.users.getUser(name);
|
|
|
+ if(user==null) return null;
|
|
|
+ return user;
|
|
|
+ }
|
|
|
+
|
|
|
+ getProject(req, res)
|
|
|
+ {
|
|
|
+ var user = this.getUser(req);
|
|
|
+ if(user.code != undefined) return user;
|
|
|
+
|
|
|
+ var pro = req.params[PROJECT];
|
|
|
+ if(typeof pro != 'string' || pro.length<1 )
|
|
|
+ return send(res, E.EINVAL, PROJECT);
|
|
|
+
|
|
|
+ var projet = user.getProject(pro);
|
|
|
+ if(!E.check(projet))
|
|
|
+ return send(res, projet, pro);
|
|
|
+
|
|
|
+ return projet;
|
|
|
+ }
|
|
|
+
|
|
|
+ getResource(req, res)
|
|
|
+ {
|
|
|
+ var projet = this.getProject(req, res);
|
|
|
+ if(projet.code != undefined) return user;
|
|
|
+
|
|
|
+ var pro = req.params[RESOURCE];
|
|
|
+ if(typeof pro != 'string' || pro.length<1 )
|
|
|
+ return send(res, E.EINVAL, RESOURCE);
|
|
|
+
|
|
|
+ var ress = projet.getResource(req.params[USER], req.params[PROJECT], pro);
|
|
|
+ if(!E.check(ress))
|
|
|
+ return send(res, ress, pro);
|
|
|
+
|
|
|
+ return ress;
|
|
|
+ }
|
|
|
+
|
|
|
+ authentification(req, res)
|
|
|
+ {
|
|
|
+ return E.SUCCESS;
|
|
|
+ var password = getQueryParam(req, AUTH_PASSWORD);
|
|
|
+ var urlUser = this.getUserQuery(req, res);
|
|
|
+
|
|
|
+ if(urlUser.password==password) return E.SUCCESS;
|
|
|
+ return send(res, E.AUTH_FAILED, "Login ou mot de passe incorrect");
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ /*
|
|
|
+ ** Users
|
|
|
+ */
|
|
|
+ serveUser(req, res)
|
|
|
+ {
|
|
|
+ //if(this.authentification(req, res)==null) return null;
|
|
|
+ var user = this.getUser(req, res);
|
|
|
+ if(user==null) return;
|
|
|
+ return sendSuccess(res, user);
|
|
|
+ }
|
|
|
+
|
|
|
+ listUsers(req, res)
|
|
|
+ {
|
|
|
+ //if(this.authentification(req, res)==null) return null;
|
|
|
+ sendSuccess(res, this.users.getUserList());
|
|
|
+ }
|
|
|
+
|
|
|
+ createUser(req, res)
|
|
|
+ {
|
|
|
+ if(this.authentification(req, res)==null) return null;
|
|
|
+ var u = getQueryParam(req, USER);
|
|
|
+ var p =getQueryParam(req, PASSWORD);
|
|
|
+
|
|
|
+ if(u==undefined) return send(res, E.BAD_USER, USER);
|
|
|
+ if(p==undefined) return send(res, E.EINVAL, PASSWORD);
|
|
|
+
|
|
|
+ var ret = this.users.createUser(u, p);
|
|
|
+ if(E.check(ret)) return sendSuccess(res);
|
|
|
+ return send(res, E.USER_EXISTS, u);
|
|
|
+ }
|
|
|
+
|
|
|
+ renameUser(req, res)
|
|
|
+ {
|
|
|
+ if(this.authentification(req, res)==null) return null;
|
|
|
+ var oldName = req.params[USER];
|
|
|
+ var newName = getQueryParam(req, "newName");
|
|
|
+
|
|
|
+ var ret = this.users.renameUser(oldName, newName);
|
|
|
+ if(E.check(ret)) return sendSuccess(res);
|
|
|
+ return send(res, ret, newName);
|
|
|
+ }
|
|
|
+
|
|
|
+ removeUser(req, res)
|
|
|
+ {
|
|
|
+ if(this.authentification(req, res)==null) return null;
|
|
|
+ var name = req.params[USER];
|
|
|
+ var ret = this.users.removeUser(name);
|
|
|
+
|
|
|
+ if(E.check(ret)) return sendSuccess(res);
|
|
|
+ return send(res, ret, name);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /*
|
|
|
+ POST: { user: "ptitcois", password:"xxxx", data: { [contenu] }}
|
|
|
+ */
|
|
|
+ editUser(req, res)
|
|
|
+ {
|
|
|
+ if(this.authentification(req)==null) return null;
|
|
|
+ var name = req.params[USER];
|
|
|
+ var data = getQueryParam(req, DATA);
|
|
|
+
|
|
|
+
|
|
|
+ if(name==undefined) return send(res, E.EINVAL, USER);
|
|
|
+ if(data==undefined) return send(res, E.EINVAL, DATA);
|
|
|
+
|
|
|
+ var ret = this.users.editUser(name, data);
|
|
|
+ if(E.check(ret)) return sendSuccess(res);
|
|
|
+ return send(res, ret);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ /*
|
|
|
+ ** Projects
|
|
|
+ */
|
|
|
+ serveProject(req, res)
|
|
|
+ {
|
|
|
+ //if(this.authentification(req, res)==null) return null;
|
|
|
+ var project = this.getProject(req, res);
|
|
|
+ if(project==null) return;
|
|
|
+ return sendSuccess(res, project);
|
|
|
+ }
|
|
|
+
|
|
|
+ listProjects(req, res)
|
|
|
+ {
|
|
|
+ //if(this.authentification(req, res)==null) return null;
|
|
|
+ var user = this.getUser(req, res);
|
|
|
+ if(user==null) return;
|
|
|
+ sendSuccess(res, user.projects);
|
|
|
+ }
|
|
|
+
|
|
|
+ createProject(req, res)
|
|
|
+ {
|
|
|
+ if(this.authentification(req, res)==null) return null;
|
|
|
+ var user = this.getUser(req, res);
|
|
|
+ if(user==null) return;
|
|
|
+
|
|
|
+ var proName = getQueryParam(req, PROJECT);
|
|
|
+ if(proName==undefined) return send(res, E.BAD_USER, PROJECT);
|
|
|
+
|
|
|
+ var ret = user.createProject(proName);
|
|
|
+ if(E.check(ret)) return sendSuccess(res);
|
|
|
+ return send(res, E.PROJECT_EXISTS, u);
|
|
|
+ }
|
|
|
+
|
|
|
+ renameProject(req, res)
|
|
|
+ {
|
|
|
+ if(this.authentification(req, res)==null) return null;
|
|
|
+ var user = this.getUser(req, res);
|
|
|
+ if(user==null) return;
|
|
|
+
|
|
|
+ var oldName = req.params[PROJECT];
|
|
|
+ var newName = getQueryParam(req, "newName");
|
|
|
+
|
|
|
+ var ret = user.renameProject(oldName, newName);
|
|
|
+ if(E.check(ret)) return sendSuccess(res);
|
|
|
+ return send(res, ret, newName);
|
|
|
+ }
|
|
|
+
|
|
|
+ removeProject(req, res)
|
|
|
+ {
|
|
|
+ if(this.authentification(req, res)==null) return null;
|
|
|
+ var user = this.getUser(req, res);
|
|
|
+ if(user==null) return;
|
|
|
+
|
|
|
+ var name = req.params[PROJECT];
|
|
|
+ var ret = user.removeProject(name);
|
|
|
+
|
|
|
+ if(E.check(ret)) return sendSuccess(res);
|
|
|
+ return send(res, ret, name);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /*
|
|
|
+ POST: { user: "ptitcois", password:"xxxx", data: { [contenu] }}
|
|
|
+ */
|
|
|
+ editProject(req, res)
|
|
|
+ {
|
|
|
+ if(this.authentification(req)==null) return null;
|
|
|
+ var user = this.getUser(req, res);
|
|
|
+ if(user==null) return;
|
|
|
+
|
|
|
+ var name = req.params[PROJECT];
|
|
|
+ var data = getQueryParam(req, DATA);
|
|
|
+
|
|
|
+
|
|
|
+ if(name==undefined) return send(res, E.EINVAL, PROJECT);
|
|
|
+ if(data==undefined) return send(res, E.EINVAL, DATA);
|
|
|
+
|
|
|
+ var ret = user.editProject(name, data);
|
|
|
+ if(E.check(ret)) return sendSuccess(res);
|
|
|
+ return send(res, ret);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ //
|
|
|
+ // Resources
|
|
|
+ //
|
|
|
+ serveResource(req, res)
|
|
|
+ {
|
|
|
+ //if(this.authentification(req, res)==null) return null;
|
|
|
+ var r = this.getResource(req, res);
|
|
|
+ if(r==null) return;
|
|
|
+ return sendSuccess(r, project);
|
|
|
+ }
|
|
|
+
|
|
|
+ listResources(req, res)
|
|
|
+ {
|
|
|
+ //if(this.authentification(req, res)==null) return null;
|
|
|
+ var pro = this.getProject(req, res);
|
|
|
+ if(pro==null) return;
|
|
|
+ sendSuccess(res, user.resources);
|
|
|
+ }
|
|
|
+
|
|
|
+ createResource(req, res)
|
|
|
+ {
|
|
|
+ console.log("A");
|
|
|
+ if(this.authentification(req, res)==null) return null;
|
|
|
+ var pro = this.getProject(req, res);
|
|
|
+ if(pro==null) return;
|
|
|
+
|
|
|
+ console.log("B");
|
|
|
+ var resName = getQueryParam(req, RESOURCE);
|
|
|
+
|
|
|
+ console.log("C");
|
|
|
+ if(resName==undefined) return send(res, E.BAD_USER, RESOURCE);
|
|
|
+
|
|
|
+ console.log("D");
|
|
|
+ var ret = pro.createResource(req.params[USER], req.params[PROJECT], resName);
|
|
|
+ if(E.check(ret)) return sendSuccess(res);
|
|
|
+ return send(res, E.PROJECT_EXISTS, resName);
|
|
|
+ }
|
|
|
+
|
|
|
+ renameResource(req, res)
|
|
|
+ {
|
|
|
+ if(this.authentification(req, res)==null) return null;
|
|
|
+ var pro = this.getProject(req, res);
|
|
|
+ if(pro==null) return;
|
|
|
+
|
|
|
+ var oldName = req.params[RESOURCE];
|
|
|
+ var newName = getQueryParam(req, "newName");
|
|
|
+
|
|
|
+ var ret = pro.renameResource(req.params[USER], req.params[PROJECT], oldName, newName);
|
|
|
+ if(E.check(ret)) return sendSuccess(res);
|
|
|
+ return send(res, ret, newName);
|
|
|
+ }
|
|
|
+
|
|
|
+ removeResource(req, res)
|
|
|
+ {
|
|
|
+ if(this.authentification(req, res)==null) return null;
|
|
|
+ var pro = this.getProject(req, res);
|
|
|
+ if(pro==null) return;
|
|
|
+
|
|
|
+ var name = req.params[RESOURCE];
|
|
|
+ var ret = pro.removeResource(req.params[USER], req.params[PROJECT], name);
|
|
|
+ console.log("string : "+JSON.stringify(ret));
|
|
|
+ if(E.check(ret)) return sendSuccess(res);
|
|
|
+ return send(res, ret, name);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /*
|
|
|
+ POST: { user: "ptitcois", password:"xxxx", data: { [contenu] }}
|
|
|
+ */
|
|
|
+ editRescource(req, res)
|
|
|
+ {
|
|
|
+ console.log("ICIIIIIIIIIIIIIIII")
|
|
|
+ if(this.authentification(req, res)==null) return null;
|
|
|
+ var pro = this.getProject(req, res);
|
|
|
+ if(pro==null) return;
|
|
|
+
|
|
|
+ var name = req.params[RESOURCE];
|
|
|
+ var data = getQueryParam(req, DATA);
|
|
|
+ console.log(JSON.stringify(req.body))
|
|
|
+
|
|
|
+ if(name==undefined) return send(res, E.EINVAL, RESOURCE);
|
|
|
+ if(data==undefined) return send(res, E.EINVAL, DATA, "Parametre 'data' no présent");
|
|
|
+
|
|
|
+ var ret = pro.editResource(req.params[USER], req.params[PROJECT], name, data);
|
|
|
+ if(E.check(ret)) return sendSuccess(res);
|
|
|
+ return send(res, ret);
|
|
|
+ }
|
|
|
+
|
|
|
+}
|