init commit

This commit is contained in:
modeht
2022-10-03 19:59:51 +02:00
commit 057e9306df
497 changed files with 109776 additions and 0 deletions
+6
View File
@@ -0,0 +1,6 @@
const Login = require("./login");
const Logout = require("./logout");
const Profile = require("./profile");
module.exports = [Login,Logout,Profile]
+73
View File
@@ -0,0 +1,73 @@
"use strict";
const ValidationService = require("../../services/ValidationService");
const AuthService = require("../../services/AuthService");
const JWTService = require("../../services/JwtService");
const SessionService = require("../../services/SessionService");
const db = require("../../models");
const errors = require("../../core/errors");
const app = require("express").Router();
const role_id = 1;
app.get("/admin/login", SessionService.preventAuthRoutes(role_id, "admin"), async function (req, res, next) {
const AuthViewModel = require("../../view_models/admin_auth_view_model");
const viewModel = new AuthViewModel(db.user, "Login");
req.session.redirect_to = req.query.redirect_to;
return res.render("admin/Login", viewModel);
});
app.post(
"/admin/login",
ValidationService.validateInput(
{
email: "required|email",
password: "required|minLength:6",
},
{
"email.required": "Email is required",
"email.email": "Invalid email",
"password.required": "Password is required.",
"password.minLength": "Password should be at least 6 characters long.",
}
),
async function (req, res, next) {
const role_id = 1;
const { email, password } = req.body;
const AuthViewModel = require("../../view_models/admin_auth_view_model");
const viewModel = new AuthViewModel(db.user, "Login");
ValidationService.handleValidationErrorForViews(req, res, viewModel, "admin/Login", "login_fields", { email });
try {
const { credential, user } = await AuthService.login(email, password, role_id);
const session = req.session;
session.role = role_id;
session.user = user;
session.credential = credential;
return session.save((error) => {
if (error) {
throw new Error(error);
}
if (session.redirect_to) {
return res.redirect(session.redirect_to);
}
return res.redirect("/admin/dashboard");
});
} catch (error) {
viewModel.error = error.message || "Something went wrong";
viewModel.login_fields.email = email;
return res.render("admin/Login", viewModel);
}
}
);
module.exports = app;
+13
View File
@@ -0,0 +1,13 @@
'use strict';
const app = require('express').Router();
app.get('/admin/logout', async function (req, res, next) {
req.session.destroy(function(err) {
req.session = {}
})
return res.redirect("/admin/login")
});
module.exports = app;
+188
View File
@@ -0,0 +1,188 @@
"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;