189 lines
5.5 KiB
JavaScript
189 lines
5.5 KiB
JavaScript
"use strict";
|
|
|
|
const ValidationService = require("../../services/ValidationService");
|
|
const AuthService = require("../../services/AuthService");
|
|
const JWTService = require("../../services/JwtService");
|
|
const SessionService = require("../../services/SessionService");
|
|
const PasswordService = require("../../services/PasswordService");
|
|
const db = require("../../models");
|
|
const helpers = require("../../core/helpers");
|
|
const { validateEmail } = require("../../core/utils");
|
|
const app = require("express").Router();
|
|
|
|
const role_id = 1;
|
|
|
|
app.get(
|
|
"/admin/profile",
|
|
SessionService.verifySessionMiddleware(role_id, "admin"),
|
|
|
|
async function (req, res, next) {
|
|
const user = await db.user.getByPK(req.session.user);
|
|
const id = user.id;
|
|
|
|
const AuthViewModel = require("../../view_models/admin_auth_view_model");
|
|
|
|
const viewModel = new AuthViewModel(db.user, "Profile");
|
|
|
|
viewModel._base_url = "/admin/profile";
|
|
|
|
if (!user || !user.id) {
|
|
viewModel.error = "User Not Found";
|
|
return res.render("admin/Profile", viewModel);
|
|
}
|
|
if (req.session.csrf === undefined) {
|
|
req.session.csrf = SessionService.randomString(100);
|
|
}
|
|
|
|
try {
|
|
// TODO: make this responsive with no joins as well
|
|
const exists = await db.user.get_user_credential(id, db);
|
|
|
|
if (!exists || +exists.status === 0) {
|
|
viewModel.error = "Profile Not Found";
|
|
return res.render("admin/Profile", viewModel);
|
|
}
|
|
|
|
const values = exists;
|
|
Object.keys(viewModel.form_fields).forEach((field) => {
|
|
if (field === "credential.email") {
|
|
viewModel.form_fields[field] = values["credential"]["email"];
|
|
return;
|
|
}
|
|
if (field === "credential.password") {
|
|
viewModel.form_fields[field] = values["credential"]["password"];
|
|
return;
|
|
}
|
|
viewModel.form_fields[field] = values[field];
|
|
});
|
|
viewModel.credential = db.credential;
|
|
|
|
return res.render("admin/Profile", viewModel);
|
|
} catch (error) {
|
|
viewModel.error = "Something went wrong";
|
|
return res.render("admin/Profile", viewModel);
|
|
}
|
|
}
|
|
);
|
|
|
|
app.post(
|
|
"/admin/profile",
|
|
|
|
SessionService.verifySessionMiddleware(role_id, "admin"),
|
|
|
|
async function (req, res, next) {
|
|
let UserRef;
|
|
let CredentialRef;
|
|
|
|
let User;
|
|
let Credential;
|
|
|
|
const user = await db.user.getByPK(req.session.user);
|
|
|
|
const AuthViewModel = require("../../view_models/admin_auth_view_model");
|
|
|
|
const viewModel = new AuthViewModel(db.user, "Profile");
|
|
viewModel._base_url = "/admin/profile";
|
|
|
|
if (!user || !user.id) {
|
|
viewModel.error = "User Not Found";
|
|
return res.render("admin/Profile", viewModel);
|
|
}
|
|
|
|
if (req.session.csrf === undefined) {
|
|
req.session.csrf = SessionService.randomString(100);
|
|
}
|
|
|
|
const { first_name, last_name, credential_email, credential_password, status } = req.body;
|
|
|
|
var credentialFields = {
|
|
email: credential_email,
|
|
password: credential_password,
|
|
};
|
|
|
|
viewModel.form_fields = {
|
|
...viewModel.form_fields,
|
|
first_name,
|
|
last_name,
|
|
"credential.email": credential_email,
|
|
"credential.password": credential_password,
|
|
status,
|
|
};
|
|
|
|
delete credentialFields.password;
|
|
delete viewModel.form_fields["credential.password"];
|
|
|
|
if (credential_password && credential_password !== "" && credential_password !== null && credential_password !== undefined) {
|
|
credentialFields.password = credential_password;
|
|
}
|
|
|
|
try {
|
|
if (req.validationError) {
|
|
viewModel.error = req.validationError;
|
|
return res.render("admin/Profile", viewModel);
|
|
}
|
|
|
|
CredentialRef = await db.credential.getByFields({
|
|
user_id: user.id,
|
|
status: 1,
|
|
type: 0,
|
|
});
|
|
|
|
if (!CredentialRef) throw new Error("Email Address Not Found");
|
|
|
|
const credentialType = CredentialRef.type;
|
|
|
|
UserRef = await db.user.getByFields({
|
|
id: user.id,
|
|
status: 1,
|
|
});
|
|
|
|
if (!UserRef) throw new Error("Email Address Not Found");
|
|
|
|
if (credentialType == 0 && Object.entries(credentialFields).length > 0) {
|
|
if (credentialFields.email) {
|
|
if (!validateEmail(credentialFields.email)) {
|
|
viewModel.error = "Invalid email";
|
|
return res.render("admin/Profile", viewModel);
|
|
}
|
|
|
|
if (CredentialRef.email !== credentialFields.email) {
|
|
const userExists = await db.credential.getByField("email", credentialFields.email);
|
|
if (userExists) {
|
|
throw new Error("Email Address Already Exists");
|
|
}
|
|
}
|
|
}
|
|
if (credentialFields.password) {
|
|
credentialFields.password = await PasswordService.hash(credentialFields.password);
|
|
}
|
|
|
|
Credential = await db.credential.edit(credentialFields, CredentialRef.id);
|
|
}
|
|
User = await db.user.edit(
|
|
{
|
|
first_name,
|
|
last_name,
|
|
status,
|
|
},
|
|
UserRef.id
|
|
);
|
|
|
|
viewModel.success = "Profile Updated Successfully";
|
|
return res.render("admin/Profile", viewModel);
|
|
} catch (error) {
|
|
console.error(error);
|
|
try {
|
|
if (Credential && CredentialRef) {
|
|
await db.credential.edit(credentialFields, CredentialRef.id);
|
|
}
|
|
viewModel.error = error.message || "Something went wrong";
|
|
return res.render("admin/Profile", viewModel);
|
|
} catch (error_2) {}
|
|
viewModel.error = error_2.message || "Something went wrong";
|
|
return res.render("admin/Profile", viewModel);
|
|
}
|
|
}
|
|
);
|
|
|
|
module.exports = app;
|