1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
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().isEmpty() ? "" : 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().isEmpty() ? "" : 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));
}
}
|