@PreAuthorize("hasRole('" + StandardEntitlement.AUDIT_DISABLE + "')") public void disableAudit(final AuditLoggerName auditLoggerName) { try { delete(auditLoggerName.toLoggerName(), LoggerType.AUDIT); } catch (NotFoundException e) { LOG.debug("Ignoring disable of non existing logger {}", auditLoggerName.toLoggerName()); } catch (IllegalArgumentException e) { SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.InvalidLogger); sce.getElements().add(e.getMessage()); throw sce; } }
public static AuditLoggerName fromLoggerName(final String loggerName) throws ParseException { if (StringUtils.isBlank(loggerName)) { throw new IllegalArgumentException("Null value not permitted"); } if (!loggerName.startsWith(LoggerType.AUDIT.getPrefix())) { throw new ParseException("Audit logger name must start with " + LoggerType.AUDIT.getPrefix(), 0); } Map.Entry<EventCategory, Result> eventCategory = parseEventCategory( loggerName.replaceAll(LoggerType.AUDIT.getPrefix() + ".", "")); return new AuditLoggerName( eventCategory.getKey().getType(), eventCategory.getKey().getCategory(), eventCategory.getKey().getSubcategory(), eventCategory.getKey().getEvents().isEmpty() ? StringUtils.EMPTY : eventCategory.getKey().getEvents().iterator().next(), eventCategory.getValue()); }
public String toLoggerName() { return new StringBuilder().append(LoggerType.AUDIT.getPrefix()).append('.'). append(buildEvent(type, category, subcategory, event, result)).toString(); }
@Override public boolean auditRequested( final String who, final AuditElements.EventCategoryType type, final String category, final String subcategory, final String event) { AuditEntry auditEntry = new AuditEntry( who, new AuditLoggerName(type, category, subcategory, event, Result.SUCCESS), null, null, null); org.apache.syncope.core.persistence.api.entity.Logger syncopeLogger = loggerDAO.find(auditEntry.getLogger().toLoggerName()); boolean auditRequested = syncopeLogger != null && syncopeLogger.getLevel() == LoggerLevel.DEBUG; if (auditRequested) { return true; } auditEntry = new AuditEntry( who, new AuditLoggerName(type, category, subcategory, event, Result.FAILURE), null, null, null); syncopeLogger = loggerDAO.find(auditEntry.getLogger().toLoggerName()); auditRequested = syncopeLogger != null && syncopeLogger.getLevel() == LoggerLevel.DEBUG; return auditRequested; }
new AuditLoggerName(type, category, subcategory, event, condition), before, throwable == null ? output : throwable.getMessage(), loggerDAO.find(auditEntry.getLogger().toLoggerName()); if (syncopeLogger != null && syncopeLogger.getLevel() == LoggerLevel.DEBUG) { Logger logger = LoggerFactory.getLogger( AuditLoggerName.getAuditLoggerName(AuthContextUtils.getDomain())); Logger eventLogger = LoggerFactory.getLogger( AuditLoggerName.getAuditEventLoggerName(AuthContextUtils.getDomain(), syncopeLogger.getKey())); String serializedAuditEntry = POJOHelper.serialize(auditEntry);
map(audit -> AuditLoggerName.buildEvent( audit.getType(), audit.getCategory(), audit.getSubcategory(), audit.getEvent(), audit.getResult())). collect(Collectors.toList());
@Override public void onClick(final AjaxRequestTarget target, final EventCategory ignore) { if (StringUtils.isNotBlank(custom.getModelObject())) { Pair<EventCategory, AuditElements.Result> parsed = AuditLoggerName.parseEventCategory(custom. getModelObject()); String eventString = AuditLoggerName.buildEvent( parsed.getKey().getType(), null, null, parsed.getKey().getEvents().isEmpty() ? StringUtils.EMPTY : parsed.getKey().getEvents().iterator().next(), parsed.getValue()); custom.setModelObject(StringUtils.EMPTY); send(EventCategoryPanel.this.getPage(), Broadcast.BREADTH, new EventSelectionChanged( target, Collections.<String>emptySet(), Collections.<String>singleton(eventString))); target.add(categoryContainer); } } }, ActionLink.ActionType.DELETE, StringUtils.EMPTY, true).hideLabel();
LoggerConfig logConf = new LoggerConfig(AuditLoggerName.getAuditLoggerName(entry.getKey()), null, false); logConf.addAppender(appender, Level.DEBUG, null); logConf.setLevel(Level.DEBUG); map(event -> AuditLoggerName.getAuditEventLoggerName(entry.getKey(), event.toLoggerName())). forEachOrdered(domainAuditLoggerName -> { LoggerConfig eventLogConf = ctx.getConfiguration().getLoggerConfig(domainAuditLoggerName);
if (StringUtils.isNotBlank(auditEntry.getLogger().getCategory())) { atts.addAttribute("", "", "category", ReportXMLConst.XSD_STRING, auditEntry.getLogger().getCategory()); if (StringUtils.isNotBlank(auditEntry.getLogger().getSubcategory())) { atts.addAttribute("", "", "subcategory", ReportXMLConst.XSD_STRING, auditEntry.getLogger().getSubcategory()); if (StringUtils.isNotBlank(auditEntry.getLogger().getEvent())) { atts.addAttribute("", "", "event", ReportXMLConst.XSD_STRING, auditEntry.getLogger().getEvent()); if (auditEntry.getLogger().getResult() != null) { atts.addAttribute("", "", "result", ReportXMLConst.XSD_STRING, auditEntry.getLogger().getResult().name());
public static List<AuditLoggerName> wrap(final Collection<LoggerTO> logger) { List<AuditLoggerName> result = new ArrayList<>(); logger.forEach(loggerTO -> { try { result.add(AuditLoggerName.fromLoggerName(loggerTO.getKey())); } catch (Exception ignore) { // ignore } }); return result; }
String auditLoggerName = AuditLoggerName.getAuditEventLoggerName( AuthContextUtils.getDomain(), syncopeLogger.getKey()); if (auditAppender.getEvents().stream().anyMatch(event -> name.equalsIgnoreCase(event.toLoggerName()))) { loggerLoader.addAppenderToContext(ctx, auditAppender, logConf);
syncopeLoggers.put(AuditLoggerName.getAuditEventLoggerName( AuthContextUtils.getDomain(), syncopeLogger.getKey()), syncopeLogger);
public Map<String, Set<AuditLoggerName>> listAuditsByCategory() { Map<String, Set<AuditLoggerName>> result = new HashMap<>(); listAudits().forEach(audit -> { if (!result.containsKey(audit.getCategory())) { result.put(audit.getCategory(), new HashSet<>()); } result.get(audit.getCategory()).add(audit); }); return result; }
@Override public void onClick(final AjaxRequestTarget target, final EventCategory ignore) { if (StringUtils.isNotBlank(custom.getModelObject())) { Pair<EventCategory, AuditElements.Result> parsed = AuditLoggerName.parseEventCategory(custom. getModelObject()); String eventString = AuditLoggerName.buildEvent( parsed.getKey().getType(), null, null, parsed.getKey().getEvents().isEmpty() ? StringUtils.EMPTY : parsed.getKey().getEvents().iterator().next(), parsed.getValue()); custom.setModelObject(StringUtils.EMPTY); send(EventCategoryPanel.this.getPage(), Broadcast.BREADTH, new EventSelectionChanged( target, Collections.<String>singleton(eventString), Collections.<String>emptySet())); target.add(categoryContainer); } } }, ActionLink.ActionType.CREATE, StringUtils.EMPTY).hideLabel();
public static List<AuditLoggerName> wrap(final Collection<LoggerTO> logger) { List<AuditLoggerName> result = new ArrayList<>(); logger.forEach(loggerTO -> { try { result.add(AuditLoggerName.fromLoggerName(loggerTO.getKey())); } catch (Exception ignore) { // ignore } }); return result; }
private LoggerTO delete(final String name, final LoggerType expectedType) { Logger syncopeLogger = loggerDAO.find(name); if (syncopeLogger == null) { throw new NotFoundException("Logger " + name); } if (expectedType != syncopeLogger.getType()) { throwInvalidLogger(expectedType); } LoggerTO loggerToDelete = new LoggerTO(); loggerToDelete.setKey(syncopeLogger.getKey()); loggerToDelete.setLevel(syncopeLogger.getLevel()); // remove SyncopeLogger from local storage, so that LoggerLoader won't load this next time loggerDAO.delete(syncopeLogger); // set log level to OFF in order to disable configured logger until next reboot LoggerContext ctx = (LoggerContext) LogManager.getContext(false); String auditLoggerName = AuditLoggerName.getAuditEventLoggerName( AuthContextUtils.getDomain(), syncopeLogger.getKey()); org.apache.logging.log4j.core.Logger logger = SyncopeConstants.ROOT_LOGGER.equals(name) ? ctx.getLogger(LogManager.ROOT_LOGGER_NAME) : LoggerType.AUDIT.equals(syncopeLogger.getType()) ? ctx.getLogger(auditLoggerName) : ctx.getLogger(name); logger.setLevel(Level.OFF); ctx.updateLoggers(); return loggerToDelete; }
@PreAuthorize("hasRole('" + StandardEntitlement.AUDIT_READ + "')") @Transactional(readOnly = true) public LoggerTO readAudit(final String name) { return listAudits().stream(). filter(logger -> logger.toLoggerName().equals(name)).findFirst(). map(logger -> { LoggerTO loggerTO = new LoggerTO(); loggerTO.setKey(logger.toLoggerName()); loggerTO.setLevel(LoggerLevel.DEBUG); return loggerTO; }).orElseThrow(() -> new NotFoundException("Audit " + name)); }
public static AuditLoggerName fromLoggerName(final String loggerName) throws ParseException { if (StringUtils.isBlank(loggerName)) { throw new IllegalArgumentException("Null value not permitted"); } if (!loggerName.startsWith(LoggerType.AUDIT.getPrefix())) { throw new ParseException("Audit logger name must start with " + LoggerType.AUDIT.getPrefix(), 0); } Map.Entry<EventCategory, Result> eventCategory = parseEventCategory( loggerName.replaceAll(LoggerType.AUDIT.getPrefix() + ".", "")); return new AuditLoggerName( eventCategory.getKey().getType(), eventCategory.getKey().getCategory(), eventCategory.getKey().getSubcategory(), eventCategory.getKey().getEvents().isEmpty() ? StringUtils.EMPTY : eventCategory.getKey().getEvents().iterator().next(), eventCategory.getValue()); }
final Map.Entry<EventCategory, AuditElements.Result> categoryEvent = AuditLoggerName.parseEventCategory( inspectSelectedEvent.getEvent()); custom.setModelObject(AuditLoggerName.buildEvent( categoryEvent.getKey().getType(), categoryEvent.getKey().getCategory(),
public String toLoggerName() { return new StringBuilder().append(LoggerType.AUDIT.getPrefix()).append('.'). append(buildEvent(type, category, subcategory, event, result)).toString(); }