From 6b3a3a9ec2ef2ff04e90c9ef65e299a9690ca620 Mon Sep 17 00:00:00 2001 From: Daan Boerlage Date: Sun, 7 Nov 2021 00:02:05 +0100 Subject: [PATCH] Rewrite the WebApi startup to take advantage of new .net6 features --- src/Web/Web.csproj | 3 ++ src/Web/WebApiStartup.cs | 92 ++++++++++++++-------------------------- 2 files changed, 35 insertions(+), 60 deletions(-) diff --git a/src/Web/Web.csproj b/src/Web/Web.csproj index d219d95..3a077fb 100644 --- a/src/Web/Web.csproj +++ b/src/Web/Web.csproj @@ -10,6 +10,9 @@ Geekbot.Web Geekbot.Web NU1701 + CS8618 + enable + enable diff --git a/src/Web/WebApiStartup.cs b/src/Web/WebApiStartup.cs index 273b247..fcf90f6 100644 --- a/src/Web/WebApiStartup.cs +++ b/src/Web/WebApiStartup.cs @@ -1,8 +1,6 @@ -using System; -using System.Net; +using System.Net; using System.Reflection; using Discord.Commands; -using Discord.WebSocket; using Geekbot.Core; using Geekbot.Core.Database; using Geekbot.Core.GlobalSettings; @@ -11,68 +9,42 @@ using Geekbot.Core.Highscores; using Geekbot.Core.Interactions; using Geekbot.Core.Logger; using Geekbot.Web.Logging; -using Microsoft.AspNetCore; -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging; -namespace Geekbot.Web +namespace Geekbot.Web; + +public static class WebApiStartup { - public static class WebApiStartup + // Using the "Microsoft.NET.Sdk.Web" SDK requires a static main function... + public static void Main() { - // Using the "Microsoft.NET.Sdk.Web" SDK requires a static main function... - public static void Main() {} - - public static void StartWebApi(IServiceProvider commandProvider, IGeekbotLogger logger, RunParameters runParameters, CommandService commandService, - DatabaseContext databaseContext, IGlobalSettings globalSettings, IHighscoreManager highscoreManager, IGuildSettingsManager guildSettingsManager) - { - WebHost.CreateDefaultBuilder() - .UseKestrel(options => - { - options.Listen(IPAddress.Any, int.Parse(runParameters.ApiPort)); - }) - .ConfigureServices(services => - { - services.AddControllers().AddJsonOptions(options => - { - options.JsonSerializerOptions.PropertyNameCaseInsensitive = true; - }); - services.AddCors(options => - { - options.AddPolicy("AllowSpecificOrigin", - builder => builder.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod()); - }); - services.AddSentry(); + } - var interactionCommandManager = new InteractionCommandManager(commandProvider, guildSettingsManager); + public static void StartWebApi(IServiceProvider commandProvider, IGeekbotLogger logger, RunParameters runParameters, CommandService commandService, + DatabaseContext databaseContext, IGlobalSettings globalSettings, IHighscoreManager highscoreManager, IGuildSettingsManager guildSettingsManager) + { + var builder = WebApplication.CreateBuilder(new WebApplicationOptions() { ApplicationName = typeof(WebApiStartup).GetTypeInfo().Assembly.FullName }); + builder.WebHost.UseKestrel(options => options.Listen(IPAddress.Any, int.Parse(runParameters.ApiPort))); - services.AddSingleton(databaseContext); - services.AddSingleton(globalSettings); - services.AddSingleton(highscoreManager); - services.AddSingleton(logger); - services.AddSingleton(interactionCommandManager); + builder.Services.AddControllers(); + builder.Services.AddCors(options => options.AddPolicy("AllowSpecificOrigin", cors => cors.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod())); - if (runParameters.DisableGateway) return; - services.AddSingleton(commandService); - }) - .Configure(app => - { - app.UseRouting(); - app.UseCors(builder => builder.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod().Build()); - app.UseEndpoints(endpoints => - { - endpoints.MapControllers(); - }); - }) - .ConfigureLogging(logging => - { - logging.ClearProviders(); - logging.SetMinimumLevel(LogLevel.Debug); - logging.AddProvider(new AspLogProvider(logger)); - }) - .UseSetting(WebHostDefaults.ApplicationKey, typeof(WebApiStartup).GetTypeInfo().Assembly.FullName) - .Build().Run(); - } + var interactionCommandManager = new InteractionCommandManager(commandProvider, guildSettingsManager); + + builder.Services.AddSingleton(databaseContext); + builder.Services.AddSingleton(globalSettings); + builder.Services.AddSingleton(highscoreManager); + builder.Services.AddSingleton(logger); + builder.Services.AddSingleton(interactionCommandManager); + if (!runParameters.DisableGateway) builder.Services.AddSingleton(commandService); + + builder.Logging.ClearProviders(); + builder.Logging.SetMinimumLevel(LogLevel.Debug); + builder.Logging.AddProvider(new AspLogProvider(logger)); + + var app = builder.Build(); + app.UseCors(cors => cors.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod().Build()); + app.MapControllers(); + + app.Run(); } } \ No newline at end of file