{"id":24736344,"url":"https://github.com/engineering-research-and-development/true-connector-execution_core_container","last_synced_at":"2025-10-10T05:31:15.019Z","repository":{"id":37451727,"uuid":"209515561","full_name":"Engineering-Research-and-Development/true-connector-execution_core_container","owner":"Engineering-Research-and-Development","description":"Execution Core Container for IDS ecosystem  ","archived":false,"fork":false,"pushed_at":"2025-10-04T08:21:39.000Z","size":6156,"stargazers_count":8,"open_issues_count":46,"forks_count":7,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-10-04T10:17:45.093Z","etag":null,"topics":["base-connector","connector","data-sovereignty","execution-core-container","ids","ids-connector","idsa","trusted-ecosystem","trusted-execution-environment"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Engineering-Research-and-Development.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-09-19T09:34:46.000Z","updated_at":"2025-08-01T12:57:21.000Z","dependencies_parsed_at":"2023-10-15T07:10:59.957Z","dependency_job_id":"8de37806-7fd6-49c1-ae0c-e97f17286818","html_url":"https://github.com/Engineering-Research-and-Development/true-connector-execution_core_container","commit_stats":null,"previous_names":[],"tags_count":30,"template":false,"template_full_name":null,"purl":"pkg:github/Engineering-Research-and-Development/true-connector-execution_core_container","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Engineering-Research-and-Development%2Ftrue-connector-execution_core_container","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Engineering-Research-and-Development%2Ftrue-connector-execution_core_container/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Engineering-Research-and-Development%2Ftrue-connector-execution_core_container/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Engineering-Research-and-Development%2Ftrue-connector-execution_core_container/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Engineering-Research-and-Development","download_url":"https://codeload.github.com/Engineering-Research-and-Development/true-connector-execution_core_container/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Engineering-Research-and-Development%2Ftrue-connector-execution_core_container/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279002866,"owners_count":26083468,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-10T02:00:06.843Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["base-connector","connector","data-sovereignty","execution-core-container","ids","ids-connector","idsa","trusted-ecosystem","trusted-execution-environment"],"created_at":"2025-01-27T21:24:49.489Z","updated_at":"2025-10-10T05:31:14.574Z","avatar_url":"https://github.com/Engineering-Research-and-Development.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ENG Execution Core Container\n\n[![License: AGPL](https://img.shields.io/github/license/Engineering-Research-and-Development/true-connector-execution_core_container.svg)](https://opensource.org/licenses/AGPL-3.0)\n[![CI](https://github.com/Engineering-Research-and-Development/true-connector-execution_core_container/workflows/ECC/badge.svg)](https://github.com/Engineering-Research-and-Development/true-connector-execution_core_container/actions/workflows/ECC.yml) \n[![Docker badge](https://img.shields.io/docker/pulls/rdlabengpa/ids_execution_core_container.svg)](https://hub.docker.com/r/rdlabengpa/ids_execution_core_container)\n\u003cbr/\u003e\n\nThe ENG Execution Core Container, based on the IDS Base Connector, is the core component of an IDS Connector enabling:\n* the data exchange between connectors, using HTTPS, WS over HTTPS, IDSCP2 (beta)\n* interaction with the AISEC Fraunhofer DAPS Service for requiring and validating a token\n* communication with the Fraunhofer Clearing House for registering transactions\n\n![Execution Core Container Architecture](doc/connector_schema_v1.1.PNG?raw=true \"ENG Execution Core Container Architecture\")\n\n## How to Configure and Run\n\nThe configuration should be performed customizing the following variables in the **docker-compose** file:\n* **DATA_APP_ENDPOINT=https://localhost:8083/data** DataAPP endpoint for receiving data (F endpoint in the above picture)\n* **MULTIPART=mixed** DataAPP endpoint Content Type (choose mixed for Multipart/mixed or form for Multipart/form-data) \n* Edit external port if need (default values: **8086** for **web sockets over HTTPS**, **8090** for **http**, **8887** for **A endpoint** and  **8889** for **B endpoint**)\n* Forward-To protocol validation can be enabled by setting the property **application.enableProtocolValidation** to *true*. If you have this enabled please refer to the following step.\n* Forward-To protocol validation can be changed by editing **application.validateProtocol**. Default value is *true* and Forward-To URL must be set like http(https,wss)://example.com, if you choose *false* Forward-To URL can be set like http(https,wss)://example.com or just example.com and the protocol chosen (from application.properties)will be automatically set (it will be overwritten! example: http://example.com will be wss://example if you chose wss in the properties). \n\nIf you want to use your own certificate for the AISEC Fraunhofer DAPS server: \n* Put **DAPS certificates** into the cert folder and edit related settings (i.e., *application.keyStoreName*, *application.keyStorePassword*) into the *resources/application.properties* file\n\nFinally, run the application:\n\n*  Execute `docker-compose up`\n\n\n## Endpoints\nThe Execution Core Container will use two ports (http and https) as described by the Docker Compose File.\nIt will expose the following endpoints (both over https):\n\nFollowing endpoints are open for all (credentials are not required), since in real scenario, they will be accessible only from dataApp:\n\n```\n/incoming-data-app/multipartMessageBodyBinary to receive data (MultiPartMessage) with binary body from Data App (the A endpoint in the above picture)\n/incoming-data-app/multipartMessageBodyFormData to receive data (MultiPartMessage) with form-data body from Data App (the A endpoint in the above picture)\n/incoming-data-app/multipartMessageHttpHeader to receive data (MultiPartMessage) represented with IDS-Message using http headers and payload in body from Data App (the A endpoint in the above picture)\n/data to receive data (IDS Message) from a sender connector (the B endpoint in the above picture)\n```\n\nwhile 'B-endpoint' is public, and exposed to the world.\n\n```\n/data\n```\n\nMore information about security and user credentials can be found in this [link](doc/SECURITY.md)\n\n\nFurthermore, just for testing it will expose (http and https):\n\n```\n/about/version\n```\nreturns business logic version.\n\n## Configuration\nThe ECC supports three different way to exchange data:\n*  **REST endpoints** enabled if *IDSCP2=false* and *WS_OVER_HTTPS=false*\n*  **IDSCP2** enabled if *IDSCP2=true* and *WS_INTERNAL=false* (use https on the edge) or *IDSCP2=true* and *WS_INTERNAL=true* (use WS on the edge)\n*  **Web Socket over HTTPS** enabled if *WS_OVER_HTTPS=true* and *IDSCP2=false*\n\n## Firewall \u003ca name=\"firewall\"\u003e\u003c/a\u003e\n\nExecution Core Container allows setting up HttpFirewall through Spring Security. To turn it on/off, please take a look at following property: \n\n```\n#Firewall\napplication.firewall.isEnabled=true\n```\n\nIf firewall is enabled, it will read properties defined in `firewall.properties` file which easily can be modified by needs of setup.\n\n```\n#Set which HTTP header names should be allowed (if want to allow all header names, keep it empty)\nallowedHeaderNames=\n#Set which values in header names should have the exact value and allowed (if want to allow any values keep it empty)\nallowedHeaderValues=\n#Set which HTTP methods should be allowed (if want to allow all header names, keep it empty)\nallowedMethods=GET,POST\n#Set if a backslash \"\\\" or a URL encoded backslash \"%5C\" should be allowed in the path or not\nallowBackSlash=true\n#Set if a slash \"/\" that is URL encoded \"%2F\" should be allowed in the path or not\nallowUrlEncodedSlash=true\n#Set if double slash \"//\" that is URL encoded \"%2F%2F\" should be allowed in the path or not\nallowUrlEncodedDoubleSlash=true\n#Set if semicolon is allowed in the URL (i.e. matrix variables)\nallowSemicolon=true\n#Set if a percent \"%\" that is URL encoded \"%25\" should be allowed in the path or not\nallowUrlEncodedPercent=true\n#if a period \".\" that is URL encoded \"%2E\" should be allowed in the path or not\nallowUrlEncodedPeriod=true\n```\n*IMPORTANT:* If you're not an expert, the strong advice is to keep values at their default values. If you decide to change values, pay special attention to allowHeaderNames and allowHeaderValues, since those set values are exclusive and considered as only values that should be present in the header.\n\n## CORS Configuration\n\nIn order to communicate with UI, CORS (Cross-Origin Resource Sharing) settings should be configured in `application.properties` file. This allows you to specify which origins, methods, and headers are permitted when making cross-origin requests to your application.\n\n```\napplication.cors.allowed.origins=\napplication.cors.allowed.methods=\napplication.cors.allowed.headers=\n```\n\n - `application.cors.allowed.origins`: Specifies the allowed origins. If empty, all origins (*) are allowed.\n - `application.cors.allowed.methods`: Specifies the allowed HTTP methods. If empty, all methods (*) are allowed.\n - `application.cors.allowed.header`s: Specifies the allowed headers. If empty, all headers (*) are allowed.\n \n Example configuration:\n \n ```\n # Allow specific origins\napplication.cors.allowed.origins=https://example.com,https://another-example.com\n\n# Allow specific HTTP methods\napplication.cors.allowed.methods=GET,POST,PUT,DELETE\n\n# Allow specific headers\napplication.cors.allowed.headers=\n ```\n\n\n\n## How to Test\nThe reachability could be verified using the following endpoints:\n*  **http://{IP_ADDRESS}:{HTTP_PUBLIC_PORT}/about/version**\n\nKeeping the provided docker-compose will be:\n*  **http://{IP_ADDRESS}:8090/about/version**\n\n\nThe sender DataApp should send a request using the following schema, specifying in the Forward-To header the destination connector URL:\n\n## How to Exchange Data\n### REST endpoints\n#### Multipart/mixed - Example \n\n```\ncurl --location --request POST 'https://{IPADDRESS}:{A_ENDPOINT_PUBLIC_PORT}/incoming-data-app/multipartMessageBodyBinary' \\\n--header 'Content-Type: multipart/mixed; boundary=CQWZRdCCXr5aIuonjmRXF-QzcZ2Kyi4Dkn6' \\\n--header 'Forward-To: {RECEIVER_IP_ADDRESS}:{B_ENDPOINT_PUBLIC_PORT}/data' \\\n--data-raw ' --CQWZRdCCXr5aIuonjmRXF-QzcZ2Kyi4Dkn6\nContent-Disposition: form-data; name=\"header\"\nContent-Type: application/json; charset=UTF-8\nContent-Length: 1293\n   {\n  \"@context\" : {\n    \"ids\" : \"https://w3id.org/idsa/core/\",\n    \"idsc\" : \"https://w3id.org/idsa/code/\"\n  },\n  \"@type\" : \"ids:ArtifactRequestMessage\",\n  \"@id\" : \"https://w3id.org/idsa/autogen/artifactRequestMessage/36cdbc3c-993d-4efe-a9bd-a88f400ff3f6\",\n  \"ids:transferContract\" : {\n    \"@id\" : \"http://w3id.org/engrd/connector/examplecontract\"\n  },\n  \"ids:correlationMessage\" : {\n    \"@id\" : \"http://w3id.org/artifactRequestMessage/1a421b8c-3407-44a8-aeb9-253f145c869a\"\n  },\n  \"ids:securityToken\" : {\n    \"@type\" : \"ids:DynamicAttributeToken\",\n    \"@id\" : \"https://w3id.org/idsa/autogen/dynamicAttributeToken/4f81873e-ca33-47ea-b777-b5485fc53253\",\n    \"ids:tokenValue\" : \"DummyTokenValue\",\n    \"ids:tokenFormat\" : {\n      \"@id\" : \"https://w3id.org/idsa/code/JWT\"\n    }\n  },\n  \"ids:modelVersion\" : \"4.2.7\",\n  \"ids:issued\" : {\n    \"@value\" : \"2021-11-24T15:09:01.276+01:00\",\n    \"@type\" : \"http://www.w3.org/2001/XMLSchema#dateTimeStamp\"\n  },\n  \"ids:issuerConnector\" : {\n    \"@id\" : \"http://w3id.org/engrd/connector\"\n  },\n  \"ids:senderAgent\" : {\n    \"@id\" : \"http://sender.agent/sender\"\n  },\n  \"ids:recipientAgent\" : [ ],\n  \"ids:requestedArtifact\" : {\n    \"@id\" : \"http://w3id.org/engrd/connector/artifact/test1.csv\"\n  },\n  \"ids:recipientConnector\" : [ ]\n}\n\n--CQWZRdCCXr5aIuonjmRXF-QzcZ2Kyi4Dkn6\nContent-Disposition: form-data; name=\"payload\"\nContent-Type: application/json\nContent-Length: 50\n{\"catalog.offers.0.resourceEndpoints.path\":\"/pet2\"}\n\n--CQWZRdCCXr5aIuonjmRXF-QzcZ2Kyi4Dkn6--'\n```\n\nKeeping the provided configuration:\n\n\u003cdetails\u003e\n  \u003csummary\u003eMultipart mixed request\u003c/summary\u003e\n\n```\ncurl --location --request POST 'https://localhost:8887/incoming-data-app/multipartMessageBodyBinary' \\\n--header 'Content-Type: multipart/mixed; boundary=CQWZRdCCXr5aIuonjmRXF-QzcZ2Kyi4Dkn6' \\\n--header 'Forward-To: https://localhost:8889/data' \\\n--data-raw ' --CQWZRdCCXr5aIuonjmRXF-QzcZ2Kyi4Dkn6\nContent-Disposition: form-data; name=\"header\"\nContent-Type: application/json; charset=UTF-8\nContent-Length: 1293\n   {\n  \"@context\" : {\n    \"ids\" : \"https://w3id.org/idsa/core/\",\n    \"idsc\" : \"https://w3id.org/idsa/code/\"\n  },\n  \"@type\" : \"ids:ArtifactRequestMessage\",\n  \"@id\" : \"https://w3id.org/idsa/autogen/artifactRequestMessage/36cdbc3c-993d-4efe-a9bd-a88f400ff3f6\",\n  \"ids:transferContract\" : {\n    \"@id\" : \"http://w3id.org/engrd/connector/examplecontract\"\n  },\n  \"ids:correlationMessage\" : {\n    \"@id\" : \"http://w3id.org/artifactRequestMessage/1a421b8c-3407-44a8-aeb9-253f145c869a\"\n  },\n  \"ids:securityToken\" : {\n    \"@type\" : \"ids:DynamicAttributeToken\",\n    \"@id\" : \"https://w3id.org/idsa/autogen/dynamicAttributeToken/4f81873e-ca33-47ea-b777-b5485fc53253\",\n    \"ids:tokenValue\" : \"DummyTokenValue\",\n    \"ids:tokenFormat\" : {\n      \"@id\" : \"https://w3id.org/idsa/code/JWT\"\n    }\n  },\n  \"ids:modelVersion\" : \"4.2.7\",\n  \"ids:issued\" : {\n    \"@value\" : \"2021-11-24T15:09:01.276+01:00\",\n    \"@type\" : \"http://www.w3.org/2001/XMLSchema#dateTimeStamp\"\n  },\n  \"ids:issuerConnector\" : {\n    \"@id\" : \"http://w3id.org/engrd/connector\"\n  },\n  \"ids:senderAgent\" : {\n    \"@id\" : \"http://sender.agent/sender\"\n  },\n  \"ids:recipientAgent\" : [ ],\n  \"ids:requestedArtifact\" : {\n    \"@id\" : \"http://w3id.org/engrd/connector/artifact/test1.csv\"\n  },\n  \"ids:recipientConnector\" : [ ]\n}\n\n--CQWZRdCCXr5aIuonjmRXF-QzcZ2Kyi4Dkn6\nContent-Disposition: form-data; name=\"payload\"\nContent-Type: application/json\nContent-Length: 50\n{\"catalog.offers.0.resourceEndpoints.path\":\"/pet2\"}\n\n--CQWZRdCCXr5aIuonjmRXF-QzcZ2Kyi4Dkn6--'\n```\n\n\u003c/details\u003e\n\n#### Multipart/form-data - Example\n\n```\ncurl --location --request POST 'https://{IPADDRESS}:{A_ENDPOINT_PUBLIC_PORT}/incoming-data-app/multipartMessageBodyFormData' \\\n--header 'Content-Type: multipart/mixed; boundary=CQWZRdCCXr5aIuonjmRXF-QzcZ2Kyi4Dkn6' \\\n--header 'Forward-To: {RECEIVER_IP_ADDRESS}:{B_ENDPOINT_PUBLIC_PORT}/data' \\\n--form 'header=\"{\n  \\\"@context\\\" : {\n    \\\"ids\\\" : \\\"https://w3id.org/idsa/core/\\\",\n    \\\"idsc\\\" : \\\"https://w3id.org/idsa/code/\\\"\n  },\n  \\\"@type\\\" : \\\"ids:ArtifactRequestMessage\\\",\n  \\\"@id\\\" : \\\"https://w3id.org/idsa/autogen/artifactRequestMessage/36cdbc3c-993d-4efe-a9bd-a88f400ff3f6\\\",\n  \\\"ids:transferContract\\\" : {\n    \\\"@id\\\" : \\\"http://w3id.org/engrd/connector/examplecontract\\\"\n  },\n  \\\"ids:correlationMessage\\\" : {\n    \\\"@id\\\" : \\\"http://w3id.org/artifactRequestMessage/1a421b8c-3407-44a8-aeb9-253f145c869a\\\"\n  },\n  \\\"ids:securityToken\\\" : {\n    \\\"@type\\\" : \\\"ids:DynamicAttributeToken\\\",\n    \\\"@id\\\" : \\\"https://w3id.org/idsa/autogen/dynamicAttributeToken/4f81873e-ca33-47ea-b777-b5485fc53253\\\",\n    \\\"ids:tokenValue\\\" : \\\"DummyTokenValue\\\",\n    \\\"ids:tokenFormat\\\" : {\n      \\\"@id\\\" : \\\"https://w3id.org/idsa/code/JWT\\\"\n    }\n  },\n  \\\"ids:modelVersion\\\" : \\\"4.2.7\\\",\n  \\\"ids:issued\\\" : {\n    \\\"@value\\\" : \\\"2021-11-24T15:09:01.276+01:00\\\",\n    \\\"@type\\\" : \\\"http://www.w3.org/2001/XMLSchema#dateTimeStamp\\\"\n  },\n  \\\"ids:issuerConnector\\\" : {\n    \\\"@id\\\" : \\\"http://w3id.org/engrd/connector\\\"\n  },\n  \\\"ids:senderAgent\\\" : {\n    \\\"@id\\\" : \\\"http://sender.agent/sender\\\"\n  },\n  \\\"ids:recipientAgent\\\" : [ ],\n  \\\"ids:requestedArtifact\\\" : {\n    \\\"@id\\\" : \\\"http://w3id.org/engrd/connector/artifact/test1.csv\\\"\n  },\n  \\\"ids:recipientConnector\\\" : [ ]\n}\"' \\\n--form 'payload=\"{\\\"catalog.offers.0.resourceEndpoints.path\\\":\\\"/pet2\\\"}\";type=application/json; charset=UTF-8'\n```\n\n\nKeeping the provided configuration:\n\n\u003cdetails\u003e\n  \u003csummary\u003eMultipart form request\u003c/summary\u003e\n\n```\ncurl --location --request POST 'https://localhost:8887/incoming-data-app/multipartMessageBodyFormData' \\\n--header 'Content-Type: multipart/mixed; boundary=CQWZRdCCXr5aIuonjmRXF-QzcZ2Kyi4Dkn6' \\\n--header 'Forward-To: https://localhost:8889/data' \\\n--form 'header=\"{\n  \\\"@context\\\" : {\n    \\\"ids\\\" : \\\"https://w3id.org/idsa/core/\\\",\n    \\\"idsc\\\" : \\\"https://w3id.org/idsa/code/\\\"\n  },\n  \\\"@type\\\" : \\\"ids:ArtifactRequestMessage\\\",\n  \\\"@id\\\" : \\\"https://w3id.org/idsa/autogen/artifactRequestMessage/36cdbc3c-993d-4efe-a9bd-a88f400ff3f6\\\",\n  \\\"ids:transferContract\\\" : {\n    \\\"@id\\\" : \\\"http://w3id.org/engrd/connector/examplecontract\\\"\n  },\n  \\\"ids:correlationMessage\\\" : {\n    \\\"@id\\\" : \\\"http://w3id.org/artifactRequestMessage/1a421b8c-3407-44a8-aeb9-253f145c869a\\\"\n  },\n  \\\"ids:securityToken\\\" : {\n    \\\"@type\\\" : \\\"ids:DynamicAttributeToken\\\",\n    \\\"@id\\\" : \\\"https://w3id.org/idsa/autogen/dynamicAttributeToken/4f81873e-ca33-47ea-b777-b5485fc53253\\\",\n    \\\"ids:tokenValue\\\" : \\\"DummyTokenValue\\\",\n    \\\"ids:tokenFormat\\\" : {\n      \\\"@id\\\" : \\\"https://w3id.org/idsa/code/JWT\\\"\n    }\n  },\n  \\\"ids:modelVersion\\\" : \\\"4.2.7\\\",\n  \\\"ids:issued\\\" : {\n    \\\"@value\\\" : \\\"2021-11-24T15:09:01.276+01:00\\\",\n    \\\"@type\\\" : \\\"http://www.w3.org/2001/XMLSchema#dateTimeStamp\\\"\n  },\n  \\\"ids:issuerConnector\\\" : {\n    \\\"@id\\\" : \\\"http://w3id.org/engrd/connector\\\"\n  },\n  \\\"ids:senderAgent\\\" : {\n    \\\"@id\\\" : \\\"http://sender.agent/sender\\\"\n  },\n  \\\"ids:recipientAgent\\\" : [ ],\n  \\\"ids:requestedArtifact\\\" : {\n    \\\"@id\\\" : \\\"http://w3id.org/engrd/connector/artifact/test1.csv\\\"\n  },\n  \\\"ids:recipientConnector\\\" : [ ]\n}\"' \\\n--form 'payload=\"{\\\"catalog.offers.0.resourceEndpoints.path\\\":\\\"/pet2\\\"}\";type=application/json; charset=UTF-8'\n```\n\u003c/details\u003e\n\n#### HTTP-Header - Example\n\n```\ncurl --location --request POST 'https://{IPADDRESS}:{A_ENDPOINT_PUBLIC_PORT}/incoming-data-app/multipartMessageHttpHeader' \\\n--header 'Content-Type: text/plain' \\\n--header 'Forward-To: {RECEIVER_IP_ADDRESS}:8889/data' \\\n--header 'IDS-Messagetype: ids:ArtifactRequestMessage' \\\n--header 'IDS-Id: https://w3id.org/idsa/autogen/artifactResponseMessage/eb3ab487-dfb0-4d18-b39a-585514dd044f' \\\n--header 'IDS-Issued: 2021-11-24T13:09:42.306Z' \\\n--header 'IDS-IssuerConnector: http://w3id.org/engrd/connector/' \\\n--header 'IDS-ModelVersion: 4.2.7' \\\n--header 'IDS-RequestedArtifact: http://w3id.org/engrd/connector/artifact/1' \\\n--header 'IDS-SecurityToken-Id: https://w3id.org/idsa/autogen/958a6a2a-5a94-4cf9-ad72-b39c59ee8955' \\\n--header 'IDS-SecurityToken-TokenFormat: https://w3id.org/idsa/code/JWT' \\\n--header 'IDS-SecurityToken-TokenValue: DummyTokenValue' \\\n--header 'IDS-SecurityToken-Type: ids:DynamicAttributeToken' \\\n--header 'IDS-SenderAgent: http://sender.agent.com/' \\\n--data-raw '{\"catalog.offers.0.resourceEndpoints.path\":\"/pet2\"}'\n```\n\n\nKeeping the provided configuration:\n\n\u003cdetails\u003e\n  \u003csummary\u003eHttp header request\u003c/summary\u003e\n\n```\ncurl --location --request POST 'https://localhost:8887/incoming-data-app/multipartMessageHttpHeader' \\\n--header 'Content-Type: text/plain' \\\n--header 'Forward-To: https//localhost:8889/data' \\\n--header 'IDS-Messagetype: ids:ArtifactRequestMessage' \\\n--header 'IDS-Id: https://w3id.org/idsa/autogen/artifactResponseMessage/eb3ab487-dfb0-4d18-b39a-585514dd044f' \\\n--header 'IDS-Issued: 2021-11-24T13:09:42.306Z' \\\n--header 'IDS-IssuerConnector: http://w3id.org/engrd/connector/' \\\n--header 'IDS-ModelVersion: 4.2.7' \\\n--header 'IDS-RequestedArtifact: http://w3id.org/engrd/connector/artifact/1' \\\n--header 'IDS-SecurityToken-Id: https://w3id.org/idsa/autogen/958a6a2a-5a94-4cf9-ad72-b39c59ee8955' \\\n--header 'IDS-SecurityToken-TokenFormat: https://w3id.org/idsa/code/JWT' \\\n--header 'IDS-SecurityToken-TokenValue: DummyTokenValue' \\\n--header 'IDS-SecurityToken-Type: ids:DynamicAttributeToken' \\\n--header 'IDS-SenderAgent: http://sender.agent.com/' \\\n--data-raw '{\"catalog.offers.0.resourceEndpoints.path\":\"/pet2\"}'\n```\n\n\u003c/details\u003e\n\nThe receiver connector will receive the request to the specified \"*Forward-To*\" URL, process data and finally send data to the *DATA_APP_ENDPOINT* as specified in its docker-compose. \nThe data will be sent to the Data App using a body request as specified by the MULTIPART environment variable in the docker-compose.\n\n### IDSCP2\nIDSCP2 is used only between ECCs.\nFollow the REST endpoint or WS examples, put the server hostname/ip address in the Forward-To header (*wss/https://{RECEIVER_IP_ADDRESS/Hostname}:{WS_PUBLIC_PORT}*).\n\n### Web Socket over HTTPS\nFollow the REST endpoint examples, taking care to use *wss://{RECEIVER_IP_ADDRESS}:{WS_PUBLIC_PORT}* in the Forward-To header.\n\n### Broker\n\nInformation on how to interact with a Broker, can be found on following [link](doc/BROKER.md)\n\n### Self Description API \nTo manage your Self Description Document please check following [link](doc/SELF_DESCRIPTION.md)\n\n### Audit logging\nAudit events logging can be configured following [this document](doc/AUDIT.md)\n\n### Connector health check\n\nConnector health check functionality can be found in [this document](doc/HEALTHCHECK.md)\n\n## Developer guide section\n\n## Building the execution core container\n\n**Requirements:**\n\n `Java11` `Apache Maven`\n \nTo build the execution core container you will have to do one of the following:\n\n**Solution 1**\n\nUse provided libraries on GitHub Package. To do so, you will have to modify Apache Maven settings.xml file like following:\n\nAdd in servers section:\n\n```xml\n\u003cservers\u003e\n  \u003cserver\u003e\n    \u003cid\u003egithub\u003c/id\u003e \n    \u003cusername\u003esome_username\u003c/username\u003e\n    \u003cpassword\u003e{your GitHub Personal Access Token}\u003c/password\u003e \n  \u003c/server\u003e\n\u003c/servers\u003e\n```\n\nHow to get GH PAT, you can check following [link](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token)\n\n\n**Solution 2**\n\n * Clone [Multipart Message Library](https://github.com/Engineering-Research-and-Development/true-connector-multipart_message_library) \n * Once this project is cloned, run `mvn clean install`\n\nThis will install an internal library that is needed by the execution core container project.\n\nAfter that you can run `mvn clean package` in the root of the execution core container project, to build it.\n\n\n**NOTE:** If you proceed with Solution 2, pay attention to the Multipart Message Library version in pom.xml file, and check if the same version is used in the execution core container pom.xml, if not modify them according to the one from the clone repository.\n\n### Running ECC from IDE\n\nIf you wish to run ECC from IDE, please address following prerequisite:\n\n * Add src/main/resources directory to class path; either by making this change in Run configuration in IDE or comment out exclude section in pom.xml. This resource directory is removed from final jar, to externalize property files from docker image.\n \n * Copy ssl-server.jks file from [TRUE Connector](https://github.com/Engineering-Research-and-Development/true-connector/blob/main/ecc_cert/ssl-server.jks) repo into some directory on the file system\n \n * Configure property application.targetDirectory= to point to the file containing ssl-server.jks file\n * Configure DAPS related properties, if DAPS will be used.\n \n ```\napplication.dapsUrl= \napplication.keyStoreName=\napplication.keyStorePassword=\napplication.keystoreAliasName=\napplication.trustStoreName=\napplication.trustStorePassword=\napplication.connectorUUID=\napplication.dapsJWKSUrl=\n```\n * Choose one of 2 profiles: SENDER or RECEIVER.\n * Set environment variable with following name: *AES256-SECRET-KEY* with any value (MyPassword for example). This will be used for encrypting AuditLog column in DB.\n * Start application \n \n### Creating docker image\n\nOnce you build the execution core container, if required, you can build docker image, by executing following command, from terminal, inside the root of the project:\n\n```\ndocker build -t some_tag .\n```\n### GitHub Workflow\n\nThis repository implements following branch management:\n\n![diagram](doc/workflow//github_actions_workflow.drawio.png?raw=true \"GitHub Workflow diagram\")\n\nand has several GitHub action files to support such functionality. Those files are located in:\n\n*.github\\workflows\\*  \n\n#### feature_hotfix.yml\n\nUsed when code is pushed to branch prefixed with feature/ or hotfix/\n\nCustomize GHA to fit your needs. For now, just run mvn clean package\n\n#### develop.yml\n\nExecuted when code is pushed to develop branch.\n\n#### maven_release.yml\n\nManual trigger of the GHA.\u003c/br\u003e\nPerform mvn release:prepare and mvn release:perform.\n\nInput parameters:\u003c/br\u003e\nrelease version\u003c/br\u003e\nnext development version\u003c/br\u003e\ntag version\n\n#### docker-publish.yml\n\nManual trigger of the GHA.\u003c/br\u003e\nBuild docker image, and push it to dockerhub.\u003c/br\u003e\nSign with cosign.\n\nInput parameters:\u003cbr/\u003e\nversionName\u003cbr/\u003e\ntagMessage\n\n### Issue management\n\nCreate issue in Issue tab in GitHub repo, before starting to work on new functionality. It would be nice to provide task breakdown, with estimation. Try not to have activities that are longer than 8 hours. If such activity is present in task breakdown, please split this activity in 2 or more sub activities, trying that new sub activities are not bigger than 8 hours.\n\nExample could be like following:\n\n~~Implement new ServiceA - 16h~~\u003c/br\u003e\nImplement method A in ServiceA 4h\u003c/br\u003e\nImplement method B in ServiceA 3h\u003c/br\u003e\nImplement method C in ServiceA 7h\u003c/br\u003e\nImplement method D in ServiceA 2h\u003c/br\u003e\nWrite unit tests for ServiceA - 6 hours\u003c/br\u003e\nUpdate documentation - 2 hours\u003c/br\u003e\n\n\n### Working on new feature\n\nIf you need to work on new feature, be sure first to pull changes from origin, and create new branch, following the naming convention from develop branch.\n\n### Creating Pull Request\n\nWhen creating pull request, double check if PR will merge to develop branch and not master. If this is not the case, change destination branch to be develop.\n\n## Code coverage\n\nCode coverage is checked by using jacoco plugin.\n\n![Execution Core Container Code Coverage](doc/jacoco.jpg?raw=true \"ENG Execution Core Container Code coverage\")\n\nFor more up to date information about code coverage, you can check report after you build a project. Report can be found in \n\n```\ntarget\\site\\jacoco\\index.html\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fengineering-research-and-development%2Ftrue-connector-execution_core_container","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fengineering-research-and-development%2Ftrue-connector-execution_core_container","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fengineering-research-and-development%2Ftrue-connector-execution_core_container/lists"}