Fix Fortify Scan Issue:
[policy/engine.git] / ONAP-PAP-REST / src / main / java / org / onap / policy / pap / xacml / rest / service / ImportService.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP-PAP-REST
4  * ================================================================================
5  * Copyright (C) 2017-2018 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 package org.onap.policy.pap.xacml.rest.service;
21
22 import java.io.BufferedWriter;
23 import java.io.File;
24 import java.io.FileOutputStream;
25 import java.io.IOException;
26 import java.io.InputStream;
27 import java.io.OutputStreamWriter;
28 import java.io.Writer;
29 import java.util.HashMap;
30 import java.util.Map;
31 import java.util.UUID;
32
33 import javax.servlet.http.HttpServletRequest;
34 import javax.servlet.http.HttpServletResponse;
35
36 import org.onap.policy.common.logging.eelf.PolicyLogger;
37 import org.onap.policy.common.logging.flexlogger.FlexLogger;
38 import org.onap.policy.common.logging.flexlogger.Logger;
39 import org.onap.policy.pap.xacml.rest.components.CreateBRMSRuleTemplate;
40 import org.onap.policy.pap.xacml.rest.components.CreateNewMicroServiceModel;
41
42 public class ImportService {
43         private static final Logger logger = FlexLogger.getLogger(ImportService.class);
44         private static String errorMessage = "Error in reading in file from API call";
45         private static String errorMsg  = "error";
46         private static String operation = "operation";
47         private static String importHeader = "import";
48         private static String service = "service";
49         private static String extractDir = "ExtractDir";
50         private static String successMessage = "success";
51         private static String invalidServiceName = "Invalid ServiceName";
52         private static final String REGEX = "[0-9a-zA-Z._ ]*";
53         
54         public void doImportMicroServicePut(HttpServletRequest request, HttpServletResponse response) {
55                 String importServiceCreation = request.getParameter("importService");
56                 String fileName = request.getParameter("fileName");
57                 String version = request.getParameter("version");
58                 String serviceName = request.getParameter("serviceName");
59                 
60                 if(serviceName == null || serviceName.isEmpty() || !serviceName.matches(REGEX)){
61                         response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
62                         response.addHeader(errorMsg, "missing");        
63                         response.addHeader(operation, importHeader);
64                         response.addHeader(service, invalidServiceName);
65                         return;
66                 }
67
68                 String description = request.getParameter("description");
69                 Map<String, String> successMap = new HashMap<>();
70                 if(("BRMSPARAM").equals(importServiceCreation)){
71                         StringBuilder builder = new StringBuilder();
72                         int ch;
73                         try {
74                                 while((ch = request.getInputStream().read()) != -1){
75                                     builder.append((char)ch);
76                                 }
77                         } catch (IOException e) {
78                                 logger.error(e);
79                                 PolicyLogger.error(errorMessage);
80                                 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
81                                 response.addHeader(errorMsg, "missing");        
82                                 response.addHeader(operation, importHeader);
83                                 response.addHeader(service, serviceName);
84                         }
85                         CreateBRMSRuleTemplate brmsRuleTemplate = new CreateBRMSRuleTemplate();
86                         successMap = brmsRuleTemplate.addRule(builder.toString(), serviceName, description, "API");
87                 }
88                 else if(("MICROSERVICE").equals(importServiceCreation)){
89                         CreateNewMicroServiceModel newMS = null;
90                         String randomID = UUID.randomUUID().toString();
91                         if ( fileName != null) {
92                                 File extracDir = new File(extractDir);
93                                 if (!extracDir.exists()){
94                                         extracDir.mkdirs();
95                                 }
96                                 if (fileName.contains(".xmi")){
97                                         // get the request content into a String
98                                         String xmi = null;
99                                         java.util.Scanner scanner;
100                                         try {
101                                                 scanner = new java.util.Scanner(request.getInputStream());
102                                                 scanner.useDelimiter("\\A");
103                                                 xmi =  scanner.hasNext() ? scanner.next() : "";
104                                                 scanner.close();
105                                         } catch (IOException e1) {
106                                                 logger.error(e1);
107                                                 PolicyLogger.error(errorMessage);
108                                                 return;
109                                         }
110                                         PolicyLogger.info("XML request from API for import new Service"); 
111                                         try (Writer writer = new BufferedWriter(new OutputStreamWriter(
112                                                         new FileOutputStream(extractDir + File.separator + randomID+".xmi"), "utf-8"))) {
113                                                 writer.write(xmi);
114                                         } catch (IOException e) {
115                                                 logger.error(e);
116                                                 PolicyLogger.error(errorMessage);
117                                                 return;
118                                         }
119                                 }else{ 
120                                         InputStream inputStream = null;
121                                         try(FileOutputStream outputStream = new FileOutputStream(extractDir + File.separator + randomID+".zip")) {      
122                                                 inputStream = request.getInputStream();
123                                                 byte[] buffer = new byte[4096];
124                                                 int bytesRead = -1 ; 
125                                                 while ((bytesRead = inputStream.read(buffer)) != -1) { 
126                                                         outputStream.write(buffer, 0, bytesRead) ; 
127                                                 }
128                                         } catch (IOException e) {
129                                                 PolicyLogger.error("Error in reading in Zip File from API call"+e);
130                                                 return;
131                                         }finally{
132                                                 try {
133                                                         if(inputStream != null){
134                                                                 inputStream.close();
135                                                         }
136                                                 } catch (IOException e) {
137                                                         PolicyLogger.error("Exception Occured while closing the input/output stream"+e);
138                                                 }
139                                         }
140                                 }
141                                 newMS =  new CreateNewMicroServiceModel(fileName, serviceName, "API", version, randomID);
142                                 successMap = newMS.addValuesToNewModel();
143                                 if (successMap.containsKey(successMessage)) {
144                                         successMap.clear();
145                                         successMap = newMS.saveImportService();
146                                 }
147                         }
148                 }
149                 
150                 // return a response to the PAP             
151                 if (successMap.containsKey(successMessage)) {                                                   
152                         response.setStatus(HttpServletResponse.SC_OK);                                                          
153                         response.addHeader("successMapKey", successMessage);                                                            
154                         response.addHeader(operation, importHeader);
155                         response.addHeader(service, serviceName);
156                 } else if (successMap.containsKey("DBError")) {
157                         if (successMap.get("DBError").contains("EXISTS")){
158                                 response.setStatus(HttpServletResponse.SC_CONFLICT);
159                                 response.addHeader(service, serviceName);
160                                 response.addHeader(errorMsg, "modelExistsDB");
161                         }else{
162                                 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
163                                 response.addHeader(errorMsg, "importDB");
164                         }
165                         response.addHeader(operation, importHeader);
166                         response.addHeader(service, serviceName);
167                 }else if (successMap.get(errorMsg).contains("MISSING")){
168                         response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
169                         response.addHeader(errorMsg, "missing");        
170                         response.addHeader(operation, importHeader);
171                         response.addHeader(service, serviceName);
172                 }else if (successMap.get(errorMsg).contains("VALIDATION")){
173                         response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
174                         response.addHeader(errorMsg, "validation");     
175                         response.addHeader(operation, importHeader);
176                         response.addHeader(service, serviceName);
177                 }
178         }
179
180 }