From d60fb2dd17b8e91ac68bea23c6de28beac61435f Mon Sep 17 00:00:00 2001 From: Raghuram Grandhi Date: Thu, 20 Aug 2026 15:19:59 +0100 Subject: [PATCH 1/6] Adding changes related to validate NHS number. --- .../policies/AM-Enable-DelegatedAccess.xml | 9 +++++ .../FlowCallout.CompositeTokenCheckOptIN.xml | 7 ++++ .../policies/JavaScript.ValidateNHSNumber.xml | 5 +++ proxies/live/apiproxy/proxies/default.xml | 10 +++++ .../resources/jsc/ValidateNHSNumber.js | 40 +++++++++++++++++++ 5 files changed, 71 insertions(+) create mode 100644 proxies/live/apiproxy/policies/AM-Enable-DelegatedAccess.xml create mode 100644 proxies/live/apiproxy/policies/FlowCallout.CompositeTokenCheckOptIN.xml create mode 100644 proxies/live/apiproxy/policies/JavaScript.ValidateNHSNumber.xml create mode 100644 proxies/live/apiproxy/resources/jsc/ValidateNHSNumber.js diff --git a/proxies/live/apiproxy/policies/AM-Enable-DelegatedAccess.xml b/proxies/live/apiproxy/policies/AM-Enable-DelegatedAccess.xml new file mode 100644 index 0000000..b9863b0 --- /dev/null +++ b/proxies/live/apiproxy/policies/AM-Enable-DelegatedAccess.xml @@ -0,0 +1,9 @@ + + + AM-Enable-DelegatedAccess + + delegatedaccess.enabled + true + + true + \ No newline at end of file diff --git a/proxies/live/apiproxy/policies/FlowCallout.CompositeTokenCheckOptIN.xml b/proxies/live/apiproxy/policies/FlowCallout.CompositeTokenCheckOptIN.xml new file mode 100644 index 0000000..7e04d6d --- /dev/null +++ b/proxies/live/apiproxy/policies/FlowCallout.CompositeTokenCheckOptIN.xml @@ -0,0 +1,7 @@ + + + FlowCallout.CompositeTokenCheckOptIN + + + CompositeTokenCheckOptIN + \ No newline at end of file diff --git a/proxies/live/apiproxy/policies/JavaScript.ValidateNHSNumber.xml b/proxies/live/apiproxy/policies/JavaScript.ValidateNHSNumber.xml new file mode 100644 index 0000000..c9ae9d0 --- /dev/null +++ b/proxies/live/apiproxy/policies/JavaScript.ValidateNHSNumber.xml @@ -0,0 +1,5 @@ + + + JavaScript.ValidateNHSNumber + jsc://ValidateNHSNumber.js + \ No newline at end of file diff --git a/proxies/live/apiproxy/proxies/default.xml b/proxies/live/apiproxy/proxies/default.xml index 6d8078a..3ea4ffc 100644 --- a/proxies/live/apiproxy/proxies/default.xml +++ b/proxies/live/apiproxy/proxies/default.xml @@ -4,6 +4,16 @@ FlowCallout.GetEnvironmentKeyValueMapData + + AM-Enable-DelegatedAccess + + + FlowCallout.CompositeTokenCheckOptIN + not (proxy.pathsuffix MatchesPath "/_ping" or proxy.pathsuffix MatchesPath "/_status") + + + JavaScript.ValidateNHSNumber + diff --git a/proxies/live/apiproxy/resources/jsc/ValidateNHSNumber.js b/proxies/live/apiproxy/resources/jsc/ValidateNHSNumber.js new file mode 100644 index 0000000..e9ad9d5 --- /dev/null +++ b/proxies/live/apiproxy/resources/jsc/ValidateNHSNumber.js @@ -0,0 +1,40 @@ +print("nhsd.actor.nhs_number NUM : " + context.getVariable("nhsd.actor.nhs_number")); +print("nhsd.subject.nhs_number NUM : " + context.getVariable("nhsd.subject.nhs_number")); + +var httpverb = context.getVariable("request.verb"); +var actorNHS = context.getVariable("nhsd.actor.nhs_number"); +if (httpverb == 'GET') { + var queryNHSNumber = context.getVariable("request.queryparam.patientNHSNumber"); + print("queryNHSNumber :" +queryNHSNumber); + if (queryNHSNumber) { + if (queryNHSNumber !== actorNHS) { + print("NHS Number is not valid"); + } + } + else { + var routeParamArray = context.getVariable("proxy.pathsuffix").split('/'); + var routeNHSNumber = routeParamArray[routeParamArray.length - 1]; + print("routeNHSNumber :" +routeNHSNumber); + if (routeNHSNumber && routeNHSNumber !== actorNHS){ + print("NHS Number is not valid"); + } + } +} +else { + if(httpverb == 'POST') { + var reqContent = context.getVariable("request.content"); + var jsonContent = JSON.parse(reqContent); + var postNHSnumber = null; + for (var i = 0; i < jsonContent.parameter.length; i++) { + var p = jsonContent.parameter[i]; + if ( p.name === "patientNHSNumber" && p.valueIdentifier && p.valueIdentifier.value) { + postNHSnumber = p.valueIdentifier.value; + break; + } + } + print("postNHSnumber :" +postNHSnumber); + if (postNHSnumber && postNHSnumber !== actorNHS){ + print("NHS Number is not valid"); + } + } +} \ No newline at end of file From 6226fcf29dff821fed69d178cf61b62f4f1e8ce0 Mon Sep 17 00:00:00 2001 From: Raghuram Grandhi Date: Mon, 24 Aug 2026 15:21:17 +0100 Subject: [PATCH 2/6] updates to sonar qube fixes. --- .../resources/jsc/ValidateNHSNumber.js | 27 +++++++++---------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/proxies/live/apiproxy/resources/jsc/ValidateNHSNumber.js b/proxies/live/apiproxy/resources/jsc/ValidateNHSNumber.js index e9ad9d5..b2611fa 100644 --- a/proxies/live/apiproxy/resources/jsc/ValidateNHSNumber.js +++ b/proxies/live/apiproxy/resources/jsc/ValidateNHSNumber.js @@ -20,21 +20,18 @@ if (httpverb == 'GET') { } } } -else { - if(httpverb == 'POST') { - var reqContent = context.getVariable("request.content"); - var jsonContent = JSON.parse(reqContent); - var postNHSnumber = null; - for (var i = 0; i < jsonContent.parameter.length; i++) { - var p = jsonContent.parameter[i]; - if ( p.name === "patientNHSNumber" && p.valueIdentifier && p.valueIdentifier.value) { - postNHSnumber = p.valueIdentifier.value; - break; - } - } - print("postNHSnumber :" +postNHSnumber); - if (postNHSnumber && postNHSnumber !== actorNHS){ - print("NHS Number is not valid"); +else if (httpverb == 'POST') { + var reqContent = context.getVariable("request.content"); + var jsonContent = JSON.parse(reqContent); + var postNHSnumber = null; + for (var p of jsonContent.parameter) { + if (p.name === "patientNHSNumber" && p.valueIdentifier?.value) { + postNHSnumber = p.valueIdentifier.value; + break; } } + print("postNHSnumber :" +postNHSnumber); + if (postNHSnumber && postNHSnumber !== actorNHS){ + print("NHS Number is not valid"); + } } \ No newline at end of file From e2a3b5dbc46fce58f73e9654d7558668189107c9 Mon Sep 17 00:00:00 2001 From: Raghuram Grandhi Date: Thu, 27 Aug 2026 12:05:55 +0100 Subject: [PATCH 3/6] Adding changes related to compilation errors. --- proxies/live/apiproxy/resources/jsc/ValidateNHSNumber.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/proxies/live/apiproxy/resources/jsc/ValidateNHSNumber.js b/proxies/live/apiproxy/resources/jsc/ValidateNHSNumber.js index b2611fa..5147d1f 100644 --- a/proxies/live/apiproxy/resources/jsc/ValidateNHSNumber.js +++ b/proxies/live/apiproxy/resources/jsc/ValidateNHSNumber.js @@ -24,8 +24,10 @@ else if (httpverb == 'POST') { var reqContent = context.getVariable("request.content"); var jsonContent = JSON.parse(reqContent); var postNHSnumber = null; - for (var p of jsonContent.parameter) { - if (p.name === "patientNHSNumber" && p.valueIdentifier?.value) { + var p; + for (var i = 0; i < jsonContent.parameter.length; i++) { + p = jsonContent.parameter[i]; + if (p.name === "patientNHSNumber" && p.valueIdentifier && p.valueIdentifier.value) { postNHSnumber = p.valueIdentifier.value; break; } From 9b79df06b9b6f37c5dad818967ea2decdc3d2258 Mon Sep 17 00:00:00 2001 From: Raghuram Grandhi Date: Thu, 27 Aug 2026 14:02:05 +0100 Subject: [PATCH 4/6] updated pipeline to ignore deployment warnings. --- azure/templates/post-deploy.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/azure/templates/post-deploy.yml b/azure/templates/post-deploy.yml index c06ae54..273d9f3 100644 --- a/azure/templates/post-deploy.yml +++ b/azure/templates/post-deploy.yml @@ -84,6 +84,8 @@ steps: displayName: Deploy mock provider workingDirectory: "$(Pipeline.Workspace)/s/$(SERVICE_NAME)/$(SERVICE_ARTIFACT_NAME)" retryCountOnTaskFailure: 2 + env: + PYTHONWARNINGS: "ignore::SyntaxWarning" - bash: | set -e From cdc42a0bca82c48db8d22ca9a5fef649098c2595 Mon Sep 17 00:00:00 2001 From: Raghuram Grandhi Date: Thu, 27 Aug 2026 14:32:01 +0100 Subject: [PATCH 5/6] updated docker to fix task crashing issue. --- mock_provider/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mock_provider/Dockerfile b/mock_provider/Dockerfile index e155af5..ec9f8bc 100644 --- a/mock_provider/Dockerfile +++ b/mock_provider/Dockerfile @@ -19,4 +19,4 @@ COPY --from=0 /specification /usr/src/prism/packages/cli/gp-connect-user-permi COPY --from=0 /updated-spec.json /usr/src/prism/packages/cli/gp-connect-user-permissions/specification/gp-connect-user-permissions.json #Running command of mock with OAS file -CMD ["mock" , "-h", "0.0.0.0", "-p" ,"9000" ,"gp-connect-user-permissions/specification/gp-connect-user-permissions.json"] +CMD ["mock" , "-h", "0.0.0.0", "-p" ,"9000" , "--multiprocess=false", "gp-connect-user-permissions/specification/gp-connect-user-permissions.json"] From e1d3b258595df6d4c05a29f4cd91ada9225d5a10 Mon Sep 17 00:00:00 2001 From: Raghuram Grandhi Date: Thu, 27 Aug 2026 14:45:11 +0100 Subject: [PATCH 6/6] updated JS scripts. --- .../resources/jsc/ValidateNHSNumber.js | 29 ++++++++++--------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/proxies/live/apiproxy/resources/jsc/ValidateNHSNumber.js b/proxies/live/apiproxy/resources/jsc/ValidateNHSNumber.js index 5147d1f..e9ad9d5 100644 --- a/proxies/live/apiproxy/resources/jsc/ValidateNHSNumber.js +++ b/proxies/live/apiproxy/resources/jsc/ValidateNHSNumber.js @@ -20,20 +20,21 @@ if (httpverb == 'GET') { } } } -else if (httpverb == 'POST') { - var reqContent = context.getVariable("request.content"); - var jsonContent = JSON.parse(reqContent); - var postNHSnumber = null; - var p; - for (var i = 0; i < jsonContent.parameter.length; i++) { - p = jsonContent.parameter[i]; - if (p.name === "patientNHSNumber" && p.valueIdentifier && p.valueIdentifier.value) { - postNHSnumber = p.valueIdentifier.value; - break; +else { + if(httpverb == 'POST') { + var reqContent = context.getVariable("request.content"); + var jsonContent = JSON.parse(reqContent); + var postNHSnumber = null; + for (var i = 0; i < jsonContent.parameter.length; i++) { + var p = jsonContent.parameter[i]; + if ( p.name === "patientNHSNumber" && p.valueIdentifier && p.valueIdentifier.value) { + postNHSnumber = p.valueIdentifier.value; + break; + } + } + print("postNHSnumber :" +postNHSnumber); + if (postNHSnumber && postNHSnumber !== actorNHS){ + print("NHS Number is not valid"); } - } - print("postNHSnumber :" +postNHSnumber); - if (postNHSnumber && postNHSnumber !== actorNHS){ - print("NHS Number is not valid"); } } \ No newline at end of file