bc8cf51c505af4864e409243d72bc1bb2ff71799
[dcaegen2/collectors/hv-ves.git] /
1 /*
2  * ============LICENSE_START=======================================================
3  * dcaegen2-collectors-veshv
4  * ================================================================================
5  * Copyright (C) 2019 NOKIA
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20 package org.onap.dcae.collectors.veshv.config.impl.gsonadapters
21
22 import arrow.core.Option
23 import com.google.gson.JsonDeserializationContext
24 import com.google.gson.JsonDeserializer
25 import com.google.gson.JsonElement
26 import com.google.gson.JsonObject
27 import org.onap.dcae.collectors.veshv.config.impl.PartialSecurityConfig
28 import org.onap.dcae.collectors.veshv.ssl.boundary.SecurityKeysPaths
29 import java.io.File
30 import java.lang.reflect.Type
31
32 /**
33  * @author Pawel Biniek <pawel.biniek@nokia.com>
34  * @since March 2019
35  */
36 internal class SecurityAdapter : JsonDeserializer<PartialSecurityConfig> {
37
38     override fun deserialize(json: JsonElement, typeOfT: Type, context: JsonDeserializationContext?) =
39             json.asJsonObject.let { security ->
40                 if (security.entrySet().isEmpty() || hasSslDisableSet(security)) {
41                     PartialSecurityConfig(Option.empty())
42                 } else {
43                     PartialSecurityConfig(Option.just(security.securityKeys(::asImmutableSecurityKeys)))
44                 }
45             }
46
47     private fun hasSslDisableSet(security: JsonObject) =
48             security.has(SSL_DISABLE_KEY) && security[SSL_DISABLE_KEY].asBoolean
49
50     private fun JsonObject.securityKeys(f: (JsonObject) -> SecurityKeysPaths) = f(getAsJsonObject(KEYS_OBJECT_KEY))
51
52     private fun asImmutableSecurityKeys(keys: JsonObject) = SecurityKeysPaths(
53             File(keys[KEY_STORE_FILE_KEY].asString).toPath(),
54             keys[KEY_STORE_PASSWORD_KEY].asString,
55             File(keys[TRUST_STORE_FILE_KEY].asString).toPath(),
56             keys[TRUST_STORE_PASSWORD_KEY].asString
57     )
58
59     companion object {
60         private val SSL_DISABLE_KEY = "sslDisable"
61         private val KEYS_OBJECT_KEY = "keys"
62         private val KEY_STORE_FILE_KEY = "keyStoreFile"
63         private val KEY_STORE_PASSWORD_KEY = "keyStorePassword"
64         private val TRUST_STORE_FILE_KEY = "trustStoreFile"
65         private val TRUST_STORE_PASSWORD_KEY = "trustStorePassword"
66     }
67 }
68