Fix some security vulnerabilities
[vfc/nfvo/driver/vnfm/svnfm.git] / nokiav2 / driver / src / main / java / org / onap / vfc / nfvo / driver / vnfm / svnfm / nokia / vnfm / CbamRestApiProvider.java
1 /*
2  * Copyright 2016-2017, Nokia Corporation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm;
17
18 import com.google.common.annotations.VisibleForTesting;
19 import com.nokia.cbam.catalog.v1.api.DefaultApi;
20 import com.nokia.cbam.lcm.v32.ApiClient;
21 import com.nokia.cbam.lcm.v32.api.OperationExecutionsApi;
22 import com.nokia.cbam.lcm.v32.api.VnfsApi;
23 import com.nokia.cbam.lcn.v32.api.SubscriptionsApi;
24 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.api.VnfmInfoProvider;
25 import org.onap.vnfmdriver.model.VnfmInfo;
26 import org.springframework.beans.factory.annotation.Autowired;
27 import org.springframework.beans.factory.annotation.Value;
28 import org.springframework.stereotype.Component;
29
30 /**
31  * Responsible for providing client to access CBAM REST API
32  */
33 @Component
34 public class CbamRestApiProvider {
35     public static final String NOKIA_LCN_API_VERSION = "3.2";
36     public static final String NOKIA_LCM_API_VERSION = "3.2";
37     public static final String AUTH_NAME = "test";
38     private final DriverProperties driverProperties;
39     private final CbamTokenProvider tokenProvider;
40     private final VnfmInfoProvider vnfmInfoProvider;
41     private final CbamSecurityProvider cbamSecurityProvider;
42     @Value("${cbamKeyCloakBaseUrl}")
43     private String cbamKeyCloakBaseUrl;
44     @Value("${cbamUsername}")
45     private String username;
46     @Value("${cbamPassword}")
47     private String password;
48
49     @Autowired
50     public CbamRestApiProvider(DriverProperties driverProperties, CbamTokenProvider cbamTokenProvider, VnfmInfoProvider vnfmInfoProvider, CbamSecurityProvider cbamSecurityProvider) {
51         this.driverProperties = driverProperties;
52         this.tokenProvider = cbamTokenProvider;
53         this.vnfmInfoProvider = vnfmInfoProvider;
54         this.cbamSecurityProvider = cbamSecurityProvider;
55     }
56
57     /**
58      * @param vnfmId the identifier of the VNFM
59      * @return API to access CBAM LCM API
60      */
61     public VnfsApi getCbamLcmApi(String vnfmId) {
62         return buildLcmApiClient(vnfmId).createService(VnfsApi.class);
63     }
64
65     /**
66      * @param vnfmId the identifier of the VNFM
67      * @return API to access the operation executions
68      */
69     public OperationExecutionsApi getCbamOperationExecutionApi(String vnfmId) {
70         return buildLcmApiClient(vnfmId).createService(OperationExecutionsApi.class);
71     }
72
73     /**
74      * @param vnfmId the identifier of the VNFM
75      * @return API to access CBAM LCN subscription API
76      */
77     public SubscriptionsApi getCbamLcnApi(String vnfmId) {
78         return buildLcnApiClient(vnfmId).createService(SubscriptionsApi.class);
79     }
80
81     /**
82      * @param vnfmId the identifier of the VNFM
83      * @return API to access CBAM catalog API
84      */
85     public DefaultApi getCbamCatalogApi(String vnfmId) {
86         return buildCatalogApiClient(vnfmId).createService(DefaultApi.class);
87     }
88
89     @VisibleForTesting
90     com.nokia.cbam.lcn.v32.ApiClient buildLcnApiClient(String vnfmId) {
91         com.nokia.cbam.lcn.v32.ApiClient apiClient = new com.nokia.cbam.lcn.v32.ApiClient();
92         apiClient.getOkBuilder().sslSocketFactory(cbamSecurityProvider.buildSSLSocketFactory(), cbamSecurityProvider.buildTrustManager());
93         apiClient.getOkBuilder().hostnameVerifier(cbamSecurityProvider.buildHostnameVerifier());
94         apiClient.addAuthorization(AUTH_NAME, tokenProvider.getToken(vnfmId));
95         apiClient.setAdapterBuilder(apiClient.getAdapterBuilder().baseUrl(driverProperties.getCbamLcnUrl()));
96         return apiClient;
97     }
98
99     @VisibleForTesting
100     com.nokia.cbam.catalog.v1.ApiClient buildCatalogApiClient(String vnfmId) {
101         com.nokia.cbam.catalog.v1.ApiClient apiClient = new com.nokia.cbam.catalog.v1.ApiClient();
102         apiClient.getOkBuilder().sslSocketFactory(cbamSecurityProvider.buildSSLSocketFactory(), cbamSecurityProvider.buildTrustManager());
103         apiClient.getOkBuilder().hostnameVerifier(cbamSecurityProvider.buildHostnameVerifier());
104         apiClient.addAuthorization(AUTH_NAME, tokenProvider.getToken(vnfmId));
105         apiClient.setAdapterBuilder(apiClient.getAdapterBuilder().baseUrl(driverProperties.getCbamCatalogUrl()));
106         return apiClient;
107     }
108
109     @VisibleForTesting
110     ApiClient buildLcmApiClient(String vnfmId) {
111         VnfmInfo vnfmInfo = vnfmInfoProvider.getVnfmInfo(vnfmId);
112         ApiClient apiClient = new ApiClient();
113         apiClient.getOkBuilder().sslSocketFactory(cbamSecurityProvider.buildSSLSocketFactory(), cbamSecurityProvider.buildTrustManager());
114         apiClient.getOkBuilder().hostnameVerifier(cbamSecurityProvider.buildHostnameVerifier());
115         apiClient.addAuthorization(AUTH_NAME, tokenProvider.getToken(vnfmId));
116         apiClient.setAdapterBuilder(apiClient.getAdapterBuilder().baseUrl(vnfmInfo.getUrl()));
117         return apiClient;
118     }
119 }