From: js6pak Date: Wed, 10 Nov 2021 12:52:15 +0000 (+0100) Subject: RIP AnnouncementsServer X-Git-Tag: v1.7.0~17^2~19 X-Git-Url: https://git.deb.at/?a=commitdiff_plain;h=e0c70869739624784483dfb955b50affee3fcf52;p=rhonda%2Fimpostor.git RIP AnnouncementsServer --- diff --git a/src/Impostor.Api/Events/Announcements/IAnnouncementRequestEvent.cs b/src/Impostor.Api/Events/Announcements/IAnnouncementRequestEvent.cs deleted file mode 100644 index 5735856..0000000 --- a/src/Impostor.Api/Events/Announcements/IAnnouncementRequestEvent.cs +++ /dev/null @@ -1,38 +0,0 @@ -using Impostor.Api.Innersloth; - -namespace Impostor.Api.Events.Announcements -{ - /// - /// Event fired after client requests a announcement. - /// - public interface IAnnouncementRequestEvent : IEvent - { - public interface IResponse - { - /// - /// Gets or sets a value indicating whether announcement should be loaded from client's cache, can save some bytes. - /// - public bool UseCached { get; set; } - - /// - /// Gets or sets announcement, should be null when is set to true. - /// - public Announcement? Announcement { get; set; } - } - - /// - /// Gets client's last announcement id. - /// - public int Id { get; } - - /// - /// Gets client's language. - /// - public Language Language { get; } - - /// - /// Gets or sets plugin made response. - /// - public IResponse Response { get; set; } - } -} diff --git a/src/Impostor.Api/Innersloth/Announcement.cs b/src/Impostor.Api/Innersloth/Announcement.cs deleted file mode 100644 index fca0601..0000000 --- a/src/Impostor.Api/Innersloth/Announcement.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace Impostor.Api.Innersloth -{ - public readonly struct Announcement - { - public readonly int Id; - public readonly string Message; - - public Announcement(int id, string message) - { - Id = id; - Message = message; - } - } -} diff --git a/src/Impostor.Api/Net/Messages/Announcements/Message00UseCache.cs b/src/Impostor.Api/Net/Messages/Announcements/Message00UseCache.cs deleted file mode 100644 index 3787ef6..0000000 --- a/src/Impostor.Api/Net/Messages/Announcements/Message00UseCache.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace Impostor.Api.Net.Messages.Announcements -{ - public static class Message00UseCache - { - public static void Serialize(IMessageWriter writer) - { - writer.StartMessage(AnnouncementsMessageFlags.UseCache); - writer.EndMessage(); - } - - public static void Deserialize(IMessageReader reader) - { - } - } -} diff --git a/src/Impostor.Api/Net/Messages/Announcements/Message01Update.cs b/src/Impostor.Api/Net/Messages/Announcements/Message01Update.cs deleted file mode 100644 index b8bc284..0000000 --- a/src/Impostor.Api/Net/Messages/Announcements/Message01Update.cs +++ /dev/null @@ -1,19 +0,0 @@ -namespace Impostor.Api.Net.Messages.Announcements -{ - public static class Message01Update - { - public static void Serialize(IMessageWriter writer, int id, string message) - { - writer.StartMessage(AnnouncementsMessageFlags.SetUpdate); - writer.WritePacked(id); - writer.Write(message); - writer.EndMessage(); - } - - public static void Deserialize(IMessageReader reader, out int id, out string message) - { - id = reader.ReadPackedInt32(); - message = reader.ReadString(); - } - } -} diff --git a/src/Impostor.Api/Net/Messages/Announcements/Message04AddLanguages.cs b/src/Impostor.Api/Net/Messages/Announcements/Message04AddLanguages.cs deleted file mode 100644 index 1ea7b20..0000000 --- a/src/Impostor.Api/Net/Messages/Announcements/Message04AddLanguages.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System.Collections.Generic; - -namespace Impostor.Api.Net.Messages.Announcements -{ - public static class Message04AddLanguages - { - public static void Serialize(IMessageWriter writer, Dictionary languages) - { - writer.StartMessage(AnnouncementsMessageFlags.AddLanguages); - - writer.Write((byte)languages.Count); - foreach (var (name, id) in languages) - { - writer.Write(name); - writer.Write(id); - } - - writer.EndMessage(); - } - - public static void Deserialize(IMessageReader reader, out Dictionary languages) - { - var length = reader.ReadByte(); - languages = new Dictionary(length); - - for (var i = 0; i < length; i++) - { - languages[reader.ReadString()] = reader.ReadUInt32(); - } - } - } -} diff --git a/src/Impostor.Api/Net/Messages/Announcements/MessageHello.cs b/src/Impostor.Api/Net/Messages/Announcements/MessageHello.cs deleted file mode 100644 index c695037..0000000 --- a/src/Impostor.Api/Net/Messages/Announcements/MessageHello.cs +++ /dev/null @@ -1,15 +0,0 @@ -using Impostor.Api.Innersloth; - -namespace Impostor.Api.Net.Messages.Announcements -{ - public class MessageHello - { - public static void Deserialize(IMessageReader reader, out int announcementVersion, out int id, out Language language) - { - reader.ReadByte(); // SendOption header, probably added by accident - announcementVersion = reader.ReadPackedInt32(); - id = reader.ReadPackedInt32(); - language = (Language)reader.ReadPackedInt32(); - } - } -} diff --git a/src/Impostor.Api/Net/Messages/AnnouncementsMessageFlags.cs b/src/Impostor.Api/Net/Messages/AnnouncementsMessageFlags.cs deleted file mode 100644 index cedfdd3..0000000 --- a/src/Impostor.Api/Net/Messages/AnnouncementsMessageFlags.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace Impostor.Api.Net.Messages -{ - public class AnnouncementsMessageFlags - { - public const byte UseCache = 0; - public const byte SetUpdate = 1; - public const byte AddLanguages = 4; - } -} diff --git a/src/Impostor.Api/Net/Messages/Auth/Message01Complete.cs b/src/Impostor.Api/Net/Messages/Auth/Message01Complete.cs deleted file mode 100644 index 2572f8c..0000000 --- a/src/Impostor.Api/Net/Messages/Auth/Message01Complete.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace Impostor.Api.Net.Messages.Auth -{ - public static class Message01Complete - { - public static void Serialize(IMessageWriter writer, uint nonce) - { - writer.WritePacked(nonce); - } - - public static void Deserialize(IMessageReader reader, out uint nonce) - { - nonce = reader.ReadUInt32(); - } - } -} diff --git a/src/Impostor.Api/Net/Messages/Auth/MessageHandshake.cs b/src/Impostor.Api/Net/Messages/Auth/MessageHandshake.cs deleted file mode 100644 index 146d004..0000000 --- a/src/Impostor.Api/Net/Messages/Auth/MessageHandshake.cs +++ /dev/null @@ -1,14 +0,0 @@ -using Impostor.Api.Innersloth; - -namespace Impostor.Api.Net.Messages.Auth -{ - public static class MessageHandshake - { - public static void Deserialize(IMessageReader reader, out int clientVersion, out Platforms platform, out string clientId) - { - clientVersion = reader.ReadInt32(); - platform = (Platforms)reader.ReadByte(); - clientId = reader.ReadString(); - } - } -} diff --git a/src/Impostor.Plugins.Example/ExamplePluginStartup.cs b/src/Impostor.Plugins.Example/ExamplePluginStartup.cs index fbb282d..45cc414 100644 --- a/src/Impostor.Plugins.Example/ExamplePluginStartup.cs +++ b/src/Impostor.Plugins.Example/ExamplePluginStartup.cs @@ -18,7 +18,6 @@ namespace Impostor.Plugins.Example services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); - services.AddSingleton(); } } } diff --git a/src/Impostor.Plugins.Example/Handlers/AnnouncementsListener.cs b/src/Impostor.Plugins.Example/Handlers/AnnouncementsListener.cs deleted file mode 100644 index 42ca3f2..0000000 --- a/src/Impostor.Plugins.Example/Handlers/AnnouncementsListener.cs +++ /dev/null @@ -1,26 +0,0 @@ -using Impostor.Api.Events; -using Impostor.Api.Events.Announcements; -using Impostor.Api.Innersloth; - -namespace Impostor.Plugins.Example.Handlers -{ - public class AnnouncementsListener : IEventListener - { - private const int Id = 50; - - [EventListener] - public void OnAnnouncementRequestEvent(IAnnouncementRequestEvent e) - { - if (e.Id == Id) - { - // Client already has announcement cached, lets just use that - e.Response.UseCached = true; - } - else - { - // Client is receiving this announcement for the first time, window will popup - e.Response.Announcement = new Announcement(Id, "Hello!"); - } - } - } -} diff --git a/src/Impostor.Server/Config/AnnouncementsServerConfig.cs b/src/Impostor.Server/Config/AnnouncementsServerConfig.cs deleted file mode 100644 index 43f8f8f..0000000 --- a/src/Impostor.Server/Config/AnnouncementsServerConfig.cs +++ /dev/null @@ -1,22 +0,0 @@ -using Impostor.Server.Utils; - -namespace Impostor.Server.Config -{ - internal class AnnouncementsServerConfig - { - public const string Section = "AnnouncementsServer"; - - private string? _resolvedListenIp; - - public bool Enabled { get; set; } = true; - - public string ListenIp { get; set; } = "0.0.0.0"; - - public ushort ListenPort { get; set; } = 22024; - - public string ResolveListenIp() - { - return _resolvedListenIp ??= IpUtils.ResolveIp(ListenIp); - } - } -} diff --git a/src/Impostor.Server/Config/AuthServerConfig.cs b/src/Impostor.Server/Config/AuthServerConfig.cs deleted file mode 100644 index 72c8efe..0000000 --- a/src/Impostor.Server/Config/AuthServerConfig.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System.IO; -using Impostor.Server.Utils; - -namespace Impostor.Server.Config -{ - internal class AuthServerConfig - { - public const string Section = "AuthServer"; - - private string? _resolvedListenIp; - - public bool Enabled { get; set; } = false; - - public string ListenIp { get; set; } = "0.0.0.0"; - - public ushort ListenPort { get; set; } = 22025; - - public string Certificate { get; set; } = Path.Combine("dtls", "certificate.pem"); - - public string PrivateKey { get; set; } = Path.Combine("dtls", "key.pem"); - - public string ResolveListenIp() - { - return _resolvedListenIp ??= IpUtils.ResolveIp(ListenIp); - } - } -} diff --git a/src/Impostor.Server/Events/Announcements/AnnouncementRequestEvent.cs b/src/Impostor.Server/Events/Announcements/AnnouncementRequestEvent.cs deleted file mode 100644 index 8f22d74..0000000 --- a/src/Impostor.Server/Events/Announcements/AnnouncementRequestEvent.cs +++ /dev/null @@ -1,27 +0,0 @@ -using Impostor.Api.Events.Announcements; -using Impostor.Api.Innersloth; - -namespace Impostor.Server.Events.Announcements -{ - public class AnnouncementRequestEvent : IAnnouncementRequestEvent - { - public AnnouncementRequestEvent(int id, Language language) - { - Id = id; - Language = language; - } - - public int Id { get; } - - public Language Language { get; } - - public IAnnouncementRequestEvent.IResponse Response { get; set; } = new AnnouncementResponse(); - - public class AnnouncementResponse : IAnnouncementRequestEvent.IResponse - { - public bool UseCached { get; set; } = false; - - public Announcement? Announcement { get; set; } = null; - } - } -} diff --git a/src/Impostor.Server/Net/AnnouncementsService.cs b/src/Impostor.Server/Net/AnnouncementsService.cs deleted file mode 100644 index 5b0b630..0000000 --- a/src/Impostor.Server/Net/AnnouncementsService.cs +++ /dev/null @@ -1,106 +0,0 @@ -using System; -using System.Net; -using System.Net.Sockets; -using System.Threading; -using System.Threading.Tasks; -using Impostor.Api.Events.Managers; -using Impostor.Api.Net.Messages; -using Impostor.Api.Net.Messages.Announcements; -using Impostor.Hazel; -using Impostor.Hazel.Udp; -using Impostor.Server.Config; -using Impostor.Server.Events.Announcements; -using Microsoft.Extensions.Hosting; -using Microsoft.Extensions.Logging; -using Microsoft.Extensions.ObjectPool; -using Microsoft.Extensions.Options; - -namespace Impostor.Server.Net -{ - internal class AnnouncementsService : IHostedService - { - private readonly ILogger _logger; - private readonly AnnouncementsServerConfig _config; - private readonly ObjectPool _readerPool; - private readonly IEventManager _eventManager; - private UdpConnectionListener? _connection; - - public AnnouncementsService(ILogger logger, IOptions config, ObjectPool readerPool, IEventManager eventManager) - { - _logger = logger; - _config = config.Value; - _readerPool = readerPool; - _eventManager = eventManager; - } - - public async Task StartAsync(CancellationToken cancellationToken) - { - var endpoint = new IPEndPoint(IPAddress.Parse(_config.ResolveListenIp()), _config.ListenPort); - - var mode = endpoint.AddressFamily switch - { - AddressFamily.InterNetwork => IPMode.IPv4, - AddressFamily.InterNetworkV6 => IPMode.IPv6, - _ => throw new InvalidOperationException(), - }; - - _connection = new UdpConnectionListener(endpoint, _readerPool, mode) - { - NewConnection = OnNewConnection, - }; - - await _connection.StartAsync(); - - _logger.LogInformation("Announcements server is listening on {Address}:{Port}", endpoint.Address, endpoint.Port); - } - - public async Task StopAsync(CancellationToken cancellationToken) - { - _logger.LogWarning("Announcements server is shutting down!"); - - if (_connection != null) - { - await _connection.DisposeAsync(); - } - } - - private async ValueTask OnNewConnection(NewConnectionEventArgs e) - { - MessageHello.Deserialize(e.HandshakeData, out var announcementVersion, out var id, out var language); - - _logger.LogDebug("Client requested announcement (version: {Version}, id: {Id}, language: {Language})", announcementVersion, id, language); - - if (announcementVersion != 2) - { - await e.Connection.Disconnect("Unsupported announcement version"); - return; - } - - var @event = new AnnouncementRequestEvent(id, language); - await _eventManager.CallAsync(@event); - - var response = @event.Response; - - if (response.UseCached) - { - using var writer = MessageWriter.Get(MessageType.Reliable); - Message00UseCache.Serialize(writer); - await e.Connection.SendAsync(writer); - - _logger.LogDebug("Sent UseCache response"); - } - - if (response.Announcement != null) - { - using var writer = MessageWriter.Get(MessageType.Reliable); - var announcement = response.Announcement.Value; - Message01Update.Serialize(writer, announcement.Id, announcement.Message); - await e.Connection.SendAsync(writer); - - _logger.LogDebug("Sent ({Id}) {Message}", announcement.Id, announcement.Message); - } - - await e.Connection.Disconnect(null); - } - } -} diff --git a/src/Impostor.Server/Net/AuthService.cs b/src/Impostor.Server/Net/AuthService.cs deleted file mode 100644 index c8a95b2..0000000 --- a/src/Impostor.Server/Net/AuthService.cs +++ /dev/null @@ -1,88 +0,0 @@ -using System; -using System.IO; -using System.Linq; -using System.Net; -using System.Net.Sockets; -using System.Security.Cryptography; -using System.Security.Cryptography.X509Certificates; -using System.Threading; -using System.Threading.Tasks; -using Impostor.Api.Events.Managers; -using Impostor.Api.Net.Messages; -using Impostor.Api.Net.Messages.Auth; -using Impostor.Hazel; -using Impostor.Hazel.Dtls; -using Impostor.Server.Config; -using Microsoft.Extensions.Hosting; -using Microsoft.Extensions.Logging; -using Microsoft.Extensions.ObjectPool; -using Microsoft.Extensions.Options; - -namespace Impostor.Server.Net -{ - internal class AuthService : IHostedService - { - private readonly ILogger _logger; - private readonly AuthServerConfig _config; - private readonly ObjectPool _readerPool; - private readonly IEventManager _eventManager; - private DtlsConnectionListener? _connection; - - public AuthService(ILogger logger, IOptions config, ObjectPool readerPool, IEventManager eventManager) - { - _logger = logger; - _config = config.Value; - _readerPool = readerPool; - _eventManager = eventManager; - } - - public async Task StartAsync(CancellationToken cancellationToken) - { - var endpoint = new IPEndPoint(IPAddress.Parse(_config.ResolveListenIp()), _config.ListenPort); - - var mode = endpoint.AddressFamily switch - { - AddressFamily.InterNetwork => IPMode.IPv4, - AddressFamily.InterNetworkV6 => IPMode.IPv6, - _ => throw new InvalidOperationException(), - }; - - var rsa = RSA.Create(); - rsa.ImportPkcs8PrivateKey(Convert.FromBase64String(string.Join(string.Empty, (await File.ReadAllLinesAsync(_config.PrivateKey, cancellationToken)).Where(x => !x.StartsWith("-----")))), out _); - var cert = new X509Certificate2(_config.Certificate).CopyWithPrivateKey(rsa); - - _connection = new DtlsConnectionListener(endpoint, _readerPool, mode); - _connection.SetCertificate(cert); - _connection.NewConnection = ConnectionOnNewConnection; - - await _connection.StartAsync(); - - _logger.LogInformation("Auth server is listening on {Address}:{Port}", endpoint.Address, endpoint.Port); - } - - public async Task StopAsync(CancellationToken cancellationToken) - { - _logger.LogWarning("Auth server is shutting down!"); - - if (_connection != null) - { - await _connection.DisposeAsync(); - } - } - - private ValueTask ConnectionOnNewConnection(NewConnectionEventArgs e) - { - MessageHandshake.Deserialize(e.HandshakeData, out var clientVersion, out var platform, out var clientId); - - _logger.LogTrace("New authentication request: {clientVersion}, {platform}, {clientId}", clientVersion, platform, clientId); - - using var writer = MessageWriter.Get(MessageType.Reliable); - - writer.StartMessage(1); - Message01Complete.Serialize(writer, (uint)RandomNumberGenerator.GetInt32(int.MinValue, int.MaxValue)); - writer.EndMessage(); - - return e.Connection.SendAsync(writer); - } - } -} diff --git a/src/Impostor.Server/Program.cs b/src/Impostor.Server/Program.cs index 46aaf2b..96cca63 100644 --- a/src/Impostor.Server/Program.cs +++ b/src/Impostor.Server/Program.cs @@ -116,14 +116,6 @@ namespace Impostor.Server .GetSection(ServerRedirectorConfig.Section) .Get() ?? new ServerRedirectorConfig(); - var announcementsServer = host.Configuration - .GetSection(AnnouncementsServerConfig.Section) - .Get() ?? new AnnouncementsServerConfig(); - - var authServer = host.Configuration - .GetSection(AuthServerConfig.Section) - .Get() ?? new AuthServerConfig(); - services.AddSingleton(); services.AddSingleton(p => p.GetRequiredService()); services.AddSingleton(); @@ -131,8 +123,6 @@ namespace Impostor.Server services.Configure(host.Configuration.GetSection(DebugConfig.Section)); services.Configure(host.Configuration.GetSection(AntiCheatConfig.Section)); services.Configure(host.Configuration.GetSection(ServerConfig.Section)); - services.Configure(host.Configuration.GetSection(AnnouncementsServerConfig.Section)); - services.Configure(host.Configuration.GetSection(AuthServerConfig.Section)); services.Configure(host.Configuration.GetSection(ServerRedirectorConfig.Section)); if (redirector.Enabled) @@ -218,16 +208,6 @@ namespace Impostor.Server services.AddSingleton(); services.AddSingleton(); services.AddHostedService(); - - if (announcementsServer.Enabled) - { - services.AddHostedService(); - } - - if (authServer.Enabled) - { - services.AddHostedService(); - } }) .UseSerilog() .UseConsoleLifetime() diff --git a/src/Impostor.Server/config-full.json b/src/Impostor.Server/config-full.json index edf7716..8334aae 100644 --- a/src/Impostor.Server/config-full.json +++ b/src/Impostor.Server/config-full.json @@ -5,11 +5,6 @@ "ListenIp": "0.0.0.0", "ListenPort": 22023 }, - "AnnouncementsServer": { - "Enabled": true, - "ListenIp": "0.0.0.0", - "ListenPort": 22024 - }, "AntiCheat": { "Enabled": true, "BanIpFromGame": true