diff --git a/src/Empostor.Server/Http/AdminTemplateDefaults.cs b/src/Empostor.Server/Http/Admin/AdminTemplateDefaults.cs similarity index 99% rename from src/Empostor.Server/Http/AdminTemplateDefaults.cs rename to src/Empostor.Server/Http/Admin/AdminTemplateDefaults.cs index 89a676a..d8ffb2e 100644 --- a/src/Empostor.Server/Http/AdminTemplateDefaults.cs +++ b/src/Empostor.Server/Http/Admin/AdminTemplateDefaults.cs @@ -1,7 +1,7 @@ using System; using System.IO; -namespace Empostor.Server.Http; +namespace Empostor.Server.Http.Admin; internal static class AdminTemplateDefaults { diff --git a/src/Empostor.Server/Http/AdminController.cs b/src/Empostor.Server/Http/AdminController.cs index 0b8218e..96f2752 100644 --- a/src/Empostor.Server/Http/AdminController.cs +++ b/src/Empostor.Server/Http/AdminController.cs @@ -17,6 +17,8 @@ using Empostor.Api.Net; using Empostor.Api.Net.Manager; using Empostor.Server.Http.Admin; using Empostor.Server.Service.Api; +using Empostor.Server.Service.Ip; +using Empostor.Server.Service.Reactor; using Empostor.Server.Service.Shared; using Empostor.Server.Utils; using Microsoft.AspNetCore.Http; diff --git a/src/Empostor.Server/Http/HplpController.cs b/src/Empostor.Server/Http/HplpController.cs index 0baf2f6..956a920 100644 --- a/src/Empostor.Server/Http/HplpController.cs +++ b/src/Empostor.Server/Http/HplpController.cs @@ -4,11 +4,11 @@ using Empostor.Api.Config; using Empostor.Api.Games; using Empostor.Api.Games.Managers; using Empostor.Api.Innersloth; -using Empostor.Server.Service.Shared; using Empostor.Server.Service.Api; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; +using Empostor.Server.Service.Reactor; namespace Empostor.Server.Http; diff --git a/src/Empostor.Server/Http/TokenController.cs b/src/Empostor.Server/Http/TokenController.cs index 57aadab..085cbe2 100644 --- a/src/Empostor.Server/Http/TokenController.cs +++ b/src/Empostor.Server/Http/TokenController.cs @@ -12,6 +12,7 @@ using System.Threading.Tasks; using Empostor.Api.Config; using Empostor.Server.Net; using Empostor.Server.Service.Auth; +using Empostor.Server.Service.Ip; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; diff --git a/src/Empostor.Server/Net/Manager/ClientManager.cs b/src/Empostor.Server/Net/Manager/ClientManager.cs index 8b05e2e..c5e0982 100644 --- a/src/Empostor.Server/Net/Manager/ClientManager.cs +++ b/src/Empostor.Server/Net/Manager/ClientManager.cs @@ -11,16 +11,16 @@ using Empostor.Api.Net; using Empostor.Api.Net.Manager; using Empostor.Api.Service; using Empostor.Server.Events.Client; -using Empostor.Server.Http; using Empostor.Server.Net.Factories; using Empostor.Server.Service; -using Empostor.Server.Service.Shared; using Empostor.Server.Service.Auth; using Empostor.Server.Utils; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Next.Hazel; +using Empostor.Server.Service.Ip; +using Empostor.Server.Service.Reactor; namespace Empostor.Server.Net.Manager { diff --git a/src/Empostor.Server/Net/Matchmaker.cs b/src/Empostor.Server/Net/Matchmaker.cs index 8e021e6..3c34359 100644 --- a/src/Empostor.Server/Net/Matchmaker.cs +++ b/src/Empostor.Server/Net/Matchmaker.cs @@ -8,11 +8,11 @@ using Empostor.Api.Config; using Empostor.Api.Events.Managers; using Empostor.Api.Languages; using Empostor.Server.Events.Client; -using Empostor.Server.Http; using Empostor.Server.Net.Hazel; using Empostor.Server.Net.Manager; using Empostor.Server.Service.Auth; using Empostor.Server.Service.Firewall; +using Empostor.Server.Service.Ip; using Microsoft.Extensions.Logging; using Microsoft.Extensions.ObjectPool; using Microsoft.Extensions.Options; diff --git a/src/Empostor.Server/Net/State/Game.Incoming.cs b/src/Empostor.Server/Net/State/Game.Incoming.cs index fdb89bb..556ff8e 100644 --- a/src/Empostor.Server/Net/State/Game.Incoming.cs +++ b/src/Empostor.Server/Net/State/Game.Incoming.cs @@ -7,10 +7,10 @@ using Empostor.Api.Games; using Empostor.Api.Net; using Next.Hazel; using Empostor.Server.Events; -using Empostor.Server.Service.Shared; using Empostor.Server.Utils; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; +using Empostor.Server.Service.Reactor; namespace Empostor.Server.Net.State { diff --git a/src/Empostor.Server/Program.cs b/src/Empostor.Server/Program.cs index 26bb62a..85edb2a 100644 --- a/src/Empostor.Server/Program.cs +++ b/src/Empostor.Server/Program.cs @@ -44,6 +44,8 @@ using Serilog; using Serilog.Events; using Serilog.Settings.Configuration; using Empostor.Server.Service; +using Empostor.Server.Service.Ip; +using Empostor.Server.Service.Reactor; namespace Empostor.Server { diff --git a/src/Empostor.Server/Service/Shared/IpGeolocationService.cs b/src/Empostor.Server/Service/Ip/IpGeolocationService.cs similarity index 98% rename from src/Empostor.Server/Service/Shared/IpGeolocationService.cs rename to src/Empostor.Server/Service/Ip/IpGeolocationService.cs index 0107bfc..ffa67c1 100644 --- a/src/Empostor.Server/Service/Shared/IpGeolocationService.cs +++ b/src/Empostor.Server/Service/Ip/IpGeolocationService.cs @@ -7,7 +7,7 @@ using System.Text.Json; using System.Threading.Tasks; using Microsoft.Extensions.Logging; -namespace Empostor.Server.Service.Shared +namespace Empostor.Server.Service.Ip { public class IpGeolocationService { diff --git a/src/Empostor.Server/Http/IpRateLimitMiddleware.cs b/src/Empostor.Server/Service/Ip/IpRateLimitMiddleware.cs similarity index 96% rename from src/Empostor.Server/Http/IpRateLimitMiddleware.cs rename to src/Empostor.Server/Service/Ip/IpRateLimitMiddleware.cs index 286726a..ceaa68c 100644 --- a/src/Empostor.Server/Http/IpRateLimitMiddleware.cs +++ b/src/Empostor.Server/Service/Ip/IpRateLimitMiddleware.cs @@ -7,10 +7,8 @@ using Empostor.Api.Languages; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Logging; -namespace Empostor.Server.Http; +namespace Empostor.Server.Service.Ip; -// Anticheat "Ip request rate limit": rejects TCP (HTTP) requests of IPs that -// exceeded the configured quota and answers with a localized hint. public sealed class IpRateLimitMiddleware { private const string MessageKey = IpRateLimitService.MessageKey; diff --git a/src/Empostor.Server/Http/IpRateLimitService.cs b/src/Empostor.Server/Service/Ip/IpRateLimitService.cs similarity index 97% rename from src/Empostor.Server/Http/IpRateLimitService.cs rename to src/Empostor.Server/Service/Ip/IpRateLimitService.cs index 2262699..3f30b97 100644 --- a/src/Empostor.Server/Http/IpRateLimitService.cs +++ b/src/Empostor.Server/Service/Ip/IpRateLimitService.cs @@ -4,10 +4,9 @@ using System.Net; using Empostor.Api.Config; using Microsoft.Extensions.Options; -namespace Empostor.Server.Http; +namespace Empostor.Server.Service.Ip; public sealed class IpRateLimitService { - // Language key of the localized hint, see Languages/*.json. public const string MessageKey = "ratelimit.too_frequent"; public const int MaxRequestsPerWindow = 30; diff --git a/src/Empostor.Server/Http/RealIpResolver.cs b/src/Empostor.Server/Service/Ip/RealIpResolver.cs similarity index 75% rename from src/Empostor.Server/Http/RealIpResolver.cs rename to src/Empostor.Server/Service/Ip/RealIpResolver.cs index ea30e2d..6a83037 100644 --- a/src/Empostor.Server/Http/RealIpResolver.cs +++ b/src/Empostor.Server/Service/Ip/RealIpResolver.cs @@ -2,12 +2,8 @@ using System.Linq; using System.Net; using Microsoft.AspNetCore.Http; -namespace Empostor.Server.Http; +namespace Empostor.Server.Service.Ip; -// Resolves the real client IP of an HTTP (TCP) request. -// Behind a CDN / reverse proxy Connection.RemoteIpAddress is the proxy's -// address, so the forwarding headers are checked first — otherwise rate -// limiting or banning would hit the CDN node instead of the actual user. public static class RealIpResolver { public static IPAddress? Resolve(HttpContext context) diff --git a/src/Empostor.Server/Service/Shared/ReactorHandshakeListener.cs b/src/Empostor.Server/Service/Reactor/ReactorHandshakeListener.cs similarity index 96% rename from src/Empostor.Server/Service/Shared/ReactorHandshakeListener.cs rename to src/Empostor.Server/Service/Reactor/ReactorHandshakeListener.cs index 3ffeba5..de0b2f0 100644 --- a/src/Empostor.Server/Service/Shared/ReactorHandshakeListener.cs +++ b/src/Empostor.Server/Service/Reactor/ReactorHandshakeListener.cs @@ -4,14 +4,10 @@ using Empostor.Api.Events; using Empostor.Api.Events.Client; using Microsoft.Extensions.Logging; -namespace Empostor.Server.Service.Shared +namespace Empostor.Server.Service.Reactor { // Based on Reactor.Empostor protocol: // https://github.com/NuclearPowered/Reactor.Empostor - // - // Reactor appends its data after the normal Among Us handshake: - // [normal AU handshake] [uint64 header: 7-byte "reactor" magic + 1-byte protocol version] - // If protocol >= V3: [packed int modCount] [for each: string id, string version, ushort flags] internal sealed class ReactorHandshakeListener : IEventListener { // "reactor" in ASCII (7 bytes), packed as upper 56 bits of a uint64 in little-endian diff --git a/src/Empostor.Server/Service/Shared/ReactorModExtensions.cs b/src/Empostor.Server/Service/Reactor/ReactorModExtensions.cs similarity index 94% rename from src/Empostor.Server/Service/Shared/ReactorModExtensions.cs rename to src/Empostor.Server/Service/Reactor/ReactorModExtensions.cs index 1505fb9..3e777c2 100644 --- a/src/Empostor.Server/Service/Shared/ReactorModExtensions.cs +++ b/src/Empostor.Server/Service/Reactor/ReactorModExtensions.cs @@ -1,7 +1,7 @@ using System.Runtime.CompilerServices; using Empostor.Api.Net; -namespace Empostor.Server.Service.Shared +namespace Empostor.Server.Service.Reactor { public static class ReactorModExtensions