Skip to content

Commit 5970c63

Browse files
committed
add ability to override x-robots-tag header
1 parent 9f52aec commit 5970c63

File tree

13 files changed

+153
-8
lines changed

13 files changed

+153
-8
lines changed

src/http/routes/object/createObject.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ interface createObjectRequestInterface extends RequestGenericInterface {
3232
'content-type': string
3333
'cache-control'?: string
3434
'x-upsert'?: string
35+
'x-robots-tag'?: string
3536
}
3637
}
3738

src/http/routes/object/getObject.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,17 +71,18 @@ async function requestHandler(
7171

7272
if (bucket.public) {
7373
// request is authenticated but we still use the superUser as we don't need to check RLS
74-
obj = await request.storage.asSuperUser().from(bucketName).findObject(objectName, 'id, version')
74+
obj = await request.storage.asSuperUser().from(bucketName).findObject(objectName, 'id, version, metadata')
7575
} else {
7676
// request is authenticated use RLS
77-
obj = await request.storage.from(bucketName).findObject(objectName, 'id, version')
77+
obj = await request.storage.from(bucketName).findObject(objectName, 'id, version, metadata')
7878
}
7979

8080
return request.storage.renderer('asset').render(request, response, {
8181
bucket: storageS3Bucket,
8282
key: s3Key,
8383
version: obj.version,
8484
download,
85+
xRobotsTag: obj.metadata?.['xRobotsTag'] as string | undefined,
8586
signal: request.signals.disconnect.signal,
8687
})
8788
}

src/http/routes/object/getPublicObject.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ export default async function routes(fastify: FastifyInstance) {
5555
request.storage.asSuperUser().findBucket(bucketName, 'id,public', {
5656
isPublic: true,
5757
}),
58-
request.storage.asSuperUser().from(bucketName).findObject(objectName, 'id,version'),
58+
request.storage.asSuperUser().from(bucketName).findObject(objectName, 'id,version,metadata'),
5959
])
6060

6161
// send the object from s3
@@ -70,6 +70,7 @@ export default async function routes(fastify: FastifyInstance) {
7070
key: s3Key,
7171
version: obj.version,
7272
download,
73+
xRobotsTag: obj.metadata?.['xRobotsTag'] as string | undefined,
7374
signal: request.signals.disconnect.signal,
7475
})
7576
}

src/http/routes/object/getSignedObject.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,14 +83,15 @@ export default async function routes(fastify: FastifyInstance) {
8383
const obj = await request.storage
8484
.asSuperUser()
8585
.from(bucketName)
86-
.findObject(objParts.join('/'), 'id,version')
86+
.findObject(objParts.join('/'), 'id,version,metadata')
8787

8888
return request.storage.renderer('asset').render(request, response, {
8989
bucket: storageS3Bucket,
9090
key: s3Key,
9191
version: obj.version,
9292
download,
9393
expires: new Date(exp * 1000).toUTCString(),
94+
xRobotsTag: obj.metadata?.['xRobotsTag'] as string | undefined,
9495
signal: request.signals.disconnect.signal,
9596
})
9697
}

src/http/routes/object/updateObject.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ interface updateObjectRequestInterface extends RequestGenericInterface {
2929
'content-type': string
3030
'cache-control'?: string
3131
'x-upsert'?: string
32+
'x-robots-tag'?: string
3233
}
3334
}
3435

src/http/routes/render/renderAuthenticatedImage.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ export default async function routes(fastify: FastifyInstance) {
5151
const { bucketName } = request.params
5252
const objectName = request.params['*']
5353

54-
const obj = await request.storage.from(bucketName).findObject(objectName, 'id,version')
54+
const obj = await request.storage.from(bucketName).findObject(objectName, 'id,version,metadata')
5555

5656
const s3Key = request.storage.location.getKeyLocation({
5757
tenantId: request.tenantId,
@@ -73,6 +73,7 @@ export default async function routes(fastify: FastifyInstance) {
7373
key: s3Key,
7474
version: obj.version,
7575
download,
76+
xRobotsTag: obj.metadata?.['xRobotsTag'] as string | undefined,
7677
signal: request.signals.disconnect.signal,
7778
})
7879
}

src/http/routes/render/renderPublicImage.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ export default async function routes(fastify: FastifyInstance) {
5555
request.storage.asSuperUser().findBucket(bucketName, 'id,public', {
5656
isPublic: true,
5757
}),
58-
request.storage.asSuperUser().from(bucketName).findObject(objectName, 'id,version'),
58+
request.storage.asSuperUser().from(bucketName).findObject(objectName, 'id,version,metadata'),
5959
])
6060

6161
const s3Key = `${request.tenantId}/${bucketName}/${objectName}`
@@ -74,6 +74,7 @@ export default async function routes(fastify: FastifyInstance) {
7474
key: s3Key,
7575
version: obj.version,
7676
download,
77+
xRobotsTag: obj.metadata?.['xRobotsTag'] as string | undefined,
7778
signal: request.signals.disconnect.signal,
7879
})
7980
}

src/http/routes/render/renderSignedImage.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ export default async function routes(fastify: FastifyInstance) {
8383
const obj = await request.storage
8484
.asSuperUser()
8585
.from(bucketName)
86-
.findObject(objParts.join('/'), 'id,version')
86+
.findObject(objParts.join('/'), 'id,version,metadata')
8787

8888
const renderer = request.storage.renderer('image') as ImageRenderer
8989

@@ -102,6 +102,7 @@ export default async function routes(fastify: FastifyInstance) {
102102
version: obj.version,
103103
download,
104104
expires: new Date(exp * 1000).toUTCString(),
105+
xRobotsTag: obj.metadata?.['xRobotsTag'] as string | undefined,
105106
signal: request.signals.disconnect.signal,
106107
})
107108
}

src/storage/backend/adapter.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ export type ObjectMetadata = {
3131
eTag: string
3232
contentRange?: string
3333
httpStatusCode?: number
34+
xRobotsTag?: string
3435
}
3536

3637
export type UploadPart = {

src/storage/renderer/renderer.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ export interface RenderOptions {
1010
version: string | undefined
1111
download?: string
1212
expires?: string
13+
xRobotsTag?: string
1314
object?: Obj
1415
signal?: AbortSignal
1516
}
@@ -80,7 +81,7 @@ export abstract class Renderer {
8081
.header('ETag', data.metadata.eTag)
8182
.header('Content-Length', data.metadata.contentLength)
8283
.header('Last-Modified', data.metadata.lastModified?.toUTCString())
83-
.header('X-Robots-Tag', 'none')
84+
.header('X-Robots-Tag', options.xRobotsTag || 'none')
8485

8586
if (options.expires) {
8687
response.header('Expires', options.expires)

0 commit comments

Comments
 (0)