From fcc1f563e59d0803a4c477899f1d46ea4797afe9 Mon Sep 17 00:00:00 2001 From: XShine555 Date: Wed, 18 Mar 2026 18:08:53 +0100 Subject: [PATCH] Changes --- .../Configuration/StorageConfiguration.cs | 16 ++++++++++- .../Identity/KeycloakConfiguration.cs | 28 ++++++++++++++++++- .../Identity/KeycloakDependencyInjection.cs | 18 ++++++++++++ .../Storage/StorageDependencyInjection.cs | 18 +++++++++++- 4 files changed, 77 insertions(+), 3 deletions(-) create mode 100644 Infrastructure/Identity/KeycloakDependencyInjection.cs diff --git a/Application/Configuration/StorageConfiguration.cs b/Application/Configuration/StorageConfiguration.cs index 2604ee6..0940fc7 100644 --- a/Application/Configuration/StorageConfiguration.cs +++ b/Application/Configuration/StorageConfiguration.cs @@ -6,7 +6,17 @@ namespace Musify.Application.Configuration { public const string SectionName = "Storage"; - public string BucketName { get; set; } = "musify-S3"; + public string ServiceUrl { get; set; } = string.Empty; + + public string AccessKey { get; set; } = string.Empty; + + public string SecretAccessKey { get; set; } = string.Empty; + + public string BucketName { get; set; } = string.Empty; + + public bool ForcePathStyle { get; set; } + + public bool UseHttp { get; set; } public StorageRoutes Routes { get; set; } = new StorageRoutes(); @@ -24,6 +34,10 @@ namespace Musify.Application.Configuration { EnsureValue(configuration.BucketName, nameof(BucketName)); EnsureValue(configuration.Routes.Uploads, $"{SectionName}:Route:Upload"); + + EnsureValue(configuration.ServiceUrl, nameof(ServiceUrl)); + EnsureValue(configuration.AccessKey, nameof(AccessKey)); + EnsureValue(configuration.SecretAccessKey, nameof(SecretAccessKey)); } static void EnsureValue(string value, string name) diff --git a/Infrastructure/Identity/KeycloakConfiguration.cs b/Infrastructure/Identity/KeycloakConfiguration.cs index 385fe20..9b1f146 100644 --- a/Infrastructure/Identity/KeycloakConfiguration.cs +++ b/Infrastructure/Identity/KeycloakConfiguration.cs @@ -1,4 +1,6 @@ -namespace Musify.Infrastructure.Identity +using Microsoft.Extensions.Configuration; + +namespace Musify.Infrastructure.Identity { public class KeycloakConfiguration { @@ -11,5 +13,29 @@ public string Username { get; set; } = string.Empty; public string Password { get; set; } = string.Empty; + + public static KeycloakConfiguration Load(IConfiguration configuration) + { + var keycloakConfiguration = configuration.GetSection(SectionName).Get() + ?? throw new InvalidOperationException($"{SectionName} configuration section not found."); + + Validate(keycloakConfiguration); + + return keycloakConfiguration; + } + + static void Validate(KeycloakConfiguration configuration) + { + EnsureValue(configuration.BaseUrl, nameof(configuration.BaseUrl)); + EnsureValue(configuration.Realm, nameof(configuration.Realm)); + EnsureValue(configuration.Username, nameof(configuration.Username)); + EnsureValue(configuration.Password, nameof(configuration.Password)); + } + + static void EnsureValue(string value, string name) + { + if (string.IsNullOrEmpty(value)) + throw new InvalidOperationException($"{name} configuration value not found."); + } } } \ No newline at end of file diff --git a/Infrastructure/Identity/KeycloakDependencyInjection.cs b/Infrastructure/Identity/KeycloakDependencyInjection.cs new file mode 100644 index 0000000..ab2bacf --- /dev/null +++ b/Infrastructure/Identity/KeycloakDependencyInjection.cs @@ -0,0 +1,18 @@ +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Musify.Application.Contracts.Infrastructure; + +namespace Musify.Infrastructure.Identity +{ + public static class KeycloakDependencyInjection + { + public static void AddKeycloakAuthentication(this IServiceCollection serviceDescriptors, IConfiguration configuration) + { + var keycloakConfiguration = KeycloakConfiguration.Load(configuration); + + serviceDescriptors.AddSingleton(keycloakConfiguration); + + serviceDescriptors.AddScoped(); + } + } +} \ No newline at end of file diff --git a/Infrastructure/Storage/StorageDependencyInjection.cs b/Infrastructure/Storage/StorageDependencyInjection.cs index 54c58a2..0c13dd2 100644 --- a/Infrastructure/Storage/StorageDependencyInjection.cs +++ b/Infrastructure/Storage/StorageDependencyInjection.cs @@ -1,4 +1,6 @@ -using Microsoft.Extensions.DependencyInjection; +using Amazon.S3; +using Microsoft.Extensions.DependencyInjection; +using Musify.Application.Configuration; using Musify.Application.Contracts.Infrastructure; namespace Musify.Infrastructure.Storage @@ -7,6 +9,20 @@ namespace Musify.Infrastructure.Storage { public static void AddStorageHandler(this IServiceCollection serviceDescriptors) { + serviceDescriptors.AddScoped(serviceProvider => + { + var configuration = serviceProvider.GetRequiredService(); + + var s3Configuration = new AmazonS3Config + { + ServiceURL = configuration.ServiceUrl, + ForcePathStyle = configuration.ForcePathStyle, + UseHttp = configuration.UseHttp, + }; + + return new AmazonS3Client(configuration.AccessKey, configuration.SecretAccessKey, s3Configuration); + } ); + serviceDescriptors.AddScoped(); } }