using Cloud; using Microsoft.EntityFrameworkCore; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.IdentityModel.Tokens; using System.Text; using FluentValidation; using FluentValidation.AspNetCore; using Cloud.Validation; using StackExchange.Redis; using Cloud.Services.Broker.Implement.Kafka; using Cloud.Services.Broker; var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddSingleton(); //Redis configuration builder.Services.AddSingleton(sp => { var configuration = ConfigurationOptions.Parse("localhost:6379"); return ConnectionMultiplexer.Connect(configuration); }); //Jwt configuration var jwtIssuer = builder.Configuration.GetSection("Jwt:Issuer").Get(); var jwtKey = builder.Configuration.GetSection("Jwt:Key").Get(); builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = jwtIssuer, ValidAudience = jwtIssuer, IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtKey)) }; }); builder.Services.AddDbContext(options => options.UseNpgsql("Host=localhost;Port=5438;Database=main_database;Username=postgres;Password=12345")); // Настройка CORS builder.Services.AddCors(options => { options.AddPolicy("AllowFrontendLocalhost", builder => { builder.WithOrigins("http://localhost:3000") // фронтенд .AllowAnyHeader() .AllowAnyMethod(); }); }); builder.Services.AddControllers(); builder.Services.AddFluentValidationAutoValidation(); builder.Services.AddFluentValidationClientsideAdapters(); builder.Services.AddValidatorsFromAssemblyContaining(); builder.Services.AddValidatorsFromAssemblyContaining(); builder.Services.AddValidatorsFromAssemblyContaining(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo { Title = "Cloud API", Version = "v1" }); c.AddSecurityDefinition("Bearer", new Microsoft.OpenApi.Models.OpenApiSecurityScheme { Description = "Введите ваш Bearer токен", Name = "Authorization", In = Microsoft.OpenApi.Models.ParameterLocation.Header, Type = Microsoft.OpenApi.Models.SecuritySchemeType.ApiKey }); c.AddSecurityRequirement(new Microsoft.OpenApi.Models.OpenApiSecurityRequirement { { new Microsoft.OpenApi.Models.OpenApiSecurityScheme { Reference = new Microsoft.OpenApi.Models.OpenApiReference { Type = Microsoft.OpenApi.Models.ReferenceType.SecurityScheme, Id = "Bearer" } }, new string[] {} } }); }); var app = builder.Build(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "Cloud API V1"); c.RoutePrefix = string.Empty; }); } app.UseHttpsRedirection(); // Включение CORS app.UseCors("AllowFrontendLocalhost"); app.UseAuthentication(); app.UseAuthorization(); app.MapControllers(); app.Run();