ScanRepo.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. const API = require("../../lib/API")
  2. const AccessControl = require("../../lib/AccessControl")
  3. const { BaseStdResponse } = require("../../BaseStdResponse")
  4. const db = require("../../plugin/DataBase/db")
  5. const axios = require('axios')
  6. const simpleGit = require('simple-git')
  7. const { core_url } = require('../../config.json')
  8. class ScanRepo extends API {
  9. constructor() {
  10. super()
  11. this.setMethod("GET")
  12. this.setPath("/AI/ScanRepo")
  13. }
  14. async onRequest(req, res) {
  15. let { uuid, session, id } = req.query
  16. if ([uuid, session, id].some(value => value === '' || value === null || value === undefined))
  17. return res.json({
  18. ...BaseStdResponse.MISSING_PARAMETER
  19. })
  20. // 检查 session
  21. if (!await AccessControl.checkSession(uuid, session))
  22. return res.status(401).json({
  23. ...BaseStdResponse.ACCESS_DENIED
  24. })
  25. let sql = 'SELECT state, path, url FROM repos WHERE create_user = ? AND id = ?'
  26. let rows = await db.query(sql, [uuid, id])
  27. if (!rows || rows.length === 0)
  28. return res.json({
  29. ...BaseStdResponse.ERR,
  30. msg: '未找到仓库'
  31. })
  32. if (rows[0].state !== 1 || !rows[0].path)
  33. return res.json({
  34. ...BaseStdResponse.ERR,
  35. msg: '仓库未成功克隆!'
  36. })
  37. try {
  38. const git = simpleGit()
  39. await git.cwd(rows[0].path)
  40. const hash = await git.revparse(['HEAD'])
  41. const time = new Date().getTime()
  42. sql = 'INSERT INTO scan_tasks (repo_id, create_time, create_user, repo_hash, source) VALUES (?, ?, ?, ?, ?)'
  43. let r = await db.query(sql, [id, time, uuid, hash, 'hand'])
  44. if(!r || r.affectedRows !== 1)
  45. return res.json({
  46. ...BaseStdResponse.ERR,
  47. msg: '扫描任务添加失败!'
  48. })
  49. res.json({
  50. ...BaseStdResponse.OK
  51. })
  52. let endpoint = core_url + '/ai/scan'
  53. await axios.post(endpoint, { uuid, repo_url: rows[0].url, task_id: String(r.insertId), repo_id: id })
  54. } catch (error) {
  55. this.logger.error('获取仓库历史失败!' + error.stack)
  56. }
  57. }
  58. }
  59. module.exports.ScanRepo = ScanRepo