@@ -7,7 +7,7 @@ import path from 'path'
77import { fileURLToPath } from 'url'
88import database from '../../lib/database.js'
99import api from '../../lib/api.js'
10- import { NotFoundError , ValidationError , ForbiddenError } from '../../lib/errors.js'
10+ import { NotFoundError , ValidationError } from '../../lib/errors.js'
1111import { readFile } from '../../lib/fs.js'
1212import addEndpoint from './middleware/add-endpoint.js'
1313import 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 }
0 commit comments