summaryrefslogtreecommitdiffstats
path: root/src/Utilities/ServicesCollectionExtensions.cs
diff options
context:
space:
mode:
authorivar <i@oiee.no>2025-10-19 23:41:23 +0200
committerivar <i@oiee.no>2025-10-19 23:41:23 +0200
commit3f4c0720e1e3421431e7baa20882a4a4512a7fab (patch)
tree734ca81d7d0841d8863e3f523ebba14c282dc681 /src/Utilities/ServicesCollectionExtensions.cs
downloadfagprove-master.tar.xz
fagprove-master.zip
InitialHEADmaster
Diffstat (limited to 'src/Utilities/ServicesCollectionExtensions.cs')
-rw-r--r--src/Utilities/ServicesCollectionExtensions.cs62
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