Giter Club home page Giter Club logo

darts-gateway's Introduction

darts-gateway

This application acts as a layer between external services sending SOAP requests and translating into JSON forwarding onto the DARTS-API.

Building and deploying the application

Prerequisites

SoapUI

  • SoapUI can be used for "Try it out" functionality using the ServiceContext Header with a valid system user (CPP / XHIBIT / MID_TIER). Firstly you will need to set the following properties within SoapUI

    • username - The user to authenticate with
    • password - The password to authenticate with
    • token - The token (either jwt or documentum) to authenticate with
  • IMPORTANT! Do not add the properties as project properties as they will be saved back to the committed xml files. Instead set them as global properties. See https://www.soapui.org/docs/soap-and-wsdl/

DARTSService SoapUI

  • To View the application SOAP Web Services:
  • Import SOAP Project README-DARTSService with initial DARTSService WSDL.
  • Sample requests for all operations have been created (using both user name and password authentication as well as token authentication). Initial requests e.g. addCase will use the ServiceContext Soap Header with some custom project properties: userName="${#Project#userName}" password="${#Project#password}"
  • When testing the add audio endpoint make sure to change the properties to support MTOM and Multipart. Additionally, attach an mp2 file

ContextRegistryService SoapUI

  • To View the application SOAP Web Services:
  • Import SOAP Project README-ContextRegistryService with initial ContextRegistryService WSDL.
  • Sample requests for all operations have been created (using both user name and password authentication as well as token authentication). Initial requests e.g. register will use the ServiceContext Soap Header with some custom project properties: userName="${#Project#userName}" password="${#Project#password}"
  • Requests for lookup / unregister operations use the JWT token property provided in the Soap Body, so you will need to remember to update it using the register response: <token>${#Project#token}</token>

Postman

  • Postman can be used for "Try it out" functionality using the ServiceContext Header with a valid system user (CPP / XHIBIT / MID_TIER). Firstly you will need to set the following properties within Postman NOTE: This excludes the add audio test. SoapUi must be used in the case of addaudio

    • userToUse - The user to authenticate with
    • passwordToUse - The password to authenticate with
    • tokenToUse - The token (jwt by default) to authenticate with
    • gatewayurl - The gateway url to use

DARTSService Postman

ContextRegistryService Postman

Building and deploying the application

External dependencies:-

  • darts-api
  • redis

Building the application

The project uses Gradle as a build tool. It already contains ./gradlew wrapper script, so there's no need to install gradle.

To build the project execute the following command:

Prerequisites

For this project to build successfully and run against the local darts api code you need the darts open api artifact in the local maven repository. To do this manually then follow these steps:-

  1. Checkout https://github.com/hmcts/darts-api
  2. Run publishToMavenLocal to install the openapi artifact into the local maven repository
  ./gradlew build

Environment variables

To run the service locally, you must set the following environment variables on your machine. The required value of each variable is stored in Azure Key Vault as a Secret.

Environment Variable Name Corresponding Azure Key Vault Secret Name
AAD_B2C_TENANT_ID AzureAdB2CTenantId
REDIS_CONNECTION_STRING redis-connection-string (local Redis uri by default)
MAX_FILE_UPLOAD_SIZE_MEGABYTES MaxFileUploadSizeInMegabytes (350mb by default)
AAD_B2C_ROPC_CLIENT_ID AzureAdB2CFuncTestROPCClientId
AAD_B2C_CLIENT_ID AzureAdB2CClientId
DAR_NOTIFY_EVENT_SECUREMENT_PASSWORD darts-gateway-DarNotifyEventSecurementPassword
DAR_NOTIFY_EVENT_SECUREMENT_USERNAME darts-gateway-DarNotifyEventSecurementUsername
DARTS_API_URL N/A (local darts uri by default)
REDIS_SSL_ENABLED N/A (true by default)
VIQ_EXTERNAL_USER_NAME The VIQ username
VIQ_EXTERNAL_PASSWORD The VIQ external facing password i.e. used by the client
VIQ_INTERNAL_PASSWORD The VIQ internal facing password i.e. used by the gateway to talk to the Idp for token acquisition
XHIBIT_EXTERNAL_USER_NAME The XHIBIT username
XHIBIT_EXTERNAL_PASSWORD The XHIBIT external facing password i.e. used by the client
XHIBIT_INTERNAL_PASSWORD The XHIBIT internal facing password i.e. used by the gateway to talk to the Idp for token acquisition
CP_EXTERNAL_USER_NAME The common platform username
CP_EXTERNAL_PASSWORD The common platform facing password i.e. used by the client
CP_INTERNAL_PASSWORD The common platform facing password i.e. used by the gateway to talk to the Idp for token acquisition
EXTERNAL_SERVICE_BASIC_AUTHORISATION_WHITELIST comma separated list of external services ids which are allowed to call the DARTS API with basic authorisation

To obtain the secret value, you may retrieve the keys from the Azure Vault by running the az keyvault secret show command in the terminal. E.g. to obtain the value for GOVUK_NOTIFY_API_KEY, you should run:

az keyvault secret show --name GovukNotifyTestApiKey --vault-name darts-stg

and inspect the "value" field of the response.

Alternatively, you can log into the Azure home page, and navigate to Key Vault -> darts-stg -> Secrets. Note in your Portal Settings you must have the CJS Common Platform directory active for the secrets to be visible.

Once you have obtained the values, set the environment variables on your system. E.g. On Mac, you may run this command in the terminal, replacing <<env var name>> and <<secret value>> as necessary:

launchctl setenv <<env var name>> <<secret value>>

Note: there is also a convenient script for exporting all these secret values from the key-vault, ensure you have the Azure CLI, az, installed and have run az login.

source bin/secrets-stg.sh

You will then need to restart intellij/terminal windows for it to take effect.

to make the changes permanent, make a .zshrc file in your users folder and populate it with this and their values:

export GOVUK_NOTIFY_API_KEY=
export AAD_B2C_TENANT_ID=
export REDIS_CONNECTION_STRING=
export MAX_FILE_UPLOAD_SIZE_MEGABYTES=
export AAD_B2C_ROPC_CLIENT_ID=
export DAR_NOTIFY_EVENT_SECUREMENT_PASSWORD=
export DAR_NOTIFY_EVENT_SECUREMENT_USERNAME=
export DARTS_API_URL=
export REDIS_SSL_ENABLED=
export AAD_B2C_CLIENT_ID=

Running the application

Create the image of the application by executing the following command:

  ./gradlew assemble

Create docker image:

  docker-compose build

Run the distribution (created in build/install/darts-gateway directory) by executing the following command:

  docker-compose up

This will start the API container exposing the application's port (set to 8070 in this template app).

In order to test if the application is up, you can call its health endpoint:

  curl http://localhost:8070/health

You should get a response similar to this:

  {"status":"UP","diskSpace":{"status":"UP","total":249644974080,"free":137188298752,"threshold":10485760}}

Alternative script to run application

To skip all the setting up and building, just execute the following command:

./bin/run-in-docker.sh

For more information:

./bin/run-in-docker.sh -h

Script includes bare minimum environment variables necessary to start api instance. Whenever any variable is changed or any other script regarding docker image/container build, the suggested way to ensure all is cleaned up properly is by this command:

docker-compose rm

It clears stopped containers correctly. Might consider removing clutter of images too, especially the ones fiddled with:

docker images

docker image rm <image-id>

There is no need to remove postgres and java or similar core images.

Configuring the WSDL APIs

Updating the DARTS Legacy SOAP API

If there are updates to the legacy darts API please add all supporting files into the directory here

Updating the Documentum Context Registry SOAP API

If there are updates to the documentum context registry please add all supporting files into the directory here

Building the new configuration

This project can be built by the gradle command :-

gradle clean build

Post build, you will find that the wsdl files directly under here will have updated and are ready for git commit. If you are happy with the wsdl changes then commit them

Building just the new darts context registry wsdl

gradle clean processContextRegistryWSDL

Building just the new legacy darts wsdl

gradle clean processDartsServiceWSDL

Other

Hystrix offers much more than Circuit Breaker pattern implementation or command monitoring. Here are some other functionalities it provides:

Troubleshooting

If the integration tests fail relating to a redis connection failure then please manually close down the running redis instance through task manager

If we encounter a SOAP general error response (as shown below) please check that the redis server is accessible:-

<SOAP-ENV:Envelope;> <SOAP-ENV:Header/> <SOAP-ENV:Body> <SOAP-ENV:Fault> <faultcode>SOAP-ENV:Client</faultcode> <faultstring xml:lang="en">An unexpected service exception occurred please check logs</faultstring> <detail> <ns3:ServiceInvocationException xmlns:ns3="http://rt.fs.documentum.emc.com/"> <messageId>E_UNKNOWN_CODE</messageId> <message>An unexpected service exception occurred please check logs</message> <exceptionType/> </ns3:ServiceInvocationException> </detail> </SOAP-ENV:Fault> </SOAP-ENV:Body> </SOAP-ENV:Envelope>

License

This project is licensed under the MIT License - see the LICENSE file for details

darts-gateway's People

Contributors

chrisdavecm avatar cmagowan-hmcts avatar davet1985 avatar hemantasharma1129 avatar hmctsdeveloper avatar jackmaloney avatar johnrace0 avatar karen-hedges avatar marcmollins avatar mario-paniccia avatar mestebanez avatar mmmalik1 avatar mokainos avatar renovate[bot] avatar richardbull avatar scott-robertson1 avatar tonymort avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Forkers

mario-paniccia

darts-gateway's Issues

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

Detected dependencies

docker-compose
docker-compose-local.yml
  • postgres 16-alpine
  • redis 7.2.5-alpine
dockerfile
Dockerfile
  • hmctspublic.azurecr.io/base/java 21-distroless
github-actions
.github/workflows/ci.yml
  • actions/checkout v4
  • actions/setup-java v4
.github/workflows/codeql.yml
  • actions/checkout v4
  • github/codeql-action v3
  • actions/setup-java v4
  • github/codeql-action v3
  • github/codeql-action v3
.github/workflows/swagger.yml
  • actions/checkout v4.1.7
  • actions/cache v4.0.2
  • actions/setup-java v4
gradle
settings.gradle
  • org.gradle.toolchains.foojay-resolver-convention 0.8.0
build.gradle
  • io.freefair.lombok 8.6
  • io.spring.dependency-management 1.1.6
  • org.springframework.boot 3.3.2
  • org.owasp.dependencycheck 9.2.0
  • com.github.ben-manes.versions 0.51.0
  • org.sonarqube 5.1.0.4882
  • org.openapi.generator 7.7.0
  • com.github.bjornvester.wsdl2java 2.0.2
  • pmd 7.2.0
  • pmd 7.2.0
  • org.apache.tomcat.embed:tomcat-embed-core 10.1.26
  • org.apache.tomcat.embed:tomcat-embed-websocket 10.1.26
  • org.apache.tomcat.embed:tomcat-embed-el 10.1.26
  • org.apache.santuario:xmlsec 4.0.2
  • org.springframework.integration:spring-integration-redis 6.3.2
  • com.nimbusds:nimbus-jose-jwt 9.40
  • org.openapitools:jackson-databind-nullable 0.2.6
  • com.google.guava:guava 33.2.1-jre
  • org.bouncycastle:bcpkix-jdk18on 1.78.1
  • org.bouncycastle:bcprov-jdk18on 1.78.1
  • org.bouncycastle:bcutil-jdk18on 1.78.1
  • wsdl4j:wsdl4j 1.6.3
  • org.glassfish.jaxb:jaxb-xjc 4.0.5
  • org.glassfish.jaxb:jaxb-runtime 4.0.5
  • org.apache.tika:tika-core 2.9.2
  • org.springdoc:springdoc-openapi-starter-webmvc-ui 2.6.0
  • org.springframework.cloud:spring-cloud-starter-openfeign 4.1.2
  • commons-fileupload:commons-fileupload 1.5
  • com.github.hmcts.java-logging:logging 6.1.5
  • org.apache.logging.log4j:log4j-api 2.23.1
  • org.apache.logging.log4j:log4j-to-slf4j 2.23.1
  • ch.qos.logback:logback-classic 1.5.6
  • ch.qos.logback:logback-core 1.5.6
  • io.github.openfeign:feign-okhttp 13.3
  • com.squareup.okio:okio 3.9.0
  • org.zalando:problem-spring-web-starter 0.29.1
  • org.apache.commons:commons-collections4 4.4
  • org.mapstruct:mapstruct 1.5.5.Final
  • org.openapitools:jackson-databind-nullable 0.2.6
  • org.apache.xmlbeans:xmlbeans 5.2.1
  • org.apache.ws.xmlschema:xmlschema-core 2.3.1
  • javax.mail:javax.mail-api 1.6.2
  • javax.activation:activation 1.1.1
  • com.sun.mail:javax.mail 1.6.2
  • com.sun.xml.bind:jaxb-impl 2.3.9
  • javax.annotation:javax.annotation-api 1.3.2
  • org.mapstruct:mapstruct-processor 1.5.5.Final
  • org.junit:junit-bom 5.10.3
  • org.mockito:mockito-inline 5.2.0
  • org.springframework.ws:spring-ws-test 4.0.11
  • commons-io:commons-io 2.16.1
  • commons-collections:commons-collections 3.2.2
  • org.xmlunit:xmlunit-core 2.10.0
  • org.xmlunit:xmlunit-matchers 2.10.0
  • org.testcontainers:testcontainers 1.20.0
  • org.springframework.cloud:spring-cloud-starter-contract-stub-runner 4.1.4
  • org.testcontainers:junit-jupiter 1.20.0
  • it.ozimov:embedded-redis 0.7.3
  • io.github.hakky54:logcaptor 2.9.3
  • org.apache.jmeter:ApacheJMeter_core 5.6.3
  • org.apache.jmeter:ApacheJMeter_http 5.6.3
context/build.gradle
  • com.github.bjornvester.wsdl2java 2.0.2
gradle-wrapper
gradle/wrapper/gradle-wrapper.properties
  • gradle 8.9
helm-values
charts/darts-gateway/values.yaml
helmv3
charts/darts-gateway/Chart.yaml
  • java 5.2.1
regex
Dockerfile
  • microsoft/ApplicationInsights-Java 3.5.3
terraform
infrastructure/apim.tf
infrastructure/state.tf
  • azurerm ~> 3.29
terraform-version
infrastructure/.terraform-version
  • hashicorp/terraform 1.9.3

  • Check this box to trigger a request for Renovate to run again on this repository

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.