nginx.ts 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import request from "./request.ts";
  2. import {BaseResp, INginxCerts, IServerHost} from "../models/api.ts";
  3. import {INginx, INginxServer} from "../models/nginx.ts";
  4. import {createServer, createServerHost} from "../pages/nginx/utils/nginx.ts";
  5. type RefreshHttpData = {
  6. id: number
  7. httpConf: string
  8. httpData: string
  9. }
  10. export const NginxApis= {
  11. findAll: () => request.get<BaseResp<INginx[]>>('/nginx'),
  12. // eslint-disable-next-line @typescript-eslint/ban-ts-comment
  13. // @ts-ignore
  14. updateOrAdd: (data: Partial<INginx>) => request.post<BaseResp<INginx>>('/nginx', data, { disableErrorMsg: true, timeout: 60000 } as any),
  15. /**
  16. * 同步配置文件到本地,仅需要传递id 和httpConf, httpData 三个参数
  17. * @param nginx
  18. */
  19. refreshHttp: (nginx: RefreshHttpData) => {
  20. return request.post('/http/refresh', nginx, { timeout: 60000 })
  21. },
  22. getNginx: (id:number) => request.get<BaseResp<{nginx: INginx, servers: IServerHost[]}>>(`/nginx/${id}`),
  23. delNginx: (id:number) => request.delete(`/nginx/${id}`),
  24. /**
  25. * 不更改配置文件,仅保存数据,方便某些特殊情况,一直手动修改配置文件
  26. * @param nginx
  27. * @param server
  28. */
  29. // add or update
  30. updateServer: (nginx: INginx,server: Partial<INginxServer>) => {
  31. const serverHost: Partial<IServerHost> = createServerHost(nginx,server);
  32. // eslint-disable-next-line @typescript-eslint/ban-ts-comment
  33. // @ts-ignore
  34. return request.post<BaseResp<IServerHost>>('/server',serverHost, { disableErrorMsg: true } as any)
  35. .then(({data})=>{
  36. if (data.data){
  37. return createServer(data.data)
  38. }
  39. return Promise.reject(data)
  40. })
  41. },
  42. /**
  43. * 更改配置文件,保存数据
  44. * @param nginx
  45. * @param server
  46. */
  47. refreshServer: (server: Partial<IServerHost>) => {
  48. return request.post('/server/refresh', server, { timeout: 60000 })
  49. },
  50. deleteServer: (server: INginxServer) => request.delete(`/server`,{ data: { id: server.id}}),
  51. status: (id:number) => request.post(`/nginx/${id}/status`, { }, { timeout: 60000 }),
  52. startNginx: (id:number) => request.post(`/nginx/${id}/start`, { }, { timeout: 60000 }),
  53. stopNginx: (id:number) => request.post(`/nginx/${id}/stop`, { }, { timeout: 60000 }),
  54. /**
  55. * 获取证书信息,不传name,则返回所有证书文件信息,传了name,则返回该证书的内容
  56. * @param id
  57. * @param name
  58. */
  59. getCerts: (id: number,name?: string) => request.get(`/nginx/${id}/certs`, { params: { name }}),
  60. /**
  61. * 保存证书信息
  62. * @param id
  63. * @param data
  64. */
  65. saveCerts: (id: number,data: INginxCerts) => request.post(`/nginx/${id}/certs`, data),
  66. delCerts: (nginxId: number,id: number) => request.delete(`/nginx/${nginxId}/certs`, { params: { id } }),
  67. /**
  68. * 从配置的数据目录中同步
  69. * @param id
  70. * @param name
  71. */
  72. syncCerts: (id: number) => request.post(`/nginx/${id}/certs/sync`),
  73. }
  74. export type IDeployReq ={
  75. key: string
  76. nginxId: number
  77. /**
  78. * 部署目录,资源部署目录,一般是root+name 或者是alias
  79. */
  80. dir: string
  81. /**
  82. * 是否清空文件夹再部署
  83. */
  84. clear?: boolean
  85. }
  86. /**
  87. * 文件上传
  88. */
  89. export const uploadApis = {
  90. uploadFile: (entry: FileSystemFileEntry, id: string) => {
  91. return new Promise<File>((resolve, reject) => {
  92. entry.file(function (f){
  93. resolve(f)
  94. },function (err){
  95. reject(err)
  96. })
  97. }).then(file=>{
  98. const formData = new FormData()
  99. formData.append("file", file)
  100. formData.append("Path", entry.fullPath)
  101. formData.append("Key", id)
  102. return request.post('/file',formData, {
  103. withCredentials: true,
  104. headers: {
  105. 'Content-type' : 'multipart/form-data'
  106. }
  107. })
  108. })
  109. },
  110. deploy:(data: IDeployReq)=>request.post('/file/deploy', data, {timeout: 120000}),
  111. }