Skip to content

Commit 51e5b76

Browse files
committed
Merge branch 'feature/ARSN-568-configurable-server-header' into w/8.3/feature/ARSN-568-configurable-server-header
2 parents e7d02f5 + 2b0a802 commit 51e5b76

3 files changed

Lines changed: 60 additions & 2 deletions

File tree

lib/s3routes/routesUtils.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,12 @@ const jsutil = require('../jsutil');
1515

1616
const ALLOW_INVALID_META_HEADERS = !!process.env.ALLOW_INVALID_META_HEADERS;
1717

18+
let serverHeaderValue = 'S3 Server';
19+
20+
export function setServerHeader(value: string) {
21+
serverHeaderValue = value;
22+
}
23+
1824
function storeServerAccessLogFields(
1925
res: http.ServerResponse,
2026
endTurnAroundTime: bigint,
@@ -92,7 +98,7 @@ export function setCommonResponseHeaders(
9298
}
9399
});
94100
}
95-
response.setHeader('server', 'S3 Server');
101+
response.setHeader('server', serverHeaderValue);
96102
// to be expanded in further implementation of logging of requests
97103
response.setHeader('x-amz-id-2', log.getSerializedUids());
98104
response.setHeader('x-amz-request-id', log.getSerializedUids());

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"engines": {
44
"node": ">=20"
55
},
6-
"version": "8.3.8",
6+
"version": "8.3.9",
77
"description": "Common utilities for the S3 project components",
88
"main": "build/index.js",
99
"repository": {
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
const sinon = require('sinon');
2+
const assert = require('assert');
3+
const werelogs = require('werelogs');
4+
const {
5+
setServerHeader,
6+
okHeaderResponse,
7+
} = require('../../../../lib/s3routes/routesUtils');
8+
9+
const logger = new werelogs.Logger('test:setServerHeader', 'debug', 'debug');
10+
const log = logger.newRequestLogger();
11+
12+
describe('setServerHeader', () => {
13+
let mockResponse;
14+
let sandbox;
15+
16+
beforeEach(() => {
17+
sandbox = sinon.createSandbox();
18+
19+
mockResponse = {
20+
headersSent: false,
21+
setHeader: sandbox.stub(),
22+
writeHead: sandbox.stub(),
23+
end: sandbox.stub().callsFake(callback => callback && callback()),
24+
statusCode: 200,
25+
};
26+
27+
sandbox.stub(log, 'debug');
28+
sandbox.stub(log, 'end').returns({
29+
info: sandbox.stub(),
30+
});
31+
});
32+
33+
afterEach(() => {
34+
// Reset to default after each test
35+
setServerHeader('S3 Server');
36+
sandbox.restore();
37+
});
38+
39+
it('should use the default value "S3 Server" when not configured', () => {
40+
okHeaderResponse({}, mockResponse, 200, log);
41+
42+
assert(mockResponse.setHeader.calledWith('server', 'S3 Server'));
43+
});
44+
45+
it('should use a custom value when configured via setServerHeader', () => {
46+
setServerHeader('ScalityS3');
47+
48+
okHeaderResponse({}, mockResponse, 200, log);
49+
50+
assert(mockResponse.setHeader.calledWith('server', 'ScalityS3'));
51+
});
52+
});

0 commit comments

Comments
 (0)