Merge "Policy Model Distribution POC Issue-ID: DCAEGEN2-1868"
[dcaegen2/platform.git] / mod2 / catalog-service / src / main / java / org / onap / dcaegen2 / platform / mod / util / PolicyModelUtils.java
1 /*
2  * ============LICENSE_START=======================================================
3  *  org.onap.dcae
4  *  ================================================================================
5  *  Copyright (c) 2020 AT&T Intellectual Property. All rights reserved.
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
21 package org.onap.dcaegen2.platform.mod.util;
22
23 import io.netty.handler.ssl.SslContext;
24 import io.netty.handler.ssl.SslContextBuilder;
25 import io.netty.handler.ssl.util.InsecureTrustManagerFactory;
26 import org.onap.dcaegen2.platform.mod.model.exceptions.policymodel.PolicyModelDistributionEnvNotFoundException;
27 import org.onap.dcaegen2.platform.mod.model.policymodel.PolicyModelDistributionEnv;
28 import org.springframework.beans.factory.annotation.Value;
29 import org.springframework.http.HttpHeaders;
30 import org.springframework.http.client.reactive.ReactorClientHttpConnector;
31 import org.springframework.stereotype.Component;
32 import org.springframework.web.reactive.function.client.ExchangeFilterFunctions;
33 import org.springframework.web.reactive.function.client.WebClient;
34 import reactor.netty.http.client.HttpClient;
35
36 import javax.annotation.PostConstruct;
37 import javax.net.ssl.SSLException;
38 import java.util.HashMap;
39 import java.util.Map;
40
41 /**
42  * Policy Model Service Utils to get URL, Username, Password, Webclient
43  */
44
45 @Component
46 public class PolicyModelUtils {
47
48     @Value("${url.path}")
49     private String urlpath;
50
51     @Value("${dev.server}")
52     private String devServer;
53
54     @Value("${dev.port}")
55     private String devServerPort;
56
57     @Value("${dev.user}")
58     private String devServerUser;
59
60     @Value("${dev.password}")
61     private String devServerUserPassword;
62
63     @Value("${pst.server}")
64     private String pstServer;
65
66     @Value("${pst.port}")
67     private String pstServerPort;
68
69     @Value("${pst.user}")
70     private String pstServerUser;
71
72     @Value("${pst.password}")
73     private String pstServerUserPassword;
74
75     @Value("${ete.server}")
76     private String eteServer;
77
78     @Value("${ete.port}")
79     private String eteServerPort;
80
81     @Value("${ete.user}")
82     private String eteServerUser;
83
84     @Value("${ete.password}")
85     private String eteServerUserPassword;
86
87     @Value("${prod.server}")
88     private String prodServer;
89
90     @Value("${prod.port}")
91     private String prodServerPort;
92
93     @Value("${prod.user}")
94     private String prodServerUser;
95
96     @Value("${prod.password}")
97     private String prodServerUserPassword;
98
99     Map<String, String> envToUrlMap,envToUserNameMap,envToPasswordMap;
100
101     /**
102      * Creates a Policy Model Distribution Engine URL for the Environment requested
103      */
104     @PostConstruct
105     public void init() {
106         envToUrlMap = new HashMap<>();
107         envToUserNameMap = new HashMap();
108         envToPasswordMap = new HashMap();
109
110         envToUrlMap.put(PolicyModelDistributionEnv.DEV.name(), "https://"+ devServer + ":" + devServerPort + urlpath);
111         envToUrlMap.put(PolicyModelDistributionEnv.PST.name(), "https://"+ pstServer + ":" + pstServerPort + urlpath);
112         envToUrlMap.put(PolicyModelDistributionEnv.ETE.name(), "https://"+ eteServer + ":" + eteServerPort + urlpath);
113         envToUrlMap.put(PolicyModelDistributionEnv.PROD.name(), "https://"+ prodServer + ":" + prodServerPort + urlpath);
114
115         envToUserNameMap.put(PolicyModelDistributionEnv.DEV.name(), devServerUser);
116         envToUserNameMap.put(PolicyModelDistributionEnv.PST.name(), pstServerUser);
117         envToUserNameMap.put(PolicyModelDistributionEnv.ETE.name(), eteServerUser);
118         envToUserNameMap.put(PolicyModelDistributionEnv.PROD.name(), prodServerUser);
119
120         envToPasswordMap.put(PolicyModelDistributionEnv.DEV.name(), devServerUserPassword);
121         envToPasswordMap.put(PolicyModelDistributionEnv.PST.name(), pstServerUserPassword);
122         envToPasswordMap.put(PolicyModelDistributionEnv.ETE.name(), eteServerUserPassword);
123         envToPasswordMap.put(PolicyModelDistributionEnv.PROD.name(), prodServerUserPassword);
124     }
125
126     /**
127      * Generates a Policy Model Distribution Engine URL for the Environment
128      *
129      * @param env
130      * @return
131      */
132     public String getPolicyEngineURL(String env) {
133         if(!envToUrlMap.containsKey(env)) throw new PolicyModelDistributionEnvNotFoundException(String.format("Policy Model Environment with env %s invalid", env));
134         return envToUrlMap.get(env);
135     }
136
137
138
139     /**
140      * Generates a Policy Model Distribution Engine UserName for the Environment
141      *
142      * @param env
143      * @return
144      */
145
146     public String getUserName(String env) {
147         if(!envToUserNameMap.containsKey(env)) throw new PolicyModelDistributionEnvNotFoundException(String.format("Policy Model Environment with env %s invalid", env));
148         return envToUserNameMap.get(env);
149     }
150
151
152     /**
153      * Generates a Policy Model Distribution Engine Password for the Environment
154      *
155      * @param env
156      * @return
157      */
158
159     public String getPassword(String env) {
160         if(!envToPasswordMap.containsKey(env)) throw new PolicyModelDistributionEnvNotFoundException(String.format("Policy Model Environment with env %s invalid", env));
161         return envToPasswordMap.get(env);
162     }
163
164     /**
165      * Generates a Policy Model Distribution Engine Webclient for the Environment
166      *
167      * @param env
168      * @return
169      */
170     public WebClient getWebClient(String env) throws SSLException {
171         String userName = getUserName(env);
172         String password = getPassword(env);
173
174         SslContext sslContext = SslContextBuilder.forClient()
175                 .trustManager(InsecureTrustManagerFactory.INSTANCE)
176                 .build();
177         HttpClient httpClient = HttpClient.create().secure(t -> t.sslContext(sslContext));
178         return WebClient.builder().clientConnector(new ReactorClientHttpConnector(httpClient))
179                 .defaultHeader(HttpHeaders.CONTENT_TYPE, "application/yaml")
180                 .filter(ExchangeFilterFunctions.basicAuthentication(userName, password))
181                 .build();
182     }
183
184
185
186 }