From 39352c6ecc154bac07ac6f6d4ca9abea09fa9db3 Mon Sep 17 00:00:00 2001 From: Trumeet Date: Wed, 13 Jul 2022 12:48:12 -0700 Subject: Use error 403 instead of cmd_denied to represent permission denial API:CHANGE Signed-off-by: Trumeet --- README.md | 4 ++++ src/main/java/moe/ymc/acron/net/WSFrameHandler.java | 5 +++-- src/main/java/moe/ymc/acron/s2c/response/EventCmdDenied.java | 8 -------- src/main/java/moe/ymc/acron/s2c/response/EventError.java | 4 +++- src/main/java/moe/ymc/acron/serialization/Serializer.java | 6 ++++-- 5 files changed, 14 insertions(+), 13 deletions(-) delete mode 100644 src/main/java/moe/ymc/acron/s2c/response/EventCmdDenied.java diff --git a/README.md b/README.md index e1284a6..6d952cb 100644 --- a/README.md +++ b/README.md @@ -343,6 +343,10 @@ This shows that the command is scheduled. If the connection breaks before it is done, it is still executed without any output to the connection. +Possible failures: + +* 403: This client is not allowed to execute this command. (Configured by rules) + **Command output:** When the command prints a line, Acron will send the following response: diff --git a/src/main/java/moe/ymc/acron/net/WSFrameHandler.java b/src/main/java/moe/ymc/acron/net/WSFrameHandler.java index 713d433..f03fc36 100644 --- a/src/main/java/moe/ymc/acron/net/WSFrameHandler.java +++ b/src/main/java/moe/ymc/acron/net/WSFrameHandler.java @@ -13,7 +13,6 @@ import moe.ymc.acron.c2s.Request; import moe.ymc.acron.cmd.CmdQueue; import moe.ymc.acron.jvav.Pair; import moe.ymc.acron.s2c.EventQueue; -import moe.ymc.acron.s2c.response.EventCmdDenied; import moe.ymc.acron.s2c.response.EventError; import moe.ymc.acron.s2c.response.EventOk; import moe.ymc.acron.serialization.Serializer; @@ -77,7 +76,9 @@ public class WSFrameHandler extends SimpleChannelInboundHandler final Pair res = PolicyChecker.check(identification.client(), reqCmd.cmd()); if (res.l() == Action.DENY) { - ctx.channel().writeAndFlush(Serializer.serialize(new EventCmdDenied(reqCmd.id()))); + ctx.channel().writeAndFlush(Serializer.serialize(new EventError(reqCmd.id(), + EventError.Code.FORBIDDEN.value, "This client is not allowed to " + + "execute this command."))); return; } // Write it before enqueueing to prevent potential diff --git a/src/main/java/moe/ymc/acron/s2c/response/EventCmdDenied.java b/src/main/java/moe/ymc/acron/s2c/response/EventCmdDenied.java deleted file mode 100644 index 85fcf8d..0000000 --- a/src/main/java/moe/ymc/acron/s2c/response/EventCmdDenied.java +++ /dev/null @@ -1,8 +0,0 @@ -package moe.ymc.acron.s2c.response; - -import com.google.gson.annotations.SerializedName; -import moe.ymc.acron.s2c.Event; - -public record EventCmdDenied(@SerializedName("id") int id) - implements Event { -} diff --git a/src/main/java/moe/ymc/acron/s2c/response/EventError.java b/src/main/java/moe/ymc/acron/s2c/response/EventError.java index d2a03c3..370e8f3 100644 --- a/src/main/java/moe/ymc/acron/s2c/response/EventError.java +++ b/src/main/java/moe/ymc/acron/s2c/response/EventError.java @@ -10,7 +10,9 @@ public record EventError(@SerializedName("id") int id, implements Event { public enum Code { SERVER_ERROR(500), - BAD_REQUEST(400); + BAD_REQUEST(400), + FORBIDDEN(403) + ; public final int value; Code(int value) { diff --git a/src/main/java/moe/ymc/acron/serialization/Serializer.java b/src/main/java/moe/ymc/acron/serialization/Serializer.java index 6d06388..2cc7976 100644 --- a/src/main/java/moe/ymc/acron/serialization/Serializer.java +++ b/src/main/java/moe/ymc/acron/serialization/Serializer.java @@ -10,7 +10,10 @@ import moe.ymc.acron.c2s.ReqSetConfig; import moe.ymc.acron.c2s.Request; import moe.ymc.acron.s2c.Event; import moe.ymc.acron.s2c.event.*; -import moe.ymc.acron.s2c.response.*; +import moe.ymc.acron.s2c.response.EventCmdOut; +import moe.ymc.acron.s2c.response.EventCmdRes; +import moe.ymc.acron.s2c.response.EventError; +import moe.ymc.acron.s2c.response.EventOk; import org.jetbrains.annotations.NotNull; public class Serializer { @@ -45,7 +48,6 @@ public class Serializer { .registerSubtype(EventCmdOut.class, "cmd_output") .registerSubtype(EventCmdRes.class, "cmd_result") .registerSubtype(EventLagging.class, "lagging") - .registerSubtype(EventCmdDenied.class, "cmd_denied") .registerSubtype(EventError.class, "error") .registerSubtype(EventOk.class, "ok"); final Gson gson = new GsonBuilder() -- cgit v1.2.3