diff --git a/src/main/java/net/frozenorb/apiv3/APIv3.java b/src/main/java/net/frozenorb/apiv3/APIv3.java index 73841bc..bda5fcc 100644 --- a/src/main/java/net/frozenorb/apiv3/APIv3.java +++ b/src/main/java/net/frozenorb/apiv3/APIv3.java @@ -68,10 +68,12 @@ import net.frozenorb.apiv3.web.route.ranks.POSTRanks; import net.frozenorb.apiv3.web.route.serverGroups.DELETEServerGroupsId; import net.frozenorb.apiv3.web.route.serverGroups.GETServerGroups; import net.frozenorb.apiv3.web.route.serverGroups.GETServerGroupsId; +import net.frozenorb.apiv3.web.route.serverGroups.GETServerGroupsPlayerCount; import net.frozenorb.apiv3.web.route.serverGroups.POSTServerGroups; import net.frozenorb.apiv3.web.route.servers.DELETEServersId; import net.frozenorb.apiv3.web.route.servers.GETServers; import net.frozenorb.apiv3.web.route.servers.GETServersId; +import net.frozenorb.apiv3.web.route.servers.GETServersPlayerCountId; import net.frozenorb.apiv3.web.route.servers.POSTServers; import net.frozenorb.apiv3.web.route.servers.POSTServersHeartbeat; import net.frozenorb.apiv3.web.route.users.GETStaff; @@ -189,7 +191,6 @@ public final class APIv3 { //httpPut(router, "/ipBans/:ipBanId", PUTIpBansId.class); httpDelete(router, "/ipBans/:ipBanId", DELETEIpBansId.class); - httpGet(router, "/ipLog/:id", GETIpLogId.class); httpPost(router, "/lookup/byName", POSTLookupByName.class); @@ -217,12 +218,14 @@ public final class APIv3 { httpDelete(router, "/ranks/:rankId", DELETERanksId.class); httpGet(router, "/serverGroups/:serverGroupId", GETServerGroupsId.class); + httpGet(router, "/serverGroups/:serverGroupId/playerCount", GETServerGroupsPlayerCount.class); httpGet(router, "/serverGroups", GETServerGroups.class); httpPost(router, "/serverGroups", POSTServerGroups.class); //httpPut(router, "/serverGroups/:serverGroupId", PUTServerGroupsId.class); httpDelete(router, "/serverGroups/:serverGroupId", DELETEServerGroupsId.class); httpGet(router, "/servers/:serverId", GETServersId.class); + httpGet(router, "/servers/:serverId/playerCount", GETServersPlayerCountId.class); httpGet(router, "/servers", GETServers.class); httpPost(router, "/servers/heartbeat", POSTServersHeartbeat.class); httpPost(router, "/servers", POSTServers.class); diff --git a/src/main/java/net/frozenorb/apiv3/web/route/grants/POSTGrants.java b/src/main/java/net/frozenorb/apiv3/web/route/grants/POSTGrants.java index df818e2..c57685c 100644 --- a/src/main/java/net/frozenorb/apiv3/web/route/grants/POSTGrants.java +++ b/src/main/java/net/frozenorb/apiv3/web/route/grants/POSTGrants.java @@ -104,6 +104,9 @@ public final class POSTGrants implements Handler { return; } } + } else if (rank.isGrantRequiresTotp()) { + ErrorUtils.respondInvalidInput(ctx, "Rank must be granted through API or website."); + return; } int storeItemId = requestBody.getInteger("storeItemId", -1); diff --git a/src/main/java/net/frozenorb/apiv3/web/route/serverGroups/GETServerGroupsId.java b/src/main/java/net/frozenorb/apiv3/web/route/serverGroups/GETServerGroupsId.java index 9db9f4f..ce394b1 100644 --- a/src/main/java/net/frozenorb/apiv3/web/route/serverGroups/GETServerGroupsId.java +++ b/src/main/java/net/frozenorb/apiv3/web/route/serverGroups/GETServerGroupsId.java @@ -1,18 +1,29 @@ package net.frozenorb.apiv3.web.route.serverGroups; -import net.frozenorb.apiv3.APIv3; -import net.frozenorb.apiv3.domain.ServerGroup; +import java.util.concurrent.atomic.AtomicInteger; import org.springframework.stereotype.Component; +import com.google.common.base.Objects; + import io.vertx.core.Handler; import io.vertx.ext.web.RoutingContext; +import net.frozenorb.apiv3.APIv3; +import net.frozenorb.apiv3.domain.Server; +import net.frozenorb.apiv3.domain.ServerGroup; @Component public final class GETServerGroupsId implements Handler { public void handle(RoutingContext ctx) { - APIv3.respondJson(ctx, 200, ServerGroup.findById(ctx.request().getParam("serverGroupId"))); + ServerGroup serverGroup = ServerGroup.findById(ctx.request().getParam("serverGroupId")); + AtomicInteger totalOnline = new AtomicInteger(); + + Server.findAll().forEach(server -> { + if (serverGroup == null || Objects.equal(serverGroup.getId(), server.getServerGroup())) totalOnline.addAndGet(server.getPlayers().size()); + }); + + APIv3.respondJson(ctx, 200, Integer.valueOf(totalOnline.intValue())); } } \ No newline at end of file diff --git a/src/main/java/net/frozenorb/apiv3/web/route/serverGroups/GETServerGroupsPlayerCount.java b/src/main/java/net/frozenorb/apiv3/web/route/serverGroups/GETServerGroupsPlayerCount.java new file mode 100644 index 0000000..86b27a5 --- /dev/null +++ b/src/main/java/net/frozenorb/apiv3/web/route/serverGroups/GETServerGroupsPlayerCount.java @@ -0,0 +1,34 @@ +package net.frozenorb.apiv3.web.route.serverGroups; + +import java.util.Map; +import java.util.concurrent.atomic.AtomicInteger; + +import org.springframework.stereotype.Component; + +import com.google.common.collect.Maps; + +import io.vertx.core.Handler; +import io.vertx.ext.web.RoutingContext; +import net.frozenorb.apiv3.APIv3; +import net.frozenorb.apiv3.domain.Server; + +@Component +public final class GETServerGroupsPlayerCount implements Handler { + + public void handle(RoutingContext ctx) { + Map map = Maps.newHashMap(); + AtomicInteger total = new AtomicInteger(); + + Server.findAll().forEach(server -> { + int size; + Integer lastCount = null; + map.put(server.getServerGroup(), map.getOrDefault(server.getServerGroup(), 0) + (size = server.getPlayers().size())); + total.addAndGet(size); + }); + + map.put("total", Integer.valueOf(total.intValue())); + + APIv3.respondJson(ctx, 200, map); + } + +} \ No newline at end of file diff --git a/src/main/java/net/frozenorb/apiv3/web/route/servers/GETServersPlayerCountId.java b/src/main/java/net/frozenorb/apiv3/web/route/servers/GETServersPlayerCountId.java new file mode 100644 index 0000000..3317846 --- /dev/null +++ b/src/main/java/net/frozenorb/apiv3/web/route/servers/GETServersPlayerCountId.java @@ -0,0 +1,19 @@ +package net.frozenorb.apiv3.web.route.servers; + +import net.frozenorb.apiv3.APIv3; +import net.frozenorb.apiv3.domain.Server; + +import org.springframework.stereotype.Component; + +import io.vertx.core.Handler; +import io.vertx.ext.web.RoutingContext; + +@Component +public final class GETServersPlayerCountId implements Handler { + + public void handle(RoutingContext ctx) { + Server server = Server.findById(ctx.request().getParam("serverId")); + APIv3.respondJson(ctx, 200, server == null ? Integer.valueOf(0) : Integer.valueOf(server.getPlayers().size())); + } + +} \ No newline at end of file