mirror of
https://github.com/Govor-team/Govor.git
synced 2026-07-21 11:44:56 +00:00
ab643c16a4
Added user session models, interfaces, repository, and service for managing user sessions and refresh tokens. Refactored authentication flow to return user objects and open sessions with device info, supporting refresh token generation and validation. Updated JWT configuration to separate access and refresh options, and refactored related tests and API contracts. Improved media upload handling and error logging. Migrated dependency references and DI registrations accordingly.
132 lines
3.5 KiB
C#
132 lines
3.5 KiB
C#
using System.Text;
|
||
using Govor.API.Extensions;
|
||
using Govor.API.Hubs;
|
||
using Govor.Application.Services.Authentication;
|
||
using Microsoft.AspNetCore.Authentication.JwtBearer;
|
||
using Microsoft.IdentityModel.Tokens;
|
||
using Microsoft.OpenApi.Models;
|
||
|
||
var builder = WebApplication.CreateBuilder(args);
|
||
|
||
var configuration = builder.Configuration;
|
||
var services = builder.Services;
|
||
|
||
builder.AddLogger();// Serilog
|
||
|
||
builder.Configuration.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
|
||
|
||
builder.Services.AddCors(options =>
|
||
{
|
||
options.AddPolicy("AllowFrontend", policy =>
|
||
{
|
||
policy.WithOrigins("http://localhost:5000", "https://5.129.212.144:5000")
|
||
.AllowAnyHeader()
|
||
.AllowAnyMethod()
|
||
.AllowCredentials();
|
||
});
|
||
});
|
||
|
||
builder.Services.Configure<JwtAccessOption>(configuration.GetSection(nameof(JwtAccessOption)));
|
||
|
||
// Add services
|
||
builder.Services.AddSignalRConf();// signalR
|
||
|
||
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
|
||
.AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options =>
|
||
{
|
||
options.TokenValidationParameters = new TokenValidationParameters
|
||
{
|
||
ValidateIssuer = false,
|
||
ValidateAudience = false,
|
||
ValidateLifetime = true,
|
||
ValidateIssuerSigningKey = true,
|
||
IssuerSigningKey = new SymmetricSecurityKey(
|
||
Encoding.UTF8.GetBytes(builder.Configuration["JwtOption:SecretKeу"]!))
|
||
};
|
||
options.Events = new JwtBearerEvents
|
||
{
|
||
OnMessageReceived = context =>
|
||
{
|
||
var accessToken = context.Request.Query["access_token"];
|
||
var path = context.HttpContext.Request.Path;
|
||
if (!string.IsNullOrEmpty(accessToken) && path.StartsWithSegments("/api/chats"))
|
||
{
|
||
context.Token = accessToken;
|
||
}
|
||
return Task.CompletedTask;
|
||
}
|
||
};
|
||
});
|
||
|
||
builder.Services.AddAuthorization();
|
||
|
||
builder.Services.AddControllers();
|
||
|
||
// Init DI
|
||
builder.Services.AddServices();
|
||
builder.Services.AddRepositories();
|
||
builder.Services.AddValidators();
|
||
|
||
builder.Services.AddGovorDbContext(configuration); // GovorDbContext init
|
||
|
||
builder.Services.AddEndpointsApiExplorer();
|
||
|
||
builder.Services.AddSwaggerGen(options =>
|
||
{
|
||
options.SwaggerDoc("v1", new OpenApiInfo { Title = "Govor API", Version = "v1" });
|
||
|
||
options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
|
||
{
|
||
Description = "JWT Authorization header using the Bearer scheme. Example: 'Bearer {token}'",
|
||
Name = "Authorization",
|
||
In = ParameterLocation.Header,
|
||
Type = SecuritySchemeType.Http,
|
||
Scheme = "bearer"
|
||
});
|
||
|
||
options.AddSecurityRequirement(new OpenApiSecurityRequirement
|
||
{
|
||
{
|
||
new OpenApiSecurityScheme
|
||
{
|
||
Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" }
|
||
},
|
||
Array.Empty<string>()
|
||
}
|
||
});
|
||
});
|
||
|
||
|
||
//builder.Services.AddOpenApi();
|
||
|
||
var app = builder.Build();
|
||
|
||
// Configure the HTTP request pipeline.
|
||
if (app.Environment.IsDevelopment())
|
||
{
|
||
//app.MapOpenApi();
|
||
|
||
}
|
||
|
||
app.UseSwagger();
|
||
app.UseSwaggerUI();
|
||
|
||
app.UseCors("AllowFrontend");
|
||
|
||
app.UseHttpsRedirection();
|
||
|
||
app.UseRouting();
|
||
|
||
app.UseAuthentication();
|
||
app.UseAuthorization();
|
||
|
||
app.MapControllers();
|
||
|
||
app.MapHub<ChatsHub>("/hubs/chats");
|
||
app.MapHub<FriendsHub>("/hubs/friends");
|
||
|
||
app.MapSwagger().RequireAuthorization();
|
||
|
||
app.Map("/", () => "Not for browsers");
|
||
|
||
app.Run(); |