Server.js 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379
  1. var Response = require("./Response");
  2. var R= Response;
  3. var E = require("./Errors");
  4. var fs = require("fs");
  5. var UserManager = require("./users");
  6. var AUTH_USER="auth_user"
  7. var AUTH_PASSWORD="auth_password"
  8. var USER = "user";
  9. var PASSWORD = "password";
  10. var PROJECT = "project";
  11. var DATA = "data";
  12. var RESOURCE = "res";
  13. function send(res, err, data, log)
  14. {
  15. if(err!=0)
  16. {
  17. var stack = new Error().stack;
  18. console.log(stack);
  19. }
  20. if(log != undefined)
  21. {
  22. console.log(log);
  23. }
  24. Response.writeResponse(res, err, data)
  25. }
  26. function sendSuccess(res, data)
  27. {
  28. return send(res, E.SUCCESS, data);
  29. }
  30. function getQueryParam(req, param)
  31. {
  32. if (req.method == "POST") {
  33. return req.body[param];
  34. }
  35. else
  36. {
  37. return req.query[param];
  38. }
  39. }
  40. module.exports = class Server {
  41. constructor()
  42. {
  43. this.users=new UserManager();
  44. }
  45. /*
  46. ** Utils
  47. */
  48. getUserQuery(req, res)
  49. {
  50. var name = getQueryParam(req, AUTH_USER);
  51. if(typeof name != 'string' || name.length<1 )
  52. return send(res, E.AUTH_FAILED, AUTH_USER);
  53. var user = this.users.getUser(name);
  54. if(user==null) return null;
  55. return user;
  56. }
  57. getUser(req, res)
  58. {
  59. var name = req.params[USER];
  60. if(typeof name != 'string' || name.length<1 )
  61. return send(res, E.EINVAL, USER);
  62. var user = this.users.getUser(name);
  63. if(user==null) return null;
  64. return user;
  65. }
  66. getProject(req, res)
  67. {
  68. var user = this.getUser(req);
  69. if(user.code != undefined) return user;
  70. var pro = req.params[PROJECT];
  71. if(typeof pro != 'string' || pro.length<1 )
  72. return send(res, E.EINVAL, PROJECT);
  73. var projet = user.getProject(pro);
  74. if(!E.check(projet))
  75. return send(res, projet, pro);
  76. return projet;
  77. }
  78. getResource(req, res)
  79. {
  80. var projet = this.getProject(req, res);
  81. if(projet.code != undefined) return user;
  82. var pro = req.params[RESOURCE];
  83. if(typeof pro != 'string' || pro.length<1 )
  84. return send(res, E.EINVAL, RESOURCE);
  85. var ress = projet.getResource(req.params[USER], req.params[PROJECT], pro);
  86. if(!E.check(ress))
  87. return send(res, ress, pro);
  88. return ress;
  89. }
  90. authentification(req, res)
  91. {
  92. return E.SUCCESS;
  93. var password = getQueryParam(req, AUTH_PASSWORD);
  94. var urlUser = this.getUserQuery(req, res);
  95. if(urlUser.password==password) return E.SUCCESS;
  96. return send(res, E.AUTH_FAILED, "Login ou mot de passe incorrect");
  97. }
  98. /*
  99. ** Users
  100. */
  101. serveUser(req, res)
  102. {
  103. //if(this.authentification(req, res)==null) return null;
  104. var user = this.getUser(req, res);
  105. if(user==null) return;
  106. return sendSuccess(res, user);
  107. }
  108. listUsers(req, res)
  109. {
  110. //if(this.authentification(req, res)==null) return null;
  111. sendSuccess(res, this.users.getUserList());
  112. }
  113. createUser(req, res)
  114. {
  115. if(this.authentification(req, res)==null) return null;
  116. var u = getQueryParam(req, USER);
  117. var p =getQueryParam(req, PASSWORD);
  118. if(u==undefined) return send(res, E.BAD_USER, USER);
  119. if(p==undefined) return send(res, E.EINVAL, PASSWORD);
  120. var ret = this.users.createUser(u, p);
  121. if(E.check(ret)) return sendSuccess(res);
  122. return send(res, E.USER_EXISTS, u);
  123. }
  124. renameUser(req, res)
  125. {
  126. if(this.authentification(req, res)==null) return null;
  127. var oldName = req.params[USER];
  128. var newName = getQueryParam(req, "newName");
  129. var ret = this.users.renameUser(oldName, newName);
  130. if(E.check(ret)) return sendSuccess(res);
  131. return send(res, ret, newName);
  132. }
  133. removeUser(req, res)
  134. {
  135. if(this.authentification(req, res)==null) return null;
  136. var name = req.params[USER];
  137. var ret = this.users.removeUser(name);
  138. if(E.check(ret)) return sendSuccess(res);
  139. return send(res, ret, name);
  140. }
  141. /*
  142. POST: { user: "ptitcois", password:"xxxx", data: { [contenu] }}
  143. */
  144. editUser(req, res)
  145. {
  146. if(this.authentification(req)==null) return null;
  147. var name = req.params[USER];
  148. var data = getQueryParam(req, DATA);
  149. if(name==undefined) return send(res, E.EINVAL, USER);
  150. if(data==undefined) return send(res, E.EINVAL, DATA);
  151. var ret = this.users.editUser(name, data);
  152. if(E.check(ret)) return sendSuccess(res);
  153. return send(res, ret);
  154. }
  155. /*
  156. ** Projects
  157. */
  158. serveProject(req, res)
  159. {
  160. //if(this.authentification(req, res)==null) return null;
  161. var project = this.getProject(req, res);
  162. if(project==null) return;
  163. return sendSuccess(res, project);
  164. }
  165. listProjects(req, res)
  166. {
  167. //if(this.authentification(req, res)==null) return null;
  168. var user = this.getUser(req, res);
  169. if(user==null) return;
  170. sendSuccess(res, user.projects);
  171. }
  172. createProject(req, res)
  173. {
  174. if(this.authentification(req, res)==null) return null;
  175. var user = this.getUser(req, res);
  176. if(user==null) return;
  177. var proName = getQueryParam(req, PROJECT);
  178. if(proName==undefined) return send(res, E.BAD_USER, PROJECT);
  179. var ret = user.createProject(proName);
  180. if(E.check(ret)) return sendSuccess(res);
  181. return send(res, E.PROJECT_EXISTS, u);
  182. }
  183. renameProject(req, res)
  184. {
  185. if(this.authentification(req, res)==null) return null;
  186. var user = this.getUser(req, res);
  187. if(user==null) return;
  188. var oldName = req.params[PROJECT];
  189. var newName = getQueryParam(req, "newName");
  190. var ret = user.renameProject(oldName, newName);
  191. if(E.check(ret)) return sendSuccess(res);
  192. return send(res, ret, newName);
  193. }
  194. removeProject(req, res)
  195. {
  196. if(this.authentification(req, res)==null) return null;
  197. var user = this.getUser(req, res);
  198. if(user==null) return;
  199. var name = req.params[PROJECT];
  200. var ret = user.removeProject(name);
  201. if(E.check(ret)) return sendSuccess(res);
  202. return send(res, ret, name);
  203. }
  204. /*
  205. POST: { user: "ptitcois", password:"xxxx", data: { [contenu] }}
  206. */
  207. editProject(req, res)
  208. {
  209. if(this.authentification(req)==null) return null;
  210. var user = this.getUser(req, res);
  211. if(user==null) return;
  212. var name = req.params[PROJECT];
  213. var data = getQueryParam(req, DATA);
  214. if(name==undefined) return send(res, E.EINVAL, PROJECT);
  215. if(data==undefined) return send(res, E.EINVAL, DATA);
  216. var ret = user.editProject(name, data);
  217. if(E.check(ret)) return sendSuccess(res);
  218. return send(res, ret);
  219. }
  220. //
  221. // Resources
  222. //
  223. serveResource(req, res)
  224. {
  225. //if(this.authentification(req, res)==null) return null;
  226. var r = this.getResource(req, res);
  227. if(r==null) return;
  228. return sendSuccess(r, project);
  229. }
  230. listResources(req, res)
  231. {
  232. //if(this.authentification(req, res)==null) return null;
  233. var pro = this.getProject(req, res);
  234. if(pro==null) return;
  235. sendSuccess(res, user.resources);
  236. }
  237. createResource(req, res)
  238. {
  239. console.log("A");
  240. if(this.authentification(req, res)==null) return null;
  241. var pro = this.getProject(req, res);
  242. if(pro==null) return;
  243. console.log("B");
  244. var resName = getQueryParam(req, RESOURCE);
  245. console.log("C");
  246. if(resName==undefined) return send(res, E.BAD_USER, RESOURCE);
  247. console.log("D");
  248. var ret = pro.createResource(req.params[USER], req.params[PROJECT], resName);
  249. if(E.check(ret)) return sendSuccess(res);
  250. return send(res, E.PROJECT_EXISTS, resName);
  251. }
  252. renameResource(req, res)
  253. {
  254. if(this.authentification(req, res)==null) return null;
  255. var pro = this.getProject(req, res);
  256. if(pro==null) return;
  257. var oldName = req.params[RESOURCE];
  258. var newName = getQueryParam(req, "newName");
  259. var ret = pro.renameResource(req.params[USER], req.params[PROJECT], oldName, newName);
  260. if(E.check(ret)) return sendSuccess(res);
  261. return send(res, ret, newName);
  262. }
  263. removeResource(req, res)
  264. {
  265. if(this.authentification(req, res)==null) return null;
  266. var pro = this.getProject(req, res);
  267. if(pro==null) return;
  268. var name = req.params[RESOURCE];
  269. var ret = pro.removeResource(req.params[USER], req.params[PROJECT], name);
  270. console.log("string : "+JSON.stringify(ret));
  271. if(E.check(ret)) return sendSuccess(res);
  272. return send(res, ret, name);
  273. }
  274. /*
  275. POST: { user: "ptitcois", password:"xxxx", data: { [contenu] }}
  276. */
  277. editRescource(req, res)
  278. {
  279. console.log("ICIIIIIIIIIIIIIIII")
  280. if(this.authentification(req, res)==null) return null;
  281. var pro = this.getProject(req, res);
  282. if(pro==null) return;
  283. var name = req.params[RESOURCE];
  284. var data = getQueryParam(req, DATA);
  285. console.log(JSON.stringify(req.body))
  286. if(name==undefined) return send(res, E.EINVAL, RESOURCE);
  287. if(data==undefined) return send(res, E.EINVAL, DATA, "Parametre 'data' no présent");
  288. var ret = pro.editResource(req.params[USER], req.params[PROJECT], name, data);
  289. if(E.check(ret)) return sendSuccess(res);
  290. return send(res, ret);
  291. }
  292. }