Skip to content

Commit 98440df

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

File tree

13 files changed

+170
-12
lines changed

13 files changed

+170
-12
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: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,17 +71,21 @@ 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
75+
.asSuperUser()
76+
.from(bucketName)
77+
.findObject(objectName, 'id, version, metadata')
7578
} else {
7679
// request is authenticated use RLS
77-
obj = await request.storage.from(bucketName).findObject(objectName, 'id, version')
80+
obj = await request.storage.from(bucketName).findObject(objectName, 'id, version, metadata')
7881
}
7982

8083
return request.storage.renderer('asset').render(request, response, {
8184
bucket: storageS3Bucket,
8285
key: s3Key,
8386
version: obj.version,
8487
download,
88+
xRobotsTag: obj.metadata?.['xRobotsTag'] as string | undefined,
8589
signal: request.signals.disconnect.signal,
8690
})
8791
}
@@ -95,6 +99,7 @@ export default async function routes(fastify: FastifyInstance) {
9599
// @todo add success response schema here
96100
schema: {
97101
params: getObjectParamsSchema,
102+
querystring: getObjectQuerySchema,
98103
headers: { $ref: 'authSchema#' },
99104
summary,
100105
response: { '4xx': { $ref: 'errorSchema#', description: 'Error response' } },

src/http/routes/object/getPublicObject.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ export default async function routes(fastify: FastifyInstance) {
3838
exposeHeadRoute: false,
3939
schema: {
4040
params: getPublicObjectParamsSchema,
41+
querystring: getObjectQuerySchema,
4142
summary,
4243
response: { '4xx': { $ref: 'errorSchema#', description: 'Error response' } },
4344
tags: ['object'],
@@ -55,7 +56,10 @@ export default async function routes(fastify: FastifyInstance) {
5556
request.storage.asSuperUser().findBucket(bucketName, 'id,public', {
5657
isPublic: true,
5758
}),
58-
request.storage.asSuperUser().from(bucketName).findObject(objectName, 'id,version'),
59+
request.storage
60+
.asSuperUser()
61+
.from(bucketName)
62+
.findObject(objectName, 'id,version,metadata'),
5963
])
6064

6165
// send the object from s3
@@ -70,6 +74,7 @@ export default async function routes(fastify: FastifyInstance) {
7074
key: s3Key,
7175
version: obj.version,
7276
download,
77+
xRobotsTag: obj.metadata?.['xRobotsTag'] as string | undefined,
7378
signal: request.signals.disconnect.signal,
7479
})
7580
}

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: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,9 @@ 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
55+
.from(bucketName)
56+
.findObject(objectName, 'id,version,metadata')
5557

5658
const s3Key = request.storage.location.getKeyLocation({
5759
tenantId: request.tenantId,
@@ -73,6 +75,7 @@ export default async function routes(fastify: FastifyInstance) {
7375
key: s3Key,
7476
version: obj.version,
7577
download,
78+
xRobotsTag: obj.metadata?.['xRobotsTag'] as string | undefined,
7679
signal: request.signals.disconnect.signal,
7780
})
7881
}

src/http/routes/render/renderPublicImage.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,10 @@ 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
59+
.asSuperUser()
60+
.from(bucketName)
61+
.findObject(objectName, 'id,version,metadata'),
5962
])
6063

6164
const s3Key = `${request.tenantId}/${bucketName}/${objectName}`
@@ -74,6 +77,7 @@ export default async function routes(fastify: FastifyInstance) {
7477
key: s3Key,
7578
version: obj.version,
7679
download,
80+
xRobotsTag: obj.metadata?.['xRobotsTag'] as string | undefined,
7781
signal: request.signals.disconnect.signal,
7882
})
7983
}

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)