diff --git a/.environment/gitleaks/gitleaks-config.toml b/.environment/gitleaks/gitleaks-config.toml index d95d877f4b8..da0f618980d 100644 --- a/.environment/gitleaks/gitleaks-config.toml +++ b/.environment/gitleaks/gitleaks-config.toml @@ -203,6 +203,8 @@ title = "PRIME ReportStream Gitleaks Configuration" 'authority\", \"extension\"', # FHIR extension URL also shows up in normal FHIR test data 'ApiKeyCredential\(\"flexion\"', 'authType: \"two-legged\"', + '\"apiKey\"', + 'api-key\" to \"oracle123\"', 'Authorization-Type: \"username/password\"', 'cdctiautomated_sa' ] diff --git a/prime-router/settings/STLTs/Oracle/oracle-rln.yml b/prime-router/settings/STLTs/Oracle/oracle-rln.yml index 150e2a1126b..bc6b9639009 100644 --- a/prime-router/settings/STLTs/Oracle/oracle-rln.yml +++ b/prime-router/settings/STLTs/Oracle/oracle-rln.yml @@ -45,9 +45,21 @@ initialTime: "00:00" timeZone: "EASTERN" maxReportCount: 100 + description: "" transport: - type: "SFTP" - host: "172.17.6.20" - port: 22 - filePath: "./upload" - credentialName: null + reportUrl: "https://spaces.erxhubdevcert.cerner.com/etor" + authTokenUrl: "" + encryptionKeyUrl: "" + authType: "apiKey" + tlsKeystore: null + parameters: {} + jwtParams: {} + headers: + Content-Type: "text/plain" + shared-api-key: "From Vault" + authHeaders: {} + type: "REST" + externalName: null + enrichmentSchemaNames: [] + timeZone: null + dateTimeFormat: "OFFSET" diff --git a/prime-router/src/main/kotlin/transport/RESTTransport.kt b/prime-router/src/main/kotlin/transport/RESTTransport.kt index 46bc89ce262..7f7f0c8e448 100644 --- a/prime-router/src/main/kotlin/transport/RESTTransport.kt +++ b/prime-router/src/main/kotlin/transport/RESTTransport.kt @@ -113,6 +113,7 @@ class RESTTransport(private val httpClient: HttpClient? = null) : ITransport { if (restTransportInfo.authType == "apiKey") { val apiKeyCredential = credential as UserApiKeyCredential + httpHeaders["shared-api-key"] = apiKeyCredential.apiKey httpHeaders["System_ID"] = apiKeyCredential.user httpHeaders["Key"] = apiKeyCredential.apiKey accessToken = apiKeyCredential.apiKey diff --git a/prime-router/src/testIntegration/kotlin/transport/RESTTransportIntegrationTests.kt b/prime-router/src/testIntegration/kotlin/transport/RESTTransportIntegrationTests.kt index 94a523c8179..a78b3729a53 100644 --- a/prime-router/src/testIntegration/kotlin/transport/RESTTransportIntegrationTests.kt +++ b/prime-router/src/testIntegration/kotlin/transport/RESTTransportIntegrationTests.kt @@ -977,6 +977,64 @@ hnm8COa8Kr+bnTqzScpQuOfujHcFEtfcYUGfSS6HusxidwXx+lYi1A== assertThat(retryItems).isNull() } + // Epic localhost end-to-end testing + private val oracleRlNRestTransport = RESTTransportType( + "https://sendURL", + "", + authType = "apiKey", + headers = mapOf( + "Content-Type" to "text/plain", + "shared-api-key" to "From Vault" + ) + ) + + val expectedHttpHeaders = mapOf( + "Content-Type" to "text/plain", + "shared-api-key" to "oracle123", + "System_ID" to "test-user", + "Key" to "oracle123" + ) + + @Test + fun `test transport postReport with valid message to oracle-rln--etor-nbs-results`() { + val header = makeHeader() + val mockRestTransport = spyk(RESTTransport(mockClientAuthOk())) + + // Given: + // lookupDefaultCredential returns mock UserApiKeyCredential object to allow + // the getAuthTokenWIthUserApiKey() to be called. + every { mockRestTransport.lookupDefaultCredential(any()) }.returns( + UserApiKeyCredential( + "test-user", + "oracle123" + ) + ) + + // When: + // RESTTransport is called WITH flexionRestTransportType which has transport.parameters + val retryItems = mockRestTransport.send( + oracleRlNRestTransport, header, reportId, "test", null, + context, actionHistory, mockk(relaxed = true) + ) + + // Then: + // postReport should be called with correct httpheaders' values as given. + verify { + runBlocking { + mockRestTransport.postReport( + any(), + any(), + any(), + expectedHttpHeaders, + any(), + any(), + any() + ) + } + } + assertThat(retryItems).isNull() + } + @Test fun `test post vs put http client`() { val logger = mockkClass(Logger::class)