Skip to content

Commit

Permalink
Fixes for history, logn and logout.
Browse files Browse the repository at this point in the history
  • Loading branch information
Marios Venetsianos committed Mar 13, 2023
1 parent 51c4b77 commit 259961e
Show file tree
Hide file tree
Showing 9 changed files with 144 additions and 88 deletions.
12 changes: 12 additions & 0 deletions models/associations.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,18 @@ function applyAssoc(sequelize) {
foreignKeyConstraint: true,
});

//establishing one to many association between user and audit models
user.hasMany(audit, {
sourceKey: "taxId",
foreignKey: "authorTaxId",
foreignKeyConstraint: true,
});
audit.belongsTo(user, {
foreignKey: "authorTaxId",
targetKey: "taxId",
foreignKeyConstraint: true,
});

//establishing one to many association between analysis and audit models
analysis.hasMany(audit, {
sourceKey: "id",
Expand Down
3 changes: 2 additions & 1 deletion models/audit.model.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,9 @@ module.exports = (sequelize, DataTypes) => {
type: DataTypes.INTEGER,
allowNull: false,
},
user: DataTypes.STRING,
data: DataTypes.JSON,
type: DataTypes.STRING,
status: DataTypes.STRING,
timestamp: DataTypes.STRING,
action: DataTypes.STRING,
},
Expand Down
5 changes: 4 additions & 1 deletion routes/create.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ const { authUser, authAgency, authRole } = require("../middleware/auth");
const tables = require("../lib/tables");
const ministries = require("../lib/ministries");
const tooltipsCsv = require("../lib/tooltips");
const { user } = require("../services/database");

var storage = multer.diskStorage({
destination: function (req, file, cb) {
Expand Down Expand Up @@ -132,11 +133,13 @@ routes.post(
});

await database.audit.create({
user: req.session.user.fname + " " + req.session.user.lname,
data: req.body,
type: req.body.type,
status: req.body.status,
timestamp: req.body.initial_submit,
action: req.method,
auditId: res_data.id,
authorTaxId: req.session.user.taxId,
});

res.send({ redirect: "../user_views/history" });
Expand Down
12 changes: 6 additions & 6 deletions routes/edit.js
Original file line number Diff line number Diff line change
Expand Up @@ -313,11 +313,11 @@ routes.put(
}
);

const author = req.session.user.fname + " " + req.session.user.lname;

await database.audit.create({
user: author,
authorTaxId: req.session.user.taxId,
data: req.body,
type: entry.type,
status: req.body.status,
timestamp: req.body.last_updated,
action: req.method,
auditId: analysis_id,
Expand Down Expand Up @@ -374,11 +374,11 @@ routes.put(
}
);

const author = req.session.user.fname + " " + req.session.user.lname;

await database.audit.create({
user: author,
authorTaxId: req.session.user.taxId,
data: req.body,
type: analysis.type,
status: req.body.status,
timestamp: req.body.last_updated,
action: req.method,
auditId: analysis_id,
Expand Down
114 changes: 73 additions & 41 deletions routes/history.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,53 +10,85 @@ routes.get(
authRole,
authAgency,
async function (req, res, next) {
let user = await database.user.findOne({
where: {
taxId: req.session.user.taxId,
},
include: [{ model: database.analysis }],
});
let entries, status;
if (user && user.dataValues) {
if (user.role === Enums.Roles.Composer) {
status = Enums.Status.Composing;
entries = await database.analysis.findAll({
where: {
status: status,
"$user.agency$": user.agency, //has to be from same agency
},
include: [{ model: database.user }],
raw: true,
nest: true,
});
} else if (user.role === Enums.Roles.GeneralAccountingOffice) {
status = Enums.Status.Pending;
entries = await database.analysis.findAll({
where: {
status: {
[Op.or]: [Enums.Status.Pending, Enums.Status.Checked],
try {
let user = await database.user.findOne({
where: {
taxId: 'req.session.user.taxId',
},
include: [{ model: database.analysis }],
});
let entries, status;
if (user && user.dataValues) {
if (user.role === Enums.Roles.Composer) {
status = Enums.Status.Composing;
entries = await database.analysis.findAll({
where: {
status: status,
"$user.agency$": user.agency, //has to be from same agency
},
include: [{ model: database.user }],
raw: true,
nest: true,
});
} else if (user.role === Enums.Roles.GeneralAccountingOffice) {
status = Enums.Status.Pending;
entries = await database.analysis.findAll({
where: {
status: {
[Op.or]: [Enums.Status.Pending, Enums.Status.Checked],
},
},
},
include: [{ model: database.user }],
raw: true,
nest: true,
});
} else if (user.role === Enums.Roles.Parliament) {
status = Enums.Status.Uploaded;
entries = await database.analysis.findAll({
where: {
status: status,
},
include: [{ model: database.user }],
raw: true,
nest: true,
});
} else {
entries = await database.analysis.findAll({ include: database.user });
}
const userEntries = await database.audit.findAll({
where: { authorTaxId: user.taxId },
include: [{ model: database.user }],
raw: true,
nest: true,
});
} else if (user.role === Enums.Roles.Parliament) {
status = Enums.Status.Uploaded;
entries = await database.analysis.findAll({
where: {
status: status,
},
include: [{ model: database.user }],
raw: true,
nest: true,

const latestEntries = [];
for (i in userEntries) {
let firstAuditEntry = await database.audit.findAll({
limit: 1,
where: { auditId: userEntries[i].auditId },
include: [{ model: database.user }],
});
let latestAuditEntry = await database.audit.findAll({
limit: 1,
where: { auditId: userEntries[i].auditId },
order: [["createdAt", "DESC"]],
include: [{ model: database.user }],
});
latestEntries.push({
firstAuditEntry: firstAuditEntry[0].dataValues,
userEntry: userEntries[i].dataValues,
latestAuditEntry: latestAuditEntry[0].dataValues,
});
}
res.render("user_views/history", {
entries: entries,
user: user,
latestEntries: latestEntries,
});
} else {
entries = await database.analysis.findAll({ include: database.user });
res.status(404).send("Not found");
}
res.render("user_views/history", { entries: entries, user: user });
} else {
res.status(404).send("Not found");
} catch (err) {
console.log(err);
}
}
);
Expand Down
22 changes: 15 additions & 7 deletions routes/login.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,16 +29,24 @@ routes.post(
if (errors.errors.length === 0) {
//no validation errors
const inputPassword = req.body.password;
let user = await database.user.findOne({
where: {
username: req.body.username,
},
});
let user;
try {
user = await database.user.findOne({
where: {
username: req.body.username,
},
});
} catch {
errors.errors.push({
msg: "Δε βρέθηκε χρήστης με αυτό το όνομα ή κωδικό.",
});
res.status(404).send(errors.errors);
}
if (user && user.dataValues) {
bcrypt.compare(inputPassword, user.password, function (err, result) {
if (result) {
req.session.user = user;
req.session.loginType = "app";
req.session.user = user.dataValues;
req.session.user.loginMethod = "app";
res.status(200).send({ redirect: "user_views/dashboard" });
} else {
errors.errors.push({
Expand Down
7 changes: 3 additions & 4 deletions routes/logout.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,16 @@
const routes = require("express").Router();

routes.get("/", async function (req, res, next) {
console.log(req.session.loginType);
if (req.session.loginType && req.session.loginType === "app") {
if (req.session.user && req.session.user.loginMethod === "app") {
req.session.destroy();
if (!req.session) {
res.send({
redirect: `${process.env.SITE}/login`,
redirect: `/login`,
});
}
} else {
res.send({
redirect: `https://test.gsis.gr/oauth2server/logout/${process.env.CLIENT_ID}/?url=${process.env.SITE}`,
redirect: `${process.env.GSID_SITE}/oauth2server/logout/${process.env.CLIENT_ID}/?url=${process.env.SITE}`,
});
}
});
Expand Down
2 changes: 1 addition & 1 deletion routes/oauth2.js
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,7 @@ const gsispa = async (req, res) => {
//TODO: refactor catch
} catch (err) {
console.log(err);
res.send(400);
res.status(400).send({msg: 'Υπήρξε κάποιο σφάλμα κατά την είσοδο σας στην εφαρμογή. Παρακαλώ δοκιμάστε ξανά.'});
}
if (debug) console.log("App UserInfo", user);
if (user) {
Expand Down
55 changes: 28 additions & 27 deletions views/user_views/history.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -31,32 +31,33 @@
</thead>
<!-- TODO: fix table headers and rows to display correct information -->
<tbody class="govgr-table__body">
<% for(var i=0; i<user.analyses.length; i++) {%>
<tr class="govgr-table__row" onclick="setReferer('<%= user.analyses[i].id %>')">
<td class="govgr-table__cell hover:underline">
<%= user.analyses[i].data.title %>
</td>
<td class="govgr-table__cell">
<%= user.fname%>
<%= user.lname%>
</td>
<td class="govgr-table__cell">
<%= user.role%>
</td>
<td class="govgr-table__cell">
<%= user.agency %>
</td>
<td class="govgr-table__cell">
<%= user.analyses[i].author %>
</td>
<td class="govgr-table__cell">
<%= user.analyses[i].type %>
</td>
<td class="govgr-table__cell">
<%= user.analyses[i].status %>
</td>
</tr>
<% } %>
<% for(let i=0; i<latestEntries.length; i++) {%>
<tr class="govgr-table__row" onclick="setReferer('<%= latestEntries[i].userEntry.id %>')">
<td class="govgr-table__cell hover:underline">
<%= latestEntries[i].userEntry.data.title %>
</td>
<td class="govgr-table__cell">
<%= latestEntries[i].firstAuditEntry.user.fname %>
<%= latestEntries[i].firstAuditEntry.user.lname %>
</td>
<td class="govgr-table__cell">
<%= latestEntries[i].latestAuditEntry.user.fname %>
<%= latestEntries[i].latestAuditEntry.user.lname %>
</td>
<td class="govgr-table__cell">
<%= latestEntries[i].latestAuditEntry.user.role %>
</td>
<td class="govgr-table__cell">
<%= latestEntries[i].latestAuditEntry.user.agency %>
</td>
<td class="govgr-table__cell">
<%= latestEntries[i].userEntry.type %>
</td>
<td class="govgr-table__cell">
<%= latestEntries[i].userEntry.status %>
</td>
</tr>
<% } %>
</tbody>
</table>
</div>
Expand Down Expand Up @@ -131,7 +132,7 @@
const isAdmin = '<%= user.isAdmin %>';
const userEntries = '<%= entries %>';
const agencyEntries = '<%= user.analyses %>';
const agencyEntries = '<%= latestEntries %>';
if (userEntries.length > 0 && agencyEntries.length === 0) {
$("#agency_div").show();
Expand Down

0 comments on commit 259961e

Please sign in to comment.