Skip to content

Commit b4d0d2b

Browse files
committed
request rate limiter
1 parent d8f955f commit b4d0d2b

2 files changed

Lines changed: 7 additions & 0 deletions

File tree

src/main/java/dev/zenith/web/WebAPIConfig.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,6 @@ public class WebAPIConfig {
66
public boolean enabled = true;
77
public int port = 8080;
88
public String authToken = UUID.randomUUID().toString();
9+
public boolean rateLimiter = true;
10+
public int rateLimitRequestsPerMinute = 30;
911
}

src/main/java/dev/zenith/web/WebServer.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,11 @@
88
import dev.zenith.web.model.CommandRequest;
99
import dev.zenith.web.model.CommandResponse;
1010
import io.javalin.Javalin;
11+
import io.javalin.http.util.NaiveRateLimit;
1112
import org.eclipse.jetty.util.thread.ExecutorThreadPool;
1213

1314
import java.util.List;
15+
import java.util.concurrent.TimeUnit;
1416

1517
import static dev.zenith.web.WebApiPlugin.LOG;
1618
import static dev.zenith.web.WebApiPlugin.PLUGIN_CONFIG;
@@ -66,6 +68,9 @@ private Javalin createServer() {
6668
LOG.warn("Denied request from {}: {}", ctx.ip(), reason);
6769
})
6870
.post("/command", ctx -> {
71+
if (PLUGIN_CONFIG.rateLimiter) {
72+
NaiveRateLimit.requestPerTimeUnit(ctx, PLUGIN_CONFIG.rateLimitRequestsPerMinute, TimeUnit.MINUTES);
73+
}
6974
var req = ctx.bodyAsClass(CommandRequest.class);
7075
var command = req.command();
7176
var context = CommandContext.create(command, WebAPICommandSource.INSTANCE);

0 commit comments

Comments
 (0)