2023-11-08 10:08:40 +00:00
|
|
|
const external = require("./core/external_api");
|
2023-11-15 18:49:09 +00:00
|
|
|
const core = require("./core/core");
|
2023-09-13 19:56:58 +00:00
|
|
|
|
2024-04-24 12:30:02 +00:00
|
|
|
function _getThemePage(page_name) {
|
2024-04-06 22:46:16 +00:00
|
|
|
return `themes/${core.settings.theme}/ejs/${page_name}.ejs`;
|
|
|
|
}
|
2024-04-24 12:30:02 +00:00
|
|
|
async function getDefaults(req) {
|
2023-11-28 20:52:19 +00:00
|
|
|
// TODO: Fix reference to website_name
|
2024-04-24 12:30:02 +00:00
|
|
|
let user;
|
|
|
|
if (req.session.user) user = await core.getUser({ user_id: req.session.user.id });
|
|
|
|
if (user?.success) user = user.data;
|
|
|
|
return { logged_in_user: user, website_name: core.settings.WEBSITE_NAME || "Yet-Another-Blog", settings: core.settings };
|
2023-11-08 10:08:40 +00:00
|
|
|
}
|
2023-09-13 19:56:58 +00:00
|
|
|
async function index(request, response) {
|
|
|
|
// Check if the master admin has been created
|
2024-04-06 22:46:16 +00:00
|
|
|
// const is_setup_complete = core.settings["SETUP_COMPLETE"];
|
|
|
|
// if (!is_setup_complete) return response.redirect("/register");
|
2023-09-13 19:56:58 +00:00
|
|
|
|
2024-04-24 10:21:32 +00:00
|
|
|
const blog_list = await core.getPost({ requester_id: request.session.user?.id }, {}, { page: request.query.page || 0 });
|
2024-04-23 13:13:48 +00:00
|
|
|
const tags = await core.getTags();
|
2024-04-18 05:49:23 +00:00
|
|
|
|
|
|
|
blog_list.data.forEach((post) => {
|
|
|
|
let published_date_parts = new Date(post.publish_date).toLocaleDateString().split("/");
|
|
|
|
const formatted_date = `${published_date_parts[2]}-${published_date_parts[0].padStart(2, "0")}-${published_date_parts[1].padStart(2, "0")}`;
|
|
|
|
post.publish_date = formatted_date;
|
|
|
|
});
|
|
|
|
|
2024-04-24 12:30:02 +00:00
|
|
|
response.render(_getThemePage("index"), {
|
|
|
|
...(await getDefaults(request)),
|
2024-04-06 22:46:16 +00:00
|
|
|
blog_list: blog_list.data,
|
|
|
|
pagination: blog_list.pagination,
|
|
|
|
current_page: request.query.page || 0,
|
|
|
|
loaded_page: request.path,
|
2024-04-23 13:13:48 +00:00
|
|
|
tags: tags,
|
2024-04-06 22:46:16 +00:00
|
|
|
});
|
2023-09-13 19:56:58 +00:00
|
|
|
}
|
2024-04-24 12:30:02 +00:00
|
|
|
async function register(request, response) {
|
|
|
|
response.render(_getThemePage("register"), await getDefaults(request));
|
2023-09-13 19:56:58 +00:00
|
|
|
}
|
2024-04-24 12:30:02 +00:00
|
|
|
async function login(request, response) {
|
|
|
|
response.render(_getThemePage("login"), await getDefaults(request));
|
2023-09-13 19:56:58 +00:00
|
|
|
}
|
2023-12-30 23:45:44 +00:00
|
|
|
async function author(req, res) {
|
2024-04-18 05:49:23 +00:00
|
|
|
const user = await core.getUser({ user_id: req.params.author_id });
|
2023-12-30 23:45:44 +00:00
|
|
|
// FIXME: Bandage fix for author get error
|
|
|
|
if (!user.success) return res.redirect("/");
|
2024-04-18 05:49:23 +00:00
|
|
|
const profile = await core.getBiography({ author_id: user.data.id });
|
|
|
|
// TODO: Check for success
|
|
|
|
const posts = await core.getPost({ requester_id: user.data.id });
|
|
|
|
|
2024-04-24 12:30:02 +00:00
|
|
|
res.render(_getThemePage("author"), { ...(await getDefaults(req)), post: { ...profile.data, post_count: posts.data.length } });
|
2024-04-18 05:49:23 +00:00
|
|
|
}
|
|
|
|
async function authorEdit(request, response) {
|
|
|
|
let author = await core.getBiography({ author_id: request.params.author_id });
|
|
|
|
if (!author.success) return response.redirect("/");
|
2024-04-24 12:30:02 +00:00
|
|
|
response.render(_getThemePage("authorEdit"), { ...(await getDefaults(request)), profile: author.data });
|
2023-10-25 21:48:36 +00:00
|
|
|
}
|
2023-11-08 10:08:40 +00:00
|
|
|
async function blogList(req, res) {
|
2024-04-23 13:13:48 +00:00
|
|
|
const blog_list = await core.getPost({ requester_id: req.session.user?.id }, { search: req.query.search, search_title: true, search_tags: true, search_content: true });
|
2024-04-18 05:49:23 +00:00
|
|
|
|
|
|
|
blog_list.data.forEach((post) => {
|
|
|
|
let published_date_parts = new Date(post.publish_date).toLocaleDateString().split("/");
|
|
|
|
const formatted_date = `${published_date_parts[2]}-${published_date_parts[0].padStart(2, "0")}-${published_date_parts[1].padStart(2, "0")}`;
|
|
|
|
post.publish_date = formatted_date;
|
|
|
|
});
|
|
|
|
|
2024-04-24 12:30:02 +00:00
|
|
|
res.render(_getThemePage("postSearch"), {
|
|
|
|
...(await getDefaults(req)),
|
2023-11-08 10:08:40 +00:00
|
|
|
blog_list: blog_list.data,
|
|
|
|
pagination: blog_list.pagination,
|
|
|
|
current_page: req.query.page || 0,
|
|
|
|
loaded_page: req.path,
|
|
|
|
});
|
|
|
|
}
|
|
|
|
async function blogSingle(req, res) {
|
2024-04-18 05:49:23 +00:00
|
|
|
const blog = await core.getPost({ post_id: req.params.blog_id });
|
2024-04-06 22:46:16 +00:00
|
|
|
if (blog.success === false) return res.redirect("/");
|
2024-04-24 12:30:02 +00:00
|
|
|
res.render(_getThemePage("post"), { ...(await getDefaults(req)), blog_post: blog.data });
|
2023-10-25 21:48:36 +00:00
|
|
|
}
|
2024-04-14 23:52:16 +00:00
|
|
|
async function blogNew(request, response) {
|
2024-04-18 05:49:23 +00:00
|
|
|
const new_post = await core.newPost({ requester_id: request.session.user.id });
|
2024-04-14 23:52:16 +00:00
|
|
|
return response.redirect(`/post/${new_post}/edit`);
|
2023-11-08 10:08:40 +00:00
|
|
|
}
|
|
|
|
async function blogEdit(req, res) {
|
2024-04-18 05:49:23 +00:00
|
|
|
let existing_blog = await core.getPost({ post_id: req.params.blog_id });
|
2024-04-24 12:30:02 +00:00
|
|
|
if (!existing_blog.success) return res.redirect("/");
|
|
|
|
existing_blog = existing_blog.data;
|
2023-11-08 10:08:40 +00:00
|
|
|
|
|
|
|
let published_time_parts = new Date(existing_blog.publish_date).toLocaleTimeString([], { timeStyle: "short" }).slice(0, 4).split(":");
|
|
|
|
const formatted_time = `${published_time_parts[0].padStart(2, "0")}:${published_time_parts[1].padStart(2, "0")}`;
|
|
|
|
existing_blog.publish_time = formatted_time;
|
|
|
|
|
2023-11-15 18:49:09 +00:00
|
|
|
let published_date_parts = new Date(existing_blog.publish_date).toLocaleDateString().split("/");
|
|
|
|
const formatted_date = `${published_date_parts[2]}-${published_date_parts[0].padStart(2, "0")}-${published_date_parts[1].padStart(2, "0")}`;
|
|
|
|
existing_blog.publish_date = formatted_date;
|
|
|
|
|
2024-04-24 12:30:02 +00:00
|
|
|
res.render(_getThemePage("postNew"), { ...(await getDefaults(req)), existing_blog: existing_blog });
|
2023-10-25 21:48:36 +00:00
|
|
|
}
|
2023-09-21 00:41:57 +00:00
|
|
|
async function admin(request, response) {
|
2024-04-24 12:30:02 +00:00
|
|
|
response.render(_getThemePage("admin-settings"), { ...(await getDefaults(request)) });
|
2023-11-08 10:08:40 +00:00
|
|
|
}
|
|
|
|
async function atom(req, res) {
|
|
|
|
res.type("application/xml");
|
|
|
|
res.send(await external.getFeed({ type: "atom" }));
|
2023-09-21 00:41:57 +00:00
|
|
|
}
|
2024-04-01 20:34:32 +00:00
|
|
|
async function jsonFeed(req, res) {
|
|
|
|
res.type("application/json");
|
|
|
|
res.send(await external.getFeed({ type: "json" }));
|
|
|
|
}
|
2023-11-15 18:49:09 +00:00
|
|
|
// Internal API ------------------------------
|
2023-10-27 22:26:28 +00:00
|
|
|
|
2023-11-08 10:08:40 +00:00
|
|
|
module.exports = {
|
|
|
|
index,
|
|
|
|
register,
|
|
|
|
login,
|
|
|
|
author,
|
|
|
|
blogList,
|
|
|
|
blogNew,
|
|
|
|
blogEdit,
|
|
|
|
blogSingle,
|
|
|
|
admin,
|
|
|
|
atom,
|
2024-04-01 20:34:32 +00:00
|
|
|
jsonFeed,
|
2024-04-18 05:49:23 +00:00
|
|
|
authorEdit,
|
2023-11-08 10:08:40 +00:00
|
|
|
};
|