87 lines
2.5 KiB
JavaScript
87 lines
2.5 KiB
JavaScript
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;
|
||
}
|
||
}; |