const ApiError = require("../errorClass"); const config = require("../../../config-handler"); async function isAuthorExists(authorId) { if (!authorId) return false; return ( ( await global.database.authors .promiseMode() .get({ where: { id: authorId } }) ).length !== 0 ); } async function checkSyntaxArgs(req, res) { return !!( // Проверка поля type. ["author", "muzic"].indexOf(req.json?.type) !== -1 && // Проверка поля name. typeof req.json.name === "string" && req.json.name.length >= 2 && (req.json.type === "muzic" ? true : config().authors_blacklist.filter((blacklisted) => { return req.json.name .toLowerCase() .includes(blacklisted.toLowerCase()); }).length === 0) && // Дополнительные поля для muzic (req.json.type === "muzic" ? !!( // Для `muzic` ( // Проверка поля author_id. (await isAuthorExists(req.json.author_id)) && // Проверка поля data. (Передаётся либо ничего, либо строка с base64) (req.json.data === undefined ? true : typeof req.json.data === "string") ) ) : true) ); } module.exports = async (req, res) => { if (req.json === undefined) { // console.log(req.headers); throw new ApiError("METHOD_MUST_BE_POST_JSON", { request_method: req.method, "content-type": !req.headers["content-type"] ? null : req.headers["content-type"], }); } if (!(await checkSyntaxArgs(req, res))) { throw new ApiError("INVALID_OR_UNSYNTAX_PARAMS", { request_method: req.method, params: { type: req.json?.type === undefined ? null : req.json.type, name: req.json?.name === undefined ? null : req.json.name, ...(req.json?.type === "muzic" ? { author_id: req.json?.author_id === undefined ? null : req.json?.author_id, data: req.json?.data === undefined ? null : req.json.data, } : {}), }, }); } if (req.json.type === "author") { let result = await global.database.authors.promiseMode().add({ name: req.json.name, time: Math.round(new Date().getTime() / 1000), }); return result.dataValues.id; } else { let result = await global.database.muzic.promiseMode().add({ name: req.json.name, author_id: req.json.author_id, data: req.json.data === undefined ? undefined : Buffer.from(req.json.data, "base64"), time: Math.round(new Date().getTime() / 1000), }); return result.dataValues.id; } };