Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

WebAppBuilder.cs 3.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. using Diligent.WebAPI.Data;
  2. using Diligent.WebAPI.Host.Hubs;
  3. using Diligent.WebAPI.Data.Entities;
  4. using Diligent.WebAPI.Host.Mapper;
  5. using MediatR;
  6. using Microsoft.AspNetCore.Authentication.JwtBearer;
  7. using Microsoft.AspNetCore.SignalR;
  8. using Serilog;
  9. using System.Reflection;
  10. using Microsoft.IdentityModel.Tokens;
  11. using System.Text;
  12. using Diligent.WebAPI.Business.Services;
  13. using Diligent.WebAPI.Host.Middlewares;
  14. using Diligent.WebAPI.Business.Interfaces;
  15. namespace Diligent.WebAPI.Host.Extensions;
  16. public static class WebAppBuilder
  17. {
  18. public static void ConfigureData(this WebApplicationBuilder builder, IConfiguration configuration)
  19. {
  20. // database configuration
  21. builder.Services.Configure<WebApiDatabaseSettings>(
  22. builder.Configuration.GetSection("WebApiDB"));
  23. builder.Services.AddAutoMapper(typeof(RequestMappingProfile));
  24. builder.Services.AddScoped<IAuthenticationService, AuthenticationService>();
  25. builder.Services.AddScoped<ICustomerService, CustomerService>();
  26. builder.Services.AddSingleton<RoomService>();
  27. builder.Services.AddSingleton<RequestService>();
  28. builder.Services.AddSingleton<AuthorizationService>();
  29. builder.Services.AddMediatR(Assembly.GetExecutingAssembly());
  30. builder.Services.AddSignalR(options =>
  31. {
  32. options.EnableDetailedErrors = true;
  33. options.AddFilter<AuthorizationHubFilter>();
  34. });
  35. builder.Services.AddSingleton<AuthorizationHubFilter>();
  36. var mongoDbSettings = configuration.GetSection("WebApiDB");
  37. builder.Services.AddIdentity<Customer, Roles>()
  38. .AddMongoDbStores<Customer, Roles, Guid>
  39. (
  40. mongoDbSettings["ConnectionString"], mongoDbSettings["DatabaseName"]
  41. );
  42. var jwtSettings = configuration.GetSection("JwtSettings");
  43. builder.Services.AddAuthentication(opt =>
  44. {
  45. opt.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
  46. opt.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
  47. })
  48. .AddJwtBearer(options =>
  49. {
  50. options.TokenValidationParameters = new TokenValidationParameters
  51. {
  52. ValidateIssuer = true,
  53. ValidateAudience = true,
  54. ValidateLifetime = true,
  55. ValidateIssuerSigningKey = true,
  56. ValidIssuer = jwtSettings.GetSection("validIssuer").Value,
  57. ValidAudience = jwtSettings.GetSection("validAudience").Value,
  58. IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSettings["jwtSecret"]))
  59. };
  60. });
  61. builder.Services.AddCors(options =>
  62. {
  63. options.AddPolicy("ClientPermission", policy =>
  64. {
  65. policy.AllowAnyHeader()
  66. .AllowAnyMethod()
  67. .WithOrigins("http://localhost:3000")
  68. .AllowCredentials();
  69. });
  70. });
  71. var logger = new LoggerConfiguration()
  72. .ReadFrom.Configuration(builder.Configuration)
  73. .Enrich.FromLogContext()
  74. .CreateLogger();
  75. builder.Logging.ClearProviders();
  76. builder.Logging.AddSerilog(logger);
  77. builder.Services.AddSingleton<Serilog.ILogger>(Log.Logger);
  78. // SignalR group chat configuration
  79. builder.Services.AddSingleton<IDictionary<string, UserConnection>>(opts => new Dictionary<string, UserConnection>());
  80. }
  81. }