yet-another-blog/backend/core/internal_api.js

71 lines
3.6 KiB
JavaScript
Raw Normal View History

const core = require("./core");
const bcrypt = require("bcrypt");
const validate = require("../form_validation");
async function postRegister(req, res) {
const { username, password } = req.body; // Get the username and password from the request body
const form_validation = await validate.registerUser(username, password); // Check form for errors
2023-09-21 00:41:57 +00:00
// User registration disabled?
// We also check if the server was setup. If it was not set up, the server will proceed anyways.
if (!core.settings["ACCOUNT_REGISTRATION"] && core.settings["SETUP_COMPLETE"]) return res.json({ success: false, message: "Account registrations are disabled" });
// User data valid?
if (!form_validation.success) return res.json({ success: false, message: form_validation.message });
// If setup incomplete, set the user role to Admin. This is the initial user so it will be the master user.
const role = core.settings["SETUP_COMPLETE"] ? undefined : "ADMIN";
const hashed_password = await bcrypt.hash(password, 10); // Hash the password for security :^)
Generic Theme (#1) * Theme work Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * User registration. Cleanup CSS. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Post Creation and Manipulation Uploading images now easier. Just drag and drop onto the text area. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Author Page. Edit author page. Author display name. Generic media uploads. Core refactoring. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Texteditor bugfix. PGAdmin docker container for management of database. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Tags. Search by tags. Return tags used by posts. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * New post button. Fix index "page" param not being honored. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Post drafts Users can now only have one "unpublished" draft. Improved password handling. Minor cleanup. Admin panel navigation link. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Post visibility flairs Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Publish date autofill to now. Fix deleteBlog. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Removed unused function Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Media upload pruning. Uploaded media is now pruned automatically every time a post is updated. Minor cleanup. Groundwork for media types other than images. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Updated name. Use the manifest data. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> --------- Signed-off-by: Armored Dragon <publicmail@armoreddragon.com>
2024-04-30 15:26:35 +00:00
res.json(await core.newUser({ username: username, password: hashed_password, role: role }));
}
async function postLogin(req, res) {
const { username, password } = req.body; // Get the username and password from the request body
// Get the user by username
Generic Theme (#1) * Theme work Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * User registration. Cleanup CSS. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Post Creation and Manipulation Uploading images now easier. Just drag and drop onto the text area. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Author Page. Edit author page. Author display name. Generic media uploads. Core refactoring. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Texteditor bugfix. PGAdmin docker container for management of database. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Tags. Search by tags. Return tags used by posts. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * New post button. Fix index "page" param not being honored. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Post drafts Users can now only have one "unpublished" draft. Improved password handling. Minor cleanup. Admin panel navigation link. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Post visibility flairs Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Publish date autofill to now. Fix deleteBlog. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Removed unused function Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Media upload pruning. Uploaded media is now pruned automatically every time a post is updated. Minor cleanup. Groundwork for media types other than images. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Updated name. Use the manifest data. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> --------- Signed-off-by: Armored Dragon <publicmail@armoreddragon.com>
2024-04-30 15:26:35 +00:00
const existing_user = await core.getUser({ username: username, include_password: true });
if (!existing_user.success) return res.json({ success: false, message: existing_user.message });
2023-09-21 00:41:57 +00:00
// Check the password
const password_match = await bcrypt.compare(password, existing_user.data.password);
if (!password_match) return res.json({ success: false, message: "Incorrect password" });
2023-09-21 00:41:57 +00:00
// Send the cookies to the user & return successful
req.session.user = { username: username, id: existing_user.data.id };
res.json({ success: true });
}
async function postSetting(request, response) {
Generic Theme (#1) * Theme work Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * User registration. Cleanup CSS. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Post Creation and Manipulation Uploading images now easier. Just drag and drop onto the text area. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Author Page. Edit author page. Author display name. Generic media uploads. Core refactoring. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Texteditor bugfix. PGAdmin docker container for management of database. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Tags. Search by tags. Return tags used by posts. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * New post button. Fix index "page" param not being honored. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Post drafts Users can now only have one "unpublished" draft. Improved password handling. Minor cleanup. Admin panel navigation link. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Post visibility flairs Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Publish date autofill to now. Fix deleteBlog. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Removed unused function Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Media upload pruning. Uploaded media is now pruned automatically every time a post is updated. Minor cleanup. Groundwork for media types other than images. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Updated name. Use the manifest data. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> --------- Signed-off-by: Armored Dragon <publicmail@armoreddragon.com>
2024-04-30 15:26:35 +00:00
const user = await core.getUser({ user_id: request.session.user.id });
if (!user.success) return response.json({ success: false, message: user.message });
if (user.data.role !== "ADMIN") return response.json({ success: false, message: "User is not permitted" });
response.json(await core.postSetting(request.body.setting_name, request.body.value));
}
Generic Theme (#1) * Theme work Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * User registration. Cleanup CSS. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Post Creation and Manipulation Uploading images now easier. Just drag and drop onto the text area. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Author Page. Edit author page. Author display name. Generic media uploads. Core refactoring. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Texteditor bugfix. PGAdmin docker container for management of database. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Tags. Search by tags. Return tags used by posts. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * New post button. Fix index "page" param not being honored. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Post drafts Users can now only have one "unpublished" draft. Improved password handling. Minor cleanup. Admin panel navigation link. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Post visibility flairs Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Publish date autofill to now. Fix deleteBlog. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Removed unused function Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Media upload pruning. Uploaded media is now pruned automatically every time a post is updated. Minor cleanup. Groundwork for media types other than images. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Updated name. Use the manifest data. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> --------- Signed-off-by: Armored Dragon <publicmail@armoreddragon.com>
2024-04-30 15:26:35 +00:00
async function postImage(request, response) {
// TODO: Permissions for uploading images
// TODO: Verification for image uploading
return response.json(await core.uploadMedia({ parent_id: request.body.post_id, parent_type: request.body.parent_type, file_buffer: request.body.buffer, content_type: request.body.content_type }));
}
async function deleteImage(req, res) {
// TODO: Permissions for deleting image
return res.json(await core.deleteImage(req.body, req.session.user.id));
}
async function deleteBlog(req, res) {
// TODO: Permissions for deleting blog
Generic Theme (#1) * Theme work Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * User registration. Cleanup CSS. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Post Creation and Manipulation Uploading images now easier. Just drag and drop onto the text area. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Author Page. Edit author page. Author display name. Generic media uploads. Core refactoring. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Texteditor bugfix. PGAdmin docker container for management of database. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Tags. Search by tags. Return tags used by posts. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * New post button. Fix index "page" param not being honored. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Post drafts Users can now only have one "unpublished" draft. Improved password handling. Minor cleanup. Admin panel navigation link. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Post visibility flairs Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Publish date autofill to now. Fix deleteBlog. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Removed unused function Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Media upload pruning. Uploaded media is now pruned automatically every time a post is updated. Minor cleanup. Groundwork for media types other than images. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Updated name. Use the manifest data. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> --------- Signed-off-by: Armored Dragon <publicmail@armoreddragon.com>
2024-04-30 15:26:35 +00:00
return res.json(await core.deletePost({ post_id: req.body.id, requester_id: req.session.user.id }));
}
async function patchBlog(req, res) {
return res.json(await core.editPost({ requester_id: req.session.user.id, post_id: req.body.id, post_content: req.body }));
Generic Theme (#1) * Theme work Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * User registration. Cleanup CSS. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Post Creation and Manipulation Uploading images now easier. Just drag and drop onto the text area. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Author Page. Edit author page. Author display name. Generic media uploads. Core refactoring. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Texteditor bugfix. PGAdmin docker container for management of database. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Tags. Search by tags. Return tags used by posts. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * New post button. Fix index "page" param not being honored. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Post drafts Users can now only have one "unpublished" draft. Improved password handling. Minor cleanup. Admin panel navigation link. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Post visibility flairs Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Publish date autofill to now. Fix deleteBlog. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Removed unused function Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Media upload pruning. Uploaded media is now pruned automatically every time a post is updated. Minor cleanup. Groundwork for media types other than images. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Updated name. Use the manifest data. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> --------- Signed-off-by: Armored Dragon <publicmail@armoreddragon.com>
2024-04-30 15:26:35 +00:00
}
async function patchBiography(request, response) {
// TODO: Validate
return response.json(await core.updateBiography({ requester_id: request.session.user.id, author_id: request.body.id, biography_content: request.body }));
}
async function patchUser(request, response) {
return response.json(await core.editUser({ requester_id: request.session.user.id, user_id: request.body.id, user_content: request.body }));
}
Generic Theme (#1) * Theme work Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * User registration. Cleanup CSS. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Post Creation and Manipulation Uploading images now easier. Just drag and drop onto the text area. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Author Page. Edit author page. Author display name. Generic media uploads. Core refactoring. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Texteditor bugfix. PGAdmin docker container for management of database. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Tags. Search by tags. Return tags used by posts. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * New post button. Fix index "page" param not being honored. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Post drafts Users can now only have one "unpublished" draft. Improved password handling. Minor cleanup. Admin panel navigation link. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Post visibility flairs Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Publish date autofill to now. Fix deleteBlog. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Removed unused function Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Media upload pruning. Uploaded media is now pruned automatically every time a post is updated. Minor cleanup. Groundwork for media types other than images. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> * Updated name. Use the manifest data. Signed-off-by: Armored Dragon <publicmail@armoreddragon.com> --------- Signed-off-by: Armored Dragon <publicmail@armoreddragon.com>
2024-04-30 15:26:35 +00:00
module.exports = { postRegister, patchBiography, postLogin, postSetting, postImage, deleteImage, deleteBlog, patchBlog, patchUser };