mirror of
				https://github.com/whyour/qinglong.git
				synced 2025-11-01 01:16: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 { celebrate, Joi } from 'celebrate'; | ||||||
| import { join } from 'path'; | import { join } from 'path'; | ||||||
| import { SAMPLE_FILES } from '../config/const'; | import { SAMPLE_FILES } from '../config/const'; | ||||||
| import got from 'got'; | import ConfigService from '../services/config'; | ||||||
| const route = Router(); | const route = Router(); | ||||||
| 
 | 
 | ||||||
| export default (app: Router) => { | export default (app: Router) => { | ||||||
|  | @ -50,24 +50,9 @@ export default (app: Router) => { | ||||||
|   route.get( |   route.get( | ||||||
|     '/detail', |     '/detail', | ||||||
|     async (req: Request, res: Response, next: NextFunction) => { |     async (req: Request, res: Response, next: NextFunction) => { | ||||||
|       const logger: Logger = Container.get('logger'); |  | ||||||
|       try { |       try { | ||||||
|         let content = ''; |         const configService = Container.get(ConfigService); | ||||||
|         const _path = req.query.path as string; |         await configService.getFile(req.query.path as string, res); | ||||||
|         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 }); |  | ||||||
|       } catch (e) { |       } catch (e) { | ||||||
|         return next(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( |   route.get( | ||||||
|     '/detail', |     '/detail', | ||||||
|     async (req: Request, res: Response, next: NextFunction) => { |     async (req: Request, res: Response, next: NextFunction) => { | ||||||
|       const logger: Logger = Container.get('logger'); |  | ||||||
|       try { |       try { | ||||||
|         if (blacklist.includes(req.path)) { |         if (blacklist.includes(req.path)) { | ||||||
|           return res.send({ code: 403, message: '暂无权限' }); |           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( |   route.delete( | ||||||
|     '/', |     '/', | ||||||
|     celebrate({ |     celebrate({ | ||||||
|  |  | ||||||
|  | @ -75,14 +75,28 @@ export default (app: Router) => { | ||||||
|   route.get( |   route.get( | ||||||
|     '/detail', |     '/detail', | ||||||
|     async (req: Request, res: Response, next: NextFunction) => { |     async (req: Request, res: Response, next: NextFunction) => { | ||||||
|       const logger: Logger = Container.get('logger'); |  | ||||||
|       try { |       try { | ||||||
|         const filePath = join( |         const scriptService = Container.get(ScriptService); | ||||||
|           config.scriptPath, |         const content = await scriptService.getFile( | ||||||
|           req.query.path as string, |           req.query.path as string, | ||||||
|           req.query.file 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 }); |         res.send({ code: 200, data: content }); | ||||||
|       } catch (e) { |       } catch (e) { | ||||||
|         return next(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 { Service, Inject } from 'typedi'; | ||||||
| import winston from 'winston'; | import winston from 'winston'; | ||||||
| import path from 'path'; | import path, { join } from 'path'; | ||||||
| import SockService from './sock'; | import SockService from './sock'; | ||||||
| import CronService from './cron'; | import CronService from './cron'; | ||||||
| import ScheduleService, { TaskCallbacks } from './schedule'; | import ScheduleService, { TaskCallbacks } from './schedule'; | ||||||
| import config from '../config'; | import config from '../config'; | ||||||
| import { TASK_COMMAND } from '../config/const'; | import { TASK_COMMAND } from '../config/const'; | ||||||
| import { getPid, killTask, rmPath } from '../config/util'; | import { getFileContentByName, getPid, killTask, rmPath } from '../config/util'; | ||||||
| 
 | 
 | ||||||
| @Service() | @Service() | ||||||
| export default class ScriptService { | export default class ScriptService { | ||||||
|  | @ -61,4 +61,10 @@ export default class ScriptService { | ||||||
| 
 | 
 | ||||||
|     return { code: 200 }; |     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