Skip to content

Commit f8ae55e

Browse files
committed
review: significant refactor to improve bucket caching and region determination
1 parent dad9234 commit f8ae55e

File tree

11 files changed

+281
-300
lines changed

11 files changed

+281
-300
lines changed

src/lambdas/api/app.js

Lines changed: 20 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import path from 'path'
77
import { fileURLToPath } from 'url'
88
import database from '../../lib/database.js'
99
import api from '../../lib/api.js'
10-
import { NotFoundError, ValidationError, ForbiddenError } from '../../lib/errors.js'
10+
import { NotFoundError, ValidationError } from '../../lib/errors.js'
1111
import { readFile } from '../../lib/fs.js'
1212
import addEndpoint from './middleware/add-endpoint.js'
1313
import logger from '../../lib/logger.js'
@@ -25,8 +25,7 @@ export const createApp = async () => {
2525

2626
const app = express()
2727

28-
app.locals['assetProxy'] = new AssetProxy()
29-
await app.locals['assetProxy'].initialize()
28+
app.locals['assetProxy'] = await AssetProxy.create()
3029

3130
if (process.env['REQUEST_LOGGING_ENABLED'] !== 'false') {
3231
app.use(
@@ -120,7 +119,7 @@ export const createApp = async () => {
120119
const result = await api.searchItems(
121120
database, 'GET', null, req.endpoint, req.query, req.headers
122121
)
123-
req.app.locals['assetProxy'].addProxiedAssets(result.features, req.endpoint)
122+
req.app.locals['assetProxy'].updateAssetHrefs(result.features, req.endpoint)
124123
res.type('application/geo+json')
125124
res.json(result)
126125
} catch (error) {
@@ -137,7 +136,7 @@ export const createApp = async () => {
137136
const result = await api.searchItems(
138137
database, 'POST', null, req.endpoint, req.body, req.headers
139138
)
140-
req.app.locals['assetProxy'].addProxiedAssets(result.features, req.endpoint)
139+
req.app.locals['assetProxy'].updateAssetHrefs(result.features, req.endpoint)
141140
res.type('application/geo+json')
142141
res.json(result)
143142
} catch (error) {
@@ -174,7 +173,7 @@ export const createApp = async () => {
174173
const response = await api.getCollections(database, req.endpoint, req.query, req.headers)
175174
if (response instanceof Error) next(createError(500, response.message))
176175
else {
177-
req.app.locals['assetProxy'].addProxiedAssets(response.collections, req.endpoint)
176+
req.app.locals['assetProxy'].updateAssetHrefs(response.collections, req.endpoint)
178177
res.json(response)
179178
}
180179
} catch (error) {
@@ -211,7 +210,7 @@ export const createApp = async () => {
211210
)
212211
if (response instanceof Error) next(createError(404))
213212
else {
214-
req.app.locals['assetProxy'].addProxiedAssets([response], req.endpoint)
213+
req.app.locals['assetProxy'].updateAssetHrefs([response], req.endpoint)
215214
res.json(response)
216215
}
217216
} catch (error) {
@@ -294,7 +293,7 @@ export const createApp = async () => {
294293
const result = await api.searchItems(
295294
database, 'GET', collectionId, req.endpoint, req.query, req.headers
296295
)
297-
req.app.locals['assetProxy'].addProxiedAssets(result.features, req.endpoint)
296+
req.app.locals['assetProxy'].updateAssetHrefs(result.features, req.endpoint)
298297
res.type('application/geo+json')
299298
res.json(result)
300299
} catch (error) {
@@ -358,7 +357,7 @@ export const createApp = async () => {
358357
} else if (response instanceof Error) {
359358
next(createError(500))
360359
} else {
361-
req.app.locals['assetProxy'].addProxiedAssets([response], req.endpoint)
360+
req.app.locals['assetProxy'].updateAssetHrefs([response], req.endpoint)
362361
res.type('application/geo+json')
363362
res.json(response)
364363
}
@@ -476,6 +475,11 @@ export const createApp = async () => {
476475

477476
app.get('/collections/:collectionId/items/:itemId/assets/:assetKey',
478477
async (req, res, next) => {
478+
if (!req.app.locals['assetProxy'].isEnabled) {
479+
next(createError(404))
480+
return
481+
}
482+
479483
try {
480484
const item = await api.getItem(
481485
database,
@@ -488,21 +492,13 @@ export const createApp = async () => {
488492

489493
if (item instanceof NotFoundError) {
490494
next(createError(404))
491-
} else if (item instanceof Error) {
492-
next(createError(500))
493495
} else {
494496
const presignedUrl = await req.app.locals['assetProxy'].getAssetPresignedUrl(
495497
item,
496498
req.params.assetKey
497499
)
498-
if (presignedUrl instanceof ValidationError) {
499-
next(createError(400))
500-
} else if (presignedUrl instanceof ForbiddenError) {
501-
next(createError(403))
502-
} else if (presignedUrl instanceof NotFoundError) {
500+
if (!presignedUrl) {
503501
next(createError(404))
504-
} else if (presignedUrl instanceof Error) {
505-
next(createError(500))
506502
} else {
507503
res.redirect(presignedUrl)
508504
}
@@ -513,6 +509,11 @@ export const createApp = async () => {
513509
})
514510

515511
app.get('/collections/:collectionId/assets/:assetKey', async (req, res, next) => {
512+
if (!req.app.locals['assetProxy'].isEnabled) {
513+
next(createError(404))
514+
return
515+
}
516+
516517
try {
517518
const collection = await api.getCollection(
518519
database,
@@ -524,21 +525,13 @@ export const createApp = async () => {
524525

525526
if (collection instanceof NotFoundError) {
526527
next(createError(404))
527-
} else if (collection instanceof Error) {
528-
next(createError(500))
529528
} else {
530529
const presignedUrl = await req.app.locals['assetProxy'].getAssetPresignedUrl(
531530
collection,
532531
req.params.assetKey
533532
)
534-
if (presignedUrl instanceof ValidationError) {
535-
next(createError(400))
536-
} else if (presignedUrl instanceof ForbiddenError) {
537-
next(createError(403))
538-
} else if (presignedUrl instanceof NotFoundError) {
533+
if (!presignedUrl) {
539534
next(createError(404))
540-
} else if (presignedUrl instanceof Error) {
541-
next(createError(500))
542535
} else {
543536
res.redirect(presignedUrl)
544537
}

src/lambdas/ingest/index.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,10 @@ import getObjectJson from '../../lib/s3-utils.js'
66
import logger from '../../lib/logger.js'
77
import { AssetProxy } from '../../lib/asset-proxy.js'
88

9-
let assetProxy = new AssetProxy()
10-
await assetProxy.initialize()
9+
let assetProxy = await AssetProxy.create()
1110

1211
export const resetAssetProxy = async () => {
13-
assetProxy = new AssetProxy()
14-
await assetProxy.initialize()
12+
assetProxy = await AssetProxy.create()
1513
}
1614

1715
const isSqsEvent = (event) => 'Records' in event

0 commit comments

Comments
 (0)