AddUser.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. const { v4: uuidv4 } = require('uuid');
  2. const API = require("../../../lib/API");
  3. const bcryptjs = require('bcryptjs');
  4. const AccessControl = require("../../../lib/AccessControl");
  5. const { BaseStdResponse } = require("../../../BaseStdResponse");
  6. const db = require("../../../plugin/DataBase/db");
  7. // 添加用户
  8. class AddUser extends API {
  9. constructor() {
  10. super();
  11. this.setMethod("POST");
  12. this.setPath("/User/AddUser");
  13. }
  14. CheckPassword(password) {
  15. if (password.length < 8 || password.length > 16) {
  16. return false;
  17. }
  18. const hasLetter = /[a-zA-Z]/.test(password);
  19. const hasNumber = /\d/.test(password);
  20. return hasLetter && hasNumber;
  21. }
  22. checkUsername(username) {
  23. const regex = /^[\u4e00-\u9fa5A-Za-z0-9]{2,8}$/;
  24. return regex.test(username);
  25. }
  26. async onRequest(req, res) {
  27. let { uuid, session, username, password, permissions } = req.body;
  28. if ([uuid, session, username, password].some(value => value === '' || value === null || value === undefined)) {
  29. res.json({
  30. ...BaseStdResponse.MISSING_PARAMETER,
  31. endpoint: 1513126
  32. });
  33. return;
  34. }
  35. if (!this.checkUsername(username))
  36. return res.json({
  37. ...BaseStdResponse.ERR,
  38. msg: '用户名需在2到8位之间,且只能含有英文字母和汉字'
  39. })
  40. // password = atob(password);
  41. if (!this.CheckPassword(password))
  42. return res.json({
  43. ...BaseStdResponse.ERR,
  44. msg: '密码需在8到16位之间,且包含字母和数字'
  45. })
  46. // TODO 检查是否存在权限
  47. if (permissions.length === 0)
  48. return res.json({
  49. ...BaseStdResponse.ERR,
  50. msg: '请选择用户权限'
  51. })
  52. // 检查 session
  53. if (!await AccessControl.checkSession(uuid, session))
  54. return res.status(401).json({
  55. ...BaseStdResponse.ACCESS_DENIED,
  56. endpoint: 48153145
  57. })
  58. // 检查权限
  59. let permission = await AccessControl.getPermission(uuid)
  60. if (!permission.includes("admin"))
  61. return res.json({
  62. ...BaseStdResponse.PERMISSION_DENIED,
  63. endpoint: 4815478,
  64. })
  65. let sql = 'SELECT username FROM users WHERE username = ?';
  66. let UsernameRows = await db.query(sql, [username]);
  67. if (UsernameRows.length > 0)
  68. return res.json({
  69. ...BaseStdResponse.USER_ALREADY_EXISTS,
  70. msg: '用户名已被占用!'
  71. })
  72. uuid = uuidv4();
  73. session = uuidv4();
  74. const hashPassword = bcryptjs.hashSync(password, 10);
  75. sql = 'INSERT INTO users (uuid, username, session, password, permission) VALUES (?, ?, ?, ?, ?)';
  76. let result = await db.query(sql, [uuid, username, session, hashPassword, JSON.stringify(permissions)]);
  77. if (result && result.affectedRows > 0) {
  78. res.json({
  79. ...BaseStdResponse.OK
  80. })
  81. } else {
  82. res.json({ ...BaseStdResponse.ERR, endpoint: 7894378, msg: '添加用户失败!' });
  83. }
  84. }
  85. }
  86. module.exports.AddUser = AddUser;