diff --git a/WebServer/Controllers/DispatchRoutes.cs b/WebServer/Controllers/DispatchRoutes.cs index 1d960d29..ec79eac8 100644 --- a/WebServer/Controllers/DispatchRoutes.cs +++ b/WebServer/Controllers/DispatchRoutes.cs @@ -32,7 +32,7 @@ namespace EggLink.DanhengServer.WebServer.Controllers } [HttpPost("/account/risky/api/check")] - public string RiskyCheck() => "{\"retcode\":0,\"message\":\"OK\",\"data\":{\"id\":\"none\",\"action\":\"ACTION_NONE\",\"geetest\":null}}"; + public ContentResult RiskyCheck() => new() { Content = "{\"retcode\":0,\"message\":\"OK\",\"data\":{\"id\":\"none\",\"action\":\"ACTION_NONE\",\"geetest\":null}}", ContentType = "application/json" }; // === AUTHENTICATION === [HttpPost("/hkrpg_global/mdk/shield/api/login")] @@ -43,31 +43,31 @@ namespace EggLink.DanhengServer.WebServer.Controllers public JsonResult LoginV2([FromBody] LoginV2ReqJson req) => new ComboTokenGranterHandler().Handle(req.app_id, req.channel_id, req.data!, req.device!, req.sign!); [HttpGet("/hkrpg_global/combo/granter/api/getConfig")] - public string GetConfig() => "{\"retcode\":0,\"message\":\"OK\",\"data\":{\"protocol\":true,\"qr_enabled\":false,\"log_level\":\"INFO\",\"announce_url\":\"\",\"push_alias_type\":0,\"disable_ysdk_guard\":true,\"enable_announce_pic_popup\":false,\"app_name\":\"崩�??RPG\",\"qr_enabled_apps\":{\"bbs\":false,\"cloud\":false},\"qr_app_icons\":{\"app\":\"\",\"bbs\":\"\",\"cloud\":\"\"},\"qr_cloud_display_name\":\"\",\"enable_user_center\":true,\"functional_switch_configs\":{}}}"; + public ContentResult GetConfig() => new() { Content = "{\"retcode\":0,\"message\":\"OK\",\"data\":{\"protocol\":true,\"qr_enabled\":false,\"log_level\":\"INFO\",\"announce_url\":\"\",\"push_alias_type\":0,\"disable_ysdk_guard\":true,\"enable_announce_pic_popup\":false,\"app_name\":\"崩�??RPG\",\"qr_enabled_apps\":{\"bbs\":false,\"cloud\":false},\"qr_app_icons\":{\"app\":\"\",\"bbs\":\"\",\"cloud\":\"\"},\"qr_cloud_display_name\":\"\",\"enable_user_center\":true,\"functional_switch_configs\":{}}}", ContentType = "application/json" }; [HttpGet("/hkrpg_global/mdk/shield/api/loadConfig")] - public string LoadConfig() => "{\"retcode\":0,\"message\":\"OK\",\"data\":{\"id\":24,\"game_key\":\"hkrpg_global\",\"client\":\"PC\",\"identity\":\"I_IDENTITY\",\"guest\":false,\"ignore_versions\":\"\",\"scene\":\"S_NORMAL\",\"name\":\"崩�??RPG\",\"disable_regist\":false,\"enable_email_captcha\":false,\"thirdparty\":[\"fb\",\"tw\",\"gl\",\"ap\"],\"disable_mmt\":false,\"server_guest\":false,\"thirdparty_ignore\":{},\"enable_ps_bind_account\":false,\"thirdparty_login_configs\":{\"tw\":{\"token_type\":\"TK_GAME_TOKEN\",\"game_token_expires_in\":2592000},\"ap\":{\"token_type\":\"TK_GAME_TOKEN\",\"game_token_expires_in\":604800},\"fb\":{\"token_type\":\"TK_GAME_TOKEN\",\"game_token_expires_in\":2592000},\"gl\":{\"token_type\":\"TK_GAME_TOKEN\",\"game_token_expires_in\":604800}},\"initialize_firebase\":false,\"bbs_auth_login\":false,\"bbs_auth_login_ignore\":[],\"fetch_instance_id\":false,\"enable_flash_login\":false}}"; + public ContentResult LoadConfig() => new() { Content = "{\"retcode\":0,\"message\":\"OK\",\"data\":{\"id\":24,\"game_key\":\"hkrpg_global\",\"client\":\"PC\",\"identity\":\"I_IDENTITY\",\"guest\":false,\"ignore_versions\":\"\",\"scene\":\"S_NORMAL\",\"name\":\"崩�??RPG\",\"disable_regist\":false,\"enable_email_captcha\":false,\"thirdparty\":[\"fb\",\"tw\",\"gl\",\"ap\"],\"disable_mmt\":false,\"server_guest\":false,\"thirdparty_ignore\":{},\"enable_ps_bind_account\":false,\"thirdparty_login_configs\":{\"tw\":{\"token_type\":\"TK_GAME_TOKEN\",\"game_token_expires_in\":2592000},\"ap\":{\"token_type\":\"TK_GAME_TOKEN\",\"game_token_expires_in\":604800},\"fb\":{\"token_type\":\"TK_GAME_TOKEN\",\"game_token_expires_in\":2592000},\"gl\":{\"token_type\":\"TK_GAME_TOKEN\",\"game_token_expires_in\":604800}},\"initialize_firebase\":false,\"bbs_auth_login\":false,\"bbs_auth_login_ignore\":[],\"fetch_instance_id\":false,\"enable_flash_login\":false}}", ContentType = "application/json" }; // === EXTRA === [HttpPost("/hkrpg_global/combo/granter/api/compareProtocolVersion")] - public string CompareProtocolVer() => "{\"retcode\":0,\"message\":\"OK\",\"data\":{\"modified\":false,\"protocol\":null}}"; + public ContentResult CompareProtocolVer() => new() { Content = "{\"retcode\":0,\"message\":\"OK\",\"data\":{\"modified\":false,\"protocol\":null}}", ContentType = "application/json" }; [HttpGet("/hkrpg_global/mdk/agreement/api/getAgreementInfos")] - public string GetAgreementInfo() => "{\"retcode\":0,\"message\":\"OK\",\"data\":{\"marketing_agreements\":[]}}"; + public ContentResult GetAgreementInfo() => new() { Content = "{\"retcode\":0,\"message\":\"OK\",\"data\":{\"marketing_agreements\":[]}}", ContentType = "application/json" }; [HttpGet("/combo/box/api/config/sdk/combo")] - public string Combo() => "{\"retcode\":0,\"message\":\"OK\",\"data\":{\"vals\":{\"kibana_pc_config\":\"{ \\\"enable\\\": 0, \\\"level\\\": \\\"Info\\\",\\\"modules\\\": [\\\"download\\\"] }\\n\",\"network_report_config\":\"{ \\\"enable\\\": 0, \\\"status_codes\\\": [206], \\\"url_paths\\\": [\\\"dataUpload\\\", \\\"red_dot\\\"] }\\n\",\"list_price_tierv2_enable\":\"false\\n\",\"pay_payco_centered_host\":\"bill.payco.com\",\"telemetry_config\":\"{\\n \\\"dataupload_enable\\\": 0,\\n}\",\"enable_web_dpi\":\"true\"}}}"; + public ContentResult Combo() => new() { Content = "{\"retcode\":0,\"message\":\"OK\",\"data\":{\"vals\":{\"kibana_pc_config\":\"{ \\\"enable\\\": 0, \\\"level\\\": \\\"Info\\\",\\\"modules\\\": [\\\"download\\\"] }\\n\",\"network_report_config\":\"{ \\\"enable\\\": 0, \\\"status_codes\\\": [206], \\\"url_paths\\\": [\\\"dataUpload\\\", \\\"red_dot\\\"] }\\n\",\"list_price_tierv2_enable\":\"false\\n\",\"pay_payco_centered_host\":\"bill.payco.com\",\"telemetry_config\":\"{\\n \\\"dataupload_enable\\\": 0,\\n}\",\"enable_web_dpi\":\"true\"}}}", ContentType = "application/json" }; [HttpGet("/combo/box/api/config/sw/precache")] - public string Precache() => "{\"retcode\":0,\"message\":\"OK\",\"data\":{\"vals\":{\"url\":\"\",\"enable\":\"false\"}}}"; + public ContentResult Precache() => new() { Content = "{\"retcode\":0,\"message\":\"OK\",\"data\":{\"vals\":{\"url\":\"\",\"enable\":\"false\"}}}", ContentType = "application/json" }; [HttpGet("/device-fp/api/getFp")] public JsonResult GetFp([FromQuery] string device_fp) => new FingerprintHandler().GetFp(device_fp); [HttpGet("/device-fp/api/getExtList")] - public string GetExtList() => "{\"retcode\":0,\"message\":\"OK\",\"data\":{\"code\":200,\"msg\":\"ok\",\"ext_list\":[],\"pkg_list\":[],\"pkg_str\":\"/vK5WTh5SS3SAj8Zm0qPWg==\"}}"; + public ContentResult GetExtList() => new() { Content = "{\"retcode\":0,\"message\":\"OK\",\"data\":{\"code\":200,\"msg\":\"ok\",\"ext_list\":[],\"pkg_list\":[],\"pkg_str\":\"/vK5WTh5SS3SAj8Zm0qPWg==\"}}", ContentType = "application/json" }; [HttpPost("/data_abtest_api/config/experiment/list")] - public string GetExperimentList() => "{\"retcode\":0,\"success\":true,\"message\":\"\",\"data\":[{\"code\":1000,\"type\":2,\"config_id\":\"14\",\"period_id\":\"6125_197\",\"version\":\"1\",\"configs\":{\"cardType\":\"direct\"}}]}"; + public ContentResult GetExperimentList() => new() { Content = "{\"retcode\":0,\"success\":true,\"message\":\"\",\"data\":[{\"code\":1000,\"type\":2,\"config_id\":\"14\",\"period_id\":\"6125_197\",\"version\":\"1\",\"configs\":{\"cardType\":\"direct\"}}]}", ContentType = "application/json" }; } } diff --git a/WebServer/WebProgram.cs b/WebServer/WebProgram.cs index 5de73247..ee8eab74 100644 --- a/WebServer/WebProgram.cs +++ b/WebServer/WebProgram.cs @@ -3,6 +3,7 @@ using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore; using Microsoft.AspNetCore.Server.Kestrel.Core; using System.Net; +using System.Diagnostics; namespace EggLink.DanhengServer.WebServer { @@ -13,25 +14,32 @@ namespace EggLink.DanhengServer.WebServer BuildWebHost(args, port, address).Start(); } - public static IWebHost BuildWebHost(string[] args, int port, string address) => - WebHost.CreateDefaultBuilder(args) + public static IWebHost BuildWebHost(string[] args, int port, string address) + { + var b = WebHost.CreateDefaultBuilder(args) .UseStartup() - .UseKestrel(options => + .ConfigureLogging((hostingContext, logging) => { - options.Listen(IPAddress.Any, port, listenOptions => - { - listenOptions.UseHttps( - ConfigManager.Config.KeyStore.KeyStorePath, - ConfigManager.Config.KeyStore.KeyStorePassword - ); - }); - }) - .ConfigureLogging((hostingContext, logging) => - { logging.ClearProviders(); }) - .UseUrls(address) - .Build(); + .UseUrls(address); + + if (ConfigManager.Config.HttpServer.UseSSL) + { + b.UseKestrel(options => + { + options.Listen(IPAddress.Any, port, listenOptions => + { + listenOptions.UseHttps( + ConfigManager.Config.KeyStore.KeyStorePath, + ConfigManager.Config.KeyStore.KeyStorePassword + ); + }); + }); + } + + return b.Build(); + } } public class Startup @@ -48,6 +56,22 @@ namespace EggLink.DanhengServer.WebServer app.UseDeveloperExceptionPage(); } + app.Use(async (context, next) => + { + using var buffer = new MemoryStream(); + var request = context.Request; + var response = context.Response; + + var bodyStream = response.Body; + response.Body = buffer; + + await next.Invoke(); + buffer.Position = 0; + context.Response.Headers["Content-Length"] = (response.ContentLength ?? buffer.Length).ToString(); + context.Response.Headers.Remove("Transfer-Encoding"); + await buffer.CopyToAsync(bodyStream); + }); + app.UseHttpsRedirection(); app.UseRouting();