2 * ============LICENSE_START=======================================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.openecomp.sdc.be.auditing.impl;
23 import java.util.ArrayList;
24 import java.util.Arrays;
25 import java.util.Formatter;
26 import java.util.Locale;
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;
37 public class AuditingLogFormatUtil {
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);
43 // This is the key by which audit marker is recognized in logback.xml
44 private static String AUDIT_MARKER_STR = "AUDIT_MARKER";
46 public static final Marker auditMarker = MarkerFactory.getMarker(AUDIT_MARKER_STR);
48 protected static String logAuditEvent(Map<AuditingFieldsKeysEnum, Object> auditingFields) {
50 StringBuilder sb = new StringBuilder();
51 Formatter formatter = new Formatter(sb, Locale.US);
52 log.trace("logAuditEvent - start");
54 String formattedString = "";
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);
62 if (statusObj != null) {
63 status = String.valueOf(statusObj);
65 String desc = (String) auditingFields.get(AuditingFieldsKeysEnum.AUDIT_DESC);
66 String action = (String) auditingFields.get(AuditingFieldsKeysEnum.AUDIT_ACTION);
68 AuditingActionEnum auditEventType = AuditingActionEnum.getActionByName(action);
69 StringBuilder formattedEvent = getFormattedEvent(auditingFields, modifier, status, desc, action, auditEventType);
70 formattedString = formattedEvent.toString();
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.
76 if (auditEventType.equals(AuditingActionEnum.AUTH_REQUEST)) {
77 HttpRequestAuthentication(formattedString);
79 log.info(auditMarker, formattedString);
81 } catch (Exception e) {
82 log.debug("unexpected error occurred: {}", e.getMessage(), e);
86 log.trace("logAuditEvent - end");
88 return formattedString;
92 protected static void logAuditEvent(final String formattedString) {
93 log.trace("logAuditEvent - start");
94 log.info(auditMarker, formattedString);
95 log.trace("logAuditEvent - end");
99 private static void HttpRequestAuthentication(String formattedString) {
100 log.info(auditMarker, formattedString);
103 private static StringBuilder getFormattedEvent(Map<AuditingFieldsKeysEnum, Object> auditingFields, String modifier, String status, String desc, String action, AuditingActionEnum auditEventType) {
105 StringBuilder formattedString = new StringBuilder();
107 switch (auditEventType) {
111 formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.USER_ADMIN_TEMPLATE_ARRAY, auditingFields);
115 formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.USER_ACCESS_TEMPLATE_ARRAY, auditingFields);
117 case DISTRIBUTION_REGISTER:
118 case DISTRIBUTION_UN_REGISTER:
119 formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.DISTRIBUTION_REGISTRATION_TEMPLATE_ARRAY, auditingFields);
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);
129 AuditingFieldsKeysEnum[] createResourceArray = new AuditingFieldsKeysEnum[100];
130 createResourceArray = createResourceList.toArray(createResourceArray);
131 formattedString = buildStringAccrodingToArray(createResourceArray, auditingFields);
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);
150 formattedString = buildStringAccrodingToArray(checkinFieldsArray, auditingFields);
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);
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);
172 case DISTRIBUTION_STATE_CHANGE_REQUEST:
173 formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.ACTIVATE_DISTRIBUTION_ARRAY, auditingFields);
175 case DISTRIBUTION_STATE_CHANGE_APPROV:
176 case DISTRIBUTION_STATE_CHANGE_REJECT:
177 formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.CHANGE_DISTRIBUTION_STATUS_ARRAY, auditingFields);
179 case CREATE_DISTRIBUTION_TOPIC:
180 formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.CREATE_TOPIC_TEMPLATE_ARRAY, auditingFields);
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);
186 case DISTRIBUTION_STATUS:
187 formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.DISTRIBUTION_STATUS_TEMPLATE_ARRAY, auditingFields);
189 case DISTRIBUTION_NOTIFY:
190 formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.DISTRIBUTION_NOTIFY_ARRAY, auditingFields);
192 case DISTRIBUTION_DEPLOY:
193 formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.DISTRIBUTION_DEPLOY_ARRAY, auditingFields);
195 case GET_UEB_CLUSTER:
196 formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.GET_UEB_CLUSTER_ARRAY, auditingFields);
198 case DISTRIBUTION_ARTIFACT_DOWNLOAD:
199 formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.DISTRIBUTION_DOWNLOAD_TEMPLATE_ARRAY, auditingFields);
202 formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.AUTH_TEMPLATE_ARRAY, auditingFields);
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);
211 case ADD_SUB_CATEGORY:
213 formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.CATEGORY_TEMPLATE_ARRAY, auditingFields);
216 formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.GET_USERS_LIST_TEMPLATE_ARRAY, auditingFields);
218 case GET_CATEGORY_HIERARCHY:
219 formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.GET_CATEGORY_HIERARCHY_TEMPLATE_ARRAY, auditingFields);
222 case GET_FILTERED_ASSET_LIST:
223 formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.EXTERNAL_GET_ASSET_LIST_TEMPLATE_ARRAY, auditingFields);
225 case GET_ASSET_METADATA:
226 case GET_TOSCA_MODEL:
227 formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.EXTERNAL_GET_ASSET_TEMPLATE_ARRAY, auditingFields);
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);
237 case CREATE_RESOURCE_BY_API:
238 formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.EXTERNAL_CRUD_API_ARRAY, auditingFields);
240 case CHANGE_LIFECYCLE_BY_API:
241 formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.EXTERNAL_LYFECYCLE_API_ARRAY, auditingFields);
243 case ACTIVATE_SERVICE_BY_API:
244 formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.EXTERNAL_ACTIVATE_SERVICE_ARRAY, auditingFields);
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);
257 return formattedString;
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];
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(" ");
273 return formattedString;
276 protected static String getModifier(String modifierName, String modifierUid) {
277 if (modifierUid == null || modifierUid.equals(Constants.EMPTY_STRING)) {
278 return Constants.EMPTY_STRING;
280 StringBuilder sb = new StringBuilder();
281 if (modifierName != null) {
282 sb.append(modifierName);
284 sb.append("(").append(modifierUid).append(")");
285 return sb.toString();
288 protected static String getUser(String userData) {
289 StringBuilder sb = new StringBuilder();
291 return sb.toString();