Skip to content

Commit eb4b5a2

Browse files
authored
Merge pull request #231 from Dhadhazi/update-dependencies
Updated dependencies
2 parents c75096d + 41b0531 commit eb4b5a2

37 files changed

+18757
-14639
lines changed

set_env.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ export POSTGRES_USERNAME=postgres
44
export POSTGRES_PASSWORD=mypassword
55
export POSTGRES_HOST=postgres.cr9bldgsf1j6.us-east-1.rds.amazonaws.com
66
export POSTGRES_DB=postgres
7-
export AWS_BUCKET=arn:aws:s3:::mybucket1200798
7+
export AWS_BUCKET=mybucket1200798
88
export AWS_REGION=us-east-1
99
export AWS_PROFILE=default
1010
export JWT_SECRET=testing

udagram-api/package-lock.json

Lines changed: 6126 additions & 2651 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

udagram-api/package.json

Lines changed: 33 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -16,35 +16,43 @@
1616
"author": "Gabriel Ruttner",
1717
"license": "ISC",
1818
"dependencies": {
19-
"@types/bcrypt": "^3.0.0",
20-
"@types/jsonwebtoken": "^8.3.2",
21-
"aws-sdk": "^2.429.0",
22-
"bcrypt": "^5.0.1",
23-
"body-parser": "^1.18.3",
19+
"@eslint/config-array": "^0.19.2",
20+
"@eslint/object-schema": "^2.1.6",
21+
"@types/bcrypt": "^5.0.2",
22+
"@types/jsonwebtoken": "^9.0.5",
23+
"@aws-sdk/client-s3": "^3.511.0",
24+
"@aws-sdk/s3-request-presigner": "^3.511.0",
25+
"@aws-sdk/credential-providers": "^3.511.0",
26+
"bcrypt": "^5.1.1",
27+
"body-parser": "^1.20.2",
2428
"cors": "^2.8.5",
2529
"email-validator": "^2.0.4",
26-
"express": "^4.16.4",
27-
"jsonwebtoken": "^8.5.1",
28-
"pg": "^8.0.3",
29-
"reflect-metadata": "^0.1.13",
30-
"sequelize": "^5.21.4",
31-
"sequelize-typescript": "^0.6.9"
30+
"express": "^4.18.3",
31+
"glob": "^11.0.1",
32+
"jsonwebtoken": "^9.0.2",
33+
"lru-cache": "^11.0.2",
34+
"pg": "^8.11.3",
35+
"reflect-metadata": "^0.2.1",
36+
"rimraf": "^6.0.1",
37+
"sequelize": "^6.37.1",
38+
"sequelize-typescript": "^2.1.6",
39+
"superagent": "^10.1.1"
3240
},
3341
"devDependencies": {
34-
"@types/bluebird": "^3.5.26",
35-
"@types/cors": "^2.8.6",
36-
"@types/express": "^4.16.1",
37-
"@types/node": "^11.11.6",
38-
"@types/sequelize": "^4.27.44",
39-
"@types/validator": "^10.9.0",
40-
"@typescript-eslint/eslint-plugin": "^2.19.2",
41-
"@typescript-eslint/parser": "^2.19.2",
42-
"chai": "^4.2.0",
43-
"chai-http": "^4.2.1",
44-
"eslint": "^6.8.0",
42+
"@types/bluebird": "^3.5.42",
43+
"@types/cors": "^2.8.17",
44+
"@types/express": "^4.17.21",
45+
"@types/node": "^20.11.24",
46+
"@types/sequelize": "^4.28.20",
47+
"@types/validator": "^13.11.9",
48+
"@typescript-eslint/eslint-plugin": "^7.1.1",
49+
"@typescript-eslint/parser": "^7.1.1",
50+
"chai": "^5.1.0",
51+
"chai-http": "^4.4.0",
52+
"eslint": "^8.57.0",
4553
"eslint-config-google": "^0.14.0",
46-
"mocha": "^6.1.4",
47-
"ts-node-dev": "^1.0.0-pre.32",
48-
"typescript": "^3.3.4000"
54+
"mocha": "^10.3.0",
55+
"ts-node-dev": "^2.0.0",
56+
"typescript": "^5.3.3"
4957
}
5058
}

udagram-api/src/aws.ts

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,42 @@
1-
import AWS = require('aws-sdk');
2-
import {config} from './config/config';
3-
1+
import { S3Client } from "@aws-sdk/client-s3";
2+
import { fromIni } from "@aws-sdk/credential-providers";
3+
import { getSignedUrl } from "@aws-sdk/s3-request-presigner";
4+
import { GetObjectCommand, PutObjectCommand } from "@aws-sdk/client-s3";
5+
import { config } from './config/config';
46

57
// Configure AWS
6-
const credentials = new AWS.SharedIniFileCredentials({profile: config.aws_profile});
7-
AWS.config.credentials = credentials;
8+
const credentials = fromIni({ profile: config.aws_profile });
89

9-
export const s3 = new AWS.S3({
10-
signatureVersion: 'v4',
10+
// Create S3 client
11+
export const s3Client = new S3Client({
1112
region: config.aws_region,
12-
params: {Bucket: config.aws_media_bucket},
13+
credentials: credentials,
1314
});
1415

1516
// Generates an AWS signed URL for retrieving objects
16-
export function getGetSignedUrl( key: string ): string {
17-
const signedUrlExpireSeconds = 60 * 5;
18-
19-
return s3.getSignedUrl('getObject', {
17+
export async function getGetSignedUrl(key: string): Promise<string> {
18+
const command = new GetObjectCommand({
2019
Bucket: config.aws_media_bucket,
21-
Key: key,
22-
Expires: signedUrlExpireSeconds,
20+
Key: key
2321
});
22+
23+
const signedUrl = await getSignedUrl(s3Client, command, {
24+
expiresIn: 60 * 5 // 5 minutes
25+
});
26+
27+
return signedUrl;
2428
}
2529

2630
// Generates an AWS signed URL for uploading objects
27-
export function getPutSignedUrl( key: string ): string {
28-
const signedUrlExpireSeconds = 60 * 5;
29-
30-
return s3.getSignedUrl('putObject', {
31+
export async function getPutSignedUrl(key: string): Promise<string> {
32+
const command = new PutObjectCommand({
3133
Bucket: config.aws_media_bucket,
32-
Key: key,
33-
Expires: signedUrlExpireSeconds,
34+
Key: key
3435
});
35-
}
36+
37+
const signedUrl = await getSignedUrl(s3Client, command, {
38+
expiresIn: 60 * 5 // 5 minutes
39+
});
40+
41+
return signedUrl;
42+
}

udagram-api/src/controllers/v0/feed/routes/feed.router.ts

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import * as c from '../../../../config/config';
88
const router: Router = Router();
99

1010
export function requireAuth(req: Request, res: Response, next: NextFunction) {
11+
1112
if (!req.headers || !req.headers.authorization) {
1213
return res.status(401).send({message: 'No authorization headers.'});
1314
}
@@ -29,12 +30,14 @@ export function requireAuth(req: Request, res: Response, next: NextFunction) {
2930
// Get all feed items
3031
router.get('/', async (req: Request, res: Response) => {
3132
const items = await FeedItem.findAndCountAll({order: [['id', 'DESC']]});
32-
items.rows.map((item) => {
33+
// Map items to include signed URLs
34+
const itemsWithUrls = await Promise.all(items.rows.map(async (item) => {
3335
if (item.url) {
34-
item.url = AWS.getGetSignedUrl(item.url);
36+
item.url = await AWS.getGetSignedUrl(item.url);
3537
}
36-
});
37-
res.send(items);
38+
return item;
39+
}));
40+
res.send({count: items.count, rows: itemsWithUrls});
3841
});
3942

4043
// Get a feed resource
@@ -47,20 +50,19 @@ router.get('/:id',
4750

4851
// Get a signed url to put a new item in the bucket
4952
router.get('/signed-url/:fileName',
50-
requireAuth,
51-
async (req: Request, res: Response) => {
52-
const {fileName} = req.params;
53-
const url = AWS.getPutSignedUrl(fileName);
54-
res.status(201).send({url: url});
55-
});
53+
requireAuth,
54+
async (req: Request, res: Response) => {
55+
const {fileName} = req.params;
56+
const url = await AWS.getPutSignedUrl(fileName);
57+
res.status(201).send({url: url});
58+
});
5659

5760
// Create feed with metadata
5861
router.post('/',
5962
requireAuth,
6063
async (req: Request, res: Response) => {
6164
const caption = req.body.caption;
6265
const fileName = req.body.url; // same as S3 key name
63-
6466
if (!caption) {
6567
return res.status(400).send({message: 'Caption is required or malformed.'});
6668
}
@@ -75,8 +77,7 @@ router.post('/',
7577
});
7678

7779
const savedItem = await item.save();
78-
79-
savedItem.url = AWS.getGetSignedUrl(savedItem.url);
80+
savedItem.url = await AWS.getGetSignedUrl(savedItem.url);
8081
res.status(201).send(savedItem);
8182
});
8283

udagram-api/src/controllers/v0/users/routes/auth.router.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ router.post('/login', async (req: Request, res: Response) => {
7676
}
7777

7878
const jwt = generateJWT(user);
79+
7980
res.status(200).send({auth: true, token: jwt, user: user.short()});
8081
});
8182

udagram-api/src/sequelize.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,11 @@ export const sequelize = new Sequelize({
99
'host': config.host,
1010

1111
'dialect': config.dialect,
12+
dialectOptions: {
13+
ssl: {
14+
require: true,
15+
rejectUnauthorized: false
16+
}
17+
},
1218
'storage': ':memory:',
1319
});

0 commit comments

Comments
 (0)