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
4 changes: 3 additions & 1 deletion macros/manifest_macros.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@
products:
{% endmacro %}

{%- macro product(ENV, MODE, TITLE, product_name, display_name) -%}
{%- macro product(ENV, MODE, TITLE, product_name, display_name, euo_allowlist_required) -%}
- name: e-referrals-service-api-{{ product_name }}{{ MODE.nameSuffix }}
approvalType: {{ ENV.approval_type | default('auto') }}
attributes:
- name: access
value: public
- name: EUOAllowlistRequired
value: {{ euo_allowlist_required }}
- name: ratelimiting
value:
e-referrals-service-api-{{ product_name }}:
Expand Down
16 changes: 15 additions & 1 deletion manifest_template.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,23 +16,31 @@ APIGEE_ENVIRONMENTS:
variants:
- name: rc-internal-dev
display_name: Internal Development - rc
euo_allowlist_required: false
- name: fix-internal-dev
display_name: Internal Development - fix
euo_allowlist_required: false
- name: fti-internal-dev
display_name: Internal Development - ft01
euo_allowlist_required: false
- name: ftiv-internal-dev
display_name: Internal Development - ft04
euo_allowlist_required: false
- name: ftv-internal-dev
display_name: Internal Development - ft05
euo_allowlist_required: false
- name: ftix-internal-dev
display_name: Internal Development - ft09
euo_allowlist_required: false
- name: ftxxii-internal-dev
display_name: Internal Development - ft22
euo_allowlist_required: false

- name: internal-dev-sandbox
variants:
- name: internal-dev-sandbox
display_name: Internal Development Sandbox
euo_allowlist_required: false

- name: int
additional_proxies:
Expand All @@ -41,6 +49,7 @@ APIGEE_ENVIRONMENTS:
variants:
- name: int
display_name: Integration Testing
euo_allowlist_required: false

- name: internal-qa
additional_proxies:
Expand All @@ -49,29 +58,34 @@ APIGEE_ENVIRONMENTS:
variants:
- name: internal-qa
display_name: Internal QA
euo_allowlist_required: false

- name: internal-qa-sandbox
variants:
- name: internal-qa-sandbox
display_name: Internal QA Sandbox
euo_allowlist_required: false

- name: sandbox
variants:
- name: sandbox
display_name: Sandbox
euo_allowlist_required: false

- name: dev
additional_proxies:
- identity-service-dep-dev
variants:
- name: dep-dev
display_name: Dev - dep
euo_allowlist_required: false

- name: prod
approval_type: manual
variants:
- name: prod
display_name: Production
euo_allowlist_required: false

ACCESS_MODES:
- name: healthcare-worker
Expand Down Expand Up @@ -104,7 +118,7 @@ apigee:

{% for VARIANT in ENV.variants %}
{% for MODE in ACCESS_MODES %}
{{ macros.product(ENV, MODE, TITLE, VARIANT.name, VARIANT.display_name) }}
{{ macros.product(ENV, MODE, TITLE, VARIANT.name, VARIANT.display_name, VARIANT.euo_allowlist_required) }}
Comment thread
kevinmason-nhs marked this conversation as resolved.
{% endfor %}
{% endfor %}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<AssignMessage continueOnError="false" enabled="true" name="AssignMessage.InternalServerError">
<DisplayName>AssignMessage.InternalServerError</DisplayName>
<Remove>
<Payload>Internal Server Error</Payload>
</Remove>
<AssignTo createNew="false" type="response"/>
</AssignMessage>
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<AssignMessage enabled="true" name="AssignMessage.SetOperationOutcomeODSHeaderMissingPreR4">
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Given the change/refactor, we're duplicating the context between PreR4/R4 -- argument for collapsing this in the technical debt ticket

<AssignVariable>
<Name>status_code</Name>
<Value>400</Value>
</AssignVariable>
<AssignVariable>
<Name>op_outcome_issue_code</Name>
<Value>required</Value>
</AssignVariable>
<AssignVariable>
<Name>faultstring</Name>
<Value>Missing or Empty NHSD-End-User-Organisation-ODS header.</Value>
</AssignVariable>
<AssignVariable>
<Name>op_outcome_issue_details_coding_code</Name>
<Value>MISSING_HEADER</Value>
</AssignVariable>
</AssignMessage>
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<AssignMessage enabled="true" name="AssignMessage.SetOperationOutcomeODSHeaderMissingR4">
<AssignVariable>
<Name>status_code</Name>
<Value>400</Value>
</AssignVariable>
<AssignVariable>
<Name>op_outcome_issue_code</Name>
<Value>required</Value>
</AssignVariable>
<!-- Overrides OutcomeVariablesR4-->
<AssignVariable>
<Name>op_outcome_issue_details_coding_code</Name>
<Value>MISSING_HEADER</Value>
</AssignVariable>
<AssignVariable>
<Name>faultstring</Name>
<Value>Missing or Empty NHSD-End-User-Organisation-ODS header.</Value>
</AssignVariable>
</AssignMessage>
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<AssignMessage enabled="true" name="AssignMessage.SetOperationOutcomeODSHeaderValueNotInPartnerListPreR4">
<AssignVariable>
<Name>status_code</Name>
<Value>403</Value>
</AssignVariable>
<AssignVariable>
<Name>op_outcome_issue_code</Name>
<Value>forbidden</Value>
</AssignVariable>
<AssignVariable>
<Name>faultstring</Name>
<Value>Unauthorised ODS code provided in NHSD-End-User-Organisation-ODS header</Value>
</AssignVariable>
<AssignVariable>
<Name>op_outcome_issue_details_coding_code</Name>
<Value>NO_ACCESS</Value>
</AssignVariable>
</AssignMessage>
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<AssignMessage enabled="true" name="AssignMessage.SetOperationOutcomeODSHeaderValueNotInPartnerListR4">
<AssignVariable>
<Name>status_code</Name>
<Value>403</Value>
</AssignVariable>
<AssignVariable>
<Name>op_outcome_issue_code</Name>
<Value>forbidden</Value>
</AssignVariable>
<AssignVariable>
<Name>faultstring</Name>
<Value>Unauthorised ODS code provided in NHSD-End-User-Organisation-ODS header</Value>
</AssignVariable>
<AssignVariable>
<Name>op_outcome_issue_details_coding_code</Name>
<Value>ACCESS_DENIED</Value>
</AssignVariable>
</AssignMessage>
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<AssignMessage enabled="true" name="AssignMessage.SetOperationOutcomeServiceError">
<AssignVariable>
<Name>status_code</Name>
<Value>500</Value>
</AssignVariable>
<AssignVariable>
<Name>op_outcome_issue_code</Name>
<Value>exception</Value>
</AssignVariable>
<!-- Overrides OutcomeVariablesR4-->
<AssignVariable>
<Name>op_outcome_issue_details_coding_code</Name>
<Value>SERVICE_ERROR</Value>
</AssignVariable>
<AssignVariable>
<Name>faultstring</Name>
<Value>Internal Server Error</Value>
</AssignVariable>
</AssignMessage>
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<FlowCallout async="false" continueOnError="false" enabled="true" name="FlowCallout.EUOAllowlistVerify">
<DisplayName>EUOAllowlistVerify</DisplayName>
<SharedFlowBundle>EUOAllowlistVerify</SharedFlowBundle>
</FlowCallout>
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<FlowCallout async="false" continueOnError="false" enabled="true" name="FlowCallout.ExtendedAttributes">
<DisplayName>Extract extended attribute</DisplayName>
<SharedFlowBundle>ExtendedAttributes</SharedFlowBundle>
</FlowCallout>
69 changes: 33 additions & 36 deletions proxies/live/apiproxy/proxies/default.xml
Original file line number Diff line number Diff line change
@@ -1,57 +1,54 @@
<ProxyEndpoint name="default">
<Flows>
<Flow name="AddPayloadToPing">
<Description/>
<Request/>
<Response>
<Step>
<Name>AssignMessage.AddPayloadToPing</Name>
</Step>
</Response>
<Condition>(proxy.pathsuffix MatchesPath "/_ping") and ((request.verb = "GET") or (request.verb = "HEAD"))</Condition>
</Flow>
<Flow name="StatusEndpoint">
<Description/>
<Request>
<Step>
<Name>KeyValueMapOperations.GetSharedSecureVariables</Name>
</Step>
<Step>
<Condition>(private.apigee.status-endpoint-api-key NotEquals request.header.apikey) or (private.apigee.status-endpoint-api-key Is null)</Condition>
<Name>RaiseFault.401Unauthorized</Name>
</Step>
<Step>
<Name>ServiceCallout.CallHealthcheckEndpoint</Name>
</Step>
</Request>
<Response>
<Step>
<Name>javascript.SetStatusResponse</Name>
</Step>
</Response>
<Condition>(proxy.pathsuffix MatchesPath "/_status") and ((request.verb = "GET") or (request.verb = "HEAD"))</Condition>
</Flow>
<Flow name="AddPayloadToPing">
Comment thread
pca-nhs marked this conversation as resolved.
<Description/>
<Request/>
<Response>
<Step>
<Name>AssignMessage.AddPayloadToPing</Name>
</Step>
</Response>
<Condition>(proxy.pathsuffix MatchesPath "/_ping") and ((request.verb = "GET") or (request.verb = "HEAD"))</Condition>
</Flow>
<Flow name="StatusEndpoint">
<Description/>
<Request>
<Step>
<Name>KeyValueMapOperations.GetSharedSecureVariables</Name>
</Step>
<Step>
<Condition>(private.apigee.status-endpoint-api-key NotEquals request.header.apikey) or (private.apigee.status-endpoint-api-key Is null)</Condition>
<Name>RaiseFault.401Unauthorized</Name>
</Step>
<Step>
<Name>ServiceCallout.CallHealthcheckEndpoint</Name>
</Step>
</Request>
<Response>
<Step>
<Name>javascript.SetStatusResponse</Name>
</Step>
</Response>
<Condition>(proxy.pathsuffix MatchesPath "/_status") and ((request.verb = "GET") or (request.verb = "HEAD"))</Condition>
</Flow>
</Flows>

<PreFlow/>

<PostClientFlow>
<Response>
<Step>
<Name>FlowCallout.LogToSplunk</Name>
</Step>
</Response>
</PostClientFlow>

<HTTPProxyConnection>
<BasePath>{{ SERVICE_BASE_PATH }}</BasePath>
<VirtualHost>secure</VirtualHost>
</HTTPProxyConnection>
<RouteRule name="NoRoutePing">
<Condition>(proxy.pathsuffix MatchesPath "/_ping") and ((request.verb = "GET") or (request.verb = "HEAD"))</Condition>
<Condition>(proxy.pathsuffix MatchesPath "/_ping") and ((request.verb = "GET") or (request.verb = "HEAD"))</Condition>
Comment thread
kevinmason-nhs marked this conversation as resolved.
</RouteRule>
<RouteRule name="NoRouteStatus">
<Condition>(proxy.pathsuffix MatchesPath "/_status") and ((request.verb = "GET") or (request.verb = "HEAD"))</Condition>
<Condition>(proxy.pathsuffix MatchesPath "/_status") and ((request.verb = "GET") or (request.verb = "HEAD"))</Condition>
Comment thread
pca-nhs marked this conversation as resolved.
</RouteRule>
<RouteRule name="e-referrals-service-api-target">
<TargetEndpoint>e-referrals-service-api-target</TargetEndpoint>
Expand Down
Loading