diff --git a/FunGame.Server/Main.cs b/FunGame.Server/Main.cs index 665eb49..b609e54 100644 --- a/FunGame.Server/Main.cs +++ b/FunGame.Server/Main.cs @@ -105,8 +105,8 @@ void StartServer() ServerHelper.WriteLine("请输入 help 来获取帮助,按下 Ctrl+C 关闭服务器。"); - // 初始化用户密钥列表 - FunGameSystem.InitUserKeys(); + // 初始化服务器其他配置文件 + FunGameSystem.InitOtherConfig(); ServerHelper.PrintFunGameTitle(); diff --git a/FunGame.Server/Services/FunGameSystem.cs b/FunGame.Server/Services/FunGameSystem.cs index dff697f..ec2238a 100644 --- a/FunGame.Server/Services/FunGameSystem.cs +++ b/FunGame.Server/Services/FunGameSystem.cs @@ -46,6 +46,11 @@ namespace Milimoe.FunGame.Server.Services /// /// 服务器配置 /// + public static PluginConfig LocalConfig { get; set; } = new("system", "local"); + + /// + /// 数据库配置 + /// public static PluginConfig SQLConfig { get; set; } = new("system", "sqlconfig"); /// @@ -53,6 +58,11 @@ namespace Milimoe.FunGame.Server.Services /// public const string FunGameWebAPITokenID = "fungame_web_api"; + /// + /// API Secret 字段名 + /// + public const string APISecretField = "api_secret"; + /// /// 初始化数据库连接器 /// @@ -237,10 +247,12 @@ namespace Milimoe.FunGame.Server.Services } /// - /// 初始化用户密钥列表 + /// 初始化服务器其他配置文件 /// - public static void InitUserKeys() + public static void InitOtherConfig() { + LocalConfig.LoadConfig(); + LocalConfig.SaveConfig(); UserKeys.LoadConfig(); UserKeys.SaveConfig(); } @@ -279,6 +291,7 @@ namespace Milimoe.FunGame.Server.Services using SQLHelper? sql = Factory.OpenFactory.GetSQLHelper(); if (sql != null) { + key = Encryption.HmacSha256(key, LocalConfig.Get(APISecretField) ?? ""); sql.ExecuteDataSet(ApiTokens.Select_GetAPISecretKey(sql, key)); if (sql.Result == SQLResult.Success) { @@ -288,51 +301,35 @@ namespace Milimoe.FunGame.Server.Services return false; } - /// - /// 获取 API Secret Key - /// - /// - public static string GetAPISecretKey(string token) - { - using SQLHelper? sql = Factory.OpenFactory.GetSQLHelper(); - if (sql != null) - { - sql.ExecuteDataSet(ApiTokens.Select_GetAPIToken(sql, token)); - if (sql.Result == SQLResult.Success) - { - return sql.DataSet.Tables[0].Rows[0][ApiTokens.Column_SecretKey].ToString() ?? ""; - } - } - return ""; - } - /// /// 设置 API Secret Key /// /// /// /// - public static void SetAPISecretKey(string token, string reference1 = "", string reference2 = "", SQLHelper? sqlHelper = null) + public static string SetAPISecretKey(string token, string reference1 = "", string reference2 = "", SQLHelper? sqlHelper = null) { bool useSQLHelper = sqlHelper != null; sqlHelper ??= Factory.OpenFactory.GetSQLHelper(); string key = Encryption.GenerateRandomString(); + string enKey = Encryption.HmacSha256(key, LocalConfig.Get(APISecretField) ?? ""); if (sqlHelper != null) { sqlHelper.ExecuteDataSet(ApiTokens.Select_GetAPIToken(sqlHelper, token)); if (sqlHelper.Success) { - sqlHelper.Execute(ApiTokens.Update_APIToken(sqlHelper, token, key, reference1, reference2)); + sqlHelper.Execute(ApiTokens.Update_APIToken(sqlHelper, token, enKey, reference1, reference2)); } else { - sqlHelper.Execute(ApiTokens.Insert_APIToken(sqlHelper, token, key, reference1, reference2)); + sqlHelper.Execute(ApiTokens.Insert_APIToken(sqlHelper, token, enKey, reference1, reference2)); } } if (!useSQLHelper) { sqlHelper?.Dispose(); } + return key; } /// @@ -354,6 +351,7 @@ namespace Milimoe.FunGame.Server.Services { mysqlHelper.ExecuteSqlFile(AppDomain.CurrentDomain.BaseDirectory + "fungame.sql"); } + LocalConfig.Add(APISecretField, Encryption.GenerateRandomString()); SetAPISecretKey(FunGameWebAPITokenID, sqlHelper: sqlHelper); sqlHelper.Execute(Configs.Insert_Config(sqlHelper, "Initialization", FunGameInfo.FunGame_Version, "SQL Service Installed.")); SQLConfig.Clear(); diff --git a/FunGame.WebAPI/Program.cs b/FunGame.WebAPI/Program.cs index b0dcece..e7a000a 100644 --- a/FunGame.WebAPI/Program.cs +++ b/FunGame.WebAPI/Program.cs @@ -62,8 +62,8 @@ try // 读取 Server 插件 FunGameSystem.GetServerPlugins(); - // 初始化用户密钥列表 - FunGameSystem.InitUserKeys(); + // 初始化服务器其他配置文件 + FunGameSystem.InitOtherConfig(); // Add services to the container. WebApplicationBuilder builder = WebApplication.CreateBuilder(args); @@ -215,7 +215,7 @@ try IExceptionHandlerFeature? contextFeature = context.Features.Get(); if (contextFeature != null) { - await context.Response.WriteAsync(new PayloadModel() + await context.Response.WriteAsync(NetworkUtility.JsonSerialize(new PayloadModel() { Event = "system_error", RequestType = DataRequestType.UnKnown, @@ -223,9 +223,9 @@ try Message = "Internal Server Error.", Data = new() { - { "detail", contextFeature.Error.Message } + { "msg", contextFeature.Error.Message } } - }.ToString() ?? ""); + })); } }); });