Finish deployment route
This commit is contained in:
parent
db0adc8b87
commit
021d448c15
@ -2,6 +2,6 @@ package net.frozenorb.apiv3.actor;
|
|||||||
|
|
||||||
public enum ActorType {
|
public enum ActorType {
|
||||||
|
|
||||||
WEBSITE, STORE, BUNGEE_CORD, SERVER, UNKNOWN
|
WEBSITE, ANSIBLE, STORE, BUNGEE_CORD, SERVER, UNKNOWN
|
||||||
|
|
||||||
}
|
}
|
@ -1,10 +1,13 @@
|
|||||||
package net.frozenorb.apiv3.route.deployment;
|
package net.frozenorb.apiv3.route.deployment;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
|
||||||
|
import net.frozenorb.apiv3.actor.Actor;
|
||||||
import net.frozenorb.apiv3.actor.ActorType;
|
import net.frozenorb.apiv3.actor.ActorType;
|
||||||
import net.frozenorb.apiv3.model.AccessToken;
|
import net.frozenorb.apiv3.model.AccessToken;
|
||||||
import net.frozenorb.apiv3.model.Server;
|
import net.frozenorb.apiv3.model.Server;
|
||||||
|
import net.frozenorb.apiv3.model.ServerGroup;
|
||||||
import net.frozenorb.apiv3.util.ErrorUtils;
|
import net.frozenorb.apiv3.util.ErrorUtils;
|
||||||
import net.frozenorb.apiv3.util.SyncUtils;
|
import net.frozenorb.apiv3.util.SyncUtils;
|
||||||
|
|
||||||
@ -17,39 +20,66 @@ import io.vertx.ext.web.RoutingContext;
|
|||||||
public final class POSTDeploymentUpdateServer implements Handler<RoutingContext> {
|
public final class POSTDeploymentUpdateServer implements Handler<RoutingContext> {
|
||||||
|
|
||||||
public void handle(RoutingContext ctx) {
|
public void handle(RoutingContext ctx) {
|
||||||
|
Actor actor = ctx.get("actor");
|
||||||
|
|
||||||
|
if (actor.getType() != ActorType.ANSIBLE) {
|
||||||
|
ErrorUtils.respondOther(ctx, 403, "This action can only be performed by Ansible.", "ansibleOnly", ImmutableMap.of());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
String serverId = ctx.request().getParam("serverId");
|
String serverId = ctx.request().getParam("serverId");
|
||||||
|
|
||||||
JsonObject requestBody = ctx.getBodyAsJson();
|
JsonObject requestBody = ctx.getBodyAsJson();
|
||||||
|
|
||||||
String ip = requestBody.getString("ip");
|
String ip = requestBody.getString("ip");
|
||||||
int port = requestBody.getInteger("port", 0);
|
int port = requestBody.getInteger("port", 0);
|
||||||
|
String typeRaw = requestBody.getString("type");
|
||||||
|
String groupRaw = requestBody.getString("group");
|
||||||
|
String displayName = requestBody.getString("displayName");
|
||||||
|
|
||||||
if (ip == null || port == 0) {
|
if (ip == null || port == 0 || typeRaw == null || groupRaw == null || displayName == null) {
|
||||||
ErrorUtils.respondInvalidInput(ctx, "'ip' and 'port' are required.");
|
ErrorUtils.respondInvalidInput(ctx, "'ip', 'port', 'type', 'group', and 'displayName' are required.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ActorType type;
|
||||||
|
|
||||||
|
try {
|
||||||
|
type = ActorType.valueOf(typeRaw.toUpperCase());
|
||||||
|
} catch (Exception ignored) {
|
||||||
|
ErrorUtils.respondInvalidInput(ctx, "type must be one of [ WEBSITE, ANSIBLE, STORE, BUNGEE_CORD, SERVER ]");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ServerGroup group = ServerGroup.findById(groupRaw);
|
||||||
|
|
||||||
|
if (group == null) {
|
||||||
|
ErrorUtils.respondNotFound(ctx, "server group", groupRaw);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Server server = Server.findById(serverId);
|
Server server = Server.findById(serverId);
|
||||||
AccessToken accessToken = SyncUtils.runBlocking(v -> AccessToken.findByNameAndType(serverId, ActorType.SERVER, v));
|
|
||||||
|
|
||||||
if (server == null) {
|
if (server == null) {
|
||||||
ErrorUtils.respondNotFound(ctx, "server", serverId);
|
server = new Server(serverId, displayName, group, ip + ":" + port);
|
||||||
return;
|
SyncUtils.<Void>runBlocking(server::insert);
|
||||||
|
} else {
|
||||||
|
server.setServerIp(ip + ":" + port);
|
||||||
|
server.setLastUpdatedAt(Instant.now());
|
||||||
|
SyncUtils.<Void>runBlocking(server::save);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AccessToken accessToken = SyncUtils.runBlocking(v -> AccessToken.findByNameAndType(serverId, type, v));
|
||||||
|
|
||||||
if (accessToken == null) {
|
if (accessToken == null) {
|
||||||
ErrorUtils.respondNotFound(ctx, "access token", serverId);
|
ErrorUtils.respondNotFound(ctx, "access token", serverId);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
server.setServerIp(ip + ":" + port);
|
|
||||||
server.setLastUpdatedAt(Instant.now());
|
|
||||||
|
|
||||||
accessToken.setLockedIps(ImmutableList.of(ip));
|
accessToken.setLockedIps(ImmutableList.of(ip));
|
||||||
accessToken.setLastUpdatedAt(Instant.now());
|
accessToken.setLastUpdatedAt(Instant.now());
|
||||||
|
|
||||||
SyncUtils.<Void>runBlocking(server::save);
|
|
||||||
SyncUtils.<Void>runBlocking(accessToken::save);
|
SyncUtils.<Void>runBlocking(accessToken::save);
|
||||||
|
|
||||||
ctx.response().end(accessToken.getId());
|
ctx.response().end(accessToken.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user