/
renix
/
TravelGuide
Обзор
Документация
Войти
/
renix
/
TravelGuide
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
back/Program.cs
157 строк
5 KB
artem777764
Хранение в Redis кодов для восстановления доступа
09 апр 2025, 12:19
09 апр 2025, 12:19
ffe3578
Код
Авторство
О чём код?
using back.Models; using MongoDB.Driver; using Microsoft.EntityFrameworkCore; using back.Services; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.IdentityModel.Tokens; using System.Text; using back.Controllers; using MongoDB.Bson; using back.Interfaces; using back.Services.EntityServices; using back.Models.Entities; using back.Repositories; var builder = WebApplication.CreateBuilder(args); builder.Services.AddCors(options => { options.AddPolicy("AllowAll", policy => { policy.WithOrigins("http://localhost:5173") .AllowAnyHeader() .AllowAnyMethod() .AllowCredentials(); }); }); builder.Services.Configure<JwtSettings>(builder.Configuration.GetSection("JwtSettings")); builder.Services.AddSingleton<JwtService>(); builder.Services.AddSingleton<MatrixService>(); builder.Services.AddSingleton<RedisService>(); builder.Services.AddScoped<ImageService>(); builder.Services.AddScoped<IAuthorizationServiceOur, AuthorizationService>(); builder.Services.AddScoped<EmailService>(); builder.Services.AddScoped<ICityService, CityGetService>(); builder.Services.AddScoped<IFeedbackSerivce, FeedbackService>(); builder.Services.AddScoped<ILandmarkTagsService, LandmarkTagsService>(); builder.Services.AddScoped<IMovementTypeService, MovementTypeService>(); builder.Services.AddScoped<IRoleService, RoleService>(); builder.Services.AddScoped<ITagService, TagService>(); builder.Services.AddScoped<IUserService, UserService>(); builder.Services.AddScoped<IRepository<CityEntity>, CityRepository>(); builder.Services.AddScoped<IRepository<FeedbackEntity>, FeedbackRepository>(); builder.Services.AddScoped<IRepository<LandmarkTagsEntity>, LandmarkTagsRepository>(); builder.Services.AddScoped<IRepository<MovementTypeEntity>, MovementTypeRepository>(); builder.Services.AddScoped<IRepository<RoleEntity>, RoleRepository>(); builder.Services.AddScoped<IRepository<TagEntity>, TagRepository>(); builder.Services.AddScoped<IRepository<UserEntity>, UserRepository>(); builder.Services.AddScoped<MatrixService>(); builder.Services.AddScoped<LandmarkService>(); builder.Services.AddControllersWithViews() .AddJsonOptions(options => { options.JsonSerializerOptions.PropertyNamingPolicy = null; // Не изменяет регистр // Отключение ReferenceHandler.Preserve, чтобы убрать метаданные $id и $values options.JsonSerializerOptions.ReferenceHandler = System.Text.Json.Serialization.ReferenceHandler.IgnoreCycles; // Опционально: Сделать вывод более удобным (без лишних пробелов и строк) options.JsonSerializerOptions.WriteIndented = false; }); builder.WebHost.UseUrls("http://localhost:5216"); // Регистрация Swagger builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); builder.Services.AddSwaggerGen(options => { options.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo { Title = "My API", Version = "v1" }); }); // Настройка аутентификации JWT builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes( builder.Configuration.GetValue<string>("JwtSettings:SecretKey") ?? "default_secret_key" )), ValidateIssuer = false, ValidateAudience = false, ValidateLifetime = true }; options.Events = new JwtBearerEvents { OnMessageReceived = context => { context.Token = context.Request.Cookies["jwt"]; return Task.CompletedTask; } }; }); // Регистрация контекстов БД var connectionString = builder.Configuration.GetConnectionString("DefaultConnection"); builder.Services.AddDbContext<Context>(options => options.UseNpgsql(connectionString)); builder.Services.AddSingleton<IMongoClient>(sp => { var configuration = sp.GetRequiredService<IConfiguration>(); var connectionString = configuration.GetConnectionString("MongoDb"); return new MongoClient(connectionString); }); builder.Services.AddSingleton<MongoDbContext>(); // Регистрируем наш сервис builder.Services.AddTransient<GigaChatService>(); builder.Services.AddHttpClient<OpenRouteService>(); var app = builder.Build(); // Наш собственный фронт для тестов app.UseStaticFiles(); app.MapGet("/", () => Results.Redirect("/test.html")); app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "v1"); }); // Если в режиме разработки if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseCors("AllowAll"); app.UseAuthentication(); app.UseAuthorization(); app.MapControllers(); app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.Run();