# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## Upcoming - 0000-00-00 ###### Diffs - [AMWD.Common](https://git.am-wd.de/AM.WD/common/compare/v2.0.1...HEAD) - [AMWD.Common.AspNetCore](https://git.am-wd.de/AM.WD/common/compare/asp/v3.0.0...HEAD) - [AMWD.Common.EntityFrameworkCore](https://git.am-wd.de/AM.WD/common/compare/efc/v3.0.0...HEAD) - [AMWD.Common.MessagePack](https://git.am-wd.de/AM.WD/common/compare/main...HEAD) - [AMWD.Common.Test](https://git.am-wd.de/AM.WD/common/compare/test/v2.1.1...HEAD) ### Added - `.AddRange()` for collections - `.AddIfNotNull()` for collections - `DomainComparer` ordering alphabetically from TLD to sub-domain - `IPAddressComparer` able to compare IPv4 and IPv6 - `VersionStringComparer` to compare version strings (SemVer) - Support for .NET 10.0 LTS ### Changed - Solution restructured to use multiple test projects - Optimized for C# 14 - `IPNetwork` is used from (as `Microsoft.AspNetCore.HttpOverrides` is tagged as "out of support"): - .NET Standard 2.0: `Microsoft.AspNetCore.HttpOverrides.IPNetwork` - .NET 8.0 and later: `System.Net.IPNetwork` - Moved `MessagePack` formatter extensions to own package `AMWD.Common.MessagePack` - `GetAlignedInterval()` (without Local/Utc) is now public accessible - Using native `Convert.FromHexString` on .NET 8.0 and later on `HexToBytes` extension ### Removed - `GetDisplayName` for enum values was removed - Support for .NET 6.0 LTS ## asp/v3.0.0, efc/v3.0.0 - 2023-12-28 ###### Diffs - [AMWD.Common.AspNetCore](https://git.am-wd.de/AM.WD/common/compare/asp/v2.2.0...asp/v3.0.0) - [AMWD.Common.EntityFrameworkCore](https://git.am-wd.de/AM.WD/common/compare/efc/v2.0.1...efc/v3.0.0) ### Added - Support for .NET 8.0 LTS ### Changed - Renamed all private members to start with an underscore - Split "Add `DateOnly` and `TimeOnly` converters" into two extension methods ## asp/v2.2.0 - 2023-12-05 ###### Diffs - [AMWD.Common.AspNetCore](https://git.am-wd.de/AM.WD/common/compare/asp/v2.1.0...asp/v2.2.0) ### Changed - Using `AddHostedService<>()` with "implementation factory" for `AddSingletonHostedService<>()` to resove singleton instance - `GetRemoteIpAddress()` converts a mixed IPv4 address on IPv6 (e.g. `::ffff:127.0.0.1`) to a clean IPv4 address (e.g. `127.0.0.1`) ### Removed - Removed `BackgroundServiceStarter` ## v2.0.1, asp/v2.1.0, efc/v2.0.1, test/v2.1.1 - 2023-11-23 ###### Diffs - [AMWD.Common](https://git.am-wd.de/AM.WD/common/compare/v2.0.0...v2.0.1) - [AMWD.Common.AspNetCore](https://git.am-wd.de/AM.WD/common/compare/asp/v2.0.0...asp/v2.1.0) - [AMWD.Common.EntityFrameworkCore](https://git.am-wd.de/AM.WD/common/compare/efc/v2.0.0...efc/v2.0.1) - [AMWD.Common.Test](https://git.am-wd.de/AM.WD/common/compare/test/v2.1.0...test/v2.1.1) ### Added - Added `ConfigureAwait(false)` to async calls where appropriate - Added localhost and private IPv6 subnet to `UseProxyHosting()` ### Changed - Changed order of header evaluation for remote IP address parsing: `Cf-Connecting-Ip`, `X-Real-IP`, `X-Forwarded-For` ### Fixed - `GetRemoteIpAddress()` is able to get address when multiple proxies are used ## test/v2.1.0 - 2023-10-13 ###### Diffs - [AMWD.Common.Test](https://git.am-wd.de/AM.WD/common/compare/test/v2.0.0...test/v2.1.0) ### Added - Added `SnapshotAssert` for better UnitTesting ### Changed - Moved `AMWD.Common.Moq` to `AMWD.Common.Test` ## [v2.0.0](https://git.am-wd.de/AM.WD/common/compare/v1.13.0...v2.0.0) - 2023-08-08 ### Added - `CommandLineParser` as alternative to the `ConfigurationBuilder.AddCommandLine` from Microsoft ### Removed - Support for .NET Core 3.1 ## [v1.13.0](https://git.am-wd.de/AM.WD/common/compare/v1.12.0...v1.13.0) - 2023-06-27 ### Added - `ProtectedPathMiddleware` to secure even static file paths ### Changed - Moved `BasicAuthentication`* into sub-namespace `Security` ## [v1.12.0](https://git.am-wd.de/AM.WD/common/compare/v1.11.1...v1.12.0) - 2023-06-01 ### Changed - Renamed `IPBlacklistAttribute` to `IPBlockListAttribute` - Renamed `IPWhitelistAttribute` to `IPAllowListAttribute` - `HttpContextExtensions` - `GetAntiforgeryToken()` now returns the header name also - `GetRemoteIpAddress()` checks following additional headers by default: - `X-Forwarded-For` - `X-Real-IP` - `CF-Connecting-IP` ## [v1.11.1](https://git.am-wd.de/AM.WD/common/compare/v1.11.0...v1.11.1) - 2023-05-11 ### Fixed - `JsonExtensions.GetValue()` now is case insensitive and detects the correct property name of a `JObject`. ## [v1.11.0](https://git.am-wd.de/AM.WD/common/compare/v1.10.0...v1.11.0) - 2023-03-29 ### Added - `directory.build.props` and `directory.build.targets` - `GetDisplayName()` extension for enums (`DisplayAttribute(Name = "")`) - `FileLogger` as additional `ILogger` implementation (from `Microsoft.Extensions.Logging`) - `StartTransaction(Async)` as `DbContext` extensions; prevents exceptions on `InMemory` database ## [v1.10.0](https://git.am-wd.de/AM.WD/common/compare/v1.9.0...v1.10.0) - 2022-09-18 ### Fixed - Over-/Underflow behaviour for IPAddress de-/increment - Await behaviour for AsyncQueue (not required to marshal back to the original captured context) ### Removed - Removing dependency from DNS package It's now used via reflection when possible (otherwise exeption) ## [v1.9.0](https://git.am-wd.de/AM.WD/common/compare/v1.8.1...v1.9.0) - 2022-08-14 ### Added - `AsyncQueue` to `AMWD.Common.Utilities` with namespace `System.Collections.Generic` ## [v1.8.1](https://git.am-wd.de/AM.WD/common/compare/v1.8.0...v1.8.1) - 2022-08-07 ### Fixed - UnitTests - BasicAuthentication modules now all use the cancellation token ## [v1.8.0](https://git.am-wd.de/AM.WD/common/compare/v1.7.0...v1.8.0) - 2022-08-07 ### Added - Converters for `Newtonsoft.Json` - `ByteArrayHexConverter` to get an byte array as hex string instead of Base64 - `IPAddressConverter` to make `System.Net.IPAdress`es (and list forms) serializable - `IPNetworkConverter` to make `Microsoft.AspNetCore.HttpOverrides.IPNetwork` (and list forms) serializable - Formatters for `MessagePack` - `IPAddressFormatter` to serialize an `System.Net.IPAddress` - `IPAddressArrayFormatter` to serialize arrays of `System.Net.IPAddress`es - `IPAddressListFormatter` to serialize lists of `System.Net.IPAddress`es - `IPNetworkFormatter` to serialize an `Microsoft.AspNetCore.HttpOverrides.IPNetwork` - `IPNetworkArrayFormatter` to serialize arrays of `Microsoft.AspNetCore.HttpOverrides.IPNetwork` - `IPNetworkListFormatter` to serialize lists of `Microsoft.AspNetCore.HttpOverrides.IPNetwork` ### Changed - `IBasicAuthenticationValidator` has the possibillity to cancel the operation ## [v1.7.0](https://git.am-wd.de/AM.WD/common/compare/v1.6.1...v1.7.0) - 2022-07-24 ### Added - UnitTests for `AspNetCore` as far as testable without massive work - `IPAddress.Increment` and `IPAddress.Decrement` extensions - `NetworkHelper.ParseNetwork` and `NetworkHelper.TryParseNetwork` to parse a CIDR (e.g. 192.168.178.0/24) network - `IPNetwork.ExpandNetwork` to create a list with all contained `IPAddress`es ### Changed - `BasicAuthenticationAttribute` now respects the `IBasicAuthenticationValidator.Realm` when the own `Realm` property is not set - CI scripts - Updated all package references to latest builds (as on 2022-07-23) ### Removed - `IBasicAuthenticationValidator.Realm` is now a read-only property (removed public set) ## [v1.6.1](https://git.am-wd.de/AM.WD/common/compare/v1.6.0...v1.6.1) - 2022-06-23 ### Added - `BasicAuthenticationAttribute` sets the `HttpContext.User` property when successfully validated ### Changed - Moved `BasicAuthenticationAttribute` from `ActionFilter` to `IAsyncAuthorizationFilter` ### Fixed - `TimeSpan.ToShortString()` is now capable of negative values ## [v1.6.0](https://git.am-wd.de/AM.WD/common/compare/v1.5.3...v1.6.0) - 2022-06-22 ### Changed - All attributes now reside in `Microsoft.AspNetCore.Mvc.Filters` namespace ### Fixed - Fixed `BasicAuthenticationAttribute` ## [v1.5.3](https://git.am-wd.de/AM.WD/common/compare/v1.5.2...v1.5.3) - 2022-06-22 ### Changed - `BasicAuthenticationAttribute` is now in namespace `AMWD.Common.AspNetCore.Attributes` ### Fixed - Fixed problem with `ForbidResult` without having an authentication schema defined Now only HTTP Status 403 (Forbid) is returned ## [v1.5.2](https://git.am-wd.de/AM.WD/common/compare/v1.5.1...v1.5.2) - 2022-06-20 ### Removed - Removed support for .NET 5.0 due to EOL (2022-05-10, see [.NET and .NET Core release lifecycle](https://dotnet.microsoft.com/en-us/platform/support/policy/dotnet-core#lifecycle)) ## [v1.5.1](https://git.am-wd.de/AM.WD/common/compare/v1.5.0...v1.5.1) - 2022-06-20 ### Changed - Changed from `Assembly.GetExecutingAssmebly().Location` to `AppContext.BaseDirectory` due to single-file applications ## [v1.5.0](https://git.am-wd.de/AM.WD/common/compare/v1.4.3...v1.5.0) - 2022-06-15 ### Added - `TcpClientMoq` to test communication via a `TcpClient` - EntityFramework Core Converters for new `DateOnly` and `TimeOnly` datatypes when using SQL Server on .NET 6.0 (Bug on Microsoft's EntityFramework) - `HttpContext.IsLocalRequest()` to determine whether the request was from local or remote - `IPWhitelistAttribute` and `IPBlacklistAttribute` to allow/restrict access on specific controllers/actions ## [v1.4.3](https://git.am-wd.de/AM.WD/common/compare/v1.4.2...v1.4.3) - 2022-05-12 ### Fixed - Fixed detection of SQLServer for EFCore extensions ## [v1.4.2](https://git.am-wd.de/AM.WD/common/compare/v1.4.1...v1.4.2) - 2022-05-06 ### Added - New extension for `StringBuilder` `AppendLine(value: string, newLine: string)` to add a line with a explicit defined new line character ## [v1.4.1](https://git.am-wd.de/AM.WD/common/compare/v1.4.0...v1.4.1) - 2022-03-23 ### Added - `IntegrityHashTagHelper` can be used with `asp-integrity="true|false"` and `asp-integrity-strength="256|384|512"` - `WaitAvailableAsync` can be used to wait for a database connection to be available ### Changed - `ApplyMigrationsAsync` uses `WaitAvailableAsync` internally ### Fixed - `InMemory` database provider does not fail on "migration" (none possible) ## [v1.4.0](https://git.am-wd.de/AM.WD/common/compare/v1.3.0...v1.4.0) - 2022-02-11 ### Added - New NuGet package `AMWD.Common.Moq` with `HttpRequestHandlerMoq` class - Supporting `InMemory` Database as provider ### Changed - Enhanced Stopwatch/Timer delta due to unsharp resolution using timers - `IBasicAuthenticationValidator` now also provides the realm as property (resolving a string on DI is bad style) ## [v1.3.0](https://git.am-wd.de/AM.WD/common/compare/v1.2.0...v1.3.0) - 2021-12-21 ### Added - `BasicAuthenticationHandler` to use instead of other handlers (instead of e.g. CookieAuthentication) - `BasicAuthenticationAttribute` to restrict single actions ### Changed - Simplified package references on AspNetCore - Changed NuGet package `DnsClient` to `DNS` ## [v1.2.0](https://git.am-wd.de/AM.WD/common/compare/v1.1.0...v1.2.0) - 2021-12-19 ### Added - CHANGELOG - `HtmlHelper.IsDarkColor` to classify a color as dark or light one (by luminance) - `ReadLine` and `ReadLineAsync` as `StreamExtensions` ### Changed - Unit-Tests enhanced - Unit-Tests excluded from code coverage calcualtion - Updated NuGet package `NetRevisionTask` ## [v1.1.0](https://git.am-wd.de/AM.WD/common/compare/v1.0.2...v1.1.0) - 2021-11-22 ### Added - `AddSingletonHostedService` using an interface and an implementation type - Unit-Tests for `AMWD.Common` (ca. 60% Branch-Coverage, target: above 90%) - `IsValidEmailAddress` check whether a string is a valid email address, optionally with DNS check (MX record) - AES and 3DES De-/Encrypt enhanced for string to string (plain/base64) ### Changed - CI Build-Process splitted into: build, test, deploy - `GetAlignedInterval` splitted into `GetAlignedIntervalUtc` and `GetAlignedIntervalLocal` to respect daylight saving times - `HexToBytes` checks for valid characters by using RegEx ### Fixed - `Sha256` as string extension ## [v1.0.2](https://git.am-wd.de/AM.WD/common/compare/v1.0.1...v1.0.2) - 2021-11-09 ### Added - .NET 6.0 (LTS) compatibility - Versioning in README ### Changed - CI Build modified - C# Update from 9.0 to 10.0 ### Fixed - Comments updated / enhanced ## [v1.0.1](https://git.am-wd.de/AM.WD/common/compare/v1.0.0...v1.0.1) - 2021-10-25 ### Added - `ParseDecimal` added to prevent problems with comma/dot as decimal separator ### Changed - NuGet packages reside on `artifacts/` ### Fixed - MySQL library is now working correctly via reflection ## [v1.0.0](https://git.am-wd.de/AM.WD/common/compare/v0.0.2...v1.0.0) - 2021-10-24 ### Added - Lizenz - Readme ### Changed - `CustomFloatingPointModelBinder*` renamed to `InvariantFloatingPointModelBinder*` - `ResolveHost` returns a list of resolved ip addresses - `ResolveInterface` returns a list of resolved ip addresses ### Removed - `IPAddress fallback` parameter removed from `ResolveHost` - `IPAddress fallback` parameter removed from `ResolveInterface` - `ResolveInterface` does not use DNS to resolve the input (kind a weired behaviour) ## [v0.0.2](https://git.am-wd.de/AM.WD/common/compare/v0.0.1...v0.0.2) - 2021-10-23 ### Added - NuGet packages have an icon ### Changed - Additional information for NuGet packages ## [v0.0.1](https://git.am-wd.de/AM.WD/common/commits/v0.0.1) - 2021-10-23 Initial release