123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379 |
- 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);
- }
- }
|