diff --git a/Content.Server/LocalHostConGroup.cs b/Content.Server/LocalHostConGroup.cs
new file mode 100644
index 0000000..8967ea7
--- /dev/null
+++ b/Content.Server/LocalHostConGroup.cs
@@ -0,0 +1,50 @@
+using System.Net;
+using JetBrains.Annotations;
+using Robust.Server.Console;
+using Robust.Server.Player;
+
+namespace Content.Server;
+
+///
+/// Debug/example ConGroup controller implementation that gives any client connected through localhost every permission.
+///
+[UsedImplicitly]
+public sealed class LocalHostConGroup : IConGroupControllerImplementation, IPostInjectInit {
+ public bool CanCommand(IPlayerSession session, string cmdName) {
+ return IsLocal(session);
+ }
+
+ public bool CanViewVar(IPlayerSession session) {
+ return IsLocal(session);
+ }
+
+ public bool CanAdminPlace(IPlayerSession session) {
+ return IsLocal(session);
+ }
+
+ public bool CanScript(IPlayerSession session) {
+ return IsLocal(session);
+ }
+
+ public bool CanAdminMenu(IPlayerSession session) {
+ return IsLocal(session);
+ }
+
+ public bool CanAdminReloadPrototypes(IPlayerSession session) {
+ return IsLocal(session);
+ }
+
+ private static bool IsLocal(IPlayerSession player) {
+ var ep = player.ConnectedClient.RemoteEndPoint;
+ var addr = ep.Address;
+ if (addr.IsIPv4MappedToIPv6) {
+ addr = addr.MapToIPv4();
+ }
+
+ return Equals(addr, IPAddress.Loopback) || Equals(addr, IPAddress.IPv6Loopback);
+ }
+
+ void IPostInjectInit.PostInject() {
+ IoCManager.Resolve().Implementation = this;
+ }
+}
\ No newline at end of file
diff --git a/Content.Server/ServerContentIoC.cs b/Content.Server/ServerContentIoC.cs
index 65a7671..ad48edb 100644
--- a/Content.Server/ServerContentIoC.cs
+++ b/Content.Server/ServerContentIoC.cs
@@ -5,5 +5,6 @@ internal static class ServerContentIoC
public static void Register()
{
// DEVNOTE: IoCManager registrations for the server go here and only here.
+ IoCManager.Register();
}
}
\ No newline at end of file