package com.alecgorge.minecraft.jsonapi.packets.netty.router;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.handler.codec.http.DefaultFullHttpResponse;
import io.netty.handler.codec.http.FullHttpResponse;
import io.netty.handler.codec.http.HttpResponseStatus;
import io.netty.handler.codec.http.HttpVersion;
import io.netty.util.CharsetUtil;
import com.alecgorge.minecraft.jsonapi.JSONAPI;
import com.alecgorge.minecraft.jsonapi.packets.netty.APIv2Handler;
public class JSONAPIDefaultRoutes {
JSONAPI api;
public JSONAPIDefaultRoutes(final JSONAPI api) {
this.api = api;
RouteMatcher r = api.getRouter();
r.noMatch(new Handler<FullHttpResponse, RoutedHttpRequest>() {
@Override
public FullHttpResponse handle(RoutedHttpRequest event) {
api.outLog.info("[JSONAPI] [HTTP] 404 " + event.getFullHttpRequest().getUri());
return buildResponse(HttpResponseStatus.OK, "text/plain", event.getFullHttpRequest().getUri() + " wasn't found. This is a Minecraft server. HTTP on this port by JSONAPI. JSONAPI by Alec Gorge.\n");
}
});
r.everyMatch(new Handler<Void, RoutedHttpResponse>() {
@Override
public Void handle(RoutedHttpResponse event) {
api.outLog.info("[JSONAPI] [HTTP] " +
event.getFullHttpResponse().getStatus().code() + " " +
event.getFullHttpRequest().getMethod().toString() + " " +
event.getFullHttpRequest().getUri());
return null;
}
});
Handler<FullHttpResponse, RoutedHttpRequest> apiHandler = new Handler<FullHttpResponse, RoutedHttpRequest>() {
@Override
public FullHttpResponse handle(RoutedHttpRequest event) {
APIv2Handler h = new APIv2Handler(event.request);
api.outLog.info("Request was matched");
return h.serve();
}
};
r.get("/api/2/call", apiHandler);
r.post("/api/2/call", apiHandler);
r.get("/api/2/version", apiHandler);
r.post("/api/2/version", apiHandler);
r.get("/", new Handler<FullHttpResponse, RoutedHttpRequest>() {
@Override
public FullHttpResponse handle(RoutedHttpRequest event) {
return buildResponse(HttpResponseStatus.OK, "text/plain", "This is a Minecraft server. HTTP on this port by JSONAPI. JSONAPI by Alec Gorge.\n");
}
});
}
public static FullHttpResponse buildResponse(HttpResponseStatus resp, String type, String body) {
ByteBuf buf = Unpooled.copiedBuffer(body, CharsetUtil.UTF_8);
FullHttpResponse r = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, resp, buf);
r.headers().set("Access-Control-Allow-Origin", "*");
r.headers().set("Content-Length", buf.readableBytes());
return r;
}
}