aboutsummaryrefslogtreecommitdiff
path: root/agent/src/main/java/moe/yuuta/dn42peering/agent/grpc/AgentServiceImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'agent/src/main/java/moe/yuuta/dn42peering/agent/grpc/AgentServiceImpl.java')
-rw-r--r--agent/src/main/java/moe/yuuta/dn42peering/agent/grpc/AgentServiceImpl.java112
1 files changed, 112 insertions, 0 deletions
diff --git a/agent/src/main/java/moe/yuuta/dn42peering/agent/grpc/AgentServiceImpl.java b/agent/src/main/java/moe/yuuta/dn42peering/agent/grpc/AgentServiceImpl.java
new file mode 100644
index 0000000..565def5
--- /dev/null
+++ b/agent/src/main/java/moe/yuuta/dn42peering/agent/grpc/AgentServiceImpl.java
@@ -0,0 +1,112 @@
+package moe.yuuta.dn42peering.agent.grpc;
+
+import io.vertx.core.Future;
+import io.vertx.core.Vertx;
+import io.vertx.core.impl.logging.Logger;
+import io.vertx.core.impl.logging.LoggerFactory;
+import moe.yuuta.dn42peering.agent.proto.*;
+import moe.yuuta.dn42peering.agent.provision.IProvisionService;
+
+import javax.annotation.Nonnull;
+
+class AgentServiceImpl extends VertxAgentGrpc.AgentVertxImplBase {
+ private final Logger logger = LoggerFactory.getLogger(getClass().getSimpleName());
+
+ private final Vertx vertx;
+ private final IProvisionService provisionService;
+
+ AgentServiceImpl(@Nonnull Vertx vertx) {
+ this.vertx = vertx;
+ this.provisionService = IProvisionService.create(vertx);
+ }
+
+ @Override
+ public Future<BGPReply> provisionBGP(BGPRequest request) {
+ return Future.<Void>future(f -> provisionService.provisionBGP(
+ request.getNode().getIpv4(),
+ request.getNode().getIpv6(),
+ (int)request.getId(),
+ request.getIpv4(),
+ request.getIpv6().isEmpty() ? null : request.getIpv6(),
+ request.getDevice(),
+ request.getMpbgp(),
+ request.getAsn(),
+ f))
+ .compose(_v -> Future.succeededFuture(BGPReply.newBuilder().build()))
+ .onFailure(err -> logger.error(String.format("Cannot provision BGP for %d", request.getId()),
+ err));
+ }
+
+ @Override
+ public Future<BGPReply> reloadBGP(BGPRequest request) {
+ return Future.<Void>future(f -> provisionService.reloadBGP(
+ request.getNode().getIpv4(),
+ request.getNode().getIpv6(),
+ (int)request.getId(),
+ request.getIpv4(),
+ request.getIpv6().isEmpty() ? null : request.getIpv6(),
+ request.getDevice(),
+ request.getMpbgp(),
+ request.getAsn(),
+ f))
+ .compose(_v -> Future.succeededFuture(BGPReply.newBuilder().build()))
+ .onFailure(err -> logger.error(String.format("Cannot reload BGP for %d", request.getId()),
+ err));
+ }
+
+ @Override
+ public Future<BGPReply> deleteBGP(BGPRequest request) {
+ return Future.<Void>future(f -> provisionService.unprovisionBGP((int)request.getId(), f))
+ .compose(_v -> Future.succeededFuture(BGPReply.newBuilder().build()))
+ .onFailure(err -> logger.error(String.format("Cannot delete BGP for %d", request.getId()),
+ err));
+ }
+
+ @Override
+ public Future<WGReply> provisionWG(WGRequest request) {
+ return Future.<String>future(f -> provisionService.provisionVPNWireGuard(
+ request.getNode().getIpv4(),
+ request.getNode().getIpv6(),
+ (int)request.getId(),
+ request.getListenPort(),
+ request.getEndpoint(),
+ request.getPeerPubKey(),
+ request.getSelfPrivKey(),
+ request.getSelfPresharedSecret(),
+ request.getPeerIPv4(),
+ request.getPeerIPv6().isEmpty() ? null : request.getPeerIPv6(),
+ f))
+ .compose(dev -> Future.succeededFuture(WGReply.newBuilder()
+ .setDevice(dev).build()))
+ .onFailure(err -> logger.error(String.format("Cannot provision WireGuard for %d", request.getId()),
+ err));
+ }
+
+ @Override
+ public Future<WGReply> reloadWG(WGRequest request) {
+ return Future.<String>future(f -> provisionService.reloadVPNWireGuard(
+ request.getNode().getIpv4(),
+ request.getNode().getIpv6(),
+ (int)request.getId(),
+ request.getListenPort(),
+ request.getEndpoint(),
+ request.getPeerPubKey(),
+ request.getSelfPrivKey(),
+ request.getSelfPresharedSecret(),
+ request.getPeerIPv4(),
+ request.getPeerIPv6().isEmpty() ? null : request.getPeerIPv6(),
+ f))
+ .compose(dev -> Future.succeededFuture(WGReply.newBuilder()
+ .setDevice(dev).build()))
+ .onFailure(err -> logger.error(String.format("Cannot reload WireGuard for %d", request.getId()),
+ err));
+ }
+
+ @Override
+ public Future<WGReply> deleteWG(WGRequest request) {
+ return Future.<Void>future(f -> provisionService.unprovisionVPNWireGuard((int)request.getId(), f))
+ .compose(_v -> Future.succeededFuture(WGReply.newBuilder().build()))
+ .onFailure(err -> logger.error(String.format("Cannot delete WireGuard for %d", request.getId()),
+ err));
+ }
+}