From b291e9e13b0410cbdf2b139bb61e727b1e4184d6 Mon Sep 17 00:00:00 2001 From: Colin McDonald Date: Thu, 23 Jun 2016 00:56:04 -0400 Subject: [PATCH] Convert more routes to use body fields instead of query params --- .../apiv3/route/auditLog/POSTAuditLog.java | 8 ++++--- .../emailToken/POSTEmailTokensConfirm.java | 4 +++- .../apiv3/route/grants/DELETEGrantsId.java | 8 ++++--- .../apiv3/route/ipBans/DELETEIpBan.java | 8 ++++--- .../apiv3/route/ipBans/POSTIpBans.java | 14 ++++++------ .../POSTNotificationTemplates.java | 8 ++++--- .../route/punishments/DELETEPunishments.java | 8 ++++--- .../DELETEUserActivePunishment.java | 10 +++++---- .../apiv3/route/ranks/POSTRanks.java | 14 +++++++----- .../route/serverGroups/POSTServerGroups.java | 6 +++-- .../apiv3/route/servers/POSTServers.java | 12 +++++----- .../route/users/POSTUserChangePassword.java | 7 ++++-- .../apiv3/route/users/POSTUserLogin.java | 22 ++++++++----------- .../apiv3/route/users/POSTUserNotify.java | 20 +++++------------ 14 files changed, 80 insertions(+), 69 deletions(-) diff --git a/src/main/java/net/frozenorb/apiv3/route/auditLog/POSTAuditLog.java b/src/main/java/net/frozenorb/apiv3/route/auditLog/POSTAuditLog.java index d136e5a..4772ec7 100644 --- a/src/main/java/net/frozenorb/apiv3/route/auditLog/POSTAuditLog.java +++ b/src/main/java/net/frozenorb/apiv3/route/auditLog/POSTAuditLog.java @@ -1,6 +1,7 @@ package net.frozenorb.apiv3.route.auditLog; import io.vertx.core.Handler; +import io.vertx.core.json.JsonObject; import io.vertx.ext.web.RoutingContext; import net.frozenorb.apiv3.APIv3; import net.frozenorb.apiv3.auditLog.AuditLog; @@ -18,7 +19,8 @@ public final class POSTAuditLog implements Handler { } else if (user == null) { ErrorUtils.respondNotFound(ctx, "User", ctx.request().getParam("id")); } else { - String userIp = ctx.request().getParam("userIp"); + JsonObject requestBody = ctx.getBodyAsJson(); + String userIp = requestBody.getString("userIp"); if (!IpUtils.isValidIp(userIp)) { ErrorUtils.respondInvalidInput(ctx, "Ip address \"" + userIp + "\" is not valid."); @@ -28,9 +30,9 @@ public final class POSTAuditLog implements Handler { AuditLogActionType type; try { - type = AuditLogActionType.valueOf(ctx.request().getParam("type")); + type = AuditLogActionType.valueOf(requestBody.getString("type")); } catch (IllegalArgumentException ex) { - ErrorUtils.respondNotFound(ctx, "Audit log action type", ctx.request().getParam("type")); + ErrorUtils.respondNotFound(ctx, "Audit log action type", requestBody.getString("type")); return; } diff --git a/src/main/java/net/frozenorb/apiv3/route/emailToken/POSTEmailTokensConfirm.java b/src/main/java/net/frozenorb/apiv3/route/emailToken/POSTEmailTokensConfirm.java index 4f1ddeb..c479321 100644 --- a/src/main/java/net/frozenorb/apiv3/route/emailToken/POSTEmailTokensConfirm.java +++ b/src/main/java/net/frozenorb/apiv3/route/emailToken/POSTEmailTokensConfirm.java @@ -2,6 +2,7 @@ package net.frozenorb.apiv3.route.emailToken; import com.google.common.collect.ImmutableMap; import io.vertx.core.Handler; +import io.vertx.core.json.JsonObject; import io.vertx.ext.web.RoutingContext; import net.frozenorb.apiv3.APIv3; import net.frozenorb.apiv3.model.User; @@ -31,7 +32,8 @@ public final class POSTEmailTokensConfirm implements Handler { return; } - String password = ctx.request().getParam("password"); + JsonObject requestBody = ctx.getBodyAsJson(); + String password = requestBody.getString("password"); if (password.length() < 8) { ErrorUtils.respondGeneric(ctx, 200, "Your password is too short."); diff --git a/src/main/java/net/frozenorb/apiv3/route/grants/DELETEGrantsId.java b/src/main/java/net/frozenorb/apiv3/route/grants/DELETEGrantsId.java index dc03e55..0c3398e 100644 --- a/src/main/java/net/frozenorb/apiv3/route/grants/DELETEGrantsId.java +++ b/src/main/java/net/frozenorb/apiv3/route/grants/DELETEGrantsId.java @@ -2,6 +2,7 @@ package net.frozenorb.apiv3.route.grants; import com.google.common.collect.ImmutableMap; import io.vertx.core.Handler; +import io.vertx.core.json.JsonObject; import io.vertx.ext.web.RoutingContext; import net.frozenorb.apiv3.APIv3; import net.frozenorb.apiv3.auditLog.AuditLog; @@ -25,14 +26,15 @@ public final class DELETEGrantsId implements Handler { return; } - User removedBy = User.findByIdSync(ctx.request().getParam("removedBy")); + JsonObject requestBody = ctx.getBodyAsJson(); + User removedBy = User.findByIdSync(requestBody.getString("removedBy")); if (removedBy == null) { - ErrorUtils.respondNotFound(ctx, "User", ctx.request().getParam("removedBy")); + ErrorUtils.respondNotFound(ctx, "User", requestBody.getString("removedBy")); return; } - String reason = ctx.request().getParam("reason"); + String reason = requestBody.getString("reason"); if (reason == null || reason.trim().isEmpty()) { ErrorUtils.respondRequiredInput(ctx, "reason"); diff --git a/src/main/java/net/frozenorb/apiv3/route/ipBans/DELETEIpBan.java b/src/main/java/net/frozenorb/apiv3/route/ipBans/DELETEIpBan.java index e3f3f98..287a4b9 100644 --- a/src/main/java/net/frozenorb/apiv3/route/ipBans/DELETEIpBan.java +++ b/src/main/java/net/frozenorb/apiv3/route/ipBans/DELETEIpBan.java @@ -2,6 +2,7 @@ package net.frozenorb.apiv3.route.ipBans; import com.google.common.collect.ImmutableMap; import io.vertx.core.Handler; +import io.vertx.core.json.JsonObject; import io.vertx.ext.web.RoutingContext; import net.frozenorb.apiv3.APIv3; import net.frozenorb.apiv3.auditLog.AuditLog; @@ -25,14 +26,15 @@ public final class DELETEIpBan implements Handler { return; } - User removedBy = User.findByIdSync(ctx.request().getParam("removedBy")); + JsonObject requestBody = ctx.getBodyAsJson(); + User removedBy = User.findByIdSync(requestBody.getString("removedBy")); if (removedBy == null) { - ErrorUtils.respondNotFound(ctx, "User", ctx.request().getParam("removedBy")); + ErrorUtils.respondNotFound(ctx, "User", requestBody.getString("removedBy")); return; } - String reason = ctx.request().getParam("reason"); + String reason = requestBody.getString("reason"); if (reason == null || reason.trim().isEmpty()) { ErrorUtils.respondRequiredInput(ctx, "reason"); diff --git a/src/main/java/net/frozenorb/apiv3/route/ipBans/POSTIpBans.java b/src/main/java/net/frozenorb/apiv3/route/ipBans/POSTIpBans.java index 21385bb..8233dd4 100644 --- a/src/main/java/net/frozenorb/apiv3/route/ipBans/POSTIpBans.java +++ b/src/main/java/net/frozenorb/apiv3/route/ipBans/POSTIpBans.java @@ -1,6 +1,7 @@ package net.frozenorb.apiv3.route.ipBans; import io.vertx.core.Handler; +import io.vertx.core.json.JsonObject; import io.vertx.ext.web.RoutingContext; import net.frozenorb.apiv3.APIv3; import net.frozenorb.apiv3.model.IpBan; @@ -13,14 +14,15 @@ import java.time.Instant; public final class POSTIpBans implements Handler { public void handle(RoutingContext ctx) { - String userIp = ctx.request().getParam("id"); + JsonObject requestBody = ctx.getBodyAsJson(); + String userIp = requestBody.getString("id"); if (!IpUtils.isValidIp(userIp)) { ErrorUtils.respondInvalidInput(ctx, "Ip address \"" + userIp + "\" is not valid."); return; } - String reason = ctx.request().getParam("reason"); + String reason = requestBody.getString("reason"); if (reason == null || reason.trim().isEmpty()) { ErrorUtils.respondRequiredInput(ctx, "reason"); @@ -29,10 +31,8 @@ public final class POSTIpBans implements Handler { Instant expiresAt = null; - try { - expiresAt = Instant.ofEpochMilli(Long.parseLong(ctx.request().getParam("expiresAt"))); - } catch (NumberFormatException ignored) { - // Just leave it null, we don't need an expiration date. + if (requestBody.containsKey("expiresAt") && requestBody.getLong("expiresAt") != -1) { + expiresAt = Instant.ofEpochMilli(requestBody.getLong("expiresAt")); } if (expiresAt != null && expiresAt.isBefore(Instant.now())) { @@ -41,7 +41,7 @@ public final class POSTIpBans implements Handler { } // We purposely don't do a null check, ip bans don't have to have a source. - User addedBy = User.findByIdSync(ctx.request().getParam("addedBy")); + User addedBy = User.findByIdSync(requestBody.getString("addedBy")); IpBan ipBan = new IpBan(userIp, reason, expiresAt, addedBy, ctx.get("actor")); ipBan.insert(); diff --git a/src/main/java/net/frozenorb/apiv3/route/notificationTemplates/POSTNotificationTemplates.java b/src/main/java/net/frozenorb/apiv3/route/notificationTemplates/POSTNotificationTemplates.java index 2e006b9..cb6c8a7 100644 --- a/src/main/java/net/frozenorb/apiv3/route/notificationTemplates/POSTNotificationTemplates.java +++ b/src/main/java/net/frozenorb/apiv3/route/notificationTemplates/POSTNotificationTemplates.java @@ -1,6 +1,7 @@ package net.frozenorb.apiv3.route.notificationTemplates; import io.vertx.core.Handler; +import io.vertx.core.json.JsonObject; import io.vertx.ext.web.RoutingContext; import net.frozenorb.apiv3.APIv3; import net.frozenorb.apiv3.model.NotificationTemplate; @@ -8,9 +9,10 @@ import net.frozenorb.apiv3.model.NotificationTemplate; public final class POSTNotificationTemplates implements Handler { public void handle(RoutingContext ctx) { - String id = ctx.request().getParam("id"); - String subject = ctx.request().getParam("subject"); - String body = ctx.request().getParam("body"); + JsonObject requestBody = ctx.getBodyAsJson(); + String id = requestBody.getString("id"); + String subject = requestBody.getString("subject"); + String body = requestBody.getString("body"); NotificationTemplate notificationTemplate = new NotificationTemplate(id, subject, body); notificationTemplate.insert(); diff --git a/src/main/java/net/frozenorb/apiv3/route/punishments/DELETEPunishments.java b/src/main/java/net/frozenorb/apiv3/route/punishments/DELETEPunishments.java index 8137411..3aa36c5 100644 --- a/src/main/java/net/frozenorb/apiv3/route/punishments/DELETEPunishments.java +++ b/src/main/java/net/frozenorb/apiv3/route/punishments/DELETEPunishments.java @@ -2,6 +2,7 @@ package net.frozenorb.apiv3.route.punishments; import com.google.common.collect.ImmutableMap; import io.vertx.core.Handler; +import io.vertx.core.json.JsonObject; import io.vertx.ext.web.RoutingContext; import net.frozenorb.apiv3.APIv3; import net.frozenorb.apiv3.auditLog.AuditLog; @@ -25,14 +26,15 @@ public final class DELETEPunishments implements Handler { return; } - User removedBy = User.findByIdSync(ctx.request().getParam("removedBy")); + JsonObject requestBody = ctx.getBodyAsJson(); + User removedBy = User.findByIdSync(requestBody.getString("removedBy")); if (removedBy == null) { - ErrorUtils.respondNotFound(ctx, "User", ctx.request().getParam("removedBy")); + ErrorUtils.respondNotFound(ctx, "User", requestBody.getString("removedBy")); return; } - String reason = ctx.request().getParam("reason"); + String reason = requestBody.getString("reason"); if (reason == null || reason.trim().isEmpty()) { ErrorUtils.respondRequiredInput(ctx, "reason"); diff --git a/src/main/java/net/frozenorb/apiv3/route/punishments/DELETEUserActivePunishment.java b/src/main/java/net/frozenorb/apiv3/route/punishments/DELETEUserActivePunishment.java index cae0110..0c81c4b 100644 --- a/src/main/java/net/frozenorb/apiv3/route/punishments/DELETEUserActivePunishment.java +++ b/src/main/java/net/frozenorb/apiv3/route/punishments/DELETEUserActivePunishment.java @@ -3,6 +3,7 @@ package net.frozenorb.apiv3.route.punishments; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import io.vertx.core.Handler; +import io.vertx.core.json.JsonObject; import io.vertx.ext.web.RoutingContext; import net.frozenorb.apiv3.APIv3; import net.frozenorb.apiv3.auditLog.AuditLog; @@ -23,15 +24,16 @@ public final class DELETEUserActivePunishment implements Handler return; } - Punishment.PunishmentType type = Punishment.PunishmentType.valueOf(ctx.request().getParam("type").toUpperCase()); - User removedBy = User.findByIdSync(ctx.request().getParam("removedBy")); + JsonObject requestBody = ctx.getBodyAsJson(); + Punishment.PunishmentType type = Punishment.PunishmentType.valueOf(requestBody.getString("type").toUpperCase()); + User removedBy = User.findByIdSync(requestBody.getString("removedBy")); if (removedBy == null) { - ErrorUtils.respondNotFound(ctx, "User", ctx.request().getParam("removedBy")); + ErrorUtils.respondNotFound(ctx, "User", requestBody.getString("removedBy")); return; } - String reason = ctx.request().getParam("reason"); + String reason = requestBody.getString("reason"); if (reason == null || reason.trim().isEmpty()) { ErrorUtils.respondRequiredInput(ctx, "reason"); diff --git a/src/main/java/net/frozenorb/apiv3/route/ranks/POSTRanks.java b/src/main/java/net/frozenorb/apiv3/route/ranks/POSTRanks.java index d5dbff4..5a2f297 100644 --- a/src/main/java/net/frozenorb/apiv3/route/ranks/POSTRanks.java +++ b/src/main/java/net/frozenorb/apiv3/route/ranks/POSTRanks.java @@ -1,6 +1,7 @@ package net.frozenorb.apiv3.route.ranks; import io.vertx.core.Handler; +import io.vertx.core.json.JsonObject; import io.vertx.ext.web.RoutingContext; import net.frozenorb.apiv3.APIv3; import net.frozenorb.apiv3.model.Rank; @@ -8,12 +9,13 @@ import net.frozenorb.apiv3.model.Rank; public final class POSTRanks implements Handler { public void handle(RoutingContext ctx) { - String id = ctx.request().getParam("id"); - int weight = Integer.parseInt(ctx.request().getParam("weight")); - String displayName = ctx.request().getParam("displayName"); - String gameColor = ctx.request().getParam("gameColor"); - String websiteColor = ctx.request().getParam("websiteColor"); - boolean staffRank = Boolean.parseBoolean(ctx.request().getParam("staffRank")); + JsonObject requestBody = ctx.getBodyAsJson(); + String id = requestBody.getString("id"); + int weight = requestBody.getInteger("weight"); + String displayName = requestBody.getString("displayName"); + String gameColor = requestBody.getString("gameColor"); + String websiteColor = requestBody.getString("websiteColor"); + boolean staffRank = requestBody.getBoolean("staffRank"); Rank rank = new Rank(id, weight, displayName, gameColor, websiteColor, staffRank); rank.insert(); diff --git a/src/main/java/net/frozenorb/apiv3/route/serverGroups/POSTServerGroups.java b/src/main/java/net/frozenorb/apiv3/route/serverGroups/POSTServerGroups.java index 1c76f63..3ec7fb8 100644 --- a/src/main/java/net/frozenorb/apiv3/route/serverGroups/POSTServerGroups.java +++ b/src/main/java/net/frozenorb/apiv3/route/serverGroups/POSTServerGroups.java @@ -1,6 +1,7 @@ package net.frozenorb.apiv3.route.serverGroups; import io.vertx.core.Handler; +import io.vertx.core.json.JsonObject; import io.vertx.ext.web.RoutingContext; import net.frozenorb.apiv3.APIv3; import net.frozenorb.apiv3.model.ServerGroup; @@ -8,8 +9,9 @@ import net.frozenorb.apiv3.model.ServerGroup; public final class POSTServerGroups implements Handler { public void handle(RoutingContext ctx) { - String id = ctx.request().getParam("id"); - String image = ctx.request().getParam("image"); + JsonObject requestBody = ctx.getBodyAsJson(); + String id = requestBody.getString("id"); + String image = requestBody.getString("image"); ServerGroup serverGroup = new ServerGroup(id, image); serverGroup.insert(); diff --git a/src/main/java/net/frozenorb/apiv3/route/servers/POSTServers.java b/src/main/java/net/frozenorb/apiv3/route/servers/POSTServers.java index 5738430..263b225 100644 --- a/src/main/java/net/frozenorb/apiv3/route/servers/POSTServers.java +++ b/src/main/java/net/frozenorb/apiv3/route/servers/POSTServers.java @@ -1,6 +1,7 @@ package net.frozenorb.apiv3.route.servers; import io.vertx.core.Handler; +import io.vertx.core.json.JsonObject; import io.vertx.ext.web.RoutingContext; import net.frozenorb.apiv3.APIv3; import net.frozenorb.apiv3.model.Server; @@ -13,13 +14,14 @@ import java.util.UUID; public final class POSTServers implements Handler { public void handle(RoutingContext ctx) { - String id = ctx.request().getParam("id"); - String displayName = ctx.request().getParam("displayName"); - ServerGroup group = ServerGroup.findById(ctx.request().getParam("group")); - String ip = ctx.request().getParam("ip"); + JsonObject requestBody = ctx.getBodyAsJson(); + String id = requestBody.getString("id"); + String displayName = requestBody.getString("displayName"); + ServerGroup group = ServerGroup.findById(requestBody.getString("group")); + String ip = requestBody.getString("ip"); if (group == null) { - ErrorUtils.respondNotFound(ctx, "Server group", ctx.request().getParam("group")); + ErrorUtils.respondNotFound(ctx, "Server group", requestBody.getString("group")); return; } diff --git a/src/main/java/net/frozenorb/apiv3/route/users/POSTUserChangePassword.java b/src/main/java/net/frozenorb/apiv3/route/users/POSTUserChangePassword.java index 1e5f8f2..c12f1d5 100644 --- a/src/main/java/net/frozenorb/apiv3/route/users/POSTUserChangePassword.java +++ b/src/main/java/net/frozenorb/apiv3/route/users/POSTUserChangePassword.java @@ -2,6 +2,7 @@ package net.frozenorb.apiv3.route.users; import com.google.common.collect.ImmutableMap; import io.vertx.core.Handler; +import io.vertx.core.json.JsonObject; import io.vertx.ext.web.RoutingContext; import net.frozenorb.apiv3.APIv3; import net.frozenorb.apiv3.model.User; @@ -18,12 +19,14 @@ public final class POSTUserChangePassword implements Handler { return; } + JsonObject requestBody = ctx.getBodyAsJson(); + if (user.getPassword() == null) { ErrorUtils.respondInvalidInput(ctx, "User provided does not have password set."); return; } - boolean authorized = user.checkPassword(ctx.request().getParam("currentPassword")); + boolean authorized = user.checkPassword(requestBody.getString("currentPassword")); if (!authorized) { ErrorUtils.respondInvalidInput(ctx, "Current password is not correct."); @@ -38,7 +41,7 @@ public final class POSTUserChangePassword implements Handler { // TODO } - String newPassword = ctx.request().getParam("newPassword"); + String newPassword = requestBody.getString("newPassword"); if (newPassword.length() < 8) { ErrorUtils.respondGeneric(ctx, 200, "Your password is too short."); diff --git a/src/main/java/net/frozenorb/apiv3/route/users/POSTUserLogin.java b/src/main/java/net/frozenorb/apiv3/route/users/POSTUserLogin.java index 2786a34..a1fc472 100644 --- a/src/main/java/net/frozenorb/apiv3/route/users/POSTUserLogin.java +++ b/src/main/java/net/frozenorb/apiv3/route/users/POSTUserLogin.java @@ -1,11 +1,11 @@ package net.frozenorb.apiv3.route.users; import io.vertx.core.Handler; +import io.vertx.core.json.JsonObject; import io.vertx.ext.web.RoutingContext; import net.frozenorb.apiv3.APIv3; import net.frozenorb.apiv3.actor.Actor; import net.frozenorb.apiv3.actor.ActorType; -import net.frozenorb.apiv3.actor.actors.ServerActor; import net.frozenorb.apiv3.model.IpLogEntry; import net.frozenorb.apiv3.model.Server; import net.frozenorb.apiv3.model.User; @@ -25,23 +25,19 @@ public final class POSTUserLogin implements Handler { return; } + JsonObject requestBody = ctx.getBodyAsJson(); User user = User.findByIdSync(uuid); - String username = ctx.request().getParam("username"); - String userIp = ctx.request().getParam("userIp"); + String username = requestBody.getString("username"); + String userIp = requestBody.getString("userIp"); Actor actor = ctx.get("actor"); - Server server; - if (actor.getType() == ActorType.SERVER) { - server = ((ServerActor) actor).getServer(); - } else { - server = Server.findById(ctx.request().getParam("server")); - - if (server == null) { - ErrorUtils.respondNotFound(ctx, "Server", ctx.request().getParam("server")); - return; - } + if (actor.getType() != ActorType.SERVER) { + ErrorUtils.respondGeneric(ctx, 400, "This action can only be performed when requested by a server."); + return; } + Server server = Server.findById(actor.getName()); + if (!IpUtils.isValidIp(userIp)) { ErrorUtils.respondInvalidInput(ctx, "IP address \"" + userIp + "\" is not valid."); return; diff --git a/src/main/java/net/frozenorb/apiv3/route/users/POSTUserNotify.java b/src/main/java/net/frozenorb/apiv3/route/users/POSTUserNotify.java index 24f3adf..fedb3f6 100644 --- a/src/main/java/net/frozenorb/apiv3/route/users/POSTUserNotify.java +++ b/src/main/java/net/frozenorb/apiv3/route/users/POSTUserNotify.java @@ -2,6 +2,7 @@ package net.frozenorb.apiv3.route.users; import com.google.common.collect.ImmutableMap; import io.vertx.core.Handler; +import io.vertx.core.json.JsonObject; import io.vertx.ext.web.RoutingContext; import net.frozenorb.apiv3.APIv3; import net.frozenorb.apiv3.model.NotificationTemplate; @@ -9,7 +10,6 @@ import net.frozenorb.apiv3.model.User; import net.frozenorb.apiv3.unsorted.Notification; import net.frozenorb.apiv3.util.ErrorUtils; -import java.util.HashMap; import java.util.Map; public final class POSTUserNotify implements Handler { @@ -27,24 +27,16 @@ public final class POSTUserNotify implements Handler { return; } - NotificationTemplate template = NotificationTemplate.findByIdSync(ctx.request().getParam("template")); + JsonObject requestBody = ctx.getBodyAsJson(); + NotificationTemplate template = NotificationTemplate.findByIdSync(requestBody.getString("template")); if (template == null) { - ErrorUtils.respondNotFound(ctx, "Notification template", ctx.request().getParam("template")); + ErrorUtils.respondNotFound(ctx, "Notification template", requestBody.getString("template")); return; } - Map subjectReplacements = new HashMap<>(); - Map bodyReplacements = new HashMap<>(); - - //TODO: Probably make this use the body as json - /*req.queryMap("subject").toMap().forEach((key, values) -> { - subjectReplacements.put(key, values[0]); - }); - - req.queryMap("body").toMap().forEach((key, values) -> { - bodyReplacements.put(key, values[0]); - });*/ + Map subjectReplacements = requestBody.getJsonObject("subjectReplacements").getMap(); + Map bodyReplacements = requestBody.getJsonObject("subjectReplacements").getMap(); Notification notification = new Notification(template, subjectReplacements, bodyReplacements);