const validate = require("./form_validation"); const core = require("./core"); const settings = require("../settings"); async function registerUser(username, password) { // Get current and relevant settings const active_settings = settings.getSettings(); const form_valid = await validate.userRegistration(username, password); // Check form for errors // Set variables for easy reading const registration_allowed = active_settings.ACCOUNT_REGISTRATION; const setup_complete = active_settings.SETUP_COMPLETE; if (!registration_allowed && setup_complete) return { success: false, message: "Registration is disabled" }; // Registration disabled if (!form_valid.success) return form_valid; // Registration details did not validate // Does a user using that username exist already? const existing_user = await core.getUser({ username: username }); if (existing_user.success) return { success: false, message: "Username is taken" }; // Register the user in the database const role = setup_complete ? undefined : "ADMIN"; const registration_status = await core.registerUser(username, password, { role: role }); if (registration_status.success) return registration_status; else return registration_status; } async function loginUser(username, password) { // Get the user by username const existing_user = await core.getUser({ username: username }); // Check for errors or problems if (!existing_user.success) return { success: false, message: "User does not exist" }; if (existing_user.role === "LOCKED") return { success: false, message: "Account is locked: Contact your administrator" }; return { success: true, data: { username: existing_user.data.username, id: existing_user.data.id, password: existing_user.data.password } }; } async function getBlogList({ id, visibility, owner_id, raw } = {}, { page = 0, limit = 10 } = {}) { const blog_list = await core.getBlogList({ id: id, visibility: visibility, owner_id: owner_id, raw: raw }, { page: page, limit: limit }); return blog_list; } async function getUser({ id } = {}) { return await core.getUser({ id: id }); } async function postBlog(blog_post, owner_id) { return await core.postBlog(blog_post, owner_id); } async function deleteBlog(blog_id, owner_id) { return await core.deleteBlog(blog_id, owner_id); } async function updateBlog(blog_post, requester_id) { return await core.updateBlog(blog_post, requester_id); } async function deleteImage(image_data, requester_id) { return await core.deleteImage(image_data, requester_id); } module.exports = { registerUser, loginUser, postBlog, getBlogList, deleteBlog, updateBlog, deleteImage, getUser };