diff --git a/asg_form/Controllers/user_form.cs b/asg_form/Controllers/user_form.cs index fc2de9d..6ad97b4 100644 --- a/asg_form/Controllers/user_form.cs +++ b/asg_form/Controllers/user_form.cs @@ -3,10 +3,7 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; -<<<<<<< HEAD -======= using System.Data; ->>>>>>> parent of 5dc3041 (排行榜) using System.Security.Claims; using static asg_form.blog; @@ -189,8 +186,6 @@ namespace asg_form.Controllers -<<<<<<< HEAD -======= /// /// 职位时间设置接口 /// @@ -210,9 +205,8 @@ namespace asg_form.Controllers user.joinTime = msg.joinTime; await userManager.UpdateAsync(user); return Ok(new { code = 200, message = "你成功修改了自己加入ASG的时间!" }); ->>>>>>> parent of 5dc3041 (排行榜) } - + } } diff --git a/asg_form/Program.cs b/asg_form/Program.cs index 0246bb1..ebfe2ca 100644 --- a/asg_form/Program.cs +++ b/asg_form/Program.cs @@ -9,38 +9,60 @@ using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.FileProviders; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Options; using Microsoft.IdentityModel.Tokens; using Microsoft.OpenApi.Models; using Mirai.Net.Sessions; +using Mirai.Net.Sessions.Http.Managers; using MrHuo.OAuth; using MrHuo.OAuth.Github; using MrHuo.OAuth.Microsoft; using Scalar.AspNetCore; using System; +using System.Data; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Reflection; using System.Text; using Zack.EventBus; -Console.WriteLine("\n _____ _________ ________ \n / _ \\ / _____// _____/ \n / /_\\ \\ \\_____ \\/ \\ ___ \n/ | \\/ \\ \\_\\ \\\n\\____|__ /_______ /\\______ /\n \\/ \\/ \\/ \n__________ __ ___________ .___\n\\______ \\_____ ____ | | __\\_ _____/ ____ __| _/\n | | _/\\__ \\ _/ ___\\| |/ / | __)_ / \\ / __ | \n | | \\ / __ \\\\ \\___| < | \\ | \\/ /_/ | \n |______ /(____ /\\___ >__|_ \\/_______ /___| /\\____ | \n \\/ \\/ \\/ \\/ \\/ \\/ \\/ "); + + + + + + + +Console.WriteLine("\n _____ _________ ________ \n / _ \\ / _____// _____/ \n / /_\\ \\ \\_____ \\/ \\ ___ \n/ | \\/ \\ \\_\\ \\\n\\____|__ /_______ /\\______ /\n \\/ \\/ \\/ \n__________ __ ___________ .___\n\\______ \\_____ ____ | | __\\_ _____/ ____ __| _/\n | | _/\\__ \\ _/ ___\\| |/ / | __)_ / \\ / __ | \n | | \\ / __ \\\\ \\___| < | \\ | \\/ /_/ | \n |______ /(____ /\\___ >__|_ \\/_______ /___| /\\____ | \n \\/ \\/ \\/ \\/ \\/ \\/ \\/ "); var builder = WebApplication.CreateBuilder(args); -// 添加控制器服务 -builder.Services.AddControllers(); +//builder.AddServiceDefaults(); -// 配置Swagger/OpenAPI +// Add services to the container. + + +builder.Services.AddControllers(); +// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle +builder.Services.AddEndpointsApiExplorer(); + + +builder.Services.AddSignalR(); builder.Services.AddSwaggerGen(c => { - c.SwaggerDoc("v1", new OpenApiInfo + c.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo { Title = "ASG 赛事官网-后端API文档", Version = "V 1.9.7", Description = "这是由罗澜使用ASP.NET.Core开发的ASG赛事组后端系统,包括官网和后台管理系统。使用 sqlserver作为数据库,identity框架进行账号控制。", }); var file = Path.Combine(AppContext.BaseDirectory, "ASG后端.xml"); - c.IncludeXmlComments(file, true); + var path = Path.Combine(AppContext.BaseDirectory, file); + c.IncludeXmlComments(path, true); c.OrderActionsBy(o => o.RelativePath); - var scheme = new OpenApiSecurityScheme + var scheme = new OpenApiSecurityScheme() { Description = "Authorization header. \r\nExample: 'Bearer 12345abcdef'", Reference = new OpenApiReference @@ -54,29 +76,34 @@ builder.Services.AddSwaggerGen(c => Type = SecuritySchemeType.ApiKey, }; c.AddSecurityDefinition("Authorization", scheme); - c.AddSecurityRequirement(new OpenApiSecurityRequirement - { - [scheme] = new List() - }); + var requirement = new OpenApiSecurityRequirement(); + requirement[scheme] = new List(); + c.AddSecurityRequirement(requirement); }); -// 配置CORS策略 -builder.Services.AddCors(options => - options.AddDefaultPolicy(policy => - policy.AllowAnyOrigin() - .AllowAnyMethod() - .AllowAnyHeader() - .AllowCredentials())); -// 配置数据库上下文 -builder.Services.AddDbContext(opt => + +string[] urls = new[] { "https://idvasg.cn", "https://nocdn.idvasg.cn", "http://localhost:8080", "https://commentary.idvasg.cn", "https://admin.idvasg.cn", "https://www.idvasg.cn" }; +builder.Services.AddCors(options => +options.AddDefaultPolicy(builder => builder.WithOrigins(urls) +.AllowAnyMethod().AllowAnyHeader().AllowCredentials())); + + + +IServiceCollection services = builder.Services; + + + +services.AddDbContext(opt => { string connStr = @"Host=172.30.121.91;Port=2345;Database=postgres;Username=asg;Password=luolan12323;"; opt.UseNpgsql(connStr); }); +//services.AddHostedService(); -// 配置身份验证和授权 -builder.Services.AddIdentityCore(options => + +services.AddDataProtection(); +services.AddIdentityCore(options => { options.Password.RequireDigit = false; options.Password.RequireLowercase = false; @@ -86,48 +113,64 @@ builder.Services.AddIdentityCore(options => options.Tokens.PasswordResetTokenProvider = TokenOptions.DefaultEmailProvider; options.Tokens.EmailConfirmationTokenProvider = TokenOptions.DefaultEmailProvider; }); -new IdentityBuilder(typeof(User), typeof(Role), builder.Services) - .AddEntityFrameworkStores() +var idBuilder = new IdentityBuilder(typeof(User), typeof(Role), services); +idBuilder.AddEntityFrameworkStores() .AddDefaultTokenProviders() .AddRoleManager>() .AddUserManager>(); -// 配置JWT身份验证 -builder.Services.Configure(builder.Configuration.GetSection("JWT")); -builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) - .AddJwtBearer(x => - { - var jwtOpt = builder.Configuration.GetSection("JWT").Get(); - byte[] keyBytes = Encoding.UTF8.GetBytes(jwtOpt.SigningKey); - x.TokenValidationParameters = new TokenValidationParameters - { - ValidateIssuer = false, - ValidateAudience = false, - ValidateLifetime = true, - ValidateIssuerSigningKey = true, - IssuerSigningKey = new SymmetricSecurityKey(keyBytes) - }; - }); -// 配置OAuth -builder.Services.AddSingleton(new GithubOAuth(OAuthConfig.LoadFrom(builder.Configuration, "oauth:github"))); -builder.Services.AddSingleton(new MicrosoftOAuth(OAuthConfig.LoadFrom(builder.Configuration, "oauth:microsoft"))); -// 添加Application Insights -builder.Services.AddApplicationInsightsTelemetry(); -// 配置全局异常处理过滤器 + +builder.Services.AddControllers(); +// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle +builder.Services.AddEndpointsApiExplorer(); +builder.Services.AddSwaggerGen(); +//add error 处理器 builder.Services.Configure(options => { options.Filters.Add(); }); -// 构建应用程序 -var app = builder.Build(); -// 使用中间件 + +services.Configure(builder.Configuration.GetSection("JWT")); +services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) +.AddJwtBearer(x => +{ + var jwtOpt = builder.Configuration.GetSection("JWT").Get(); + byte[] keyBytes = Encoding.UTF8.GetBytes(jwtOpt.SigningKey); + var secKey = new SymmetricSecurityKey(keyBytes); + x.TokenValidationParameters = new() + { + ValidateIssuer = false, + ValidateAudience = false, + ValidateLifetime = true, + ValidateIssuerSigningKey = true, + IssuerSigningKey = secKey + }; +}); +services.AddSingleton(new GithubOAuth(OAuthConfig.LoadFrom(builder.Configuration, "oauth:github"))); +services.AddSingleton(new MicrosoftOAuth(OAuthConfig.LoadFrom(builder.Configuration, "oauth:microsoft"))); + +builder.Services.AddApplicationInsightsTelemetry(); + + +var app = builder.Build(); +//app.MapDefaultEndpoints(); app.UseCors(); +// Configure the HTTP request pipeline. + app.UseSwagger(); +//app.UseSwaggerUI(); +app.MapScalarApiReference(options => +{ + options.WithOpenApiRoutePattern("/swagger/v1/swagger.json"); + // or + options.OpenApiRoutePattern = "/swagger/v1/swagger.json"; +}); + app.UseStaticFiles(); AppContext.SetSwitch("System.Drawing.EnableUnixSupport", true); @@ -150,14 +193,16 @@ RegisterStaticFiles("loge", "/loge"); RegisterStaticFiles("video", "/video"); RegisterStaticFiles("doc", "/doc"); RegisterStaticFiles("excel", "/excel"); - app.UseAuthentication(); app.UseAuthorization(); + app.MapHub("/room"); app.UseResponseCaching(); app.MapControllers(); -// 启动Flandre机器人线程 + + + new Thread(o => { try @@ -168,10 +213,17 @@ new Thread(o => ContentRootPath = AppDomain.CurrentDomain.BaseDirectory }); + + + // 安装一个适配器,并添加在这里。 + // builder.Adapters.Add(new YourAdapter()); builder1.Adapters.AddOneBot(builder1.Configuration.GetSection("Adapters:OneBot")); builder1.Plugins.Add(); var app1 = builder1.Build(); + // 添加内置中间件。 + // 这些中间件保证 Flandre 的正常运转。你也可以加入自己的中间件,并灵活调整其顺序。 app1.UseCommandSession(); + // app.UseMiddleware(async (ctx, next) => { /* ... */ }); app1.UseCommandParser(); app1.UseCommandInvoker(); runbot.runbotr = app1.Bots.First(); @@ -179,8 +231,17 @@ new Thread(o => } catch (Exception ex) { - } + //输出详细全部信息 + Console.WriteLine(ex.ToString()); + + } + + + + + }) { IsBackground = true }.Start(); + app.Run(); \ No newline at end of file