RuntimeConfig.js 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. const API = require('../../../lib/API')
  2. const AccessControl = require('../../../lib/AccessControl')
  3. const { BaseStdResponse } = require('../../../BaseStdResponse')
  4. const { CONFIG_KEYS, getAllRuntimeConfigs, saveRuntimeConfig, selectRuntimeConfig } = require('../../../lib/RuntimeConfig')
  5. async function checkAdmin(uuid, session) {
  6. if (!await AccessControl.checkSession(uuid, session)) return false
  7. const permissions = await AccessControl.getPermission(uuid)
  8. return permissions.includes('admin') || permissions.includes('server')
  9. }
  10. class GetRuntimeConfig extends API {
  11. constructor() { super(); this.setPath('/Admin/System/RuntimeConfig'); this.setMethod('GET') }
  12. async onRequest(req, res) {
  13. const { uuid, session } = req.query
  14. if (!uuid || !session) return res.json({ ...BaseStdResponse.MISSING_PARAMETER })
  15. if (!await checkAdmin(uuid, session)) return res.status(401).json({ ...BaseStdResponse.ACCESS_DENIED })
  16. return res.json({ ...BaseStdResponse.OK, data: await getAllRuntimeConfigs() })
  17. }
  18. }
  19. class SaveRuntimeConfig extends API {
  20. constructor() { super(); this.setPath('/Admin/System/RuntimeConfig'); this.setMethod('PUT') }
  21. async onRequest(req, res) {
  22. const { uuid, session, config } = req.body
  23. if (!uuid || !session || !config || typeof config !== 'object') return res.json({ ...BaseStdResponse.MISSING_PARAMETER })
  24. if (!await checkAdmin(uuid, session)) return res.status(401).json({ ...BaseStdResponse.ACCESS_DENIED })
  25. try {
  26. if (!CONFIG_KEYS.includes(config.key)) return res.json({ ...BaseStdResponse.ERR, msg: `不支持的配置项:${config.key}` })
  27. await saveRuntimeConfig({ ...config, updatedBy: uuid })
  28. return res.json({ ...BaseStdResponse.OK })
  29. } catch (error) {
  30. return res.json({ ...BaseStdResponse.ERR, msg: error.message || '保存配置失败' })
  31. }
  32. }
  33. }
  34. class SelectRuntimeConfig extends API {
  35. constructor() { super(); this.setPath('/Admin/System/RuntimeConfig/Select'); this.setMethod('PUT') }
  36. async onRequest(req, res) {
  37. const { uuid, session, key, name } = req.body
  38. if (!uuid || !session || !key || !name) return res.json({ ...BaseStdResponse.MISSING_PARAMETER })
  39. if (!await checkAdmin(uuid, session)) return res.status(401).json({ ...BaseStdResponse.ACCESS_DENIED })
  40. try { await selectRuntimeConfig({ key, name, updatedBy: uuid }); return res.json({ ...BaseStdResponse.OK }) }
  41. catch (error) { return res.json({ ...BaseStdResponse.ERR, msg: error.message || '切换配置失败' }) }
  42. }
  43. }
  44. module.exports = { GetRuntimeConfig, SaveRuntimeConfig, SelectRuntimeConfig }