aboutsummaryrefslogtreecommitdiff
path: root/agent/src/main/java/moe/yuuta/dn42peering/agent/grpc/AgentServiceImpl.java
blob: 565def5f378f2a4e3fa84a9b447d3dd5a8b65397 (plain)
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(),
                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));
    }
}