usImport.js 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. /**
  2. * ИМПОРТ ПОЛЬЗОВАТЕЛЕЙ ИЗ ФАЙЛА
  3. * Copyright © 2019, А.М.Гольдин. Modified BSD License
  4. */
  5. "use strict";
  6. // Формат импортируемого файла - см. www/static/impUsTpl.html
  7. // Возвращает строку вида "12-3" (количество добавленных и пропущенных),
  8. // либо "none". Если формат какой-либо строки неверен, возвращает строку вида
  9. // "pupkin" (логин пользователя, на котором возникла ошибка)
  10. module.exports = async impUsStr => {
  11. try {
  12. let n = 0, m = 0; // добавленные и пропущенные пользователи
  13. let usStrArr = impUsStr.trim().replace(/\s{2,}/g, ' ').split('^');
  14. for (let currStr of usStrArr) {
  15. currStr = currStr.trim(); if (!currStr) continue; else n++;
  16. let usFields = currStr.split(' ');
  17. let usLogin = usFields[0].trim(),
  18. usPassw = usFields[1].trim(),
  19. usFamil = usFields[2].trim(),
  20. usName = usFields[3].trim(),
  21. usOtch = usFields[4].trim(),
  22. usClass = usFields[5].trim();
  23. if (!(usPassw && usFamil && usName && usOtch && usClass))
  24. return usLogin;
  25. const pattClass = /(^\d{1,2}[A-Я]{1}$)|(none)/,
  26. pattFio = /^[A-ЯЁа-яё\-]+$/,
  27. pattLogin = /^[a-z0-9]+$/;
  28. if (
  29. !pattLogin.test(usLogin) || !pattFio.test(usFamil) ||
  30. !pattFio.test(usName) || !pattFio.test(usOtch) ||
  31. !pattClass.test(usClass)
  32. ) return usLogin;
  33. // Имя коллекции для добавления
  34. let collect = (usClass == "none") ? "staff" : "pupils";
  35. // Проверяем, нет ли уже юзера с таким же логином,
  36. // если нет - добавляем, если есть - пропускаем
  37. let res = await dbFind(collect, {Ulogin: usLogin});
  38. if (!res.length) {
  39. let newUser =
  40. {"Ulogin": usLogin, "Ufamil": usFamil, "Uname": usName};
  41. newUser.Upwd = hash(usPassw, salt); // хэш пароля
  42. if (collect == "pupils") {
  43. // Добавляем хэш родительского пароля и класс
  44. newUser.UpwdPar = hash('p' + captNumGen(newUser.Upwd), salt);
  45. newUser.Uclass = usClass;
  46. }
  47. else newUser.Uotch = usOtch;
  48. db[collect].insert(newUser);
  49. }
  50. else {n--, m++}
  51. }
  52. return `${n}-${m}`;
  53. }
  54. catch(e) {return "none";}
  55. };