From 40e2f7f01a259088bb1d592ca279bfeac6bd9bf6 Mon Sep 17 00:00:00 2001 From: Marcus Aspin Date: Wed, 14 Aug 2024 15:44:12 +0000 Subject: [PATCH] PI-2377 Combine Prism mocks into a single Dockerfile Also added a note to the README about how to call the API locally. --- Dockerfile.adjudications-api | 15 --- Dockerfile.prism | 10 ++ Dockerfile.setup-assess-risks-and-needs-api | 13 -- Dockerfile.setup-case-notes-api | 14 -- ...erfile.setup-create-and-vary-a-licence-api | 13 -- Dockerfile.setup-manage-pom-case-api | 12 -- Dockerfile.setup-ndelius-api | 12 -- Dockerfile.setup-prison-api | 13 -- Dockerfile.setup-prisoner-search | 13 -- ...erfile.setup-probation-integration-epf-api | 12 -- Dockerfile.setup-probation-offender-search | 12 -- README.md | 14 +- docker-compose.yml | 126 +++--------------- ...udications_api.json => adjudications.json} | 0 ...-docs.json => assess-risks-and-needs.json} | 0 ...se-notes-api-docs.json => case-notes.json} | 0 ...docs.json => create-and-vary-licence.json} | 0 .../resources/application-local-docker.yml | 36 ++--- src/main/resources/application-local.yml | 36 ++--- .../smoke/AuthoriseConfigTest.kt | 3 + 20 files changed, 68 insertions(+), 286 deletions(-) delete mode 100644 Dockerfile.adjudications-api create mode 100644 Dockerfile.prism delete mode 100644 Dockerfile.setup-assess-risks-and-needs-api delete mode 100644 Dockerfile.setup-case-notes-api delete mode 100644 Dockerfile.setup-create-and-vary-a-licence-api delete mode 100644 Dockerfile.setup-manage-pom-case-api delete mode 100644 Dockerfile.setup-ndelius-api delete mode 100644 Dockerfile.setup-prison-api delete mode 100644 Dockerfile.setup-prisoner-search delete mode 100644 Dockerfile.setup-probation-integration-epf-api delete mode 100644 Dockerfile.setup-probation-offender-search rename src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/prismMocks/{adjudications_api.json => adjudications.json} (100%) rename src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/prismMocks/{assess-risks-and-needs-api-docs.json => assess-risks-and-needs.json} (100%) rename src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/prismMocks/{case-notes-api-docs.json => case-notes.json} (100%) rename src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/prismMocks/{create-and-vary-a-licence-api-docs.json => create-and-vary-licence.json} (100%) diff --git a/Dockerfile.adjudications-api b/Dockerfile.adjudications-api deleted file mode 100644 index 47783f4cf..000000000 --- a/Dockerfile.adjudications-api +++ /dev/null @@ -1,15 +0,0 @@ -FROM node:current-alpine3.17 - -RUN apk update && apk add bash curl --no-cache - -COPY src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/prismMocks/adjudications_api.json /adjudications_api.json - -RUN sed -i "s+\*/\*+application/json+g" adjudications_api.json - -RUN npm install -g @stoplight/prism-cli - -RUN adduser -D user - -USER user - -CMD prism mock -p 4010 -h 0.0.0.0 /adjudications_api.json diff --git a/Dockerfile.prism b/Dockerfile.prism new file mode 100644 index 000000000..70d032f26 --- /dev/null +++ b/Dockerfile.prism @@ -0,0 +1,10 @@ +FROM stoplight/prism:5 + +COPY src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/prismMocks /prismMocks +ADD https://ministryofjustice.github.io/hmpps-probation-integration-services/tech-docs/projects/external-api-and-delius/api-docs.json /prismMocks/ndelius.json +ADD https://ministryofjustice.github.io/hmpps-probation-integration-services/tech-docs/projects/effective-proposal-framework-and-delius/api-docs.json /prismMocks/probation-integration-epf.json +ADD https://dev.moic.service.justice.gov.uk/v3/api-docs.json /prismMocks/manage-pom-case-api.json + +RUN sed -i 's/\*\/\*/application\/json/g' /prismMocks/prisoner-offender-search.json + +ENTRYPOINT sh -c 'port=4010; for file in $(ls /prismMocks/*.json | sort); do node dist/index.js mock -p $port -h 0.0.0.0 $file & port=$((port + 1)); done; wait' diff --git a/Dockerfile.setup-assess-risks-and-needs-api b/Dockerfile.setup-assess-risks-and-needs-api deleted file mode 100644 index 87fb94ead..000000000 --- a/Dockerfile.setup-assess-risks-and-needs-api +++ /dev/null @@ -1,13 +0,0 @@ -FROM node:current-alpine3.17 - -RUN apk update && apk add bash --no-cache - -COPY src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/prismMocks/assess-risks-and-needs-api-docs.json /assess-risks-and-needs-api-docs.json - -RUN npm install -g @stoplight/prism-cli - -RUN adduser -D user - -USER user - -CMD prism mock -p 4010 -h 0.0.0.0 /assess-risks-and-needs-api-docs.json diff --git a/Dockerfile.setup-case-notes-api b/Dockerfile.setup-case-notes-api deleted file mode 100644 index c67d9f947..000000000 --- a/Dockerfile.setup-case-notes-api +++ /dev/null @@ -1,14 +0,0 @@ -FROM node:current-alpine3.17 - -RUN apk update && apk add bash --no-cache - -COPY src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/prismMocks/case-notes-api-docs.json /case-notes-api-docs.json - -RUN npm install -g @stoplight/prism-cli - -RUN adduser -D user - -USER user - - -CMD prism mock -p 4010 -h 0.0.0.0 /case-notes-api-docs.json diff --git a/Dockerfile.setup-create-and-vary-a-licence-api b/Dockerfile.setup-create-and-vary-a-licence-api deleted file mode 100644 index d4230b08b..000000000 --- a/Dockerfile.setup-create-and-vary-a-licence-api +++ /dev/null @@ -1,13 +0,0 @@ -FROM node:current-alpine3.17 - -RUN apk update && apk add bash --no-cache - -COPY src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/prismMocks/create-and-vary-a-licence-api-docs.json /create-and-vary-a-licence-api-docs.json - -RUN npm install -g @stoplight/prism-cli - -RUN adduser -D user - -USER user - -CMD prism mock -p 4010 -h 0.0.0.0 /create-and-vary-a-licence-api-docs.json diff --git a/Dockerfile.setup-manage-pom-case-api b/Dockerfile.setup-manage-pom-case-api deleted file mode 100644 index e3b0c19fa..000000000 --- a/Dockerfile.setup-manage-pom-case-api +++ /dev/null @@ -1,12 +0,0 @@ -FROM node:current-alpine3.17 - -RUN apk update && apk add bash curl --no-cache - -RUN curl https://dev.moic.service.justice.gov.uk/v3/api-docs.json > manage-pom-case-api.json && \ - npm install -g @stoplight/prism-cli - -RUN adduser -D user - -USER user - -CMD prism mock -p 4010 -h 0.0.0.0 /manage-pom-case-api.json diff --git a/Dockerfile.setup-ndelius-api b/Dockerfile.setup-ndelius-api deleted file mode 100644 index 94a2d7031..000000000 --- a/Dockerfile.setup-ndelius-api +++ /dev/null @@ -1,12 +0,0 @@ -FROM node:current-alpine3.17 - -RUN apk update && apk add bash curl --no-cache - -RUN curl https://ministryofjustice.github.io/hmpps-probation-integration-services/tech-docs/projects/external-api-and-delius/api-docs.json > ndelius-api.json && \ - npm install -g @stoplight/prism-cli - -RUN adduser -D user - -USER user - -CMD prism mock -p 4010 -h 0.0.0.0 /ndelius-api.json diff --git a/Dockerfile.setup-prison-api b/Dockerfile.setup-prison-api deleted file mode 100644 index 5d28d45e4..000000000 --- a/Dockerfile.setup-prison-api +++ /dev/null @@ -1,13 +0,0 @@ -FROM node:current-alpine3.17 - -RUN apk update && apk add bash curl --no-cache - -COPY src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/prismMocks/prison-api.json /prison-api.json -RUN sed -i 's/\*\/\*/application\/json/g' prison-api.json -RUN npm install -g @stoplight/prism-cli - -RUN adduser -D user - -USER user - -CMD prism mock -p 4010 -h 0.0.0.0 /prison-api.json diff --git a/Dockerfile.setup-prisoner-search b/Dockerfile.setup-prisoner-search deleted file mode 100644 index f7af05893..000000000 --- a/Dockerfile.setup-prisoner-search +++ /dev/null @@ -1,13 +0,0 @@ -FROM node:current-alpine3.17 - -RUN apk update && apk add bash curl --no-cache - -COPY src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/prismMocks/prisoner-offender-search.json /prisoner-offender-search.json -RUN sed -i 's/\*\/\*/application\/json/g' prisoner-offender-search.json -RUN npm install -g @stoplight/prism-cli - -RUN adduser -D user - -USER user - -CMD prism mock -p 4010 -h 0.0.0.0 /prisoner-offender-search.json diff --git a/Dockerfile.setup-probation-integration-epf-api b/Dockerfile.setup-probation-integration-epf-api deleted file mode 100644 index c2434bfe6..000000000 --- a/Dockerfile.setup-probation-integration-epf-api +++ /dev/null @@ -1,12 +0,0 @@ -FROM node:current-alpine3.17 - -RUN apk update && apk add bash curl --no-cache - -RUN curl https://ministryofjustice.github.io/hmpps-probation-integration-services/tech-docs/projects/effective-proposal-framework-and-delius/api-docs.json > probation-integration-epf-api.json && \ - npm install -g @stoplight/prism-cli - -RUN adduser -D user - -USER user - -CMD prism mock -p 4010 -h 0.0.0.0 /probation-integration-epf-api.json diff --git a/Dockerfile.setup-probation-offender-search b/Dockerfile.setup-probation-offender-search deleted file mode 100644 index 58d57c251..000000000 --- a/Dockerfile.setup-probation-offender-search +++ /dev/null @@ -1,12 +0,0 @@ -FROM node:current-alpine3.17 - -RUN apk update && apk add bash curl --no-cache - -COPY src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/prismMocks/probation-offender-search.json /probation-offender-search.json -RUN npm install -g @stoplight/prism-cli - -RUN adduser -D user - -USER user - -CMD prism mock -p 4010 -h 0.0.0.0 /probation-offender-search.json diff --git a/README.md b/README.md index 3b875308d..33286f4ac 100644 --- a/README.md +++ b/README.md @@ -123,12 +123,18 @@ make serve Each service is then accessible at: - [http://localhost:8080](http://localhost:8080) for this application -- [http://localhost:4030](http://localhost:4030) for the Prison API -- [http://localhost:4040](http://localhost:4040) for the ndelius API -- [http://localhost:4020](http://localhost:4020) for the Probation Offender Search -- [http://localhost:4010](http://localhost:4010) for the Prisoner Search +- [http://localhost:4010](http://localhost:4010) to [http://localhost:40XX]() for mocked HMPPS APIs - [http://localhost:9090](http://localhost:9090) for the HMPPS Auth service +To call the integration-api, you need to pass a distinguished name in the `subject-distinguished-name` header. The `CN` attribute should match the client you wish to access the service as. +The list of clients and their authorised endpoints can be found in [application-local-docker.yml](src/main/resources/application-local-docker.yml). + +For example, + +```bash +curl -H "subject-distinguished-name: O=local,CN=all-access" http://localhost:8080/health +``` + As part of getting the HMPPS Auth service running locally, [the in-memory database is seeded with data including a number of clients](https://github.com/ministryofjustice/hmpps-auth/blob/main/src/main/resources/db/dev/data/auth/V900_0__clients.sql). A client can have different permissions i.e. read, write, reporting, although strangely the column name is called `​​autoapprove`. diff --git a/docker-compose.yml b/docker-compose.yml index a11d697f8..2ab57781e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,24 +1,15 @@ -version: "3.9" services: hmpps-integration-api: build: context: . container_name: hmpps-integration-api - ports: - - "8080:8080" healthcheck: - test: [ "CMD", "echo", "1" ] + test: [ "CMD", "curl", "-f", "http://localhost:8080/health" ] depends_on: - prison-api: - condition: service_healthy - prisoner-search: - condition: service_healthy - probation-offender-search: - condition: service_healthy - probation-integration-epf-api: - condition: service_healthy - manage-pom-case-api: + hmpps-auth: condition: service_healthy + ports: + - "8080:8080" environment: - SERVER_PORT=8080 - SPRING_PROFILES_ACTIVE=local-docker @@ -36,105 +27,22 @@ services: - SPRING_PROFILES_ACTIVE=dev - LOGGING_LEVEL_ORG_SPRINGFRAMEWORK_WEB=TRACE - ndelius-api: - build: - context: . - dockerfile: Dockerfile.setup-ndelius-api - container_name: ndelius-api - healthcheck: - test: 'wget --header="Authorization: Bearer abc" http://127.0.0.1:4010/case/abc/supervisions -O /dev/null' - ports: - - '4040:4010' - - prison-api: - build: - context: . - dockerfile: Dockerfile.setup-prison-api - container_name: prison-api - healthcheck: - test: 'wget --header="Authorization: Bearer abc" http://127.0.0.1:4010/api/offenders/A1234AL -O /dev/null' - ports: - - '4030:4010' - - prisoner-search: - build: - context: . - dockerfile: Dockerfile.setup-prisoner-search - container_name: prisoner-search - healthcheck: - test: 'wget --header="Authorization: Bearer abc" http://0.0.0.0:4010/prisoner/nemo -O /dev/null' - ports: - - "4010:4010" - - probation-offender-search: - build: - context: . - dockerfile: Dockerfile.setup-probation-offender-search - container_name: probation-offender-search - healthcheck: - test: 'wget --header="Authorization: Bearer abc" http://0.0.0.0:4010/search?crn=sit -O /dev/null' - ports: - - '4020:4010' - - assess-risks-and-needs-api: - build: - context: . - dockerfile: Dockerfile.setup-assess-risks-and-needs-api - container_name: assess-risks-and-needs-api - healthcheck: - test: 'wget --header="Authorization: Bearer abc" http://0.0.0.0:4010/risks/crn/abc/predictors/all -O /dev/null' - ports: - - '4050:4010' - - probation-integration-epf-api: - build: - context: . - dockerfile: Dockerfile.setup-probation-integration-epf-api - container_name: probation-integration-epf-api - healthcheck: - test: 'wget --header="Authorization: Bearer abc" http://0.0.0.0:4010/case-details/crn/1234 -O /dev/null' - ports: - - '4060:4010' - - adjudications-api: + prism: build: context: . - dockerfile: Dockerfile.adjudications-api - container_name: adjudications-api - healthcheck: - test: 'wget --header="Authorization: Bearer abc" http://0.0.0.0:4010/reported-adjudications/hearings?hearingDate=1916-07-16 -O /dev/null' - ports: - - '4045:4010' - - create-and-vary-licence-api: - build: - context: . - dockerfile: Dockerfile.setup-create-and-vary-a-licence-api - container_name: create-and-vary-licence-api - healthcheck: - test: 'wget --header="Authorization: Bearer abc" http://0.0.0.0:4010/public/licences/id/123 -O /dev/null' - ports: - - '4070:4010' - - case-notes-api: - build: - context: . - dockerfile: Dockerfile.setup-case-notes-api - container_name: case-notes-api - healthcheck: - test: 'wget --header="Authorization: Bearer abc" http://0.0.0.0:4010/case-notes/1234 -O /dev/null' - ports: - - '4080:4010' - - manage-pom-case-api: - build: - context: . - dockerfile: Dockerfile.setup-manage-pom-case-api - container_name: manage-pom-case-api - healthcheck: - test: 'wget --header="Authorization: Bearer abc" http://127.0.0.1:4010/api/allocation/X1234YZ/primary_pom -O /dev/null' + dockerfile: Dockerfile.prism + container_name: prism ports: - - '4090:4010' + - '4010:4010' + - '4011:4011' + - '4012:4012' + - '4013:4013' + - '4014:4014' + - '4015:4015' + - '4016:4016' + - '4017:4017' + - '4018:4018' + - '4019:4019' local-stack-aws: image: localstack/localstack:3.0 diff --git a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/prismMocks/adjudications_api.json b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/prismMocks/adjudications.json similarity index 100% rename from src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/prismMocks/adjudications_api.json rename to src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/prismMocks/adjudications.json diff --git a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/prismMocks/assess-risks-and-needs-api-docs.json b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/prismMocks/assess-risks-and-needs.json similarity index 100% rename from src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/prismMocks/assess-risks-and-needs-api-docs.json rename to src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/prismMocks/assess-risks-and-needs.json diff --git a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/prismMocks/case-notes-api-docs.json b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/prismMocks/case-notes.json similarity index 100% rename from src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/prismMocks/case-notes-api-docs.json rename to src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/prismMocks/case-notes.json diff --git a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/prismMocks/create-and-vary-a-licence-api-docs.json b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/prismMocks/create-and-vary-licence.json similarity index 100% rename from src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/prismMocks/create-and-vary-a-licence-api-docs.json rename to src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/prismMocks/create-and-vary-licence.json diff --git a/src/main/resources/application-local-docker.yml b/src/main/resources/application-local-docker.yml index d3d245b23..f0e8ec9ea 100644 --- a/src/main/resources/application-local-docker.yml +++ b/src/main/resources/application-local-docker.yml @@ -1,26 +1,16 @@ services: - probation-offender-search: - base-url: http://probation-offender-search:4010 - prisoner-offender-search: - base-url: http://prisoner-search:4010 - prison-api: - base-url: http://prison-api:4010 - ndelius: - base-url: http://ndelius-api:4010 - assess-risks-and-needs: - base-url: http://assess-risks-and-needs-api:4010 - probation-integration-epf: - base-url: http://probation-integration-epf-api:4010 - adjudications: - base-url: http://adjudications-api:4010 - create-and-vary-licence: - base-url: http://create-and-vary-licence-api:4010 - case-notes: - base-url: http://case-notes-api:4010 - manage-pom-case-api: - base-url: http://manage-pom-case-api:4010 - hmpps-auth: - base-url: http://hmpps-auth:8080 + hmpps-auth.base-url: http://hmpps-auth:8080 + + adjudications.base-url: http://prism:4010 + assess-risks-and-needs.base-url: http://prism:4011 + case-notes.base-url: http://prism:4012 + create-and-vary-licence.base-url: http://prism:4013 + manage-pom-case-api.base-url: http://prism:4014 + ndelius.base-url: http://prism:4015 + prison-api.base-url: http://prism:4016 + prisoner-offender-search.base-url: http://prism:4017 + probation-integration-epf.base-url: http://prism:4018 + probation-offender-search.base-url: http://prism:4019 authorisation: consumers: @@ -60,6 +50,8 @@ authorisation: - "/info" config-test: - "/v1/config/authorisation" + all-access: + - "/.*" hmpps.sqs: provider: localstack diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index 9ae43b068..4d5c2bcb8 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -1,26 +1,16 @@ services: - probation-offender-search: - base-url: http://localhost:4020 - prisoner-offender-search: - base-url: http://localhost:4010 - prison-api: - base-url: http://localhost:4030 - ndelius: - base-url: http://localhost:4040 - assess-risks-and-needs: - base-url: http://localhost:4050 - probation-integration-epf: - base-url: http://localhost:4060 - hmpps-auth: - base-url: http://localhost:9090 - adjudications: - base-url: http://localhost:4045 - create-and-vary-licence: - base-url: http://localhost:4070 - case-notes: - base-url: http://localhost:4080 - manage-pom-case-api: - base-url: http://localhost:4090 + hmpps-auth.base-url: http://localhost:9090 + + adjudications.base-url: http://localhost:4010 + assess-risks-and-needs.base-url: http://localhost:4011 + case-notes.base-url: http://localhost:4012 + create-and-vary-licence.base-url: http://localhost:4013 + manage-pom-case-api.base-url: http://localhost:4014 + ndelius.base-url: http://localhost:4015 + prison-api.base-url: http://localhost:4016 + prisoner-offender-search.base-url: http://localhost:4017 + probation-integration-epf.base-url: http://localhost:4018 + probation-offender-search.base-url: http://localhost:4019 hmpps.sqs: provider: localstack @@ -67,3 +57,5 @@ authorisation: - "/info" config-test: - "/v1/config/authorisation" + all-access: + - "/.*" diff --git a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/smoke/AuthoriseConfigTest.kt b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/smoke/AuthoriseConfigTest.kt index 72307837e..675e84dc1 100644 --- a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/smoke/AuthoriseConfigTest.kt +++ b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/smoke/AuthoriseConfigTest.kt @@ -56,6 +56,9 @@ class AuthoriseConfigTest : DescribeSpec( ], "config-test": [ "/v1/config/authorisation" + ], + "all-access": [ + "/.*" ] } """.removeWhitespaceAndNewlines(),