/* * JBoss, Home of Professional Open Source. * See the COPYRIGHT.txt file distributed with this work for information * regarding copyright ownership. Some portions may be licensed * to Red Hat, Inc. under one or more contributor license agreements. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301 USA. */ package org.teiid.logging; import java.util.Arrays; import org.teiid.CommandContext; import org.teiid.adminapi.Session; /** * Log format for auditing. */ public class AuditMessage { /** * Contains information related to a logon attempt */ public static class LogonInfo { private final String vdbName; private final String vdbVersion; private final String authType; private final String userName; private final String applicationName; private final String clientHostName; private final String clientIpAddress; private final String clientMac; private final boolean passThrough; public LogonInfo(String vdbName, String vdbVersion, String authType, String userName, String applicationName, String hostName, String ipAddress, String clientMac, boolean onlyAllowPassthrough) { this.vdbName = vdbName; this.vdbVersion = vdbVersion; this.authType = authType; this.userName = userName; this.applicationName = applicationName; this.clientHostName = hostName; this.clientIpAddress = ipAddress; this.clientMac = clientMac; this.passThrough = onlyAllowPassthrough; } public String getVdbName() { return vdbName; } public String getVdbVersion() { return vdbVersion; } public String getAuthType() { return authType; } public String getUserName() { return userName; } public String getApplicationName() { return applicationName; } public String getClientHostName() { return clientHostName; } public String getClientIpAddress() { return clientIpAddress; } public String getClientMac() { return clientMac; } public boolean isPassThrough() { return passThrough; } @Override public String toString() { StringBuffer msg = new StringBuffer(); msg.append( vdbName ); msg.append(", "); //$NON-NLS-1$ msg.append( vdbVersion ); msg.append(' '); msg.append( userName ); msg.append(' '); msg.append(authType); msg.append(' '); msg.append(clientHostName); msg.append(' '); msg.append(clientIpAddress); msg.append(' '); msg.append(clientMac); msg.append(' '); msg.append(passThrough); return msg.toString(); } } private String context; private String activity; private LogonInfo logonInfo; private Exception exception; private Session session; private String[] resources; private CommandContext commandContext; public AuditMessage(String context, String activity, String[] resources, CommandContext commandContext) { this.context = context; this.activity = activity; this.resources = resources; this.commandContext = commandContext; } public AuditMessage(String context, String activity, LogonInfo info, Exception e) { this.context = context; this.activity = activity; this.logonInfo = info; this.exception = e; } public AuditMessage(String context, String activity, Session session) { this.context = context; this.activity = activity; this.session = session; } /** * The related {@link LogonInfo} only if this is a logon related event * @return */ public LogonInfo getLogonInfo() { return logonInfo; } /** * The {@link Session} for the event or null if one has not been established. * @return */ public Session getSession() { if (this.commandContext != null) { return this.commandContext.getSession(); } return session; } public String getContext() { return this.context; } public String getActivity() { return this.activity; } /** * The user name or null if the session has not yet been established. * @return */ public String getPrincipal() { Session s = getSession(); if (s != null) { return s.getUserName(); } return null; } /** * The list of relevant resources for the audit event. * Will be null for logon/logoff events. * @return */ public String[] getResources() { return this.resources; } public CommandContext getCommandContext() { return commandContext; } /** * The exception associated with a failed logon attempt. * @return */ public Exception getException() { return exception; } public String toString() { StringBuffer msg = new StringBuffer(); if (this.commandContext != null) { msg.append( this.commandContext.getRequestId()); } msg.append(" ["); //$NON-NLS-1$ if (this.logonInfo != null) { msg.append(this.logonInfo); } else { msg.append( getPrincipal() ); } msg.append("] <"); //$NON-NLS-1$ msg.append( getContext() ); msg.append('.'); msg.append( getActivity() ); msg.append("> "); //$NON-NLS-1$ if (resources != null) { msg.append( Arrays.toString(resources) ); } return msg.toString(); } }