選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

WebAppBuilder.cs 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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(typeof(IBaseRepository<>), typeof(BaseRepository<>));
  25. builder.Services.AddScoped<IRequestRepository, RequestRepository>();
  26. builder.Services.AddScoped<IRoomRepository, RoomRepository>();
  27. builder.Services.AddScoped<IMongoDBContext, MongoDBContext>();
  28. builder.Services.AddScoped<IAuthenticationService, AuthenticationService>();
  29. builder.Services.AddScoped<ICustomerService, CustomerService>();
  30. builder.Services.AddSingleton<AuthorizationService>();
  31. builder.Services.AddMediatR(Assembly.GetExecutingAssembly());
  32. builder.Services.AddSignalR(options =>
  33. {
  34. options.EnableDetailedErrors = true;
  35. options.AddFilter<AuthorizationHubFilter>();
  36. });
  37. builder.Services.AddSingleton<AuthorizationHubFilter>();
  38. var mongoDbSettings = configuration.GetSection("WebApiDB");
  39. builder.Services.AddIdentity<Customer, Roles>()
  40. .AddMongoDbStores<Customer, Roles, Guid>
  41. (
  42. mongoDbSettings["ConnectionString"], mongoDbSettings["DatabaseName"]
  43. );
  44. var jwtSettings = configuration.GetSection("JwtSettings");
  45. builder.Services.AddAuthentication(opt =>
  46. {
  47. opt.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
  48. opt.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
  49. })
  50. .AddJwtBearer(options =>
  51. {
  52. options.TokenValidationParameters = new TokenValidationParameters
  53. {
  54. ValidateIssuer = true,
  55. ValidateAudience = true,
  56. ValidateLifetime = true,
  57. ValidateIssuerSigningKey = true,
  58. ValidIssuer = jwtSettings.GetSection("validIssuer").Value,
  59. ValidAudience = jwtSettings.GetSection("validAudience").Value,
  60. IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSettings["jwtSecret"]))
  61. };
  62. });
  63. builder.Services.AddCors(options =>
  64. {
  65. options.AddPolicy("ClientPermission", policy =>
  66. {
  67. policy.AllowAnyHeader()
  68. .AllowAnyMethod()
  69. .WithOrigins("http://localhost:3000")
  70. .AllowCredentials();
  71. });
  72. });
  73. var logger = new LoggerConfiguration()
  74. .ReadFrom.Configuration(builder.Configuration)
  75. .Enrich.FromLogContext()
  76. .CreateLogger();
  77. builder.Logging.ClearProviders();
  78. builder.Logging.AddSerilog(logger);
  79. builder.Services.AddSingleton<Serilog.ILogger>(Log.Logger);
  80. // SignalR group chat configuration
  81. builder.Services.AddSingleton<IDictionary<string, UserConnection>>(opts => new Dictionary<string, UserConnection>());
  82. }
  83. }