aboutsummaryrefslogtreecommitdiff
path: root/central/src/main/java/moe/yuuta/dn42peering/portal/HTTPPortalVerticle.java
blob: e124c35e2d54a6d2e231f1676665d3fadf7dd022 (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
package moe.yuuta.dn42peering.portal;

import io.vertx.core.AbstractVerticle;
import io.vertx.core.Promise;
import io.vertx.core.http.HttpHeaders;
import io.vertx.core.impl.logging.Logger;
import io.vertx.core.impl.logging.LoggerFactory;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.web.Router;
import io.vertx.ext.web.common.template.TemplateEngine;
import io.vertx.ext.web.templ.freemarker.FreeMarkerTemplateEngine;
import moe.yuuta.dn42peering.asn.ASNHandler;
import moe.yuuta.dn42peering.manage.ManageHandler;

public class HTTPPortalVerticle extends AbstractVerticle {
    private final Logger logger = LoggerFactory.getLogger(getClass().getSimpleName());

    @Override
    public void start(Promise<Void> startPromise) throws Exception {
        final TemplateEngine engine = FreeMarkerTemplateEngine.create(vertx, "ftlh");

        final Router router = Router.router(vertx);
        router.get("/")
                .handler(ctx -> {
                    final JsonObject data = new JsonObject()
                            .put("name", config().getJsonObject("http").getValue("name"));
                    engine.render(data, "index.ftlh", res -> {
                        if(res.succeeded()) {
                            ctx.response()
                                    .putHeader(HttpHeaders.CONTENT_TYPE, "text/html")
                                    .end(res.result());
                        } else {
                            ctx.fail(res.cause());
                            logger.error("Cannot render index.", res.cause());
                        }
                    });
                });
        router.mountSubRouter("/asn", new ASNHandler().mount(vertx));
        router.mountSubRouter("/manage", new ManageHandler().mount(vertx));
        router.errorHandler(500, ctx -> {
            logger.error("Generic Error", ctx.failure());
        });
        vertx.createHttpServer()
                .requestHandler(router)
                .listen(8080, res -> {
                    if(res.succeeded()) {
                        startPromise.complete();
                    } else {
                        startPromise.fail(res.cause());
                    }
                });
    }
}