Create.js 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. const API = require("../../../lib/API.js")
  2. const db = require("../../../plugin/DataBase/db.js")
  3. const AccessControl = require("../../../lib/AccessControl.js")
  4. const { BaseStdResponse } = require("../../../BaseStdResponse.js")
  5. const { sanitizeHtml } = require("../../../lib/SanitizeHtml.js")
  6. function normalizeDateTime(value) {
  7. if (value === undefined || value === null || value === '') return null
  8. const n = Number(value)
  9. if (!Number.isNaN(n) && Number.isFinite(n)) {
  10. const d = new Date(n)
  11. if (!Number.isNaN(d.getTime())) {
  12. return d.toISOString().slice(0, 19).replace('T', ' ')
  13. }
  14. }
  15. return String(value)
  16. }
  17. class AdminCreatePopup extends API {
  18. constructor() {
  19. super()
  20. this.setPath('/Admin/Popup')
  21. this.setMethod('POST')
  22. }
  23. async onRequest(req, res) {
  24. let {
  25. uuid,
  26. session,
  27. title,
  28. content_html,
  29. priority,
  30. is_active,
  31. repeat_show,
  32. start_at,
  33. end_at
  34. } = req.body
  35. if ([uuid, session, title, content_html].some(v => v === '' || v === null || v === undefined))
  36. return res.json({ ...BaseStdResponse.MISSING_PARAMETER })
  37. if (!await AccessControl.checkSession(uuid, session))
  38. return res.status(401).json({ ...BaseStdResponse.ACCESS_DENIED })
  39. const permission = await AccessControl.getPermission(uuid)
  40. if (!permission.includes("admin") && !permission.includes("server"))
  41. return res.json({ ...BaseStdResponse.PERMISSION_DENIED })
  42. const cleanHtml = sanitizeHtml(content_html)
  43. const now = Date.now()
  44. const sql = `
  45. INSERT INTO site_popup
  46. (title, content_html, priority, is_active, repeat_show, start_at, end_at, created_by, created_at, updated_at)
  47. VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
  48. `
  49. const rows = await db.query(sql, [
  50. String(title).trim(),
  51. cleanHtml,
  52. Number(priority) || 0,
  53. Number(is_active) === 0 ? 0 : 1,
  54. Number(repeat_show) === 1 ? 1 : 0,
  55. normalizeDateTime(start_at),
  56. normalizeDateTime(end_at),
  57. uuid,
  58. now,
  59. now
  60. ])
  61. if (!rows || rows.affectedRows !== 1) return res.json({ ...BaseStdResponse.DATABASE_ERR })
  62. return res.json({
  63. ...BaseStdResponse.OK,
  64. data: { id: rows.insertId }
  65. })
  66. }
  67. }
  68. module.exports.AdminCreatePopup = AdminCreatePopup