1
1
import { Request , Response , NextFunction } from "express" ;
2
2
import { userController , KeyType , KeyTypeSettings , KeyTypePassword } from '../types' ;
3
- // import { nextTick } from "process";
4
- import User from '../models/userModel' ;
5
- const bcrypt = require ( 'bcrypt' )
3
+ require ( 'dotenv' ) . config ( ) ;
4
+
5
+ const AWS = require ( 'aws-sdk' ) ;
6
+ AWS . config . update ( { region : process . env . AWS_REGION } ) ;
7
+ const dynamodb = new AWS . DynamoDB . DocumentClient ( ) ;
8
+
9
+ const bcrypt = require ( 'bcrypt' ) ;
6
10
const SALT_WORK_FACTOR = 10 ;
7
11
const ACCESS_TOKEN_SECRET = process . env . ACCESS_TOKEN_SECRET ;
8
- const jwt = require ( 'jsonwebtoken' )
9
- import * as dotenv from "dotenv" ;
10
- require ( 'dotenv' ) . config ( ) ;
12
+ const jwt = require ( 'jsonwebtoken' ) ;
11
13
12
14
const userController : userController = {
13
15
14
16
// Middleware for user login
15
17
async verifyUser ( req , res , next ) {
16
18
const { email, password } = req . body ;
19
+
20
+ const params = {
21
+ TableName : process . env . TABLE_NAME ,
22
+ Key : {
23
+ 'email' : email ,
24
+ } ,
25
+ } ;
26
+
17
27
try {
18
- const user : any = await User . findOne ( { email } ) ;
28
+ const user : any = await dynamodb . get ( params ) . promise ( ) ;
19
29
20
30
// If the user does not exist in the database, invoke global error handler
21
31
if ( ! user ) {
@@ -24,18 +34,19 @@ const userController: userController = {
24
34
status : 500 ,
25
35
message : { err : 'User not in database' }
26
36
} ) ;
27
- }
37
+ } ;
28
38
29
39
// If user exists with cooresponding email, compare password from client with password in database
30
- const isValid : boolean = await bcrypt . compare ( password , user . password ) ;
40
+ const isValid : boolean = await bcrypt . compare ( password , user . Item . password ) ;
31
41
32
42
if ( ! isValid ) {
33
43
return next ( {
34
44
log : "Error caught in userController.verifyUser middleware function" ,
35
45
status : 500 ,
36
46
message : { err : 'Wrong password' }
37
47
} ) ;
38
- }
48
+ } ;
49
+
39
50
res . locals . email = email ;
40
51
return next ( ) ;
41
52
// All other errors, invoke global error handler
@@ -80,19 +91,26 @@ const userController: userController = {
80
91
status : 500 ,
81
92
message : { errMessage : `Error found in user input` , errors : errors }
82
93
} )
83
- }
94
+ } ;
84
95
85
96
// If the registration form was successfully filled out, create a new user in the database
86
97
try {
87
98
const hashedPass = await bcrypt . hash ( password , SALT_WORK_FACTOR ) ;
88
- const user = await User . create ( {
89
- firstName,
90
- lastName,
91
- email,
92
- password : hashedPass ,
93
- arn,
94
- region
95
- } )
99
+
100
+ const params = {
101
+ TableName : process . env . TABLE_NAME ,
102
+ Item : {
103
+ 'email' : email ,
104
+ 'firstName' : firstName ,
105
+ 'lastName' : lastName ,
106
+ 'password' : hashedPass ,
107
+ 'arn' : arn ,
108
+ 'region' : region ,
109
+ } ,
110
+ } ;
111
+
112
+ const user = await dynamodb . put ( params ) . promise ( ) ;
113
+
96
114
res . locals . user = user ;
97
115
return next ( ) ;
98
116
// Invoke global error handler if a DB error occurs
@@ -108,13 +126,22 @@ const userController: userController = {
108
126
// Middleware for grabbing user info on Settings tab
109
127
async getUser ( req , res , next ) {
110
128
const { email } = res . locals ;
111
- const user : any = await User . findOne ( { email} ) ;
129
+
130
+ const params = {
131
+ TableName : process . env . TABLE_NAME ,
132
+ Key : {
133
+ 'email' : email
134
+ } ,
135
+ } ;
136
+
137
+ const user : any = await dynamodb . get ( params ) . promise ( ) ;
138
+
112
139
res . locals . user = {
113
- email : user . email ,
114
- firstName : user . firstName ,
115
- lastName : user . lastName ,
116
- arn : user . arn ,
117
- region : user . region
140
+ email : user . Item . email ,
141
+ firstName : user . Item . firstName ,
142
+ lastName : user . Item . lastName ,
143
+ arn : user . Item . arn ,
144
+ region : user . Item . region
118
145
}
119
146
return next ( ) ;
120
147
} ,
@@ -138,26 +165,33 @@ const userController: userController = {
138
165
// Send errors array to the front end
139
166
if ( errors . length > 0 ) {
140
167
return next ( {
141
- log : "Error caught in userController.createUser middleware function" ,
168
+ log : "Error caught in userController.updateUserProfile middleware function" ,
142
169
status : 500 ,
143
170
message : { errMessage : `Error found in user input` , errors : errors }
144
171
} )
145
- }
172
+ } ;
173
+
174
+ const params = {
175
+ TableName : process . env . TABLE_NAME ,
176
+ Key : {
177
+ 'email' : originalEmail
178
+ } ,
179
+ UpdateExpression : 'set firstName = :value1, lastName = :value2, arn = :value3, region = :value4' ,
180
+ ExpressionAttributeValues : {
181
+ ':value1' : firstName ,
182
+ ':value2' : lastName ,
183
+ ':value3' : arn ,
184
+ ':value4' : region
185
+ }
186
+ } ;
187
+
146
188
try {
147
189
// Update user in database with hashedPass as password
148
- const updatedUser = await User . findOneAndUpdate ( {
149
- email : originalEmail
150
- } ,
151
- {
152
- firstName,
153
- lastName,
154
- arn,
155
- region
156
- } ,
157
- {
158
- new : true
159
- } )
190
+ const updatedUser = await dynamodb . update ( params ) . promise ( ) ;
191
+ console . log ( updatedUser ) ;
192
+ // HI MADELINE
160
193
res . locals . user = updatedUser ;
194
+
161
195
return next ( ) ;
162
196
} catch ( err ) {
163
197
return next ( {
@@ -185,23 +219,30 @@ const userController: userController = {
185
219
// Send errors array back to front end
186
220
if ( errors . length > 0 ) {
187
221
return next ( {
188
- log : "Error caught in userController.createUser middleware function" ,
222
+ log : "Error caught in userController.updateUserPassword middleware function" ,
189
223
status : 500 ,
190
224
message : { errMessage : `Error found in user input` , errors : errors }
191
225
} )
192
- }
226
+ } ;
227
+
193
228
try {
194
229
const hashedPass = await bcrypt . hash ( password , SALT_WORK_FACTOR ) ;
230
+
231
+ const params = {
232
+ TableName : 'TABLE_NAME' ,
233
+ Key : {
234
+ 'email' : { S : originalEmail }
235
+ } ,
236
+ UpdateExpression : `SET password = :value1` ,
237
+ ExpressionAttributeValues : {
238
+ ':value1' : { S : hashedPass }
239
+ }
240
+ } ;
241
+
195
242
// create a new user in database with hashedPass as password
196
- const updatedUser = await User . findOneAndUpdate ( {
197
- email : originalEmail
198
- } ,
199
- {
200
- password : hashedPass ,
201
- } ,
202
- {
203
- new : true
204
- } )
243
+ const updatedUser = await dynamodb . updateItem ( params ) ;
244
+
245
+ console . log ( updatedUser ) // HI MADELINE
205
246
res . locals . success = { successMessage : 'Password updated!' } ;
206
247
return next ( ) ;
207
248
} catch ( err ) {
0 commit comments