AddRepo.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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 { core_url } = require('../../config.json')
  7. // 添加仓库
  8. class AddRepo extends API {
  9. constructor() {
  10. super()
  11. this.setMethod("POST")
  12. this.setPath("/Repos")
  13. }
  14. checkName(name) {
  15. const regex = /^(?!\.)(?!.*\/{2,})(?!.*\.git$)[\u4E00-\u9FA5A-Za-z0-9._-]+(?<!\/)$/
  16. return regex.test(name)
  17. }
  18. async onRequest(req, res) {
  19. let { uuid, session, name, url } = req.body
  20. if ([uuid, session, name, url].some(value => value === '' || value === null || value === undefined))
  21. return res.json({
  22. ...BaseStdResponse.MISSING_PARAMETER
  23. })
  24. if (!this.checkName(name))
  25. return res.json({
  26. ...BaseStdResponse.ERR,
  27. msg: '仓库名称不合法!'
  28. })
  29. // 检查 session
  30. if (!await AccessControl.checkSession(uuid, session))
  31. return res.status(401).json({
  32. ...BaseStdResponse.ACCESS_DENIED
  33. })
  34. // 检查仓库是否重复
  35. let sql = 'SELECT id FROM repos WHERE create_user = ? AND url = ?'
  36. let r = await db.query(sql, [uuid, url])
  37. if (r && r.length > 0)
  38. return res.json({
  39. ...BaseStdResponse.ERR,
  40. msg: '用户已添加该仓库!'
  41. })
  42. const time = new Date().getTime()
  43. sql = 'INSERT INTO repos (name, url, create_user, create_time) VALUES (?, ?, ?, ?)'
  44. let result = await db.query(sql, [name, url, uuid, time])
  45. if (result && result.affectedRows > 0) {
  46. res.json({
  47. ...BaseStdResponse.OK
  48. })
  49. // 发起克隆
  50. try {
  51. const clone_url = core_url + '/git/clone'
  52. await axios.post(clone_url, { uuid, repo_url: url, repo_id: result.insertId })
  53. } catch (error) {
  54. this.logger.error('克隆仓库失败!' + error.stack)
  55. }
  56. } else {
  57. res.json({ ...BaseStdResponse.ERR, endpoint: 7894378, msg: '添加仓库失败!' })
  58. }
  59. }
  60. }
  61. module.exports.AddRepo = AddRepo