Skip to content

Commit 3a7c6de

Browse files
converted Mongo DB into Dynamo DB, bug in userController.updateUserProfile and userController.updateUserPassword
1 parent 48537f9 commit 3a7c6de

File tree

4 files changed

+108
-97
lines changed

4 files changed

+108
-97
lines changed

Diff for: package.json

+1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
"@headlessui/react": "^1.7.7",
3131
"@heroicons/react": "^2.0.13",
3232
"@types/jsonwebtoken": "^8.5.9",
33+
"aws-sdk": "^2.1339.0",
3334
"bcrypt": "^5.1.0",
3435
"chart.js": "^4.1.2",
3536
"chartjs-adapter-moment": "^1.0.1",

Diff for: server/controllers/aws/credentialsController.ts

+16-5
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
import { STSClient, AssumeRoleCommand } from "@aws-sdk/client-sts";
22
import { AwsCredentialIdentity } from "@aws-sdk/types";
33
import { Request, Response, NextFunction } from "express";
4-
import User from '../../models/userModel';
54
import dotenv from 'dotenv';
65
dotenv.config();
76

7+
const AWS = require('aws-sdk');
8+
AWS.config.update({region: process.env.AWS_REGION});
9+
const dynamodb = new AWS.DynamoDB.DocumentClient();
810

911
const credentials: AwsCredentialIdentity = {
1012
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
1113
secretAccessKey: process.env.AWS_SECRET_KEY,
12-
};
14+
};
1315

1416
const region = process.env.AWS_REGION;
1517

@@ -48,10 +50,19 @@ const credentialsController = {
4850
// This function is used when grabbing information from Lambda, Gateway, etc
4951
async getCredentialsFromDB(req: Request, res: Response, next: NextFunction) {
5052
const { email } = res.locals;
51-
const user: any = await User.findOne({ email })
53+
54+
const params = {
55+
TableName: process.env.TABLE_NAME,
56+
Key: {
57+
'email' : email,
58+
},
59+
};
60+
61+
const user: any = await dynamodb.get(params).promise();
62+
5263
if (user) {
53-
res.locals.arn = user.arn;
54-
res.locals.region = user.region;
64+
res.locals.arn = user.Item.arn;
65+
res.locals.region = user.Item.region;
5566
}
5667

5768
const roleDetails = {

Diff for: server/controllers/userController.ts

+91-50
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,31 @@
11
import { Request, Response, NextFunction } from "express";
22
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');
610
const SALT_WORK_FACTOR = 10;
711
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');
1113

1214
const userController: userController = {
1315

1416
// Middleware for user login
1517
async verifyUser(req, res, next) {
1618
const { email, password } = req.body;
19+
20+
const params = {
21+
TableName: process.env.TABLE_NAME,
22+
Key: {
23+
'email' : email,
24+
},
25+
};
26+
1727
try {
18-
const user: any = await User.findOne({email});
28+
const user: any = await dynamodb.get(params).promise();
1929

2030
// If the user does not exist in the database, invoke global error handler
2131
if (!user) {
@@ -24,18 +34,19 @@ const userController: userController = {
2434
status: 500,
2535
message: {err: 'User not in database'}
2636
});
27-
}
37+
};
2838

2939
// 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);
3141

3242
if (!isValid) {
3343
return next({
3444
log: "Error caught in userController.verifyUser middleware function",
3545
status: 500,
3646
message: {err: 'Wrong password'}
3747
});
38-
}
48+
};
49+
3950
res.locals.email = email;
4051
return next();
4152
// All other errors, invoke global error handler
@@ -80,19 +91,26 @@ const userController: userController = {
8091
status: 500,
8192
message: {errMessage: `Error found in user input`, errors: errors}
8293
})
83-
}
94+
};
8495

8596
// If the registration form was successfully filled out, create a new user in the database
8697
try {
8798
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+
96114
res.locals.user = user;
97115
return next();
98116
// Invoke global error handler if a DB error occurs
@@ -108,13 +126,22 @@ const userController: userController = {
108126
// Middleware for grabbing user info on Settings tab
109127
async getUser(req, res, next) {
110128
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+
112139
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
118145
}
119146
return next();
120147
},
@@ -138,26 +165,33 @@ const userController: userController = {
138165
// Send errors array to the front end
139166
if (errors.length > 0) {
140167
return next({
141-
log: "Error caught in userController.createUser middleware function",
168+
log: "Error caught in userController.updateUserProfile middleware function",
142169
status: 500,
143170
message: {errMessage: `Error found in user input`, errors: errors}
144171
})
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+
146188
try {
147189
// 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
160193
res.locals.user = updatedUser;
194+
161195
return next();
162196
} catch (err) {
163197
return next({
@@ -185,23 +219,30 @@ const userController: userController = {
185219
// Send errors array back to front end
186220
if (errors.length > 0) {
187221
return next({
188-
log: "Error caught in userController.createUser middleware function",
222+
log: "Error caught in userController.updateUserPassword middleware function",
189223
status: 500,
190224
message: {errMessage: `Error found in user input`, errors: errors}
191225
})
192-
}
226+
};
227+
193228
try {
194229
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+
195242
// 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
205246
res.locals.success = {successMessage: 'Password updated!'};
206247
return next();
207248
} catch (err) {

Diff for: server/models/userModel.ts

-42
This file was deleted.

0 commit comments

Comments
 (0)