Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion lib/s3routes/routesUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,12 @@ const jsutil = require('../jsutil');

const ALLOW_INVALID_META_HEADERS = !!process.env.ALLOW_INVALID_META_HEADERS;

let serverHeaderValue = 'S3 Server';

export function setServerHeader(value: string) {
serverHeaderValue = value;
}

function storeServerAccessLogFields(
res: http.ServerResponse,
endTurnAroundTime: bigint,
Expand Down Expand Up @@ -91,7 +97,7 @@ export function setCommonResponseHeaders(
}
});
}
response.setHeader('server', 'S3 Server');
response.setHeader('server', serverHeaderValue);
// to be expanded in further implementation of logging of requests
response.setHeader('x-amz-id-2', log.getSerializedUids());
response.setHeader('x-amz-request-id', log.getSerializedUids());
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"engines": {
"node": ">=20"
},
"version": "8.2.49",
"version": "8.2.50",
"description": "Common utilities for the S3 project components",
"main": "build/index.js",
"repository": {
Expand Down
52 changes: 52 additions & 0 deletions tests/unit/s3routes/routesUtils/setServerHeader.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
const sinon = require('sinon');
const assert = require('assert');
const werelogs = require('werelogs');
const {
setServerHeader,
okHeaderResponse,
} = require('../../../../lib/s3routes/routesUtils');

const logger = new werelogs.Logger('test:setServerHeader', 'debug', 'debug');
const log = logger.newRequestLogger();

describe('setServerHeader', () => {
let mockResponse;
let sandbox;

beforeEach(() => {
sandbox = sinon.createSandbox();

mockResponse = {
headersSent: false,
setHeader: sandbox.stub(),
writeHead: sandbox.stub(),
end: sandbox.stub().callsFake(callback => callback && callback()),
statusCode: 200,
};

sandbox.stub(log, 'debug');
sandbox.stub(log, 'end').returns({
info: sandbox.stub(),
});
});

afterEach(() => {
// Reset to default after each test
setServerHeader('S3 Server');
sandbox.restore();
});

it('should use the default value "S3 Server" when not configured', () => {
okHeaderResponse({}, mockResponse, 200, log);

assert(mockResponse.setHeader.calledWith('server', 'S3 Server'));
});

it('should use a custom value when configured via setServerHeader', () => {
setServerHeader('ScalityS3');

okHeaderResponse({}, mockResponse, 200, log);

assert(mockResponse.setHeader.calledWith('server', 'ScalityS3'));
});
});
Loading