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.EnumMap;
26 import java.util.Formatter;
27 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 Logger log = LoggerFactory.getLogger(AuditingLogFormatUtil.class.getName());
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 Marker auditMarker = MarkerFactory.getMarker(AUDIT_MARKER_STR);
48 protected static void logAuditEvent(EnumMap<AuditingFieldsKeysEnum, Object> auditingFields) {
50 StringBuilder sb = new StringBuilder();
51 Formatter formatter = new Formatter(sb, Locale.US);
52 log.trace("logAuditEvent - start");
57 String modifier = getModifier((String) auditingFields.get(AuditingFieldsKeysEnum.AUDIT_MODIFIER_NAME), (String) auditingFields.get(AuditingFieldsKeysEnum.AUDIT_MODIFIER_UID));
58 Object statusObj = auditingFields.get(AuditingFieldsKeysEnum.AUDIT_STATUS);
60 if (statusObj != null) {
61 status = String.valueOf(statusObj);
63 String desc = (String) auditingFields.get(AuditingFieldsKeysEnum.AUDIT_DESC);
64 String action = (String) auditingFields.get(AuditingFieldsKeysEnum.AUDIT_ACTION);
66 AuditingActionEnum auditEventType = AuditingActionEnum.getActionByName(action);
67 StringBuilder formattedEvent = getFormattedEvent(auditingFields, modifier, status, desc, action, auditEventType);
68 String formattedString = formattedEvent.toString();
70 // This is the only way to fix DE166225 without major refactoring,
71 // after it was previously agreed with Ella that activity type will
72 // be the method name.
74 if (auditEventType.equals(AuditingActionEnum.AUTH_REQUEST)) {
75 HttpRequestAuthentication(formattedString);
77 log.info(auditMarker, formattedString);
79 } catch (Exception e) {
80 log.debug("unexpected error occurred: {} {}", e.getMessage(), e);
84 log.trace("logAuditEvent - end");
89 private static void HttpRequestAuthentication(String formattedString) {
90 log.info(auditMarker, formattedString);
93 private static StringBuilder getFormattedEvent(EnumMap<AuditingFieldsKeysEnum, Object> auditingFields, String modifier, String status, String desc, String action, AuditingActionEnum auditEventType) {
95 StringBuilder formattedString = new StringBuilder();
97 switch (auditEventType) {
101 formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.USER_ADMIN_TEMPLATE_ARRAY, auditingFields);
105 formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.USER_ACCESS_TEMPLATE_ARRAY, auditingFields);
107 case DISTRIBUTION_REGISTER:
108 case DISTRIBUTION_UN_REGISTER:
109 formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.DISTRIBUTION_REGISTRATION_TEMPLATE_ARRAY, auditingFields);
111 case UPDATE_RESOURCE_METADATA:
112 case CREATE_RESOURCE:
113 case IMPORT_RESOURCE:
114 ArrayList<AuditingFieldsKeysEnum> createResourceList = new ArrayList(Arrays.asList(AuditingLogFormatConstants.CREATE_RESOURCE_TEMPLATE_PREFIX_ARRAY));
115 createResourceList.addAll(Arrays.asList(AuditingLogFormatConstants.CREATE_RESOURCE_TEMPLATE_SUFFIX_ARRAY));
116 if (auditEventType == AuditingActionEnum.IMPORT_RESOURCE) {
117 createResourceList.add(AuditingFieldsKeysEnum.AUDIT_RESOURCE_TOSCA_NODE_TYPE);
119 AuditingFieldsKeysEnum[] createResourceArray = new AuditingFieldsKeysEnum[100];
120 createResourceArray = createResourceList.toArray(createResourceArray);
121 formattedString = buildStringAccrodingToArray(createResourceArray, auditingFields);
123 case CHECKIN_RESOURCE:
124 case CHECKOUT_RESOURCE:
125 case UNDO_CHECKOUT_RESOURCE:
126 case CERTIFICATION_REQUEST_RESOURCE:
127 case START_CERTIFICATION_RESOURCE:
128 case CERTIFICATION_SUCCESS_RESOURCE:
129 case FAIL_CERTIFICATION_RESOURCE:
130 case CANCEL_CERTIFICATION_RESOURCE:
131 ArrayList<AuditingFieldsKeysEnum> checkinFieldsList = new ArrayList(Arrays.asList(AuditingLogFormatConstants.CREATE_RESOURCE_TEMPLATE_PREFIX_ARRAY));
132 checkinFieldsList.add(AuditingFieldsKeysEnum.AUDIT_RESOURCE_COMMENT);
133 checkinFieldsList.addAll(Arrays.asList(AuditingLogFormatConstants.CREATE_RESOURCE_TEMPLATE_SUFFIX_ARRAY));
134 AuditingFieldsKeysEnum[] checkinFieldsArray = new AuditingFieldsKeysEnum[100];
135 checkinFieldsArray = checkinFieldsList.toArray(checkinFieldsArray);
136 String comment = (String) auditingFields.get(AuditingFieldsKeysEnum.AUDIT_RESOURCE_COMMENT);
137 if (comment == null || comment.equals(Constants.NULL_STRING)) {
138 auditingFields.put(AuditingFieldsKeysEnum.AUDIT_RESOURCE_COMMENT, Constants.EMPTY_STRING);
140 formattedString = buildStringAccrodingToArray(checkinFieldsArray, auditingFields);
142 case ARTIFACT_UPLOAD:
143 case ARTIFACT_DELETE:
144 case ARTIFACT_METADATA_UPDATE:
145 case ARTIFACT_PAYLOAD_UPDATE:
146 case ARTIFACT_DOWNLOAD:
147 ArrayList<AuditingFieldsKeysEnum> artifactFieldsList = new ArrayList(Arrays.asList(AuditingLogFormatConstants.CREATE_RESOURCE_TEMPLATE_PREFIX_ARRAY));
148 artifactFieldsList.add(AuditingFieldsKeysEnum.AUDIT_PREV_ARTIFACT_UUID);
149 artifactFieldsList.add(AuditingFieldsKeysEnum.AUDIT_CURR_ARTIFACT_UUID);
150 artifactFieldsList.add(AuditingFieldsKeysEnum.AUDIT_ARTIFACT_DATA);
151 artifactFieldsList.addAll(Arrays.asList(AuditingLogFormatConstants.CREATE_RESOURCE_TEMPLATE_SUFFIX_ARRAY));
152 artifactFieldsList.addAll(Arrays.asList(AuditingLogFormatConstants.EXTERNAL_DOWNLOAD_ARTIFACT_ARRAY));
153 AuditingFieldsKeysEnum[] artifactFieldsArray = new AuditingFieldsKeysEnum[100];
154 artifactFieldsArray = artifactFieldsList.toArray(artifactFieldsArray);
155 formattedString = buildStringAccrodingToArray(artifactFieldsArray, auditingFields);
157 case DOWNLOAD_ARTIFACT:
158 ArrayList<AuditingFieldsKeysEnum> downloadArtifactFieldsList = new ArrayList(Arrays.asList(AuditingLogFormatConstants.EXTERNAL_DOWNLOAD_ARTIFACT_ARRAY));
159 AuditingFieldsKeysEnum[] downloadArtifactFieldsArray = new AuditingFieldsKeysEnum[100];
160 artifactFieldsArray = downloadArtifactFieldsList.toArray(downloadArtifactFieldsArray);
161 formattedString = buildStringAccrodingToArray(artifactFieldsArray, auditingFields);
163 case DISTRIBUTION_STATE_CHANGE_REQUEST:
164 formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.ACTIVATE_DISTRIBUTION_ARRAY, auditingFields);
166 case DISTRIBUTION_STATE_CHANGE_APPROV:
167 case DISTRIBUTION_STATE_CHANGE_REJECT:
168 formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.CHANGE_DISTRIBUTION_STATUS_ARRAY, auditingFields);
170 case CREATE_DISTRIBUTION_TOPIC:
171 formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.CREATE_TOPIC_TEMPLATE_ARRAY, auditingFields);
173 case ADD_KEY_TO_TOPIC_ACL:
174 case REMOVE_KEY_FROM_TOPIC_ACL:
175 formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.ADD_REMOVE_TOPIC_KEY_ACL_TEMPLATE_ARRAY, auditingFields);
177 case DISTRIBUTION_STATUS:
178 formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.DISTRIBUTION_STATUS_TEMPLATE_ARRAY, auditingFields);
180 case DISTRIBUTION_NOTIFY:
181 formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.DISTRIBUTION_NOTIFY_ARRAY, auditingFields);
183 case DISTRIBUTION_DEPLOY:
184 formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.DISTRIBUTION_DEPLOY_ARRAY, auditingFields);
186 case GET_UEB_CLUSTER:
187 formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.GET_UEB_CLUSTER_ARRAY, auditingFields);
189 case DISTRIBUTION_ARTIFACT_DOWNLOAD:
190 formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.DISTRIBUTION_DOWNLOAD_TEMPLATE_ARRAY, auditingFields);
193 formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.AUTH_TEMPLATE_ARRAY, auditingFields);
195 case ADD_ECOMP_USER_CREDENTIALS:
196 case GET_ECOMP_USER_CREDENTIALS:
197 case DELETE_ECOMP_USER_CREDENTIALS:
198 case UPDATE_ECOMP_USER_CREDENTIALS:
199 formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.ECOMP_USER_TEMPLATE_ARRAY, auditingFields);
202 case ADD_SUB_CATEGORY:
204 formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.CATEGORY_TEMPLATE_ARRAY, auditingFields);
207 formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.GET_USERS_LIST_TEMPLATE_ARRAY, auditingFields);
209 case GET_CATEGORY_HIERARCHY:
210 formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.GET_CATEGORY_HIERARCHY_TEMPLATE_ARRAY, auditingFields);
213 case GET_FILTERED_ASSET_LIST:
214 formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.EXTERNAL_GET_ASSET_LIST_TEMPLATE_ARRAY, auditingFields);
216 case GET_ASSET_METADATA:
217 case GET_TOSCA_MODEL:
218 formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.EXTERNAL_GET_ASSET_TEMPLATE_ARRAY, auditingFields);
220 case ARTIFACT_UPLOAD_BY_API:
221 case ARTIFACT_DELETE_BY_API:
222 case ARTIFACT_UPDATE_BY_API:
223 ArrayList<AuditingFieldsKeysEnum> uploadArtifactFieldsList = new ArrayList(Arrays.asList(AuditingLogFormatConstants.EXTERNAL_CRUD_API_ARTIFACT_ARRAY));
224 AuditingFieldsKeysEnum[] uploadArtifactFieldsArray = new AuditingFieldsKeysEnum[100];
225 artifactFieldsArray = uploadArtifactFieldsList.toArray(uploadArtifactFieldsArray);
226 formattedString = buildStringAccrodingToArray(artifactFieldsArray, auditingFields);
232 return formattedString;
235 private static StringBuilder buildStringAccrodingToArray(AuditingFieldsKeysEnum[] sortedFieldsArray, EnumMap<AuditingFieldsKeysEnum, Object> auditingFields) {
236 StringBuilder formattedString = new StringBuilder();
237 for (int i = 0; i < sortedFieldsArray.length; i++) {
238 AuditingFieldsKeysEnum key = sortedFieldsArray[i];
240 Object fieldVal = auditingFields.get(key);
241 if (fieldVal != null) {
242 formattedString.append(key.getDisplayName()).append(" = \"").append(fieldVal).append("\"");
243 if (i < sortedFieldsArray.length - 1) {
244 formattedString.append(" ");
248 return formattedString;
251 protected static String getModifier(String modifierName, String modifierUid) {
252 if (modifierUid == null || modifierUid.equals(Constants.EMPTY_STRING)) {
253 return Constants.EMPTY_STRING;
255 StringBuilder sb = new StringBuilder();
256 if (modifierName != null) {
257 sb.append(modifierName);
259 sb.append("(").append(modifierUid).append(")");
260 return sb.toString();
263 protected static String getUser(String userData) {
264 StringBuilder sb = new StringBuilder();
266 return sb.toString();