More optimizations & fix NPE when console unbans a player
This commit is contained in:
parent
6394b7e4ef
commit
5270321c37
@ -267,6 +267,18 @@ public final class APIv3 {
|
||||
}
|
||||
}
|
||||
|
||||
public static void respondRawJson(RoutingContext ctx, int code, String response) {
|
||||
ctx.response().putHeader(HttpHeaders.CONTENT_TYPE, MediaType.JSON_UTF_8.toString());
|
||||
|
||||
if (response == null) {
|
||||
ctx.response().setStatusCode(404);
|
||||
ctx.response().end("{}");
|
||||
} else {
|
||||
ctx.response().setStatusCode(code);
|
||||
ctx.response().end(response);
|
||||
}
|
||||
}
|
||||
|
||||
private void httpGet(Router router, String route, Class<?> handler) {
|
||||
router.get(route).blockingHandler((Handler<RoutingContext>) SpringUtils.getBean(handler), false);
|
||||
}
|
||||
|
@ -3,6 +3,8 @@ package net.frozenorb.apiv3.web.route;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.gson.Gson;
|
||||
|
||||
import net.frozenorb.apiv3.APIv3;
|
||||
import net.frozenorb.apiv3.unsorted.actor.Actor;
|
||||
@ -16,17 +18,19 @@ import net.frozenorb.apiv3.domain.ServerGroup;
|
||||
import net.frozenorb.apiv3.domain.User;
|
||||
import net.frozenorb.apiv3.util.ErrorUtils;
|
||||
import net.frozenorb.apiv3.util.GeoJsonPoint;
|
||||
import net.frozenorb.apiv3.util.SpringUtils;
|
||||
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.text.DecimalFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
@ -36,13 +40,13 @@ import io.vertx.ext.web.RoutingContext;
|
||||
@Component
|
||||
public final class GETDumpsType implements Handler<RoutingContext> {
|
||||
|
||||
private final DecimalFormat coordinateFormat = new DecimalFormat("#.#####");
|
||||
|
||||
private List<UUID> totpCache = ImmutableList.of();
|
||||
private List<UUID> banCache = ImmutableList.of();
|
||||
private List<UUID> blacklistCache = ImmutableList.of();
|
||||
private List<String> ipBanCache = ImmutableList.of();
|
||||
private Map<String, Map<String, List<UUID>>> grantCache = ImmutableMap.of();
|
||||
private String totpCache = SpringUtils.getBean(Gson.class).toJson("");
|
||||
private String banCache = SpringUtils.getBean(Gson.class).toJson("");
|
||||
private String blacklistCache = SpringUtils.getBean(Gson.class).toJson("");
|
||||
private String ipBanCache = SpringUtils.getBean(Gson.class).toJson("");
|
||||
private String deniableCache = SpringUtils.getBean(Gson.class).toJson("");
|
||||
private String emptyIpIntelJSON = SpringUtils.getBean(Gson.class).toJson(ImmutableSet.of());
|
||||
private Map<String, String> grantCache = ImmutableMap.of();
|
||||
private Map<String, GeoJsonPoint> ipIntelCache = ImmutableMap.of();
|
||||
|
||||
// 5 minutes, can't use TimeUnit expression in annotation
|
||||
@ -60,7 +64,7 @@ public final class GETDumpsType implements Handler<RoutingContext> {
|
||||
totpCache.add(user.getId());
|
||||
}
|
||||
|
||||
this.totpCache = totpCache;
|
||||
this.totpCache = SpringUtils.getBean(Gson.class).toJson(totpCache);
|
||||
});
|
||||
|
||||
Punishment.findByType(ImmutableSet.of(
|
||||
@ -74,6 +78,7 @@ public final class GETDumpsType implements Handler<RoutingContext> {
|
||||
|
||||
List<UUID> banCache = new LinkedList<>();
|
||||
List<UUID> blacklistCache = new LinkedList<>();
|
||||
List<UUID> accessDeniableCache = new LinkedList<>();
|
||||
|
||||
for (Punishment punishment : punishments) {
|
||||
if (!punishment.isActive()) {
|
||||
@ -82,13 +87,16 @@ public final class GETDumpsType implements Handler<RoutingContext> {
|
||||
|
||||
if (punishment.getType() == Punishment.PunishmentType.BAN) {
|
||||
banCache.add(punishment.getUser());
|
||||
accessDeniableCache.add(punishment.getUser());
|
||||
} else if (punishment.getType() == Punishment.PunishmentType.BLACKLIST) {
|
||||
blacklistCache.add(punishment.getUser());
|
||||
accessDeniableCache.add(punishment.getUser());
|
||||
}
|
||||
}
|
||||
|
||||
this.banCache = banCache;
|
||||
this.blacklistCache = blacklistCache;
|
||||
this.banCache = SpringUtils.getBean(Gson.class).toJson(banCache);
|
||||
this.blacklistCache = SpringUtils.getBean(Gson.class).toJson(blacklistCache);
|
||||
this.deniableCache = SpringUtils.getBean(Gson.class).toJson(accessDeniableCache);
|
||||
});
|
||||
|
||||
Grant.findAll((grants, error) -> {
|
||||
@ -97,10 +105,10 @@ public final class GETDumpsType implements Handler<RoutingContext> {
|
||||
return;
|
||||
}
|
||||
|
||||
Map<String, Map<String, List<UUID>>> grantCache = new HashMap<>();
|
||||
Map<String, Map<String, List<UUID>>> grantCachePreJSON = new HashMap<>();
|
||||
|
||||
for (ServerGroup serverGroup : ServerGroup.findAll()) {
|
||||
grantCache.put(serverGroup.getId().toLowerCase(), new HashMap<>());
|
||||
grantCachePreJSON.put(serverGroup.getId().toLowerCase(), new HashMap<>());
|
||||
}
|
||||
|
||||
for (Grant grant : grants) {
|
||||
@ -113,7 +121,7 @@ public final class GETDumpsType implements Handler<RoutingContext> {
|
||||
continue;
|
||||
}
|
||||
|
||||
Map<String, List<UUID>> serverGroupGrantDump = grantCache.get(serverGroup.getId().toLowerCase());
|
||||
Map<String, List<UUID>> serverGroupGrantDump = grantCachePreJSON.get(serverGroup.getId().toLowerCase());
|
||||
List<UUID> users = serverGroupGrantDump.get(grant.getRank());
|
||||
|
||||
if (users == null) {
|
||||
@ -125,7 +133,13 @@ public final class GETDumpsType implements Handler<RoutingContext> {
|
||||
}
|
||||
}
|
||||
|
||||
this.grantCache = grantCache;
|
||||
Map<String, String> grantCacheJSON = Maps.newHashMap();
|
||||
|
||||
for (Entry<String, Map<String, List<UUID>>> entry : grantCachePreJSON.entrySet()) {
|
||||
grantCacheJSON.put(entry.getKey(), SpringUtils.getBean(Gson.class).toJson(entry.getValue()));
|
||||
}
|
||||
|
||||
this.grantCache = grantCacheJSON;
|
||||
});
|
||||
|
||||
IpBan.find((ipBans, error) -> {
|
||||
@ -144,7 +158,7 @@ public final class GETDumpsType implements Handler<RoutingContext> {
|
||||
ipBanCache.add(ipBan.getUserIp());
|
||||
}
|
||||
|
||||
this.ipBanCache = ipBanCache;
|
||||
this.ipBanCache = SpringUtils.getBean(Gson.class).toJson(ipBanCache);
|
||||
});
|
||||
}
|
||||
|
||||
@ -153,24 +167,19 @@ public final class GETDumpsType implements Handler<RoutingContext> {
|
||||
|
||||
switch (dumpType.toLowerCase()) {
|
||||
case "totp":
|
||||
APIv3.respondJson(ctx, 200, totpCache);
|
||||
APIv3.respondRawJson(ctx, 200, totpCache);
|
||||
return;
|
||||
case "ban":
|
||||
APIv3.respondJson(ctx, 200, banCache);
|
||||
APIv3.respondRawJson(ctx, 200, banCache);
|
||||
return;
|
||||
case "blacklist":
|
||||
APIv3.respondJson(ctx, 200, blacklistCache);
|
||||
APIv3.respondRawJson(ctx, 200, blacklistCache);
|
||||
return;
|
||||
case "accessdeniable": // Lowercase d because we convert to lowercase above
|
||||
List<UUID> result = new LinkedList<>();
|
||||
|
||||
result.addAll(banCache);
|
||||
result.addAll(blacklistCache);
|
||||
|
||||
APIv3.respondJson(ctx, 200, result);
|
||||
APIv3.respondRawJson(ctx, 200, deniableCache);
|
||||
return;
|
||||
case "ipban":
|
||||
APIv3.respondJson(ctx, 200, ipBanCache);
|
||||
APIv3.respondRawJson(ctx, 200, ipBanCache);
|
||||
return;
|
||||
case "grant":
|
||||
String serverGroup = ServerGroup.DEFAULT_GROUP_ID;
|
||||
@ -192,7 +201,7 @@ public final class GETDumpsType implements Handler<RoutingContext> {
|
||||
}
|
||||
}
|
||||
|
||||
APIv3.respondJson(ctx, 200, grantCache.get(serverGroup.toLowerCase()));
|
||||
APIv3.respondRawJson(ctx, 200, grantCache.get(serverGroup.toLowerCase()));
|
||||
return;
|
||||
case "rankusers":
|
||||
Rank rank = Rank.findById(ctx.request().getParam("rank"));
|
||||
@ -226,7 +235,7 @@ public final class GETDumpsType implements Handler<RoutingContext> {
|
||||
});
|
||||
return;
|
||||
case "ipintel":
|
||||
APIv3.respondJson(ctx, 200, ipIntelCache.values());
|
||||
APIv3.respondRawJson(ctx, 200, emptyIpIntelJSON);
|
||||
return;
|
||||
case "ipintelformatted":
|
||||
List<Map<String, Object>> features = new ArrayList<>(ipIntelCache.size());
|
||||
|
@ -60,7 +60,7 @@ public final class DELETEUsersIdActivePunishment implements Handler<RoutingConte
|
||||
if (!punishment.isActive()) continue;
|
||||
|
||||
SyncUtils.<Void>runBlocking(v -> punishment.delete(removedBy, reason, v));
|
||||
SyncUtils.<AuditLogEntry>runBlocking(v -> AuditLog.log(removedBy.getId(), requestBody.getString("removedByIp"), ctx, AuditLogActionType.PUNISHMENT_DELETE, ImmutableMap.of("punishmentId", punishment.getId()), v));
|
||||
SyncUtils.<AuditLogEntry>runBlocking(v -> AuditLog.log(removedBy == null ? null : removedBy.getId(), requestBody.getString("removedByIp"), ctx, AuditLogActionType.PUNISHMENT_DELETE, ImmutableMap.of("punishmentId", punishment.getId()), v));
|
||||
removedPunishments.add(punishment);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user