kutt/server/handlers/renders.handler.js
2025-01-12 20:54:39 +03:30

337 lines
6.9 KiB
JavaScript

const query = require("../queries");
const utils = require("../utils");
const env = require("../env");
/**
*
* PAGES
*
**/
async function homepage(req, res) {
if (env.DISALLOW_ANONYMOUS_LINKS && !req.user) {
res.redirect("/login");
return;
}
res.render("homepage", {
title: "Free modern URL shortener",
});
}
async function login(req, res) {
if (req.user) {
res.redirect("/");
return;
}
res.render("login", {
title: "Log in or sign up"
});
}
function logout(req, res) {
utils.deleteCurrentToken(res);
res.render("logout", {
title: "Logging out.."
});
}
async function createAdmin(req, res) {
const isThereAUser = await query.user.findAny();
if (isThereAUser) {
res.redirect("/login");
return;
}
res.render("create_admin", {
title: "Create admin account"
});
}
function notFound(req, res) {
res.render("404", {
title: "404 - Not found"
});
}
function settings(req, res) {
res.render("settings", {
title: "Settings"
});
}
function admin(req, res) {
res.render("admin", {
title: "Admin"
});
}
function stats(req, res) {
res.render("stats", {
title: "Stats"
});
}
async function banned(req, res) {
res.render("banned", {
title: "Banned link",
});
}
async function report(req, res) {
if (!env.REPORT_EMAIL) {
res.redirect("/");
return;
}
res.render("report", {
title: "Report abuse",
});
}
async function resetPassword(req, res) {
res.render("reset_password", {
title: "Reset password",
});
}
async function resetPasswordSetNewPassword(req, res) {
const reset_password_token = req.params.resetPasswordToken;
if (reset_password_token) {
const user = await query.user.find(
{
reset_password_token,
reset_password_expires: [">", utils.dateToUTC(new Date())]
}
);
if (user) {
res.locals.token_verified = true;
}
}
res.render("reset_password_set_new_password", {
title: "Reset password",
...(res.locals.token_verified && { reset_password_token }),
});
}
async function verifyChangeEmail(req, res) {
res.render("verify_change_email", {
title: "Verifying email",
});
}
async function verify(req, res) {
res.render("verify", {
title: "Verify",
});
}
async function terms(req, res) {
res.render("terms", {
title: "Terms of Service",
});
}
/**
*
* PARTIALS
*
**/
async function confirmLinkDelete(req, res) {
const link = await query.link.find({
uuid: req.query.id,
...(!req.user.admin && { user_id: req.user.id })
});
if (!link) {
return res.render("partials/links/dialog/message", {
layout: false,
message: "Could not find the link."
});
}
res.render("partials/links/dialog/delete", {
layout: false,
link: utils.getShortURL(link.address, link.domain).link,
id: link.uuid
});
}
async function confirmLinkBan(req, res) {
const link = await query.link.find({
uuid: req.query.id,
...(!req.user.admin && { user_id: req.user.id })
});
if (!link) {
return res.render("partials/links/dialog/message", {
message: "Could not find the link."
});
}
res.render("partials/links/dialog/ban", {
link: utils.getShortURL(link.address, link.domain).link,
id: link.uuid
});
}
async function confirmUserDelete(req, res) {
const user = await query.user.find({ id: req.query.id });
if (!user) {
return res.render("partials/admin/dialog/message", {
layout: false,
message: "Could not find the user."
});
}
res.render("partials/admin/dialog/delete_user", {
layout: false,
email: user.email,
id: user.id
});
}
async function confirmUserBan(req, res) {
const user = await query.user.find({ id: req.query.id });
if (!user) {
return res.render("partials/admin/dialog/message", {
layout: false,
message: "Could not find the user."
});
}
res.render("partials/admin/dialog/ban_user", {
layout: false,
email: user.email,
id: user.id
});
}
async function createUser(req, res) {
res.render("partials/admin/dialog/create_user", {
layout: false,
});
}
async function addDomainAdmin(req, res) {
res.render("partials/admin/dialog/add_domain", {
layout: false,
});
}
async function addDomainForm(req, res) {
res.render("partials/settings/domain/add_form");
}
async function confirmDomainDelete(req, res) {
const domain = await query.domain.find({
uuid: req.query.id,
user_id: req.user.id
});
if (!domain) {
throw new utils.CustomError("Could not find the domain.", 400);
}
res.render("partials/settings/domain/delete", {
...utils.sanitize.domain(domain)
});
}
async function confirmDomainBan(req, res) {
const domain = await query.domain.find({
id: req.query.id
});
if (!domain) {
throw new utils.CustomError("Could not find the domain.", 400);
}
const hasUser = !!domain.user_id;
const hasLink = await query.link.find({ domain_id: domain.id });
res.render("partials/admin/dialog/ban_domain", {
id: domain.id,
address: domain.address,
hasUser,
hasLink,
});
}
async function confirmDomainDeleteAdmin(req, res) {
const domain = await query.domain.find({
id: req.query.id
});
if (!domain) {
throw new utils.CustomError("Could not find the domain.", 400);
}
const hasLink = await query.link.find({ domain_id: domain.id });
res.render("partials/admin/dialog/delete_domain", {
id: domain.id,
address: domain.address,
hasLink,
});
}
async function getReportEmail(req, res) {
if (!env.REPORT_EMAIL) {
throw new utils.CustomError("No report email is available.", 400);
}
res.render("partials/report/email", {
report_email_address: env.REPORT_EMAIL.replace("@", "[at]")
});
}
async function getSupportEmail(req, res) {
if (!env.CONTACT_EMAIL) {
throw new utils.CustomError("No support email is available.", 400);
}
await utils.sleep(500);
res.render("partials/support_email", {
email: env.CONTACT_EMAIL,
});
}
async function linkEdit(req, res) {
const link = await query.link.find({
uuid: req.params.id,
...(!req.user.admin && { user_id: req.user.id })
});
res.render("partials/links/edit", {
...(link && utils.sanitize.link_html(link)),
domain: link.domain || env.DEFAULT_DOMAIN,
});
}
async function linkEditAdmin(req, res) {
const link = await query.link.find({
uuid: req.params.id,
});
res.render("partials/admin/links/edit", {
...(link && utils.sanitize.link_html(link)),
domain: link.domain || env.DEFAULT_DOMAIN,
});
}
module.exports = {
addDomainAdmin,
addDomainForm,
admin,
banned,
confirmDomainBan,
confirmDomainDelete,
confirmDomainDeleteAdmin,
confirmLinkBan,
confirmLinkDelete,
confirmUserBan,
confirmUserDelete,
createAdmin,
createUser,
getReportEmail,
getSupportEmail,
homepage,
linkEdit,
linkEditAdmin,
login,
logout,
notFound,
report,
resetPassword,
resetPasswordSetNewPassword,
settings,
stats,
terms,
verifyChangeEmail,
verify,
}