ImportUrl.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. const API = require('../../../../lib/API')
  2. const AccessControl = require('../../../../lib/AccessControl')
  3. const { BaseStdResponse } = require('../../../../BaseStdResponse')
  4. const { importFromRemoteUrl, getGlobalOrThrow } = require('../../../../lib/Lepao/lepaoProxyPoolService')
  5. class ImportUrl extends API {
  6. constructor() {
  7. super()
  8. this.setPath('/Admin/Lepao/Proxy/ImportUrl')
  9. this.setMethod('post')
  10. }
  11. async onRequest(req, res) {
  12. const { uuid, session, url } = req.body
  13. if ([uuid, session].some((v) => v === '' || v === null || v === undefined)) {
  14. return res.json({ ...BaseStdResponse.MISSING_PARAMETER })
  15. }
  16. if (!await AccessControl.checkSession(uuid, session)) {
  17. return res.status(401).json({ ...BaseStdResponse.ACCESS_DENIED })
  18. }
  19. const permission = await AccessControl.getPermission(uuid)
  20. if (!permission.includes('admin') && !permission.includes('service')) {
  21. return res.json({ ...BaseStdResponse.PERMISSION_DENIED })
  22. }
  23. try {
  24. let target = String(url || '').trim()
  25. if (!target) {
  26. const g = await getGlobalOrThrow()
  27. target = String(g.import_url || '').trim()
  28. }
  29. if (!target) {
  30. return res.json({ ...BaseStdResponse.ERR, msg: '未配置 import_url' })
  31. }
  32. const r = await importFromRemoteUrl(target, 'url')
  33. return res.json({ ...BaseStdResponse.OK, data: { ...r, usedUrl: target } })
  34. } catch (e) {
  35. return res.json({ ...BaseStdResponse.ERR, msg: e.message || '从 URL 导入失败' })
  36. }
  37. }
  38. }
  39. module.exports.ImportUrl = ImportUrl