c00bf24391a096fc0be704804904aadd6653ebdf
[sdnc/apps.git] /
1 /*\r
2  * ============LICENSE_START===================================================\r
3  * Copyright (c) 2018 Amdocs\r
4  * ============================================================================\r
5  * Licensed under the Apache License, Version 2.0 (the "License");\r
6  * you may not use this file except in compliance with the License.\r
7  * You may obtain a copy of the License at\r
8  *\r
9  *        http://www.apache.org/licenses/LICENSE-2.0\r
10  *\r
11  * Unless required by applicable law or agreed to in writing, software\r
12  * distributed under the License is distributed on an "AS IS" BASIS,\r
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
14  * See the License for the specific language governing permissions and\r
15  * limitations under the License.\r
16  * ============LICENSE_END=====================================================\r
17  */\r
18 package org.onap.sdnc.apps.pomba.networkdiscovery.service;\r
19 \r
20 import static org.onap.sdnc.apps.pomba.networkdiscovery.ApplicationException.Error.UNAUTHORIZED;\r
21 \r
22 import java.io.File;\r
23 import java.io.FileInputStream;\r
24 import java.io.IOException;\r
25 \r
26 import javax.ws.rs.core.MediaType;\r
27 import javax.ws.rs.core.MultivaluedHashMap;\r
28 import javax.ws.rs.core.MultivaluedMap;\r
29 import javax.ws.rs.core.Response.Status;\r
30 \r
31 import org.apache.commons.io.IOUtils;\r
32 import org.onap.aai.restclient.client.OperationResult;\r
33 import org.onap.aai.restclient.client.RestClient;\r
34 import org.onap.logging.ref.slf4j.ONAPLogAdapter;\r
35 import org.onap.sdnc.apps.pomba.networkdiscovery.ApplicationException;\r
36 \r
37 import org.slf4j.Logger;\r
38 \r
39 public class OSAuthentication {\r
40 \r
41     private static final String CONFIG_AUTH_DIR = "config/auth";\r
42     private static final String X_SUBJECT_TOKEN = "X-Subject-Token";\r
43 \r
44     private static final String USER_PATTERN = "%USER%";    \r
45     private static final String PASSWORD_PATTERN = "%PASSWORD%";\r
46 \r
47     private OSAuthentication() {\r
48         throw new IllegalStateException("Utility class");\r
49     }\r
50 \r
51         public static String getToken(String openstackIdentityUrl, String userId, String password, RestClient openstackClient, ONAPLogAdapter adapter)\r
52                         throws IOException, ApplicationException {\r
53 \r
54                 MultivaluedMap<String, String> headers = new MultivaluedHashMap<>();\r
55 \r
56                 String mappingConfigPath = CONFIG_AUTH_DIR + File.separator + "osauth.json";\r
57 \r
58                 File file = new File(mappingConfigPath);\r
59                 String payload = IOUtils.toString(new FileInputStream(file), "UTF-8");\r
60         payload = payload.replaceAll(USER_PATTERN, userId);\r
61                 payload = payload.replaceAll(PASSWORD_PATTERN, password);\r
62 \r
63                 OperationResult result = openstackClient.post(openstackIdentityUrl, payload, headers,\r
64                                 MediaType.APPLICATION_JSON_TYPE, MediaType.APPLICATION_JSON_TYPE);\r
65 \r
66                 Logger log = adapter.unwrap();\r
67 \r
68                 if (result.wasSuccessful()) {\r
69                         log.info("request at url = {} resulted in http response code: {}", \r
70                                 openstackIdentityUrl, result.getResultCode());\r
71                 } else {\r
72                         log.error("request at url = {} resulted in http response code: {}.  Failure cause: {}", \r
73                                 openstackIdentityUrl, result.getResultCode(), result.getFailureCause());\r
74                 }\r
75 \r
76 \r
77                 String token = result.getHeaders().getFirst(X_SUBJECT_TOKEN);\r
78                 \r
79                 if (token == null) {\r
80                     throw new ApplicationException(UNAUTHORIZED, Status.UNAUTHORIZED);\r
81                 }\r
82 \r
83                 log.debug("Got token: {}", token);\r
84 \r
85                 return token;\r
86         }\r
87 \r
88 }\r