/* * Copyright (c) 2015 EMC Corporation * All Rights Reserved */ package controllers.infra; import java.io.InputStream; import java.net.URI; import java.net.URISyntaxException; import java.util.Collections; import java.util.Date; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import models.datatable.AuditLogDataTable; import org.apache.commons.lang.StringUtils; import org.joda.time.DateTime; import play.Logger; import play.mvc.Controller; import play.mvc.With; import util.AuditLogs; import util.BourneUtil; import controllers.Common; import controllers.deadbolt.Restrict; import controllers.deadbolt.Restrictions; import util.support.SupportAuditPackageCreator; import static render.RenderSupportAuditPackage.renderSupportAuditPackage; @With(Common.class) @Restrictions({ @Restrict("SYSTEM_AUDITOR") }) public class AuditLog extends Controller { private static String LOG_LANG = "en_US"; private static JAXBContext CONTEXT; private static final String PARAM_START = "startTime"; private static final String PARAM_END = "endTime"; private static final String PARAM_RESULT = "resultStatus"; private static final String PARAM_SERVICE = "serviceType"; private static final String PARAM_USER = "user"; private static final String PARAM_KEYWORD = "keyword"; private static synchronized JAXBContext getContext() throws JAXBException { if (CONTEXT == null) { CONTEXT = JAXBContext.newInstance(AuditLogs.class); } return CONTEXT; } private static AuditLogs unmarshall(InputStream in) throws JAXBException { return (AuditLogs) getContext().createUnmarshaller().unmarshal(in); } public static void list() { AuditLogDataTable dataTable = new AuditLogDataTable(); Long startTime = params.get(PARAM_START, Long.class); String resultStatus = params.get(PARAM_RESULT) == null ? "" : params.get(PARAM_RESULT); String serviceType = params.get(PARAM_SERVICE); String user = params.get(PARAM_USER); String keyword = params.get(PARAM_KEYWORD); DateTime defaultStartTime = new DateTime(); renderArgs.put(PARAM_START, (startTime == null) ? defaultStartTime.getMillis() : startTime); renderArgs.put(PARAM_RESULT, resultStatus); renderArgs.put(PARAM_SERVICE, serviceType); renderArgs.put(PARAM_USER, user); renderArgs.put(PARAM_KEYWORD, keyword); Common.copyRenderArgsToAngular(); render(dataTable); } public static void logsJson() { InputStream in = getLogsStream(); try { AuditLogs logs = unmarshall(in); if (logs.getAuditLogs() != null) { for (com.emc.storageos.db.client.model.AuditLog log : logs.getAuditLogs()) { if (log.getUserId() == null) { try { log.setUserId(new URI("")); } catch (URISyntaxException shouldNotHappen) { Logger.error(shouldNotHappen, "Error setting UserId to blank"); } } } renderJSON(logs.getAuditLogs()); } else { renderJSON(Collections.<String> emptyList()); } } catch (JAXBException e) { error(e); } } private static InputStream getLogsStream() { Long startTime = params.get(PARAM_START, Long.class); String result = params.get(PARAM_RESULT); String serviceType = params.get(PARAM_SERVICE); String user = params.get(PARAM_USER); String keyword = params.get(PARAM_KEYWORD); return BourneUtil.getViprClient().audit().getAsStream(new Date(startTime), new Date(), serviceType, user, result, keyword, LOG_LANG); } public static void download(Long startTime, Long endTime, String serviceType, String user, String resultStatus, String keyword) { SupportAuditPackageCreator creator = new SupportAuditPackageCreator(request, BourneUtil.getViprClient()); if (startTime != null) { creator.setStartTime(new Date(startTime)); } if (endTime != null) { creator.setEndTime(new Date(endTime)); } if (StringUtils.isNotEmpty(serviceType)) { creator.setSvcType(serviceType); } if (StringUtils.isNotEmpty(user)) { creator.setUser(user); } if (StringUtils.isNotEmpty(resultStatus)) { creator.setResult(resultStatus); } if (StringUtils.isNotEmpty(keyword)) { creator.setKeyword(keyword); } creator.setLanguage(LOG_LANG); renderSupportAuditPackage(creator); } }