Skip to content

Commit 1fe6e79

Browse files
authored
Merge pull request #1014 from hpcc-systems/yadhap/access-email-recipients
Yadhap/access email recipients
2 parents c4996bc + e11bc37 commit 1fe6e79

File tree

3 files changed

+41
-35
lines changed

3 files changed

+41
-35
lines changed

Tombolo/server/controllers/authController.js

+24-21
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
1+
// Imports from node modules
12
const bcrypt = require("bcryptjs");
23
const jwt = require("jsonwebtoken");
34
const { v4: uuidv4 } = require("uuid");
45
const axios = require("axios");
6+
const moment = require("moment");
7+
8+
// Local imports
59
const logger = require("../config/logger");
610
const roleTypes = require("../config/roleTypes");
711
const models = require("../models");
@@ -14,12 +18,13 @@ const {
1418
setPasswordExpiry,
1519
setAndSendPasswordExpiredEmail,
1620
checkPasswordSecurityViolations,
17-
setPreviousPasswords,
21+
getAccessRequestContactEmails,
22+
generateAndSetCSRFToken,
23+
setPreviousPasswords
1824
} = require("../utils/authUtil");
1925
const { blacklistToken } = require("../utils/tokenBlackListing");
2026

21-
const { generateAndSetCSRFToken } = require("../utils/authUtil");
22-
27+
// Constants
2328
const User = models.user;
2429
const UserRoles = models.UserRoles;
2530
const user_application = models.user_application;
@@ -30,8 +35,8 @@ const NotificationQueue = models.notification_queue;
3035
const PasswordResetLinks = models.PasswordResetLinks;
3136
const AccountVerificationCodes = models.AccountVerificationCodes;
3237
const sent_notifications = models.sent_notifications;
33-
const instance_settings = models.instance_settings;
3438

39+
// Controllers
3540
// Register application owner
3641
const createApplicationOwner = async (req, res) => {
3742
try {
@@ -1021,6 +1026,7 @@ const loginOrRegisterAzureUser = async (req, res, next) => {
10211026
}
10221027
};
10231028

1029+
// Request access to application / Role
10241030
const requestAccess = async (req, res) => {
10251031
try {
10261032
const { id, comment } = req.body;
@@ -1030,16 +1036,13 @@ const requestAccess = async (req, res) => {
10301036
return res.status(404).json({ message: "User not found" });
10311037
}
10321038

1033-
const instance_setting = await instance_settings.findOne({
1034-
where: { name: "contactEmail" },
1035-
});
10361039

1037-
if (!instance_setting) {
1038-
return res.status(404).json({ message: "No contact email found." });
1039-
}
1040+
const notificationDescription = `Access request from ${user.email}`;
10401041

10411042
const existingNotification = await sent_notifications.findOne({
1042-
where: { notificationTitle: `User Access Request from ${user.email}` },
1043+
where: {
1044+
notificationDescription: `Access request from ${user.email}`,
1045+
},
10431046
});
10441047

10451048
//check if existingNotification.createdAt is within 24 hours
@@ -1050,33 +1053,33 @@ const requestAccess = async (req, res) => {
10501053
const diffHours = Math.ceil(diff / (1000 * 60 * 60));
10511054

10521055
if (diffHours < 24) {
1053-
logger.info(
1054-
"Access request from user already sent within 24 hours. User: " +
1055-
user.email
1056-
);
1056+
logger.info("Access request from user already sent within 24 hours. User: " + user.email);
10571057
return res.status(200).json({ message: "Access request already sent" });
10581058
}
10591059
}
10601060

1061-
const searchableNotificationId = uuidv4();
1061+
const searchableNotificationId = `ACC_RQ_${moment().format('YYYYMMDD_HHmmss_SSS')}`
1062+
1063+
// Get recipient for this notification
1064+
const accessRequestRecipients = await getAccessRequestContactEmails();
10621065

10631066
// Add to notification queue
10641067
await NotificationQueue.create({
10651068
type: "email",
10661069
templateName: "accessRequest",
1067-
notificationOrigin: "No Access Page",
1070+
notificationOrigin: "Access Request",
10681071
deliveryType: "immediate",
10691072
metaData: {
10701073
notificationId: searchableNotificationId,
1071-
notificationOrigin: "No Access Page",
1074+
notificationOrigin: "Access Request",
10721075
email: `${user.email}`,
10731076
comment: comment,
10741077
userManagementLink: `${trimURL(
10751078
process.env.WEB_URL
10761079
)}/admin/userManagement`,
1077-
subject: `User Access Request from ${user.email}`,
1078-
mainRecipients: [instance_setting.value],
1079-
notificationDescription: "User Access Request",
1080+
subject: `Access Request`,
1081+
mainRecipients: accessRequestRecipients,
1082+
notificationDescription,
10801083
validForHours: 24,
10811084
},
10821085
createdBy: user.id,

Tombolo/server/controllers/userController.js

+9-5
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,24 @@
1+
// Imports from node modules
12
const { v4: UUIDV4 } = require("uuid");
23

4+
// Local imports
35
const logger = require("../config/logger");
46
const models = require("../models");
57
const bcrypt = require("bcryptjs");
8+
const {
9+
setPasswordExpiry,
10+
trimURL,
11+
checkPasswordSecurityViolations,
12+
setPreviousPasswords,
13+
} = require("../utils/authUtil");
614

15+
// Constants
716
const User = models.user;
817
const UserRoles = models.UserRoles;
918
const user_application = models.user_application;
1019
const NotificationQueue = models.notification_queue;
1120
const AccountVerificationCodes = models.AccountVerificationCodes;
1221

13-
const {
14-
checkPasswordSecurityViolations,
15-
setPasswordExpiry,
16-
setPreviousPasswords,
17-
} = require("../utils/authUtil");
1822

1923
// Delete user with ID
2024
const deleteUser = async (req, res) => {

Tombolo/server/jobs/userManagement/passwordExpiry.js

+8-9
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,18 @@
1-
// imports
1+
// imports from node modules
22
const { parentPort } = require("worker_threads");
33
const { Op } = require("sequelize");
4-
const logger = require("../../config/logger");
4+
const { v4: uuidv4 } = require("uuid");
55

66
//Local Imports
77
const models = require("../../models");
8+
const logger = require("../../config/logger");
9+
const { trimURL, getSupportContactEmails } = require("../../utils/authUtil");
10+
11+
// Constants
812
const user = models.user;
913
const NotificationQueue = models.notification_queue;
10-
11-
const { v4: uuidv4 } = require("uuid");
12-
const { trimURL, getContactDetails } = require("../../utils/authUtil");
13-
1414
const passwordResetLink = `${trimURL(process.env.WEB_URL)}/myaccount`;
15-
const passwordExpiryAlertDaysForUser =
16-
require("../../config/monitorings.js").passwordExpiryAlertDaysForUser;
15+
const passwordExpiryAlertDaysForUser = require("../../config/monitorings.js").passwordExpiryAlertDaysForUser;
1716

1817
const updateUserAndSendNotification = async (user, daysToExpiry, version) => {
1918
// Queue notification
@@ -147,7 +146,7 @@ const updateUserAndSendNotification = async (user, daysToExpiry, version) => {
147146
" has an expired password.",
148147
});
149148

150-
let emails = "mailto:" + (await getContactDetails());
149+
let emails = "mailto:" + (await getSupportContactEmails());
151150

152151
// Queue notification
153152
await NotificationQueue.create({

0 commit comments

Comments
 (0)