From 347b263ecfc7bd5e1c242f0e258e6bcc4c51e1f5 Mon Sep 17 00:00:00 2001
From: luolan <2667210109@qq.com>
Date: Sat, 12 Apr 2025 00:57:04 +0800
Subject: [PATCH] 11
---
asg_form/Controllers/user_form.cs | 8 +-
asg_form/Program.cs | 165 ++++++++++++++++++++----------
2 files changed, 114 insertions(+), 59 deletions(-)
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