From 9258469a1dacb3440f40df2ce8ed8cf647e09f58 Mon Sep 17 00:00:00 2001 From: Henry Asbridge Date: Sat, 7 Jun 2025 15:01:29 +0100 Subject: [PATCH] Implement refresh autodiscover (#1091) * Implement refresh autodiscover * Make record fields required * Implement checking for the Patchwork user agent (#1090) * Implement checking for the Patchwork user agent, move logout into standalone method * Quick fixes (awesome name) * 403 user at login instead of logging out at /announce * Move configuration and revert logout changes * Rework parsing to check against GameVersion enum and game token GameVersion * Fix logic error oopsie * Fix Zaprit suggestions * Simplify patchwork game version test * Test patchwork user agent with regex instead * Fix Qodana warnings * Fix remaining Qodana warnings * Implement refresh autodiscover * Make record fields required * Update ProjectLighthouse.Servers.Website/Controllers/AutoDiscoverController.cs Co-authored-by: Josh --------- Co-authored-by: FeTetra <166051662+FeTetra@users.noreply.github.com> Co-authored-by: Josh --- .../Controllers/AutoDiscoverController.cs | 26 +++++++++++++++++++ .../Types/AutoDiscoverResponse.cs | 19 ++++++++++++++ .../CustomizationConfiguration.cs | 1 + .../Configuration/ServerConfiguration.cs | 3 ++- 4 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 ProjectLighthouse.Servers.Website/Controllers/AutoDiscoverController.cs create mode 100644 ProjectLighthouse.Servers.Website/Types/AutoDiscoverResponse.cs diff --git a/ProjectLighthouse.Servers.Website/Controllers/AutoDiscoverController.cs b/ProjectLighthouse.Servers.Website/Controllers/AutoDiscoverController.cs new file mode 100644 index 00000000..fab168c4 --- /dev/null +++ b/ProjectLighthouse.Servers.Website/Controllers/AutoDiscoverController.cs @@ -0,0 +1,26 @@ +using LBPUnion.ProjectLighthouse.Configuration; +using LBPUnion.ProjectLighthouse.Servers.Website.Types; +using Microsoft.AspNetCore.Mvc; + +namespace LBPUnion.ProjectLighthouse.Servers.Website.Controllers; + +[ApiController] +public class AutoDiscoverController: ControllerBase +{ + [ResponseCache(Duration = 86400)] + [HttpGet("autodiscover")] + [Produces("application/json")] + public IActionResult AutoDiscover() + { + AutoDiscoverResponse resp = new() + { + Version = 3, + Url = ServerConfiguration.Instance.GameApiExternalUrl, + ServerBrand = ServerConfiguration.Instance.Customization.ServerName, + UsesCustomDigestKey = false, + BannerImageUrl = null, + ServerDescription = ServerConfiguration.Instance.Customization.ServerDescription, + }; + return this.Ok(resp); + } +} \ No newline at end of file diff --git a/ProjectLighthouse.Servers.Website/Types/AutoDiscoverResponse.cs b/ProjectLighthouse.Servers.Website/Types/AutoDiscoverResponse.cs new file mode 100644 index 00000000..e309ed63 --- /dev/null +++ b/ProjectLighthouse.Servers.Website/Types/AutoDiscoverResponse.cs @@ -0,0 +1,19 @@ +using Newtonsoft.Json; + +namespace LBPUnion.ProjectLighthouse.Servers.Website.Types; + +public record AutoDiscoverResponse +{ + [JsonProperty("version")] + public required uint Version { get; set; } + [JsonProperty("serverBrand")] + public required string ServerBrand { get; set; } + [JsonProperty("serverDescription")] + public required string ServerDescription { get; set; } + [JsonProperty("url")] + public required string Url { get; set; } + [JsonProperty("bannerImageUrl")] + public string? BannerImageUrl { get; set; } + [JsonProperty("usesCustomDigestKey")] + public required bool UsesCustomDigestKey { get; set; } +} diff --git a/ProjectLighthouse/Configuration/ConfigurationCategories/CustomizationConfiguration.cs b/ProjectLighthouse/Configuration/ConfigurationCategories/CustomizationConfiguration.cs index ee6b17e4..3d026f51 100644 --- a/ProjectLighthouse/Configuration/ConfigurationCategories/CustomizationConfiguration.cs +++ b/ProjectLighthouse/Configuration/ConfigurationCategories/CustomizationConfiguration.cs @@ -4,4 +4,5 @@ public class CustomizationConfiguration { public string ServerName { get; set; } = "Project Lighthouse"; public string EnvironmentName { get; set; } = "project-lighthouse"; + public string ServerDescription { get; set; } = "A Project Lighthouse Server"; } \ No newline at end of file diff --git a/ProjectLighthouse/Configuration/ServerConfiguration.cs b/ProjectLighthouse/Configuration/ServerConfiguration.cs index d9c66dee..d145495c 100644 --- a/ProjectLighthouse/Configuration/ServerConfiguration.cs +++ b/ProjectLighthouse/Configuration/ServerConfiguration.cs @@ -11,7 +11,7 @@ public class ServerConfiguration : ConfigurationBase // This is so Lighthouse can properly identify outdated configurations and update them with newer settings accordingly. // If you are modifying anything here, this value MUST be incremented. // Thanks for listening~ - public override int ConfigVersion { get; set; } = 30; + public override int ConfigVersion { get; set; } = 31; public override string ConfigName { get; set; } = "lighthouse.yml"; public string WebsiteListenUrl { get; set; } = "http://localhost:10060"; @@ -31,6 +31,7 @@ public class ServerConfiguration : ConfigurationBase public bool CheckForUnsafeFiles { get; set; } = true; public bool LogChatFiltering { get; set; } = false; public bool LogChatMessages { get; set; } = false; + public AuthenticationConfiguration Authentication { get; set; } = new(); public CaptchaConfiguration Captcha { get; set; } = new(); public DigestKeyConfiguration DigestKey { get; set; } = new();