Enhance / fix REST resource resolution
[ccsdk/cds.git] / ms / blueprintsprocessor / modules / commons / rest-lib / src / main / kotlin / org / onap / ccsdk / apps / blueprintsprocessor / rest / service / BasicAuthRestClientService.kt
index 130706d..0502f67 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2017-2018 AT&T Intellectual Property.
+ * Copyright © 2017-2019 AT&T, Bell Canada
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
 
 package org.onap.ccsdk.apps.blueprintsprocessor.rest.service
 
+import org.apache.http.message.BasicHeader
 import org.onap.ccsdk.apps.blueprintsprocessor.rest.BasicAuthRestClientProperties
-import org.onap.ccsdk.apps.blueprintsprocessor.rest.utils.WebClientUtils
 import org.springframework.http.HttpHeaders
 import org.springframework.http.MediaType
-import org.springframework.web.reactive.function.BodyInserters
-import org.springframework.web.reactive.function.client.ExchangeFilterFunctions
-import org.springframework.web.reactive.function.client.WebClient
-
-
-class BasicAuthRestClientService(private val restClientProperties: BasicAuthRestClientProperties) : BlueprintWebClientService {
-
-    private var webClient: WebClient? = null
-
-    override fun webClient(): WebClient {
-        if (webClient == null) {
-            webClient = WebClient.builder()
-                    .baseUrl(restClientProperties.url)
-                    .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
-                    .defaultHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE)
-                    .filter(ExchangeFilterFunctions
-                            .basicAuthentication(restClientProperties.userId, restClientProperties.token))
-                    .filter(WebClientUtils.logRequest())
-                    .filter(WebClientUtils.logResponse())
-                    .build()
-        }
-        return webClient!!
-    }
-
-    override fun <T> getResource(path: String, responseType: Class<T>): T {
-        return getResource(path, null, responseType)
-    }
-
-    override fun <T> getResource(path: String, headers: Map<String, String>?, responseType: Class<T>): T {
-        return webClient().get()
-                .uri(path)
-                .headers { httpHeaders ->
-                    headers?.forEach {
-                        httpHeaders.set(it.key, it.value)
-                    }
-                }
-                .retrieve()
-                .bodyToMono(responseType).block()!!
-    }
-
-    override fun <T> postResource(path: String, request: Any, responseType: Class<T>): T {
-        return postResource(path, null, request, responseType)
+import java.nio.charset.Charset
+import java.util.*
+
+class BasicAuthRestClientService(private val restClientProperties: BasicAuthRestClientProperties) :
+    BlueprintWebClientService {
+
+    override fun headers(): Array<BasicHeader> {
+        val encodedCredentials = setBasicAuth(restClientProperties.username, restClientProperties.password)
+        val params = arrayListOf<BasicHeader>()
+        params.add(BasicHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE))
+        params.add(BasicHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE))
+        params.add(BasicHeader(HttpHeaders.AUTHORIZATION, "Basic $encodedCredentials"))
+        return params.toTypedArray()
     }
 
-    override fun <T> postResource(path: String, headers: Map<String, String>?, request: Any, responseType: Class<T>): T {
-        return webClient().post()
-                .uri(path)
-                .headers { httpHeaders ->
-                    headers?.forEach {
-                        httpHeaders.set(it.key, it.value)
-                    }
-                }
-                .body(BodyInserters.fromObject(request))
-                .retrieve().bodyToMono(responseType).block()!!
+    override fun host(uri: String): String {
+        return restClientProperties.url + uri
     }
 
-    override fun <T> exchangeResource(methodType: String, path: String, request: Any, responseType: Class<T>): T {
-        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+    private fun setBasicAuth(username: String, password: String): String {
+        val credentialsString = "$username:$password"
+        return Base64.getEncoder().encodeToString(credentialsString.toByteArray(Charset.defaultCharset()))
     }
 }
\ No newline at end of file