added endpoints to fetch captchas
This commit is contained in:
parent
86898fa117
commit
9c2fe1c856
|
@ -14,6 +14,28 @@ class CaptchaController {
|
||||||
}
|
}
|
||||||
return res.status(200).send({"message": "Success"});
|
return res.status(200).send({"message": "Success"});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async get(req, res) {
|
||||||
|
try {
|
||||||
|
const { id } = req.params;
|
||||||
|
const captcha = await CaptchaService.get(id);
|
||||||
|
if (captcha == undefined) return res.status(404).send({"message":"no such captcha found"});
|
||||||
|
return res.status(200).send({"message":"success", "captcha": captcha})
|
||||||
|
} catch (e) {
|
||||||
|
console.log(`Error upon requesting one captcha: ${e}`)
|
||||||
|
if (e.code == 'ENOENT') return res.status(404).send({"message": "The ID exists in the DB but I can't find an actual image. Please, contact the developer."})
|
||||||
|
return res.status(500).send({"message": "Unknown server error. Please, contact the developer."})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async get_all(req, res) {
|
||||||
|
try {
|
||||||
|
return res.status(200).send({"message":"success", "captchas": await CaptchaService.get_all()});
|
||||||
|
} catch (e) {
|
||||||
|
console.log(`Error upon requesting all captchas: ${e}`)
|
||||||
|
return res.status(500).send({"message": "Unknown server error. Please, contact the developer."})
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default new CaptchaController();
|
export default new CaptchaController();
|
|
@ -6,5 +6,7 @@ import auth from '../middlewares/auth.js';
|
||||||
const CaptchaRouter = new Router();
|
const CaptchaRouter = new Router();
|
||||||
|
|
||||||
CaptchaRouter.post('/captcha/submit', auth.verify_user_jwt, CaptchaController.submit);
|
CaptchaRouter.post('/captcha/submit', auth.verify_user_jwt, CaptchaController.submit);
|
||||||
|
CaptchaRouter.get('/captcha/all', CaptchaController.get_all);
|
||||||
|
CaptchaRouter.get('/captcha/:id', CaptchaController.get);
|
||||||
|
|
||||||
export default CaptchaRouter;
|
export default CaptchaRouter;
|
|
@ -2,6 +2,7 @@ import db from '../db.js';
|
||||||
import fs from 'fs/promises';
|
import fs from 'fs/promises';
|
||||||
import config from '../config.js';
|
import config from '../config.js';
|
||||||
import { createHash } from 'crypto';
|
import { createHash } from 'crypto';
|
||||||
|
import captcha from '../controllers/captcha.js';
|
||||||
|
|
||||||
function base64ToArrayBuffer(base64) {
|
function base64ToArrayBuffer(base64) {
|
||||||
var binaryString = atob(base64);
|
var binaryString = atob(base64);
|
||||||
|
@ -21,6 +22,20 @@ class CaptchaService {
|
||||||
await fs.writeFile(`${config.data_dir}/${hash}.jpeg`, b64, 'base64');
|
await fs.writeFile(`${config.data_dir}/${hash}.jpeg`, b64, 'base64');
|
||||||
await db.query("INSERT INTO captchas (hash, solution, submitter) VALUES ($1, $2, $3)", [hash, solution, submitter]);
|
await db.query("INSERT INTO captchas (hash, solution, submitter) VALUES ($1, $2, $3)", [hash, solution, submitter]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async get(id) {
|
||||||
|
const captcha = (await db.query("SELECT hash, solution FROM captchas WHERE id = $1", [id])).rows[0];
|
||||||
|
if (captcha == undefined) return undefined;
|
||||||
|
|
||||||
|
const path = `${config.data_dir}/${captcha.hash}.jpeg`;
|
||||||
|
|
||||||
|
const image = Buffer.from(await fs.readFile(path)).toString('base64');
|
||||||
|
return {"image": image, "solution": captcha.solution, "hash": captcha.hash};
|
||||||
|
}
|
||||||
|
|
||||||
|
async get_all() {
|
||||||
|
return (await db.query("SELECT id FROM captchas")).rows
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default new CaptchaService();
|
export default new CaptchaService();
|
Loading…
Reference in New Issue