Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

WebAppBuilder.cs 3.8KB

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