diff --git a/platform/core/src/DICOMWeb/getAuthorizationHeader.js b/platform/core/src/DICOMWeb/getAuthorizationHeader.js index 7d4109896..3acc96ff1 100644 --- a/platform/core/src/DICOMWeb/getAuthorizationHeader.js +++ b/platform/core/src/DICOMWeb/getAuthorizationHeader.js @@ -9,7 +9,7 @@ import user from '../user'; * @export * @param {Object} [server={}] * @param {Object} [server.requestOptions] - * @param {string} [server.requestOptions.auth] + * @param {string|function} [server.requestOptions.auth] * @returns {Object} { Authorization } */ export default function getAuthorizationHeader({ requestOptions } = {}) { @@ -19,8 +19,13 @@ export default function getAuthorizationHeader({ requestOptions } = {}) { const accessToken = user && user.getAccessToken && user.getAccessToken(); if (requestOptions && requestOptions.auth) { - // HTTP Basic Auth (user:password) - headers.Authorization = `Basic ${btoa(requestOptions.auth)}`; + if (typeof requestOptions.auth === 'function') { + // Custom Auth Header + headers.Authorization = requestOptions.auth(requestOptions); + } else { + // HTTP Basic Auth (user:password) + headers.Authorization = `Basic ${btoa(requestOptions.auth)}`; + } } else if (accessToken) { headers.Authorization = `Bearer ${accessToken}`; } diff --git a/platform/core/src/DICOMWeb/getAuthorizationHeader.test.js b/platform/core/src/DICOMWeb/getAuthorizationHeader.test.js index cdf3aa198..158e6549e 100644 --- a/platform/core/src/DICOMWeb/getAuthorizationHeader.test.js +++ b/platform/core/src/DICOMWeb/getAuthorizationHeader.test.js @@ -7,10 +7,7 @@ describe('getAuthorizationHeader', () => { it('should return a HTTP Basic Auth when server contains requestOptions.auth', () => { const validServer = { requestOptions: { - auth: { - user: 'dummy_user', - password: 'dummy_password', - }, + auth: 'dummy_user:dummy_password', }, }; @@ -26,9 +23,7 @@ describe('getAuthorizationHeader', () => { it('should return a HTTP Basic Auth when server contains requestOptions.auth even though there is no password', () => { const validServerWithoutPassword = { requestOptions: { - auth: { - user: 'dummy_user', - }, + auth: 'dummy_user', }, }; @@ -43,22 +38,19 @@ describe('getAuthorizationHeader', () => { expect(authentication).toEqual(expectedAuthorizationHeader); }); - it('should return a HTTP Basic Auth when server contains requestOptions.auth even though there is no username', () => { - const validServerWithoutPassword = { + it('should return a HTTP Basic Auth when server contains requestOptions.auth custom function', () => { + const validServerCustomAuth = { requestOptions: { - auth: { - user: 'dummy_user', - }, + auth: options => `Basic ${options.token}`, + token: 'ZHVtbXlfdXNlcjpkdW1teV9wYXNzd29yZA==', }, }; const expectedAuthorizationHeader = { - Authorization: `Basic ${btoa( - validServerWithoutPassword.requestOptions.auth - )}`, + Authorization: `Basic ${validServerCustomAuth.requestOptions.token}`, }; - const authentication = getAuthorizationHeader(validServerWithoutPassword); + const authentication = getAuthorizationHeader(validServerCustomAuth); expect(authentication).toEqual(expectedAuthorizationHeader); });