qinglong/back/api/sshKey.ts
copilot-swe-agent[bot] 43aaac4bcc Add backend support for global SSH keys
Co-authored-by: whyour <22700758+whyour@users.noreply.github.com>
2025-11-18 16:41:31 +00:00

143 lines
4.1 KiB
TypeScript

import { Joi, celebrate } from 'celebrate';
import { NextFunction, Request, Response, Router } from 'express';
import { Container } from 'typedi';
import { Logger } from 'winston';
import GlobalSshKeyService from '../services/globalSshKey';
const route = Router();
export default (app: Router) => {
app.use('/sshKeys', route);
route.get('/', async (req: Request, res: Response, next: NextFunction) => {
const logger: Logger = Container.get('logger');
try {
const globalSshKeyService = Container.get(GlobalSshKeyService);
const data = await globalSshKeyService.list(
req.query.searchValue as string,
);
return res.send({ code: 200, data });
} catch (e) {
logger.error('🔥 error: %o', e);
return next(e);
}
});
route.post(
'/',
celebrate({
body: Joi.array().items(
Joi.object({
alias: Joi.string().required(),
private_key: Joi.string().required(),
remarks: Joi.string().optional().allow(''),
}),
),
}),
async (req: Request, res: Response, next: NextFunction) => {
const logger: Logger = Container.get('logger');
try {
const globalSshKeyService = Container.get(GlobalSshKeyService);
if (!req.body?.length) {
return res.send({ code: 400, message: '参数不正确' });
}
const data = await globalSshKeyService.create(req.body);
return res.send({ code: 200, data });
} catch (e) {
return next(e);
}
},
);
route.put(
'/',
celebrate({
body: Joi.object({
alias: Joi.string().required(),
private_key: Joi.string().required(),
remarks: Joi.string().optional().allow('').allow(null),
id: Joi.number().required(),
}),
}),
async (req: Request, res: Response, next: NextFunction) => {
const logger: Logger = Container.get('logger');
try {
const globalSshKeyService = Container.get(GlobalSshKeyService);
const data = await globalSshKeyService.update(req.body);
return res.send({ code: 200, data });
} catch (e) {
return next(e);
}
},
);
route.delete(
'/',
celebrate({
body: Joi.array().items(Joi.number().required()),
}),
async (req: Request, res: Response, next: NextFunction) => {
const logger: Logger = Container.get('logger');
try {
const globalSshKeyService = Container.get(GlobalSshKeyService);
const data = await globalSshKeyService.remove(req.body);
return res.send({ code: 200, data });
} catch (e) {
return next(e);
}
},
);
route.put(
'/disable',
celebrate({
body: Joi.array().items(Joi.number().required()),
}),
async (req: Request, res: Response, next: NextFunction) => {
const logger: Logger = Container.get('logger');
try {
const globalSshKeyService = Container.get(GlobalSshKeyService);
const data = await globalSshKeyService.disabled(req.body);
return res.send({ code: 200, data });
} catch (e) {
return next(e);
}
},
);
route.put(
'/enable',
celebrate({
body: Joi.array().items(Joi.number().required()),
}),
async (req: Request, res: Response, next: NextFunction) => {
const logger: Logger = Container.get('logger');
try {
const globalSshKeyService = Container.get(GlobalSshKeyService);
const data = await globalSshKeyService.enabled(req.body);
return res.send({ code: 200, data });
} catch (e) {
return next(e);
}
},
);
route.get(
'/:id',
celebrate({
params: Joi.object({
id: Joi.number().required(),
}),
}),
async (req: Request<{ id: number }>, res: Response, next: NextFunction) => {
const logger: Logger = Container.get('logger');
try {
const globalSshKeyService = Container.get(GlobalSshKeyService);
const data = await globalSshKeyService.getDb({ id: req.params.id });
return res.send({ code: 200, data });
} catch (e) {
return next(e);
}
},
);
};