36 lines
1.3 KiB
TypeScript
36 lines
1.3 KiB
TypeScript
import fs from "fs";
|
|
import { API } from "../Plugs/API/API";
|
|
import ServerStdResponse from "../ServerStdResponse";
|
|
import captchaSession from "../Plugs/Service/captchaSession";
|
|
import path from "path";
|
|
import sharp from "sharp";
|
|
import crypto from 'crypto'
|
|
|
|
// 获取人机验证图片及标识符
|
|
class GetCaptcha extends API {
|
|
constructor() {
|
|
super('GET', '/captcha');
|
|
}
|
|
|
|
public async onRequset(data: any, res: any) {
|
|
const imgsPath = path.join(__dirname, '../assets/captchaImgs');
|
|
const fileList = fs.readdirSync(imgsPath)
|
|
const imgPath = path.join(imgsPath, fileList[Math.floor(Math.random() * fileList.length)]);
|
|
const rotateDeg = Math.floor(Math.random() * 240) + 60;
|
|
const img = Buffer.from(await sharp(imgPath).rotate(-rotateDeg).toBuffer()).toString('base64')
|
|
const session = crypto.createHash('md5').update(`${Math.random()} ${Date.now()}`).digest('hex');
|
|
if (await captchaSession.add(session, rotateDeg)) {
|
|
return res.json({
|
|
...ServerStdResponse.OK, data: {
|
|
img: img,
|
|
session: session,
|
|
imgPreStr: 'data:image/jpeg;base64,'
|
|
}
|
|
});
|
|
} else {
|
|
return res.json(ServerStdResponse.SERVER_ERROR)
|
|
}
|
|
}
|
|
}
|
|
|
|
export default GetCaptcha; |