aboutsummaryrefslogtreecommitdiffstats
path: root/catalog-be/src/main/java/org/openecomp/sdc/be/auditing/impl/AuditingLogFormatUtil.java
blob: ee4b70c0f6f267199929bbe7938aea6e2cb9d2f9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
/*-
 * ============LICENSE_START=======================================================
 * SDC
 * ================================================================================
 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 * ================================================================================
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * ============LICENSE_END=========================================================
 */

package org.openecomp.sdc.be.auditing.impl;

import org.openecomp.sdc.be.resources.data.auditing.AuditingActionEnum;
import org.openecomp.sdc.common.api.Constants;
import org.openecomp.sdc.common.datastructure.AuditingFieldsKeysEnum;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.Marker;
import org.slf4j.MarkerFactory;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Formatter;
import java.util.Locale;
import java.util.Map;

public class AuditingLogFormatUtil {

    // When adding any new fields here, please keep the convention <fieldName>=
    // <value>, with the space between them.
    private static final Logger log = LoggerFactory.getLogger(AuditingLogFormatUtil.class);

    // This is the key by which audit marker is recognized in logback.xml
    private static String AUDIT_MARKER_STR = "AUDIT_MARKER";

    public static final Marker auditMarker = MarkerFactory.getMarker(AUDIT_MARKER_STR);

    protected static String logAuditEvent(Map<AuditingFieldsKeysEnum, Object> auditingFields) {

        StringBuilder sb = new StringBuilder();
        Formatter formatter = new Formatter(sb, Locale.US);
        log.trace("logAuditEvent - start");

        String formattedString = "";

        try {

            // Common fields
            String modifier = getModifier((String) auditingFields.get(AuditingFieldsKeysEnum.AUDIT_MODIFIER_NAME), (String) auditingFields.get(AuditingFieldsKeysEnum.AUDIT_MODIFIER_UID));
            Object statusObj = auditingFields.get(AuditingFieldsKeysEnum.AUDIT_STATUS);
            String status = null;
            if (statusObj != null) {
                status = String.valueOf(statusObj);
            }
            String desc = (String) auditingFields.get(AuditingFieldsKeysEnum.AUDIT_DESC);
            String action = (String) auditingFields.get(AuditingFieldsKeysEnum.AUDIT_ACTION);

            AuditingActionEnum auditEventType = AuditingActionEnum.getActionByName(action);
            StringBuilder formattedEvent = getFormattedEvent(auditingFields, modifier, status, desc, action, auditEventType);
            formattedString = formattedEvent.toString();

            // This is the only way to fix DE166225 without major refactoring,
            // after it was previously agreed with Ella that activity type will
            // be the method name.

            if (auditEventType.equals(AuditingActionEnum.AUTH_REQUEST)) {
                HttpRequestAuthentication(formattedString);
            } else {
                log.info(auditMarker, formattedString);
            }
        } catch (Exception e) {
            log.debug("unexpected error occurred: {}", e.getMessage(), e);

        } finally {
            formatter.close();
            log.trace("logAuditEvent - end");
        }
        return formattedString;

    }

    protected static void logAuditEvent(final String formattedString) {
        log.trace("logAuditEvent - start");
        log.info(auditMarker, formattedString);
        log.trace("logAuditEvent - end");
    }


    private static void HttpRequestAuthentication(String formattedString) {
        log.info(auditMarker, formattedString);
    }

    private static StringBuilder getFormattedEvent(Map<AuditingFieldsKeysEnum, Object> auditingFields, String modifier, String status, String desc, String action, AuditingActionEnum auditEventType) {

        StringBuilder formattedString = new StringBuilder();

        switch (auditEventType) {
        case ADD_USER:
        case DELETE_USER:
        case UPDATE_USER:
            formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.USER_ADMIN_TEMPLATE_ARRAY, auditingFields);

            break;
        case USER_ACCESS:
            formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.USER_ACCESS_TEMPLATE_ARRAY, auditingFields);
            break;
        case DISTRIBUTION_REGISTER:
        case DISTRIBUTION_UN_REGISTER:
            formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.DISTRIBUTION_REGISTRATION_TEMPLATE_ARRAY, auditingFields);
            break;
        case UPDATE_RESOURCE_METADATA:
        case CREATE_RESOURCE:
        case IMPORT_RESOURCE:
            ArrayList<AuditingFieldsKeysEnum> createResourceList = new ArrayList(Arrays.asList(AuditingLogFormatConstants.CREATE_RESOURCE_TEMPLATE_PREFIX_ARRAY));
            createResourceList.addAll(Arrays.asList(AuditingLogFormatConstants.CREATE_RESOURCE_TEMPLATE_SUFFIX_ARRAY));
            if (auditEventType == AuditingActionEnum.IMPORT_RESOURCE) {
                createResourceList.add(AuditingFieldsKeysEnum.AUDIT_RESOURCE_TOSCA_NODE_TYPE);
            }
            AuditingFieldsKeysEnum[] createResourceArray = new AuditingFieldsKeysEnum[100];
            createResourceArray = createResourceList.toArray(createResourceArray);
            formattedString = buildStringAccrodingToArray(createResourceArray, auditingFields);
            break;
        case CHECKIN_RESOURCE:
        case CHECKOUT_RESOURCE:
        case UNDO_CHECKOUT_RESOURCE:
        case CERTIFICATION_REQUEST_RESOURCE:
        case START_CERTIFICATION_RESOURCE:
        case CERTIFICATION_SUCCESS_RESOURCE:
        case FAIL_CERTIFICATION_RESOURCE:
        case CANCEL_CERTIFICATION_RESOURCE:
            ArrayList<AuditingFieldsKeysEnum> checkinFieldsList = new ArrayList(Arrays.asList(AuditingLogFormatConstants.CREATE_RESOURCE_TEMPLATE_PREFIX_ARRAY));
            checkinFieldsList.add(AuditingFieldsKeysEnum.AUDIT_RESOURCE_COMMENT);
            checkinFieldsList.addAll(Arrays.asList(AuditingLogFormatConstants.CREATE_RESOURCE_TEMPLATE_SUFFIX_ARRAY));
            AuditingFieldsKeysEnum[] checkinFieldsArray = new AuditingFieldsKeysEnum[100];
            checkinFieldsArray = checkinFieldsList.toArray(checkinFieldsArray);
            String comment = (String) auditingFields.get(AuditingFieldsKeysEnum.AUDIT_RESOURCE_COMMENT);
            if (comment == null || comment.equals(Constants.NULL_STRING)) {
                auditingFields.put(AuditingFieldsKeysEnum.AUDIT_RESOURCE_COMMENT, Constants.EMPTY_STRING);
            }
            formattedString = buildStringAccrodingToArray(checkinFieldsArray, auditingFields);
            break;
        case ARTIFACT_UPLOAD:
        case ARTIFACT_DELETE:
        case ARTIFACT_METADATA_UPDATE:
        case ARTIFACT_PAYLOAD_UPDATE:
        case ARTIFACT_DOWNLOAD:
            ArrayList<AuditingFieldsKeysEnum> artifactFieldsSet = new ArrayList<>(Arrays.asList(AuditingLogFormatConstants.CREATE_RESOURCE_TEMPLATE_PREFIX_ARRAY)) ;
            artifactFieldsSet.add(AuditingFieldsKeysEnum.AUDIT_PREV_ARTIFACT_UUID);
            artifactFieldsSet.add(AuditingFieldsKeysEnum.AUDIT_CURR_ARTIFACT_UUID);
            artifactFieldsSet.add(AuditingFieldsKeysEnum.AUDIT_ARTIFACT_DATA);
            artifactFieldsSet.addAll(Arrays.asList(AuditingLogFormatConstants.EXTERNAL_DOWNLOAD_ARTIFACT_ARRAY));
            AuditingFieldsKeysEnum[] artifactFieldsArray = new AuditingFieldsKeysEnum[100];
            artifactFieldsArray = artifactFieldsSet.toArray(artifactFieldsArray);
            formattedString = buildStringAccrodingToArray(artifactFieldsArray, auditingFields);
            break;
        case DOWNLOAD_ARTIFACT:
            ArrayList<AuditingFieldsKeysEnum> downloadArtifactFieldsList = new ArrayList(Arrays.asList(AuditingLogFormatConstants.EXTERNAL_DOWNLOAD_ARTIFACT_ARRAY));
            AuditingFieldsKeysEnum[] downloadArtifactFieldsArray = new AuditingFieldsKeysEnum[100];
            artifactFieldsArray = downloadArtifactFieldsList.toArray(downloadArtifactFieldsArray);
            formattedString = buildStringAccrodingToArray(artifactFieldsArray, auditingFields);
            break;
        case DISTRIBUTION_STATE_CHANGE_REQUEST:
            formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.ACTIVATE_DISTRIBUTION_ARRAY, auditingFields);
            break;
        case DISTRIBUTION_STATE_CHANGE_APPROV:
        case DISTRIBUTION_STATE_CHANGE_REJECT:
            formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.CHANGE_DISTRIBUTION_STATUS_ARRAY, auditingFields);
            break;
        case CREATE_DISTRIBUTION_TOPIC:
            formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.CREATE_TOPIC_TEMPLATE_ARRAY, auditingFields);
            break;
        case ADD_KEY_TO_TOPIC_ACL:
        case REMOVE_KEY_FROM_TOPIC_ACL:
            formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.ADD_REMOVE_TOPIC_KEY_ACL_TEMPLATE_ARRAY, auditingFields);
            break;
        case DISTRIBUTION_STATUS:
            formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.DISTRIBUTION_STATUS_TEMPLATE_ARRAY, auditingFields);
            break;
        case DISTRIBUTION_NOTIFY:
            formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.DISTRIBUTION_NOTIFY_ARRAY, auditingFields);
            break;
        case DISTRIBUTION_DEPLOY:
            formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.DISTRIBUTION_DEPLOY_ARRAY, auditingFields);
            break;
        case GET_UEB_CLUSTER:
            formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.GET_UEB_CLUSTER_ARRAY, auditingFields);
            break;
        case DISTRIBUTION_ARTIFACT_DOWNLOAD:
            formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.DISTRIBUTION_DOWNLOAD_TEMPLATE_ARRAY, auditingFields);
            break;
        case AUTH_REQUEST:
            formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.AUTH_TEMPLATE_ARRAY, auditingFields);
            break;
        case ADD_ECOMP_USER_CREDENTIALS:
        case GET_ECOMP_USER_CREDENTIALS:
        case DELETE_ECOMP_USER_CREDENTIALS:
        case UPDATE_ECOMP_USER_CREDENTIALS:
            formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.ECOMP_USER_TEMPLATE_ARRAY, auditingFields);
            break;
        case ADD_CATEGORY:
        case ADD_SUB_CATEGORY:
        case ADD_GROUPING:
            formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.CATEGORY_TEMPLATE_ARRAY, auditingFields);
            break;
        case GET_USERS_LIST:
            formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.GET_USERS_LIST_TEMPLATE_ARRAY, auditingFields);
            break;
        case GET_CATEGORY_HIERARCHY:
            formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.GET_CATEGORY_HIERARCHY_TEMPLATE_ARRAY, auditingFields);
            break;
        case GET_ASSET_LIST:
        case GET_FILTERED_ASSET_LIST:
            formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.EXTERNAL_GET_ASSET_LIST_TEMPLATE_ARRAY, auditingFields);
            break;
        case GET_ASSET_METADATA:
        case GET_TOSCA_MODEL:
            formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.EXTERNAL_GET_ASSET_TEMPLATE_ARRAY, auditingFields);
            break;
        case ARTIFACT_UPLOAD_BY_API:
        case ARTIFACT_DELETE_BY_API:
        case ARTIFACT_UPDATE_BY_API:
            ArrayList<AuditingFieldsKeysEnum> uploadArtifactFieldsList = new ArrayList(Arrays.asList(AuditingLogFormatConstants.EXTERNAL_CRUD_API_ARTIFACT_ARRAY));
            AuditingFieldsKeysEnum[] uploadArtifactFieldsArray = new AuditingFieldsKeysEnum[100];
            artifactFieldsArray = uploadArtifactFieldsList.toArray(uploadArtifactFieldsArray);
            formattedString = buildStringAccrodingToArray(artifactFieldsArray, auditingFields);
            break;
        case CREATE_RESOURCE_BY_API:
            formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.EXTERNAL_CRUD_API_ARRAY, auditingFields);
            break;
        case CHANGE_LIFECYCLE_BY_API:
            formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.EXTERNAL_LYFECYCLE_API_ARRAY, auditingFields);
            break;
            case ACTIVATE_SERVICE_BY_API:
                formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.EXTERNAL_ACTIVATE_SERVICE_ARRAY, auditingFields);
                break;
        case CREATE_ENVIRONMENT:
        case UPDATE_ENVIRONMENT:
        case DELETE_ENVIRONMENT:
        case UNKNOWN_ENVIRONMENT_NOTIFICATION:
        case UNSUPPORTED_ENVIRONMENT_TYPE:
            formattedString = buildStringAccrodingToArray(AuditingLogFormatConstants.ECOMP_OPERATIONAL_ENVIRONMENT_ARRAY, auditingFields);
            break;
        default:
            break;
        }

        return formattedString;
    }

    private static StringBuilder buildStringAccrodingToArray(AuditingFieldsKeysEnum[] sortedFieldsArray, Map<AuditingFieldsKeysEnum, Object> auditingFields) {
        StringBuilder formattedString = new StringBuilder();
        for (int i = 0; i < sortedFieldsArray.length; i++) {
            AuditingFieldsKeysEnum key = sortedFieldsArray[i];

            Object fieldVal = auditingFields.get(key);
            if (fieldVal != null) {
                formattedString.append(key.getDisplayName()).append(" = \"").append(fieldVal).append("\"");
                if (i < sortedFieldsArray.length - 1) {
                    formattedString.append(" ");
                }
            }
        }
        return formattedString;
    }

    protected static String getModifier(String modifierName, String modifierUid) {
        if (modifierUid == null || modifierUid.equals(Constants.EMPTY_STRING)) {
            return Constants.EMPTY_STRING;
        }
        StringBuilder sb = new StringBuilder();
        if (modifierName != null) {
            sb.append(modifierName);
        }
        sb.append("(").append(modifierUid).append(")");
        return sb.toString();
    }

    protected static String getUser(String userData) {
        StringBuilder sb = new StringBuilder();
        sb.append(userData);
        return sb.toString();
    }



}