Skip to content

Commit

Permalink
fixes #81 add enhanced audit logging
Browse files Browse the repository at this point in the history
  • Loading branch information
Brutus5000 committed Nov 1, 2017
1 parent 8cf22ca commit 2ca5fe8
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/main/java/com/faforever/api/config/elide/ElideConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@
import com.faforever.api.data.checks.permission.HasBanRead;
import com.faforever.api.data.checks.permission.HasBanUpdate;
import com.faforever.api.data.checks.permission.HasLadder1v1Update;
import com.faforever.api.security.ExtendedAuditLogger;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yahoo.elide.Elide;
import com.yahoo.elide.ElideSettingsBuilder;
import com.yahoo.elide.audit.Slf4jLogger;
import com.yahoo.elide.core.EntityDictionary;
import com.yahoo.elide.core.filter.dialect.RSQLFilterDialect;
import com.yahoo.elide.datastores.hibernate5.HibernateStore;
Expand Down Expand Up @@ -46,7 +46,7 @@ public Elide elide(EntityManagerFactory entityManagerFactory, ObjectMapper objec

return new Elide(new ElideSettingsBuilder(hibernateStore)
.withJsonApiMapper(new JsonApiMapper(entityDictionary, objectMapper))
.withAuditLogger(new Slf4jLogger())
.withAuditLogger(new ExtendedAuditLogger())
.withEntityDictionary(entityDictionary)
.withJoinFilterDialect(rsqlFilterDialect)
.withSubqueryFilterDialect(rsqlFilterDialect)
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/com/faforever/api/data/domain/Ladder1v1Map.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.faforever.api.data.domain;

import com.faforever.api.data.checks.permission.HasLadder1v1Update;
import com.yahoo.elide.annotation.Audit;
import com.yahoo.elide.annotation.Audit.Action;
import com.yahoo.elide.annotation.CreatePermission;
import com.yahoo.elide.annotation.DeletePermission;
import com.yahoo.elide.annotation.Include;
Expand All @@ -24,6 +26,8 @@
@Table(name = "ladder_map")
@Include(rootLevel = true, type = "ladder1v1Map")
@Immutable
@Audit(action = Action.CREATE, logStatement = "Added map `{0}` with version `{1}` to the ladder pool", logExpressions = {"${ladder1v1Map.mapVersion.map.displayName}", "${ladder1v1Map.mapVersion.version}"})
@Audit(action = Action.DELETE, logStatement = "Removed map `{0}` with version `{1}` from the ladder pool", logExpressions = {"${ladder1v1Map.mapVersion.map.displayName}", "${ladder1v1Map.mapVersion.version}"})
public class Ladder1v1Map {
private int id;
private MapVersion mapVersion;
Expand Down
35 changes: 35 additions & 0 deletions src/main/java/com/faforever/api/security/ExtendedAuditLogger.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.faforever.api.security;

import com.yahoo.elide.audit.AuditLogger;
import com.yahoo.elide.audit.LogMessage;
import com.yahoo.elide.core.RequestScope;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.context.SecurityContextHolder;

import java.io.IOException;
import java.text.MessageFormat;

@Slf4j
public class ExtendedAuditLogger extends AuditLogger {
@Override
public void commit(RequestScope requestScope) throws IOException {
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
String user;

if (principal instanceof FafUserDetails) {
FafUserDetails fafUserDetails = (FafUserDetails) principal;
user = MessageFormat.format("`{0}` with id `{1}`", fafUserDetails.getUsername(), fafUserDetails.getId());
} else {
user = principal.toString();
}

try {
for (LogMessage message : messages.get()) {
String extendedMessage = MessageFormat.format("{0} [invoked by {1}]", message.getMessage(), user);
log.debug(extendedMessage);
}
} finally {
messages.get().clear();
}
}
}

0 comments on commit 2ca5fe8

Please sign in to comment.