mirror of
				https://github.com/whyour/qinglong.git
				synced 2025-10-31 17:06:07 +08:00 
			
		
		
		
	兼容脚本、日志、配置文件详情接口
This commit is contained in:
		
							parent
							
								
									29f0c2c9ac
								
							
						
					
					
						commit
						e83058c3bc
					
				|  | @ -7,7 +7,7 @@ import * as fs from 'fs/promises'; | |||
| import { celebrate, Joi } from 'celebrate'; | ||||
| import { join } from 'path'; | ||||
| import { SAMPLE_FILES } from '../config/const'; | ||||
| import got from 'got'; | ||||
| import ConfigService from '../services/config'; | ||||
| const route = Router(); | ||||
| 
 | ||||
| export default (app: Router) => { | ||||
|  | @ -50,24 +50,9 @@ export default (app: Router) => { | |||
|   route.get( | ||||
|     '/detail', | ||||
|     async (req: Request, res: Response, next: NextFunction) => { | ||||
|       const logger: Logger = Container.get('logger'); | ||||
|       try { | ||||
|         let content = ''; | ||||
|         const _path = req.query.path as string; | ||||
|         if (config.blackFileList.includes(_path) || !_path) { | ||||
|           res.send({ code: 403, message: '文件无法访问' }); | ||||
|         } | ||||
|         if (_path.startsWith('sample/')) { | ||||
|           const res = await got.get( | ||||
|             `https://gitlab.com/whyour/qinglong/-/raw/master/${_path}`, | ||||
|           ); | ||||
|           content = res.body; | ||||
|         } else if (_path.startsWith('data/scripts/')) { | ||||
|           content = await getFileContentByName(join(config.rootPath, _path)); | ||||
|         } else { | ||||
|           content = await getFileContentByName(join(config.configPath, _path)); | ||||
|         } | ||||
|         res.send({ code: 200, data: content }); | ||||
|         const configService = Container.get(ConfigService); | ||||
|         await configService.getFile(req.query.path as string, res); | ||||
|       } catch (e) { | ||||
|         return next(e); | ||||
|       } | ||||
|  | @ -100,4 +85,16 @@ export default (app: Router) => { | |||
|       } | ||||
|     }, | ||||
|   ); | ||||
| 
 | ||||
|   route.get( | ||||
|     '/:file', | ||||
|     async (req: Request, res: Response, next: NextFunction) => { | ||||
|       try { | ||||
|         const configService = Container.get(ConfigService); | ||||
|         await configService.getFile(req.params.file, res); | ||||
|       } catch (e) { | ||||
|         return next(e); | ||||
|       } | ||||
|     }, | ||||
|   ); | ||||
| }; | ||||
|  |  | |||
|  | @ -29,7 +29,6 @@ export default (app: Router) => { | |||
|   route.get( | ||||
|     '/detail', | ||||
|     async (req: Request, res: Response, next: NextFunction) => { | ||||
|       const logger: Logger = Container.get('logger'); | ||||
|       try { | ||||
|         if (blacklist.includes(req.path)) { | ||||
|           return res.send({ code: 403, message: '暂无权限' }); | ||||
|  | @ -47,6 +46,26 @@ export default (app: Router) => { | |||
|     }, | ||||
|   ); | ||||
| 
 | ||||
|   route.get( | ||||
|     '/:file', | ||||
|     async (req: Request, res: Response, next: NextFunction) => { | ||||
|       try { | ||||
|         if (blacklist.includes(req.path)) { | ||||
|           return res.send({ code: 403, message: '暂无权限' }); | ||||
|         } | ||||
|         const filePath = join( | ||||
|           config.logPath, | ||||
|           (req.query.path || '') as string, | ||||
|           req.params.file, | ||||
|         ); | ||||
|         const content = await getFileContentByName(filePath); | ||||
|         res.send({ code: 200, data: content }); | ||||
|       } catch (e) { | ||||
|         return next(e); | ||||
|       } | ||||
|     }, | ||||
|   ); | ||||
| 
 | ||||
|   route.delete( | ||||
|     '/', | ||||
|     celebrate({ | ||||
|  |  | |||
|  | @ -75,14 +75,28 @@ export default (app: Router) => { | |||
|   route.get( | ||||
|     '/detail', | ||||
|     async (req: Request, res: Response, next: NextFunction) => { | ||||
|       const logger: Logger = Container.get('logger'); | ||||
|       try { | ||||
|         const filePath = join( | ||||
|           config.scriptPath, | ||||
|         const scriptService = Container.get(ScriptService); | ||||
|         const content = await scriptService.getFile( | ||||
|           req.query.path as string, | ||||
|           req.query.file as string, | ||||
|         ); | ||||
|         const content = await getFileContentByName(filePath); | ||||
|         res.send({ code: 200, data: content }); | ||||
|       } catch (e) { | ||||
|         return next(e); | ||||
|       } | ||||
|     }, | ||||
|   ); | ||||
| 
 | ||||
|   route.get( | ||||
|     '/:file', | ||||
|     async (req: Request, res: Response, next: NextFunction) => { | ||||
|       try { | ||||
|         const scriptService = Container.get(ScriptService); | ||||
|         const content = await scriptService.getFile( | ||||
|           req.query.path as string, | ||||
|           req.params.file, | ||||
|         ); | ||||
|         res.send({ code: 200, data: content }); | ||||
|       } catch (e) { | ||||
|         return next(e); | ||||
|  |  | |||
							
								
								
									
										30
									
								
								back/services/config.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								back/services/config.ts
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,30 @@ | |||
| import { Service, Inject } from 'typedi'; | ||||
| import path, { join } from 'path'; | ||||
| import config from '../config'; | ||||
| import { getFileContentByName } from '../config/util'; | ||||
| import { Response } from 'express'; | ||||
| import got from 'got'; | ||||
| 
 | ||||
| @Service() | ||||
| export default class ConfigService { | ||||
|   constructor() {} | ||||
| 
 | ||||
|   public async getFile(filePath: string, res: Response) { | ||||
|     let content = ''; | ||||
|     if (config.blackFileList.includes(filePath) || !filePath) { | ||||
|       res.send({ code: 403, message: '文件无法访问' }); | ||||
|     } | ||||
|     if (filePath.startsWith('sample/')) { | ||||
|       const res = await got.get( | ||||
|         `https://gitlab.com/whyour/qinglong/-/raw/master/${filePath}`, | ||||
|       ); | ||||
|       content = res.body; | ||||
|     } else if (filePath.startsWith('data/scripts/')) { | ||||
|       content = await getFileContentByName(join(config.rootPath, filePath)); | ||||
|     } else { | ||||
|       content = await getFileContentByName(join(config.configPath, filePath)); | ||||
|     } | ||||
| 
 | ||||
|     res.send({ code: 200, data: content }); | ||||
|   } | ||||
| } | ||||
|  | @ -1,12 +1,12 @@ | |||
| import { Service, Inject } from 'typedi'; | ||||
| import winston from 'winston'; | ||||
| import path from 'path'; | ||||
| import path, { join } from 'path'; | ||||
| import SockService from './sock'; | ||||
| import CronService from './cron'; | ||||
| import ScheduleService, { TaskCallbacks } from './schedule'; | ||||
| import config from '../config'; | ||||
| import { TASK_COMMAND } from '../config/const'; | ||||
| import { getPid, killTask, rmPath } from '../config/util'; | ||||
| import { getFileContentByName, getPid, killTask, rmPath } from '../config/util'; | ||||
| 
 | ||||
| @Service() | ||||
| export default class ScriptService { | ||||
|  | @ -61,4 +61,10 @@ export default class ScriptService { | |||
| 
 | ||||
|     return { code: 200 }; | ||||
|   } | ||||
| 
 | ||||
|   public async getFile(filePath: string, fileName: string) { | ||||
|     const _filePath = join(config.scriptPath, filePath, fileName); | ||||
|     const content = await getFileContentByName(_filePath); | ||||
|     return content; | ||||
|   } | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 whyour
						whyour