Refactoring Consolidation Service
[sdc.git] / catalog-be / src / main / java / org / openecomp / sdc / be / auditing / impl / AuditingLogFormatUtil.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2017 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.openecomp.sdc.be.auditing.impl;
22
23 import java.util.ArrayList;
24 import java.util.Arrays;
25 import java.util.Formatter;
26 import java.util.Locale;
27 import java.util.Map;
28
29 import org.openecomp.sdc.be.resources.data.auditing.AuditingActionEnum;
30 import org.openecomp.sdc.common.api.Constants;
31 import org.openecomp.sdc.common.datastructure.AuditingFieldsKeysEnum;
32 import org.slf4j.Logger;
33 import org.slf4j.LoggerFactory;
34 import org.slf4j.Marker;
35 import org.slf4j.MarkerFactory;
36
37 public class AuditingLogFormatUtil {
38
39     // When adding any new fields here, please keep the convention <fieldName>=
40     // <value>, with the space between them.
41     private static final Logger log = LoggerFactory.getLogger(AuditingLogFormatUtil.class);
42
43     // This is the key by which audit marker is recognized in logback.xml
44     private static String AUDIT_MARKER_STR = "AUDIT_MARKER";
45
46     public static final Marker auditMarker = MarkerFactory.getMarker(AUDIT_MARKER_STR);
47
48     protected static String logAuditEvent(Map<AuditingFieldsKeysEnum, Object> auditingFields) {
49
50         StringBuilder sb = new StringBuilder();
51         Formatter formatter = new Formatter(sb, Locale.US);
52         log.trace("logAuditEvent - start");
53
54         String formattedString = "";
55
56         try {
57
58             // Common fields
59             String modifier = getModifier((String) auditingFields.get(AuditingFieldsKeysEnum.AUDIT_MODIFIER_NAME), (String) auditingFields.get(AuditingFieldsKeysEnum.AUDIT_MODIFIER_UID));
60             Object statusObj = auditingFields.get(AuditingFieldsKeysEnum.AUDIT_STATUS);
61             String status = null;
62             if (statusObj != null) {
63                 status = String.valueOf(statusObj);
64             }
65             String desc = (String) auditingFields.get(AuditingFieldsKeysEnum.AUDIT_DESC);
66             String action = (String) auditingFields.get(AuditingFieldsKeysEnum.AUDIT_ACTION);
67
68             AuditingActionEnum auditEventType = AuditingActionEnum.getActionByName(action);
69             StringBuilder formattedEvent = getFormattedEvent(auditingFields, modifier, status, desc, action, auditEventType);
70             formattedString = formattedEvent.toString();
71
72             // This is the only way to fix DE166225 without major refactoring,
73             // after it was previously agreed with Ella that activity type will
74             // be the method name.
75
76             if (auditEventType.equals(AuditingActionEnum.AUTH_REQUEST)) {
77                 HttpRequestAuthentication(formattedString);
78             } else {
79                 log.info(auditMarker, formattedString);
80             }
81         } catch (Exception e) {
82             log.debug("unexpected error occurred: {}", e.getMessage(), e);
83
84         } finally {
85             formatter.close();
86             log.trace("logAuditEvent - end");
87         }
88         return formattedString;
89
90     }
91
92     protected static void logAuditEvent(final String formattedString) {
93         log.trace("logAuditEvent - start");
94         log.info(auditMarker, formattedString);
95         log.trace("logAuditEvent - end");
96     }
97
98
99     private static void HttpRequestAuthentication(String formattedString) {
100         log.info(auditMarker, formattedString);
101     }
102
103     private static StringBuilder getFormattedEvent(Map<AuditingFieldsKeysEnum, Object> auditingFields, String modifier, String status, String desc, String action, AuditingActionEnum auditEventType) {
104
105         StringBuilder formattedString = new StringBuilder();
106
107         switch (auditEventType) {
108         case ADD_USER:
109         case DELETE_USER:
110         case UPDATE_USER:
111             formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.USER_ADMIN_TEMPLATE_ARRAY, auditingFields);
112
113             break;
114         case USER_ACCESS:
115             formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.USER_ACCESS_TEMPLATE_ARRAY, auditingFields);
116             break;
117         case DISTRIBUTION_REGISTER:
118         case DISTRIBUTION_UN_REGISTER:
119             formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.DISTRIBUTION_REGISTRATION_TEMPLATE_ARRAY, auditingFields);
120             break;
121         case UPDATE_RESOURCE_METADATA:
122         case CREATE_RESOURCE:
123         case IMPORT_RESOURCE:
124             ArrayList<AuditingFieldsKeysEnum> createResourceList = new ArrayList(Arrays.asList(AuditingLogFormatConstants.CREATE_RESOURCE_TEMPLATE_PREFIX_ARRAY));
125             createResourceList.addAll(Arrays.asList(AuditingLogFormatConstants.CREATE_RESOURCE_TEMPLATE_SUFFIX_ARRAY));
126             if (auditEventType == AuditingActionEnum.IMPORT_RESOURCE) {
127                 createResourceList.add(AuditingFieldsKeysEnum.AUDIT_RESOURCE_TOSCA_NODE_TYPE);
128             }
129             AuditingFieldsKeysEnum[] createResourceArray = new AuditingFieldsKeysEnum[100];
130             createResourceArray = createResourceList.toArray(createResourceArray);
131             formattedString = buildStringAccrodingToArray(createResourceArray, auditingFields);
132             break;
133         case CHECKIN_RESOURCE:
134         case CHECKOUT_RESOURCE:
135         case UNDO_CHECKOUT_RESOURCE:
136         case CERTIFICATION_REQUEST_RESOURCE:
137         case START_CERTIFICATION_RESOURCE:
138         case CERTIFICATION_SUCCESS_RESOURCE:
139         case FAIL_CERTIFICATION_RESOURCE:
140         case CANCEL_CERTIFICATION_RESOURCE:
141             ArrayList<AuditingFieldsKeysEnum> checkinFieldsList = new ArrayList(Arrays.asList(AuditingLogFormatConstants.CREATE_RESOURCE_TEMPLATE_PREFIX_ARRAY));
142             checkinFieldsList.add(AuditingFieldsKeysEnum.AUDIT_RESOURCE_COMMENT);
143             checkinFieldsList.addAll(Arrays.asList(AuditingLogFormatConstants.CREATE_RESOURCE_TEMPLATE_SUFFIX_ARRAY));
144             AuditingFieldsKeysEnum[] checkinFieldsArray = new AuditingFieldsKeysEnum[100];
145             checkinFieldsArray = checkinFieldsList.toArray(checkinFieldsArray);
146             String comment = (String) auditingFields.get(AuditingFieldsKeysEnum.AUDIT_RESOURCE_COMMENT);
147             if (comment == null || comment.equals(Constants.NULL_STRING)) {
148                 auditingFields.put(AuditingFieldsKeysEnum.AUDIT_RESOURCE_COMMENT, Constants.EMPTY_STRING);
149             }
150             formattedString = buildStringAccrodingToArray(checkinFieldsArray, auditingFields);
151             break;
152         case ARTIFACT_UPLOAD:
153         case ARTIFACT_DELETE:
154         case ARTIFACT_METADATA_UPDATE:
155         case ARTIFACT_PAYLOAD_UPDATE:
156         case ARTIFACT_DOWNLOAD:
157             ArrayList<AuditingFieldsKeysEnum> artifactFieldsSet = new ArrayList<>(Arrays.asList(AuditingLogFormatConstants.CREATE_RESOURCE_TEMPLATE_PREFIX_ARRAY)) ;
158             artifactFieldsSet.add(AuditingFieldsKeysEnum.AUDIT_PREV_ARTIFACT_UUID);
159             artifactFieldsSet.add(AuditingFieldsKeysEnum.AUDIT_CURR_ARTIFACT_UUID);
160             artifactFieldsSet.add(AuditingFieldsKeysEnum.AUDIT_ARTIFACT_DATA);
161             artifactFieldsSet.addAll(Arrays.asList(AuditingLogFormatConstants.EXTERNAL_DOWNLOAD_ARTIFACT_ARRAY));
162             AuditingFieldsKeysEnum[] artifactFieldsArray = new AuditingFieldsKeysEnum[100];
163             artifactFieldsArray = artifactFieldsSet.toArray(artifactFieldsArray);
164             formattedString = buildStringAccrodingToArray(artifactFieldsArray, auditingFields);
165             break;
166         case DOWNLOAD_ARTIFACT:
167             ArrayList<AuditingFieldsKeysEnum> downloadArtifactFieldsList = new ArrayList(Arrays.asList(AuditingLogFormatConstants.EXTERNAL_DOWNLOAD_ARTIFACT_ARRAY));
168             AuditingFieldsKeysEnum[] downloadArtifactFieldsArray = new AuditingFieldsKeysEnum[100];
169             artifactFieldsArray = downloadArtifactFieldsList.toArray(downloadArtifactFieldsArray);
170             formattedString = buildStringAccrodingToArray(artifactFieldsArray, auditingFields);
171             break;
172         case DISTRIBUTION_STATE_CHANGE_REQUEST:
173             formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.ACTIVATE_DISTRIBUTION_ARRAY, auditingFields);
174             break;
175         case DISTRIBUTION_STATE_CHANGE_APPROV:
176         case DISTRIBUTION_STATE_CHANGE_REJECT:
177             formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.CHANGE_DISTRIBUTION_STATUS_ARRAY, auditingFields);
178             break;
179         case CREATE_DISTRIBUTION_TOPIC:
180             formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.CREATE_TOPIC_TEMPLATE_ARRAY, auditingFields);
181             break;
182         case ADD_KEY_TO_TOPIC_ACL:
183         case REMOVE_KEY_FROM_TOPIC_ACL:
184             formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.ADD_REMOVE_TOPIC_KEY_ACL_TEMPLATE_ARRAY, auditingFields);
185             break;
186         case DISTRIBUTION_STATUS:
187             formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.DISTRIBUTION_STATUS_TEMPLATE_ARRAY, auditingFields);
188             break;
189         case DISTRIBUTION_NOTIFY:
190             formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.DISTRIBUTION_NOTIFY_ARRAY, auditingFields);
191             break;
192         case DISTRIBUTION_DEPLOY:
193             formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.DISTRIBUTION_DEPLOY_ARRAY, auditingFields);
194             break;
195         case GET_UEB_CLUSTER:
196             formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.GET_UEB_CLUSTER_ARRAY, auditingFields);
197             break;
198         case DISTRIBUTION_ARTIFACT_DOWNLOAD:
199             formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.DISTRIBUTION_DOWNLOAD_TEMPLATE_ARRAY, auditingFields);
200             break;
201         case AUTH_REQUEST:
202             formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.AUTH_TEMPLATE_ARRAY, auditingFields);
203             break;
204         case ADD_ECOMP_USER_CREDENTIALS:
205         case GET_ECOMP_USER_CREDENTIALS:
206         case DELETE_ECOMP_USER_CREDENTIALS:
207         case UPDATE_ECOMP_USER_CREDENTIALS:
208             formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.ECOMP_USER_TEMPLATE_ARRAY, auditingFields);
209             break;
210         case ADD_CATEGORY:
211         case ADD_SUB_CATEGORY:
212         case ADD_GROUPING:
213             formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.CATEGORY_TEMPLATE_ARRAY, auditingFields);
214             break;
215         case GET_USERS_LIST:
216             formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.GET_USERS_LIST_TEMPLATE_ARRAY, auditingFields);
217             break;
218         case GET_CATEGORY_HIERARCHY:
219             formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.GET_CATEGORY_HIERARCHY_TEMPLATE_ARRAY, auditingFields);
220             break;
221         case GET_ASSET_LIST:
222         case GET_FILTERED_ASSET_LIST:
223             formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.EXTERNAL_GET_ASSET_LIST_TEMPLATE_ARRAY, auditingFields);
224             break;
225         case GET_ASSET_METADATA:
226         case GET_TOSCA_MODEL:
227             formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.EXTERNAL_GET_ASSET_TEMPLATE_ARRAY, auditingFields);
228             break;
229         case ARTIFACT_UPLOAD_BY_API:
230         case ARTIFACT_DELETE_BY_API:
231         case ARTIFACT_UPDATE_BY_API:
232             ArrayList<AuditingFieldsKeysEnum> uploadArtifactFieldsList = new ArrayList(Arrays.asList(AuditingLogFormatConstants.EXTERNAL_CRUD_API_ARTIFACT_ARRAY));
233             AuditingFieldsKeysEnum[] uploadArtifactFieldsArray = new AuditingFieldsKeysEnum[100];
234             artifactFieldsArray = uploadArtifactFieldsList.toArray(uploadArtifactFieldsArray);
235             formattedString = buildStringAccrodingToArray(artifactFieldsArray, auditingFields);
236             break;
237         case CREATE_RESOURCE_BY_API:
238             formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.EXTERNAL_CRUD_API_ARRAY, auditingFields);
239             break;
240         case CHANGE_LIFECYCLE_BY_API:
241             formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.EXTERNAL_LYFECYCLE_API_ARRAY, auditingFields);
242             break;
243             case ACTIVATE_SERVICE_BY_API:
244                 formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.EXTERNAL_ACTIVATE_SERVICE_ARRAY, auditingFields);
245                 break;
246         case CREATE_ENVIRONMENT:
247         case UPDATE_ENVIRONMENT:
248         case DELETE_ENVIRONMENT:
249         case UNKNOWN_ENVIRONMENT_NOTIFICATION:
250         case UNSUPPORTED_ENVIRONMENT_TYPE:
251             formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.ECOMP_OPERATIONAL_ENVIRONMENT_ARRAY, auditingFields);
252             break;
253         default:
254             break;
255         }
256
257         return formattedString;
258     }
259
260     private static StringBuilder buildStringAccrodingToArray(AuditingFieldsKeysEnum[] sortedFieldsArray, Map<AuditingFieldsKeysEnum, Object> auditingFields) {
261         StringBuilder formattedString = new StringBuilder();
262         for (int i = 0; i < sortedFieldsArray.length; i++) {
263             AuditingFieldsKeysEnum key = sortedFieldsArray[i];
264
265             Object fieldVal = auditingFields.get(key);
266             if (fieldVal != null) {
267                 formattedString.append(key.getDisplayName()).append(" = \"").append(fieldVal).append("\"");
268                 if (i < sortedFieldsArray.length - 1) {
269                     formattedString.append(" ");
270                 }
271             }
272         }
273         return formattedString;
274     }
275
276     protected static String getModifier(String modifierName, String modifierUid) {
277         if (modifierUid == null || modifierUid.equals(Constants.EMPTY_STRING)) {
278             return Constants.EMPTY_STRING;
279         }
280         StringBuilder sb = new StringBuilder();
281         if (modifierName != null) {
282             sb.append(modifierName);
283         }
284         sb.append("(").append(modifierUid).append(")");
285         return sb.toString();
286     }
287
288     protected static String getUser(String userData) {
289         StringBuilder sb = new StringBuilder();
290         sb.append(userData);
291         return sb.toString();
292     }
293
294
295
296 }