Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

WebAppBuilder.cs 4.1KB

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