From db0adc8b87ff1db6977e5d7d82e8aafc2c8d1710 Mon Sep 17 00:00:00 2001 From: Colin McDonald Date: Sun, 27 Nov 2016 01:06:01 -0500 Subject: [PATCH] Add deployment routes for use by Ansible --- src/main/java/net/frozenorb/apiv3/APIv3.java | 3 + .../frozenorb/apiv3/model/AccessToken.java | 5 +- .../net/frozenorb/apiv3/model/Server.java | 5 +- .../POSTDeploymentUpdateServer.java | 56 +++++++++++++++++++ 4 files changed, 65 insertions(+), 4 deletions(-) create mode 100644 src/main/java/net/frozenorb/apiv3/route/deployment/POSTDeploymentUpdateServer.java diff --git a/src/main/java/net/frozenorb/apiv3/APIv3.java b/src/main/java/net/frozenorb/apiv3/APIv3.java index fca9e66..78dd416 100644 --- a/src/main/java/net/frozenorb/apiv3/APIv3.java +++ b/src/main/java/net/frozenorb/apiv3/APIv3.java @@ -55,6 +55,7 @@ import net.frozenorb.apiv3.route.chatFilter.DELETEChatFilterId; import net.frozenorb.apiv3.route.chatFilter.GETChatFilter; import net.frozenorb.apiv3.route.chatFilter.GETChatFilterId; import net.frozenorb.apiv3.route.chatFilter.POSTChatFilter; +import net.frozenorb.apiv3.route.deployment.POSTDeploymentUpdateServer; import net.frozenorb.apiv3.route.disposableLoginTokens.POSTDisposableLoginTokens; import net.frozenorb.apiv3.route.disposableLoginTokens.POSTDisposableLoginTokensIdUse; import net.frozenorb.apiv3.route.emailTokens.GETEmailTokensIdOwner; @@ -372,6 +373,8 @@ public final class APIv3 extends AbstractVerticle { //http.put("/chatFilter/:chatFilterEntryId").blockingHandler(new PUTChatFilterId(), false); http.delete("/chatFilter/:chatFilterEntryId").blockingHandler(new DELETEChatFilterId(), false); + http.post("/deployment/updateServer/:serverId").blockingHandler(new POSTDeploymentUpdateServer(), false); + http.post("/disposableLoginTokens").blockingHandler(new POSTDisposableLoginTokens(), false); http.post("/disposableLoginTokens/:disposableLoginToken/use").blockingHandler(new POSTDisposableLoginTokensIdUse(), false); diff --git a/src/main/java/net/frozenorb/apiv3/model/AccessToken.java b/src/main/java/net/frozenorb/apiv3/model/AccessToken.java index 0ca44fe..1539591 100644 --- a/src/main/java/net/frozenorb/apiv3/model/AccessToken.java +++ b/src/main/java/net/frozenorb/apiv3/model/AccessToken.java @@ -21,6 +21,7 @@ import fr.javatic.mongo.jacksonCodec.Entity; import fr.javatic.mongo.jacksonCodec.objectId.Id; import lombok.AllArgsConstructor; import lombok.Getter; +import lombok.Setter; @Entity @AllArgsConstructor @@ -31,9 +32,9 @@ public final class AccessToken { @Getter @Id private String id; @Getter private String actorName; @Getter private ActorType actorType; - @Getter private List lockedIps; + @Getter @Setter private List lockedIps; @Getter private Instant createdAt; - @Getter private Instant lastUpdatedAt; + @Getter @Setter private Instant lastUpdatedAt; public static void findAll(SingleResultCallback> callback) { accessTokensCollection.find().into(new LinkedList<>(), SyncUtils.vertxWrap(callback)); diff --git a/src/main/java/net/frozenorb/apiv3/model/Server.java b/src/main/java/net/frozenorb/apiv3/model/Server.java index 336e377..fd17273 100644 --- a/src/main/java/net/frozenorb/apiv3/model/Server.java +++ b/src/main/java/net/frozenorb/apiv3/model/Server.java @@ -27,6 +27,7 @@ import java.util.concurrent.TimeUnit; import fr.javatic.mongo.jacksonCodec.Entity; import fr.javatic.mongo.jacksonCodec.objectId.Id; import lombok.Getter; +import lombok.Setter; @Entity public final class Server { @@ -39,8 +40,8 @@ public final class Server { @Getter @Id private String id; @Getter private String displayName; @Getter private String serverGroup; - @Getter private String serverIp; - @Getter private Instant lastUpdatedAt; + @Getter @Setter private String serverIp; + @Getter @Setter private Instant lastUpdatedAt; @Getter private double lastTps; @Getter @ExcludeFromReplies private Set players; diff --git a/src/main/java/net/frozenorb/apiv3/route/deployment/POSTDeploymentUpdateServer.java b/src/main/java/net/frozenorb/apiv3/route/deployment/POSTDeploymentUpdateServer.java new file mode 100644 index 0000000..69fa19f --- /dev/null +++ b/src/main/java/net/frozenorb/apiv3/route/deployment/POSTDeploymentUpdateServer.java @@ -0,0 +1,56 @@ +package net.frozenorb.apiv3.route.deployment; + +import com.google.common.collect.ImmutableList; + +import net.frozenorb.apiv3.actor.ActorType; +import net.frozenorb.apiv3.model.AccessToken; +import net.frozenorb.apiv3.model.Server; +import net.frozenorb.apiv3.util.ErrorUtils; +import net.frozenorb.apiv3.util.SyncUtils; + +import java.time.Instant; + +import io.vertx.core.Handler; +import io.vertx.core.json.JsonObject; +import io.vertx.ext.web.RoutingContext; + +public final class POSTDeploymentUpdateServer implements Handler { + + public void handle(RoutingContext ctx) { + String serverId = ctx.request().getParam("serverId"); + + JsonObject requestBody = ctx.getBodyAsJson(); + + String ip = requestBody.getString("ip"); + int port = requestBody.getInteger("port", 0); + + if (ip == null || port == 0) { + ErrorUtils.respondInvalidInput(ctx, "'ip' and 'port' are required."); + } + + Server server = Server.findById(serverId); + AccessToken accessToken = SyncUtils.runBlocking(v -> AccessToken.findByNameAndType(serverId, ActorType.SERVER, v)); + + if (server == null) { + ErrorUtils.respondNotFound(ctx, "server", serverId); + return; + } + + if (accessToken == null) { + ErrorUtils.respondNotFound(ctx, "access token", serverId); + return; + } + + server.setServerIp(ip + ":" + port); + server.setLastUpdatedAt(Instant.now()); + + accessToken.setLockedIps(ImmutableList.of(ip)); + accessToken.setLastUpdatedAt(Instant.now()); + + SyncUtils.runBlocking(server::save); + SyncUtils.runBlocking(accessToken::save); + + ctx.response().end(accessToken.getId()); + } + +} \ No newline at end of file