Skip to content

Commit b9ccc98

Browse files
[ERSSUP-80439]-[JW/AP/DW]-[Finalise OAS and sandbox of R4 download endpoint]-[FV]
1 parent 9df48a1 commit b9ccc98

File tree

63 files changed

+1720
-260
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+1720
-260
lines changed

grep

Lines changed: 1127 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<AssignMessage async="false" continueOnError="false" enabled="true" name="AssignMessage.AddBaseUrlHeader">
2+
<Set>
3+
<Headers>
4+
<Header name="x-ers-sandbox-baseurl">https://{request.header.Host}/{proxy.basepath}</Header>
5+
</Headers>
6+
</Set>
7+
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
8+
<AssignTo createNew="false"/>
9+
</AssignMessage>

proxies/sandbox/apiproxy/targets/sandbox.xml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,12 @@
77
<Response/>
88
</PostFlow>
99
<PreFlow name="PreFlow">
10-
<Request/>
11-
<Response></Response>
10+
<Request>
11+
<Step>
12+
<Name>AssignMessage.AddBaseUrlHeader</Name>
13+
</Step>
14+
</Request>
15+
<Response/>
1216
</PreFlow>
1317
<HTTPTargetConnection>{{ HOSTED_TARGET_CONNECTION }}</HTTPTargetConnection>
1418
</TargetEndpoint>

sandbox/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
FROM node:18.3.0-alpine3.14
22

3-
ENV npm_config_cache /home/node/app/.npm
3+
ENV npm_config_cache=/home/node/app/.npm
44

55
WORKDIR /app
66

sandbox/src/app.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@ const addCommonHeaders = function (request, response) {
1010
response.headers = {}
1111
}
1212

13-
if (request.headers["x-correlation-id"]) {
14-
response.headers["X-Correlation-ID"] = request.headers["x-correlation-id"]
13+
if (!request.path.includes("ObjectStore")) {
14+
if (request.headers["x-correlation-id"]) {
15+
response.headers["X-Correlation-ID"] = request.headers["x-correlation-id"]
16+
}
17+
response.headers["X-Request-ID"] = '58621d65-d5ad-4c3a-959f-0438e355990e-1'
1518
}
16-
response.headers["X-Request-ID"] = '58621d65-d5ad-4c3a-959f-0438e355990e-1'
1719
}
1820

1921
const preResponse = function (request, h) {
23.1 KB
Binary file not shown.
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/**
2+
* @file validationUtil.js
3+
* @description Provides utility functions.
4+
*/
5+
6+
function isValidUuid(string) {
7+
return /^[0-9A-F]{8}-[0-9A-F]{4}-[4][0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i.test(string);
8+
}
9+
10+
function hasLegacyPrefix(string) {
11+
return string.startsWith('att-');
12+
}
13+
14+
module.exports = {
15+
isValidUuid,
16+
hasLegacyPrefix,
17+
};

sandbox/src/routes/index.js

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,13 @@ const retrieveOboUsers = require('./r4/retrieveOboUsers')
4242
const retrieveHealthcareService = require('./r4/retrieveHealthcareService')
4343
const searchForHealthcareServices = require('./r4/searchForHealthcareServices')
4444
const searchServiceRequest = require('./r4/searchServiceRequest')
45-
const retrieveBinary = require('./r4/retrieveBinary')
46-
const retrieveBinaryHelper = require('./r4/retrieveBinaryHelper')
45+
const retrieveAttachmentR4 = require('./r4/retrieveAttachment')
46+
47+
/**
48+
* Services
49+
*/
50+
const objectStore = require('../services/objectStore')
51+
4752

4853
const routes = [].concat(
4954
getStatus,
@@ -83,8 +88,8 @@ const routes = [].concat(
8388
retrieveAdviceAndGuidanceOverviewPdf,
8489
searchServiceRequest,
8590
createAdviceAndGuidance,
86-
retrieveBinary,
87-
retrieveBinaryHelper
91+
retrieveAttachmentR4,
92+
objectStore
8893
)
8994

9095
module.exports = routes
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
const businessFunctionValidator = require('../../services/businessFunctionValidator')
2+
const validationUtil = require('../common/validationUtil')
3+
4+
module.exports = [
5+
/**
6+
* Sandbox implementation for Retrieve attachment A042 (R4) endpoint
7+
*/
8+
{
9+
method: 'GET',
10+
path: '/FHIR/R4/Binary/{binaryId}',
11+
handler: (request, h) => {
12+
13+
const allowedBusinessFunctions = ["REFERRING_CLINICIAN", "REFERRING_CLINICIAN_ADMIN", "SERVICE_PROVIDER_CLINICIAN", "SERVICE_PROVIDER_CLINICIAN_ADMIN"];
14+
15+
const validationResult = businessFunctionValidator.validateBusinessFunction(request, h, allowedBusinessFunctions);
16+
if (validationResult) {
17+
return validationResult;
18+
}
19+
20+
const binaryId = request.params.binaryId;
21+
const objectStore = "/ObjectStore/d497bbe3-f88b-45f1-b3d4-9c563e4c0f5f";
22+
const location = request.headers['x-ers-sandbox-baseurl'] + objectStore;
23+
24+
if ((validationUtil.hasLegacyPrefix(binaryId) || validationUtil.isValidUuid(binaryId)) && request.method === 'get') {
25+
const response = h.response().code(307);
26+
response.headers["Location"] = location;
27+
return response;
28+
} else {
29+
return h.file('r4/R4-SandboxErrorOutcome.json').code(400);
30+
}
31+
}
32+
}
33+
]

sandbox/src/routes/r4/retrieveBinary.js

Lines changed: 0 additions & 34 deletions
This file was deleted.

0 commit comments

Comments
 (0)