From 8c2f737fe0b7ce8bd435290fcee5b2c65823fce4 Mon Sep 17 00:00:00 2001 From: Ruben Verborgh Date: Tue, 26 Jan 2021 10:03:29 +0100 Subject: [PATCH] feat: Set MS-Author-Via header. Closes https://github.com/solid/community-server/issues/539 --- config/presets/ldp/response-writer.json | 9 +++++++++ config/presets/middleware.json | 1 + test/integration/LdpHandlerWithoutAuth.test.ts | 1 + test/integration/Middleware.test.ts | 12 ++++++++++++ 4 files changed, 23 insertions(+) diff --git a/config/presets/ldp/response-writer.json b/config/presets/ldp/response-writer.json index 71bb9f1757..be65859824 100644 --- a/config/presets/ldp/response-writer.json +++ b/config/presets/ldp/response-writer.json @@ -5,6 +5,15 @@ "@id": "urn:solid-server:default:MetadataSerializer", "@type": "SequenceHandler", "SequenceHandler:_handlers": [ + { + "@type": "ConstantMetadataWriter", + "ConstantMetadataWriter:_headers": [ + { + "ConstantMetadataWriter:_headers_key": "MS-Author-Via", + "ConstantMetadataWriter:_headers_value": "SPARQL" + } + ] + }, { "@type": "MappedMetadataWriter", "MappedMetadataWriter:_headerMap": [ diff --git a/config/presets/middleware.json b/config/presets/middleware.json index e1aa24a0eb..e82f72ebf7 100644 --- a/config/presets/middleware.json +++ b/config/presets/middleware.json @@ -19,6 +19,7 @@ "CorsHandler:_options_credentials": true, "CorsHandler:_options_exposedHeaders": [ "Location", + "MS-Author-Via", "Updates-Via" ] }, diff --git a/test/integration/LdpHandlerWithoutAuth.test.ts b/test/integration/LdpHandlerWithoutAuth.test.ts index f8cf0b1096..cb137aa13b 100644 --- a/test/integration/LdpHandlerWithoutAuth.test.ts +++ b/test/integration/LdpHandlerWithoutAuth.test.ts @@ -81,6 +81,7 @@ describe.each(stores)('An LDP handler without auth using %s', (name, { storeUrn, expect(response.statusCode).toBe(200); expect(response._getBuffer().toString()).toContain('TESTFILE0'); expect(response.getHeaders().link).toBe(`<${LDP.Resource}>; rel="type"`); + expect(response.getHeaders()['ms-author-via']).toBe('SPARQL'); // DELETE await resourceHelper.deleteResource(id); diff --git a/test/integration/Middleware.test.ts b/test/integration/Middleware.test.ts index ad73836ad5..19f569b0cc 100644 --- a/test/integration/Middleware.test.ts +++ b/test/integration/Middleware.test.ts @@ -92,6 +92,18 @@ describe('An Express server with middleware', (): void => { expect(exposed.split(/\s*,\s*/u)).toContain('Location'); }); + it('exposes the MS-Author-Via header via CORS.', async(): Promise => { + const res = await request(server).get('/').expect(200); + const exposed = res.header['access-control-expose-headers']; + expect(exposed.split(/\s*,\s*/u)).toContain('MS-Author-Via'); + }); + + it('exposes the Updates-Via header via CORS.', async(): Promise => { + const res = await request(server).get('/').expect(200); + const exposed = res.header['access-control-expose-headers']; + expect(exposed.split(/\s*,\s*/u)).toContain('Updates-Via'); + }); + it('sends incoming requests to the handler.', async(): Promise => { const response = request(server).get('/').set('Host', 'test.com'); expect(response).toBeDefined();