user.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. var DataSavable = require("./SavableData");
  2. var Project = require("./Project");
  3. var E = require("./Errors");
  4. var utils = require('./utils');
  5. var global = require("./global");
  6. var fs = require("fs");
  7. module.exports = class User extends DataSavable{
  8. constructor(name, password)
  9. {
  10. super();
  11. this.name="";
  12. this.password="";
  13. this.groups={ user: true };
  14. this.projects={}; // { name= path}
  15. if(name!=undefined) this.name=name;
  16. if(password!=undefined) this.password=password;
  17. }
  18. getProject(projectName)
  19. {
  20. var project = new Project();
  21. return project.load(this.name, projectName);
  22. }
  23. save()
  24. {
  25. fs.writeFileSync(global.pathToUserFile(this.name), this.toString());
  26. }
  27. load(name)
  28. {
  29. if( name!=undefined ) this.path=global.pathToUserFile(name);
  30. var obj = JSON.parse(fs.readFileSync(this.path));
  31. if(obj!=null) Object.assign(this, obj);
  32. return this;
  33. }
  34. createProject(project)
  35. {
  36. var old = this.getProject(project);
  37. if(E.check(old))
  38. return E.PROJECT_EXISTS;
  39. utils.mkdir(global.pathToProjectDir(this.name, project));
  40. utils.mkdir(global.pathToResourceDir(this.name, project));
  41. var p = new Project();
  42. p.name=project;
  43. p.save(global.pathToProjectFile(this.name, project));
  44. this.projects[project] = true;
  45. this.save();
  46. return E.SUCCESS;
  47. }
  48. renameProject(oldName, newName)
  49. {
  50. var n = this.getProject(oldName);
  51. n.name=newName;
  52. var oldPath = global.pathToProjectDir(this.name, oldName);
  53. var newPath = global.pathToProjectDir(this.name, newName);
  54. try {
  55. utils.mv(oldPath, newPath);
  56. } catch (e) {
  57. return E.UNKNWON;
  58. } finally {
  59. }
  60. delete this.projects[oldName];
  61. this.projects[newName] = true;
  62. n.save(global.pathToProjectFile(this.name, newName));
  63. this.save();
  64. return E.SUCCESS;
  65. }
  66. removeProject(project)
  67. {
  68. var x = this.getProject(project);
  69. if(!E.check(x))
  70. return E.BAD_PROJECT;
  71. delete this.projects[project];
  72. utils.rmdir(global.pathToProjectDir(this.name, project));
  73. this.save(global.pathToUserFile(this.name));
  74. }
  75. editProject(name, data)
  76. {
  77. if(data.name!=undefined && data.name!=name)
  78. {
  79. var t = this.renameProject(name, data.name);
  80. if( !E.check(t) )
  81. return t;
  82. this.save();
  83. name=data.name;
  84. }
  85. var pro = this.getProject(name);
  86. if(!E.check(pro))
  87. return pro;
  88. Object.assign(pro, data);
  89. pro.save(global.pathToProjectFile(this.name, name));
  90. return E.SUCCESS;
  91. }
  92. }