diff options
| author | ivar <i@oiee.no> | 2025-10-19 23:41:23 +0200 |
|---|---|---|
| committer | ivar <i@oiee.no> | 2025-10-19 23:41:23 +0200 |
| commit | 3f4c0720e1e3421431e7baa20882a4a4512a7fab (patch) | |
| tree | 734ca81d7d0841d8863e3f523ebba14c282dc681 /src/Utilities/ServicesCollectionExtensions.cs | |
| download | fagprove-master.tar.xz fagprove-master.zip | |
Diffstat (limited to 'src/Utilities/ServicesCollectionExtensions.cs')
| -rw-r--r-- | src/Utilities/ServicesCollectionExtensions.cs | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/src/Utilities/ServicesCollectionExtensions.cs b/src/Utilities/ServicesCollectionExtensions.cs new file mode 100644 index 0000000..0e3b05e --- /dev/null +++ b/src/Utilities/ServicesCollectionExtensions.cs @@ -0,0 +1,62 @@ +using System; +using System.Security.Claims; +using IOL.Fagprove.Data; +using IOL.Fagprove.Data.Enums; +using IOL.Fagprove.Services; +using IOL.Fagprove.Services.Interfaces; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.DataProtection; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using StackExchange.Redis; + +namespace IOL.Fagprove.Utilities +{ + public static class ServicesCollectionExtensions + { + public static void AddServices(this IServiceCollection services) + { + services.AddScoped<IUserService, UserService>(); + services.AddScoped<IAppReservationService, AppReservationService>(); + } + + public static void AddAppDbContext(this IServiceCollection services, IConfiguration config) + { + services.AddDbContext<AppDbContext>(options => + { + options.UseMySql(config.GetConnectionString(), + builder => builder.EnableRetryOnFailure(5, TimeSpan.FromSeconds(60), null)); +#if DEBUG + options.EnableSensitiveDataLogging(); +#endif + }); + } + + public static void AddDataProtectionWithRedis(this IServiceCollection services, IConfiguration config) + { + var accessKey = config.GetValue<string>("REDIS_KEY"); + if (!accessKey.IsPresent()) return; + var redis = ConnectionMultiplexer.Connect( + $"aredis.cache.net:6380,password={accessKey},ssl=True,abortConnect=False"); + services.AddDataProtection().PersistKeysToStackExchangeRedis(redis, "IOL.Fagprove.DataProtectionKeys"); + } + + public static void AddInternalUserPolicies(this IServiceCollection services) + { + services.Configure<AuthorizationOptions>(options => + { + options.AddPolicy(UserRole.Administrator.ToString(), policy => + { + policy.RequireAuthenticatedUser(); + policy.RequireClaim(ClaimTypes.Role, UserRole.Administrator.ToString()); + }); + options.AddPolicy(UserRole.Basic.ToString(), policy => + { + policy.RequireAuthenticatedUser(); + policy.RequireClaim(ClaimTypes.Role, new string[] {UserRole.Basic.ToString()}); + }); + }); + } + } +}
\ No newline at end of file |
