An unhandled exception occurs when running a LINQ query that includes DateTime.UtcNow - TimeSpan as a condition in Where(). EF Core cannot translate this expression into SQL.
* Feature: Add ResolvedExternalIPAddress to API and Master Communication
This commit introduces the `ResolvedExternalIPAddress` property to enhance IP address reporting.
1. **Server API (`WebfrontCore/Controllers/API/Server.cs`):**
The `ResolvedExternalIPAddress` property has been added to the JSON
responses for the `/api/server` endpoints. This property is nullable
and contains the IPv4 string value of the manager's external IP address
if the server's resolved IP endpoint is an internal address. Otherwise,
it is null.
2. **Master Server Communication (`MasterCommunication.cs` and `ApiServer.cs`):**
- The `ApiServer` DTO (in `Application/API/Master/ApiServer.cs`) now
includes the `ResolvedExternalIPAddress` property (serialized as
`resolved_external_ip_address`).
- The `UploadStatus` method in `Application/Misc/MasterCommunication.cs`
now populates this property for each server being reported to the
master server, using the same logic (external IP if server's own
resolved IP is internal).
This provides more comprehensive IP address information both through the
web API and to the master server.
---------
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
* Update tempban command to use minutes instead of hours
The duration calculation for tempbans now uses minutes rather than hours for greater precision. This change ensures better alignment with user expectations and configurations in smaller timeframes.
* Update regex patterns to enforce stricter input validation
Adjusted regex in `ParseTimespan` and `TempBanCommand` to ensure input starts with 1-5 numeric characters, improving validation. This prevents malformed user inputs and enhances overall command reliability.
* \w includes digits. Who knew.
* Refactor PromptClientInput to accept string array for prompt
Updated the `PromptClientInput` method to accept a string array instead of a single string. This change ensures that multiple prompts can be handled, improving input flexibility and client communication. Additionally, modified related method calls to maintain consistency with the new input type.
* Refactor PromptClientInput to support parsed result and errors
Updated PromptClientInput to handle parsed input results and return error messages instead of raw strings. Introduced ParsedInputResult<TResult> class to encapsulate parsing results and errors, enhancing client validation and feedback mechanism.
A using statement was added to ensure proper disposal of the CancellationTokenSource. Additional error handling was also included to catch an OperationCanceledException and prevent it from causing unintended side effects. The client response is now properly disposed in the finally block.
A new utility method named 'PromptClientInput' has been added in the Utilities.cs file. This method accepts client, prompt, and validator as inputs and allows taking action based on client responses. Included subscription and unsubscription to the 'ClientMessaged' game event, and handling of cancellation token to control the execution flow.
* Update codebase to target .NET 8.0 and improve JSON serialization
This commit switches our target framework from .NET 6.0 to .NET 8.0 and replaces Newtonsoft.Json with System.Text.Json for serialization. The JsonConverter classes have been updated to support the new JSON model and some enhancements were applied to the codebase such as fixing a command property and updating various package references.
* Align with Develop
* Update SharedLibraryCore package version
The version of the SharedLibraryCore package reference has been updated across multiple projects from '2024.2.4.85' to '2024.2.5.9'. Meanwhile, version within SharedLibraryCore.csproj has been changed from '2024.02.04.085' to '2024.01.01.1'. Changes also include removal of .NET 8 requirement notice and reenabling of status upload to master communicator.
* Update properties in IRConParser and IRConParserConfiguration to be settable
The properties in the `IRConParser` and `IRConParserConfiguration` interfaces were updated to include setters. Previously, the properties in these interfaces were read-only. This change allows for the modifications and extensions of properties defined, thereby bolstering flexibility for the handling of games and parsers.
* Replace RestEase with Refit in API usage
Refit has been implemented as a replacement for RestEase in all API calls. As such, all related code, parameters and imports have been adjusted to function with Refit. Logic has also been added to handle certain Refit-specific behaviours. Occurrences of the RestEase package have been removed from the project.
* Enable auto-redirect in HttpClient
The HttpClient instance used in Application/Main.cs has been modified to automatically follow redirect responses. This was accomplished by adding "AllowAutoRedirect = true" to the HttpClientHandler used when creating the HttpClient.
---------
Co-authored-by: Amos <amos2580@hotmail.co.uk>