logGet.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. /**
  2. * ПОЛУЧЕНИЕ ВЫПИСКИ ИЗ ЛОГА АВТОРИЗАЦИИ ПОЛЬЗОВАТЕЛЕЙ
  3. * Copyright © 2020, А.М.Гольдин. Modified BSD License
  4. */
  5. "use strict";
  6. // В запросе приходят [1, "09", "23", "ivanov", "petrov"]
  7. // 1 - это запрашиваемый тип лога (0 - дети или сотрудники, 1 - все)
  8. // 09 - это запрашиваемый месяц
  9. // 23 - это запрашиваемый час (важен только для лога за один час)
  10. // ivanov - это данные фильтра (для детей или
  11. // сотрудников - логин, для лога за один час - дата)
  12. // petrov - это логин автора запроса (подписывается скриптом index.js)
  13. //
  14. // Возвращается сериализованная в строку выписка из лога - массив объектов
  15. // {d:"2020-01-19 17:14:02", l:"ivanov", c:"par", ip:"1.2.3.4", _id: "Gf56d"}
  16. module.exports = async (args) => {
  17. let request = {};
  18. try {
  19. if (args.length != 5) return "none";
  20. let tip = args[0],
  21. mon = args[1].substr(0, 2),
  22. hour = args[2].substr(0, 2),
  23. name = args[3].substr(0, 20).trim(),
  24. lg = args[4].substr(0, 20).trim();
  25. if (!name || !lg) return "none";
  26. if (!/^\d{1}$/.test(tip.toString())) return "none";
  27. // Сотрудник ли он?
  28. let staff = await dbFind("staff", {Ulogin: lg});
  29. if (!staff.length) return "none";
  30. // Если запрашивается лог ученика или сотрудника
  31. if (!tip) request = {$where: function() {return (
  32. this.l == name && (this.d.split('-')[1]) == mon
  33. );}}
  34. // Если запрашивается лог всех за один час
  35. else {
  36. if (!staff[0].admin) return "none";
  37. if (!/^[0-9]{4}-[0-9]{2}-[0-9]{2}/.test(name)) return "none";
  38. request = {$where: function() {return (
  39. (this.d).includes(name) &&
  40. (this.d.split(' ')[1]).split(':')[0] == hour
  41. );}}
  42. }
  43. let resp = await dbFind("authlog", request);
  44. resp.sort((a, b) => (a.d <= b.d) ? 1 : -1);
  45. return JSON.stringify(resp);
  46. }
  47. catch(e) {return "none";}
  48. };