1
+ // Imports from node modules
1
2
const bcrypt = require ( "bcryptjs" ) ;
2
3
const jwt = require ( "jsonwebtoken" ) ;
3
4
const { v4 : uuidv4 } = require ( "uuid" ) ;
4
5
const axios = require ( "axios" ) ;
6
+ const moment = require ( "moment" ) ;
7
+
8
+ // Local imports
5
9
const logger = require ( "../config/logger" ) ;
6
10
const roleTypes = require ( "../config/roleTypes" ) ;
7
11
const models = require ( "../models" ) ;
@@ -14,12 +18,13 @@ const {
14
18
setPasswordExpiry,
15
19
setAndSendPasswordExpiredEmail,
16
20
checkPasswordSecurityViolations,
17
- setPreviousPasswords,
21
+ getAccessRequestContactEmails,
22
+ generateAndSetCSRFToken,
23
+ setPreviousPasswords
18
24
} = require ( "../utils/authUtil" ) ;
19
25
const { blacklistToken } = require ( "../utils/tokenBlackListing" ) ;
20
26
21
- const { generateAndSetCSRFToken } = require ( "../utils/authUtil" ) ;
22
-
27
+ // Constants
23
28
const User = models . user ;
24
29
const UserRoles = models . UserRoles ;
25
30
const user_application = models . user_application ;
@@ -30,8 +35,8 @@ const NotificationQueue = models.notification_queue;
30
35
const PasswordResetLinks = models . PasswordResetLinks ;
31
36
const AccountVerificationCodes = models . AccountVerificationCodes ;
32
37
const sent_notifications = models . sent_notifications ;
33
- const instance_settings = models . instance_settings ;
34
38
39
+ // Controllers
35
40
// Register application owner
36
41
const createApplicationOwner = async ( req , res ) => {
37
42
try {
@@ -1021,6 +1026,7 @@ const loginOrRegisterAzureUser = async (req, res, next) => {
1021
1026
}
1022
1027
} ;
1023
1028
1029
+ // Request access to application / Role
1024
1030
const requestAccess = async ( req , res ) => {
1025
1031
try {
1026
1032
const { id, comment } = req . body ;
@@ -1030,16 +1036,13 @@ const requestAccess = async (req, res) => {
1030
1036
return res . status ( 404 ) . json ( { message : "User not found" } ) ;
1031
1037
}
1032
1038
1033
- const instance_setting = await instance_settings . findOne ( {
1034
- where : { name : "contactEmail" } ,
1035
- } ) ;
1036
1039
1037
- if ( ! instance_setting ) {
1038
- return res . status ( 404 ) . json ( { message : "No contact email found." } ) ;
1039
- }
1040
+ const notificationDescription = `Access request from ${ user . email } ` ;
1040
1041
1041
1042
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
+ } ,
1043
1046
} ) ;
1044
1047
1045
1048
//check if existingNotification.createdAt is within 24 hours
@@ -1050,33 +1053,33 @@ const requestAccess = async (req, res) => {
1050
1053
const diffHours = Math . ceil ( diff / ( 1000 * 60 * 60 ) ) ;
1051
1054
1052
1055
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 ) ;
1057
1057
return res . status ( 200 ) . json ( { message : "Access request already sent" } ) ;
1058
1058
}
1059
1059
}
1060
1060
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 ( ) ;
1062
1065
1063
1066
// Add to notification queue
1064
1067
await NotificationQueue . create ( {
1065
1068
type : "email" ,
1066
1069
templateName : "accessRequest" ,
1067
- notificationOrigin : "No Access Page " ,
1070
+ notificationOrigin : "Access Request " ,
1068
1071
deliveryType : "immediate" ,
1069
1072
metaData : {
1070
1073
notificationId : searchableNotificationId ,
1071
- notificationOrigin : "No Access Page " ,
1074
+ notificationOrigin : "Access Request " ,
1072
1075
email : `${ user . email } ` ,
1073
1076
comment : comment ,
1074
1077
userManagementLink : `${ trimURL (
1075
1078
process . env . WEB_URL
1076
1079
) } /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,
1080
1083
validForHours : 24 ,
1081
1084
} ,
1082
1085
createdBy : user . id ,
0 commit comments