Upgrade sonar plugin
[vid.git] / vid-app-common / src / main / java / org / openecomp / aai / util / HttpsAuthClient.java
1 /*-\r
2  * ============LICENSE_START=======================================================\r
3  * VID\r
4  * ================================================================================\r
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.\r
6  * ================================================================================\r
7  * Licensed under the Apache License, Version 2.0 (the "License");\r
8  * you may not use this file except in compliance with the License.\r
9  * You may obtain a copy of the License at\r
10  * \r
11  *      http://www.apache.org/licenses/LICENSE-2.0\r
12  * \r
13  * Unless required by applicable law or agreed to in writing, software\r
14  * distributed under the License is distributed on an "AS IS" BASIS,\r
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
16  * See the License for the specific language governing permissions and\r
17  * limitations under the License.\r
18  * ============LICENSE_END=========================================================\r
19  */\r
20 \r
21 package org.openecomp.aai.util;\r
22 \r
23 \r
24 import java.io.FileInputStream;\r
25 import java.security.KeyManagementException;\r
26 import java.security.KeyStore;\r
27 \r
28 import javax.net.ssl.HostnameVerifier;\r
29 import javax.net.ssl.HttpsURLConnection;\r
30 import javax.net.ssl.KeyManagerFactory;\r
31 import javax.net.ssl.SSLContext;\r
32 import javax.net.ssl.SSLSession;\r
33 import javax.ws.rs.client.Client;\r
34 import javax.ws.rs.client.ClientBuilder;\r
35 \r
36 import org.eclipse.jetty.util.security.Password;\r
37 import org.glassfish.jersey.client.ClientConfig;\r
38 import org.glassfish.jersey.client.HttpUrlConnectorProvider;\r
39 import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;\r
40 import org.openecomp.portalsdk.core.util.SystemProperties;\r
41 /**\r
42  * The Class HttpsAuthClient.\r
43  */\r
44 public class HttpsAuthClient{\r
45         /** The logger. */\r
46         static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(HttpsAuthClient.class);\r
47         \r
48         /**\r
49          * Gets the client.\r
50          *\r
51          * @param certFilePath the cert file path\r
52          * @return the client\r
53          * @throws KeyManagementException the key management exception\r
54          */\r
55         public static Client getClient(String certFilePath) throws KeyManagementException {\r
56 \r
57                 ClientConfig config = new ClientConfig();\r
58                 //config.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);\r
59                 //config.getClasses().add(org.openecomp.aai.util.CustomJacksonJaxBJsonProvider.class);\r
60 \r
61                 try {\r
62                         \r
63                     config.property(HttpUrlConnectorProvider.SET_METHOD_WORKAROUND, Boolean.TRUE );\r
64                         \r
65                         config.connectorProvider(new HttpUrlConnectorProvider().useSetMethodWorkaround());\r
66                         String truststore_path = certFilePath + AAIProperties.FILESEPARTOR + SystemProperties.getProperty(AAIProperties.AAI_TRUSTSTORE_FILENAME);\r
67                         String truststore_password = SystemProperties.getProperty(AAIProperties.AAI_TRUSTSTORE_PASSWD_X);\r
68                         String decrypted_truststore_password = Password.deobfuscate(truststore_password);\r
69                         \r
70                         boolean useClientCert = false;\r
71                         \r
72                         String keystore_path = certFilePath + AAIProperties.FILESEPARTOR + SystemProperties.getProperty(AAIProperties.AAI_KEYSTORE_FILENAME);\r
73                         String keystore_password = SystemProperties.getProperty(AAIProperties.AAI_KEYSTORE_PASSWD_X);\r
74                         String decrypted_keystore_password = Password.deobfuscate(keystore_password);\r
75                         \r
76                         String clientCert = SystemProperties.getProperty(AAIProperties.AAI_USE_CLIENT_CERT);\r
77                         \r
78                         if (clientCert != null && \r
79                                         SystemProperties.getProperty(AAIProperties.AAI_USE_CLIENT_CERT).equalsIgnoreCase("true")) {\r
80                                 useClientCert = true;\r
81                         }\r
82                         \r
83                     System.setProperty("javax.net.ssl.trustStore", truststore_path);\r
84                     System.setProperty("javax.net.ssl.trustStorePassword", decrypted_truststore_password);\r
85                         HttpsURLConnection.setDefaultHostnameVerifier( new HostnameVerifier(){\r
86                             public boolean verify(String string,SSLSession ssls) {\r
87                                 return true;\r
88                             }\r
89                         });\r
90         \r
91                         final SSLContext ctx = SSLContext.getInstance("TLS");\r
92                         \r
93                         KeyManagerFactory kmf = null;\r
94                         if (useClientCert) {\r
95                         \r
96                                 try {\r
97                                         kmf = KeyManagerFactory.getInstance("SunX509");\r
98                                         FileInputStream fin = new FileInputStream(keystore_path);\r
99                                         KeyStore ks = KeyStore.getInstance("PKCS12");\r
100                                         char[] pwd = decrypted_keystore_password.toCharArray();\r
101                                         ks.load(fin, pwd);\r
102                                         kmf.init(ks, pwd);\r
103                                 } catch (Exception e) {\r
104                                         //System.out.println("Error setting up kmf: exiting");\r
105                                         logger.debug(EELFLoggerDelegate.debugLogger, "Error setting up kmf: exiting");\r
106                                         e.printStackTrace();\r
107                                         return null;\r
108                                 }\r
109                                 ctx.init(kmf.getKeyManagers(), null, null);\r
110                         \r
111                                 return ClientBuilder.newBuilder()\r
112                                                 .sslContext(ctx)\r
113                                                 .hostnameVerifier(new HostnameVerifier() {\r
114                                                         @Override\r
115                                                         public boolean verify( String s, SSLSession sslSession ) {\r
116                                                                 return true;\r
117                                                         }\r
118                                                 }).withConfig(config)\r
119                                                 .build()\r
120                                                 .register(org.openecomp.aai.util.CustomJacksonJaxBJsonProvider.class);\r
121                         } else { \r
122                                 return ClientBuilder.newBuilder()\r
123                                                 .hostnameVerifier(new HostnameVerifier() {\r
124                                                         @Override\r
125                                                         public boolean verify( String s, SSLSession sslSession ) {\r
126                                                                 return true;\r
127                                                         }\r
128                                                 }).withConfig(config)\r
129                                                 .build()\r
130                                                 .register(org.openecomp.aai.util.CustomJacksonJaxBJsonProvider.class);\r
131                         }\r
132                 } catch (Exception e) {\r
133                         logger.debug(EELFLoggerDelegate.debugLogger, "Error setting up config: exiting");\r
134                         //System.out.println("Error setting up config: exiting");\r
135                         e.printStackTrace();\r
136                         System.exit(1);\r
137                         return null;\r
138                 }\r
139         }\r
140 }  \r