kutt/server/handlers/renders.handler.js

337 lines
6.9 KiB
JavaScript
Raw Permalink Normal View History

2024-09-12 14:26:39 +03:30
const query = require("../queries");
2024-08-21 21:22:59 +03:30
const utils = require("../utils");
const env = require("../env");
2024-12-31 16:24:37 +03:30
/**
*
* PAGES
*
**/
2024-08-21 21:22:59 +03:30
async function homepage(req, res) {
if (env.DISALLOW_ANONYMOUS_LINKS && !req.user) {
res.redirect("/login");
return;
}
2024-08-21 21:22:59 +03:30
res.render("homepage", {
2025-01-12 20:54:39 +03:30
title: "Free modern URL shortener",
2024-08-21 21:22:59 +03:30
});
}
async function login(req, res) {
2024-08-21 21:22:59 +03:30
if (req.user) {
2024-09-12 14:26:39 +03:30
res.redirect("/");
return;
2024-08-21 21:22:59 +03:30
}
2024-08-21 21:22:59 +03:30
res.render("login", {
title: "Log in or sign up"
});
}
function logout(req, res) {
2024-09-12 14:26:39 +03:30
utils.deleteCurrentToken(res);
2024-08-21 21:22:59 +03:30
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"
});
}
2024-09-08 14:10:02 +03:30
function notFound(req, res) {
res.render("404", {
title: "404 - Not found"
});
}
2024-08-31 12:19:39 +03:30
function settings(req, res) {
res.render("settings", {
title: "Settings"
});
}
2024-11-19 07:58:57 +03:30
function admin(req, res) {
res.render("admin", {
title: "Admin"
});
}
2024-09-08 14:10:02 +03:30
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;
}
2024-09-08 14:10:02 +03:30
res.render("report", {
title: "Report abuse",
});
}
async function resetPassword(req, res) {
res.render("reset_password", {
title: "Reset password",
});
}
2024-12-31 16:24:37 +03:30
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", {
2024-09-08 14:10:02 +03:30
title: "Reset password",
2024-12-31 16:24:37 +03:30
...(res.locals.token_verified && { reset_password_token }),
2024-09-08 14:10:02 +03:30
});
}
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",
});
}
2024-08-31 12:19:39 +03:30
2024-12-31 16:24:37 +03:30
/**
*
* PARTIALS
*
**/
2024-08-21 21:22:59 +03:30
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) {
2024-08-31 12:19:39 +03:30
return res.render("partials/links/dialog/message", {
2024-08-21 21:22:59 +03:30
layout: false,
message: "Could not find the link."
});
}
2024-08-31 12:19:39 +03:30
res.render("partials/links/dialog/delete", {
2024-08-21 21:22:59 +03:30
layout: false,
link: utils.getShortURL(link.address, link.domain).link,
id: link.uuid
});
}
2024-08-31 12:19:39 +03:30
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
});
}
2024-11-19 07:58:57 +03:30
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,
});
}
2024-08-31 12:19:39 +03:30
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) {
2024-11-19 07:58:57 +03:30
throw new utils.CustomError("Could not find the domain.", 400);
2024-08-31 12:19:39 +03:30
}
res.render("partials/settings/domain/delete", {
...utils.sanitize.domain(domain)
});
}
2024-11-19 07:58:57 +03:30
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,
});
}
2024-08-31 12:19:39 +03:30
2024-09-08 14:10:02 +03:30
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]")
2024-09-08 14:10:02 +03:30
});
}
2024-09-13 12:31:05 +03:30
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,
});
}
2024-08-21 21:22:59 +03:30
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", {
2025-01-08 10:28:32 +03:30
...(link && utils.sanitize.link_html(link)),
domain: link.domain || env.DEFAULT_DOMAIN,
2024-08-21 21:22:59 +03:30
});
}
2024-11-19 07:58:57 +03:30
async function linkEditAdmin(req, res) {
const link = await query.link.find({
uuid: req.params.id,
});
res.render("partials/admin/links/edit", {
2025-01-08 10:28:32 +03:30
...(link && utils.sanitize.link_html(link)),
domain: link.domain || env.DEFAULT_DOMAIN,
2024-11-19 07:58:57 +03:30
});
}
2024-08-21 21:22:59 +03:30
module.exports = {
2024-11-19 07:58:57 +03:30
addDomainAdmin,
2024-08-31 12:19:39 +03:30
addDomainForm,
2024-11-19 07:58:57 +03:30
admin,
2024-09-08 14:10:02 +03:30
banned,
2024-11-19 07:58:57 +03:30
confirmDomainBan,
2024-09-08 14:10:02 +03:30
confirmDomainDelete,
2024-11-19 07:58:57 +03:30
confirmDomainDeleteAdmin,
2024-09-08 14:10:02 +03:30
confirmLinkBan,
confirmLinkDelete,
2024-11-19 07:58:57 +03:30
confirmUserBan,
confirmUserDelete,
createAdmin,
2024-11-19 07:58:57 +03:30
createUser,
2024-09-08 14:10:02 +03:30
getReportEmail,
2024-09-13 12:31:05 +03:30
getSupportEmail,
2024-08-21 21:22:59 +03:30
homepage,
linkEdit,
2024-11-19 07:58:57 +03:30
linkEditAdmin,
2024-08-21 21:22:59 +03:30
login,
logout,
2024-09-08 14:10:02 +03:30
notFound,
report,
resetPassword,
2024-12-31 16:24:37 +03:30
resetPasswordSetNewPassword,
2024-08-31 12:19:39 +03:30
settings,
2024-09-08 14:10:02 +03:30
stats,
terms,
verifyChangeEmail,
verify,
2024-08-21 21:22:59 +03:30
}