diff --git a/WelsonJS.Toolkit/WelsonJS.Launcher/IResourceTool.cs b/WelsonJS.Toolkit/WelsonJS.Launcher/IResourceTool.cs index f3cfd87..cbd71b7 100644 --- a/WelsonJS.Toolkit/WelsonJS.Launcher/IResourceTool.cs +++ b/WelsonJS.Toolkit/WelsonJS.Launcher/IResourceTool.cs @@ -3,9 +3,23 @@ using System.Threading.Tasks; namespace WelsonJS.Launcher { + /// + /// Defines a contract for resource tools that can handle specific HTTP requests. + /// public interface IResourceTool { + /// + /// Determines whether this tool can handle the specified path. + /// + /// The request path to check. + /// True if this tool can handle the request; otherwise, false. bool CanHandle(string path); + /// + /// Asynchronously processes the HTTP request for the specified path. + /// + /// The HTTP listener context containing request and response objects. + /// The request path to handle. + /// A task representing the asynchronous operation. Task HandleAsync(HttpListenerContext context, string path); } -} +} \ No newline at end of file diff --git a/WelsonJS.Toolkit/WelsonJS.Launcher/Properties/Resources.Designer.cs b/WelsonJS.Toolkit/WelsonJS.Launcher/Properties/Resources.Designer.cs index a8e0177..c4557b5 100644 --- a/WelsonJS.Toolkit/WelsonJS.Launcher/Properties/Resources.Designer.cs +++ b/WelsonJS.Toolkit/WelsonJS.Launcher/Properties/Resources.Designer.cs @@ -60,6 +60,24 @@ namespace WelsonJS.Launcher.Properties { } } + /// + /// 과(와) 유사한 지역화된 문자열을 찾습니다. + /// + internal static string AzureAiServiceApiKey { + get { + return ResourceManager.GetString("AzureAiServiceApiKey", resourceCulture); + } + } + + /// + /// https://ai-catswords656881030318.services.ai.azure.com/models/chat/completions?api-version=2024-05-01-preview과(와) 유사한 지역화된 문자열을 찾습니다. + /// + internal static string AzureAiServiceUrl { + get { + return ResourceManager.GetString("AzureAiServiceUrl", resourceCulture); + } + } + /// /// https://copilot.microsoft.com/과(와) 유사한 지역화된 문자열을 찾습니다. /// @@ -78,6 +96,15 @@ namespace WelsonJS.Launcher.Properties { } } + /// + /// 1.1.1.1과(와) 유사한 지역화된 문자열을 찾습니다. + /// + internal static string DnsServerAddress { + get { + return ResourceManager.GetString("DnsServerAddress", resourceCulture); + } + } + /// /// (아이콘)과(와) 유사한 System.Drawing.Icon 형식의 지역화된 리소스를 찾습니다. /// @@ -195,5 +222,41 @@ namespace WelsonJS.Launcher.Properties { return ResourceManager.GetString("ResourceServerPrefix", resourceCulture); } } + + /// + /// 141.101.82.1과(와) 유사한 지역화된 문자열을 찾습니다. + /// + internal static string WhoisClientAddress { + get { + return ResourceManager.GetString("WhoisClientAddress", resourceCulture); + } + } + + /// + /// https://xn--c79as89aj0e29b77z.xn--3e0b707e/kor/whois/whois.jsp과(와) 유사한 지역화된 문자열을 찾습니다. + /// + internal static string WhoisReferrerUrl { + get { + return ResourceManager.GetString("WhoisReferrerUrl", resourceCulture); + } + } + + /// + /// https://xn--c79as89aj0e29b77z.xn--3e0b707e/kor/whois.jsc과(와) 유사한 지역화된 문자열을 찾습니다. + /// + internal static string WhoisServerUrl { + get { + return ResourceManager.GetString("WhoisServerUrl", resourceCulture); + } + } + + /// + /// Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.3124.77과(와) 유사한 지역화된 문자열을 찾습니다. + /// + internal static string WhoisUserAgent { + get { + return ResourceManager.GetString("WhoisUserAgent", resourceCulture); + } + } } } diff --git a/WelsonJS.Toolkit/WelsonJS.Launcher/Properties/Resources.resx b/WelsonJS.Toolkit/WelsonJS.Launcher/Properties/Resources.resx index ef27d66..6be5c75 100644 --- a/WelsonJS.Toolkit/WelsonJS.Launcher/Properties/Resources.resx +++ b/WelsonJS.Toolkit/WelsonJS.Launcher/Properties/Resources.resx @@ -160,4 +160,25 @@ http://localhost:9222/ + + + + + https://ai-catswords656881030318.services.ai.azure.com/models/chat/completions?api-version=2024-05-01-preview + + + 1.1.1.1 + + + 141.101.82.1 + + + https://xn--c79as89aj0e29b77z.xn--3e0b707e/kor/whois/whois.jsp + + + https://xn--c79as89aj0e29b77z.xn--3e0b707e/kor/whois.jsc + + + Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.3124.77 + \ No newline at end of file diff --git a/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceServer.cs b/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceServer.cs index f87cf8b..8538054 100644 --- a/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceServer.cs +++ b/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceServer.cs @@ -34,6 +34,7 @@ namespace WelsonJS.Launcher _resourceTools.Add(new ResourceTools.Completion(this)); _resourceTools.Add(new ResourceTools.Config(this)); _resourceTools.Add(new ResourceTools.DevTools(this)); + _resourceTools.Add(new ResourceTools.DnsQuery(this)); _resourceTools.Add(new ResourceTools.Tfa(this)); _resourceTools.Add(new ResourceTools.Whois(this)); } diff --git a/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceTools/DevTools.cs b/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceTools/DevTools.cs index 48e73cd..890e9fa 100644 --- a/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceTools/DevTools.cs +++ b/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceTools/DevTools.cs @@ -9,8 +9,10 @@ namespace WelsonJS.Launcher.ResourceTools { private ResourceServer Server; private const string Prefix = "devtools/"; + private const double Timeout = 5000; - public DevTools(ResourceServer server) { + public DevTools(ResourceServer server) + { Server = server; } @@ -27,6 +29,8 @@ namespace WelsonJS.Launcher.ResourceTools { using (HttpClient client = new HttpClient()) { + client.Timeout = TimeSpan.FromMilliseconds(Timeout); + string url = Program.GetAppConfig("DevToolsPrefix") + endpoint; string data = await client.GetStringAsync(url); diff --git a/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceTools/DnsQuery.cs b/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceTools/DnsQuery.cs index c975632..c911791 100644 --- a/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceTools/DnsQuery.cs +++ b/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceTools/DnsQuery.cs @@ -8,7 +8,7 @@ using System.Threading.Tasks; namespace WelsonJS.Launcher.ResourceTools { - public class DnsQuery + public class DnsQuery : IResourceTool { private ResourceServer Server; private const string Prefix = "dns-query/"; @@ -17,10 +17,10 @@ namespace WelsonJS.Launcher.ResourceTools private const int Timeout = 5000; private static readonly Random _random = new Random(); - public DnsQuery(ResourceServer server, string dnsServer = "8.8.8.8") + public DnsQuery(ResourceServer server) { Server = server; - DnsServer = dnsServer; + DnsServer = Program.GetAppConfig("DnsServerAddress"); } public bool CanHandle(string path) @@ -115,17 +115,18 @@ namespace WelsonJS.Launcher.ResourceTools try { - UdpClient udpClient = new UdpClient(DnsServer, DnsPort); - udpClient.Client.ReceiveTimeout = Timeout; + using (UdpClient udpClient = new UdpClient(DnsServer, DnsPort)) + { + udpClient.Client.ReceiveTimeout = Timeout; - byte[] request = CreateDnsQuery(domain, type); - udpClient.Send(request, request.Length); + byte[] request = CreateDnsQuery(domain, type); + udpClient.Send(request, request.Length); - IPEndPoint remoteEP = new IPEndPoint(IPAddress.Any, DnsPort); - byte[] response = udpClient.Receive(ref remoteEP); + IPEndPoint remoteEP = new IPEndPoint(IPAddress.Any, DnsPort); + byte[] response = udpClient.Receive(ref remoteEP); - records.AddRange(ParseDnsResponse(response, type)); - udpClient.Close(); + records.AddRange(ParseDnsResponse(response, type)); + } } catch (Exception ex) { diff --git a/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceTools/Whois.cs b/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceTools/Whois.cs index f2f850c..b748c48 100644 --- a/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceTools/Whois.cs +++ b/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceTools/Whois.cs @@ -10,6 +10,7 @@ namespace WelsonJS.Launcher.ResourceTools { private ResourceServer Server; private const string Prefix = "whois/"; + private const int Timeout = 5000; public Whois(ResourceServer server) { @@ -31,20 +32,20 @@ namespace WelsonJS.Launcher.ResourceTools return; } - string whoisServerUrl = "https://xn--c79as89aj0e29b77z.xn--3e0b707e"; - using (var client = new HttpClient()) { - client.Timeout = TimeSpan.FromSeconds(10); + client.Timeout = TimeSpan.FromMilliseconds(Timeout); - HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, $"{whoisServerUrl}/kor/whois.jsc") + string clientAddress = Program.GetAppConfig("WhoisClientAddress"); + + HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, Program.GetAppConfig("WhoisServerUrl")) { - Content = new StringContent($"query={Uri.EscapeDataString(query)}&ip=141.101.82.1", Encoding.UTF8, "application/x-www-form-urlencoded") + Content = new StringContent($"query={Uri.EscapeDataString(query)}&ip={clientAddress}", Encoding.UTF8, "application/x-www-form-urlencoded") }; request.Headers.Add("Accept", "*/*"); - request.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.3124.77"); - client.DefaultRequestHeaders.Referrer = new Uri($"{whoisServerUrl}/kor/whois/whois.jsp"); + request.Headers.Add("User-Agent", Program.GetAppConfig("WhoisUserAgent")); + client.DefaultRequestHeaders.Referrer = new Uri(Program.GetAppConfig("WhoisReferrerUrl")); try { diff --git a/WelsonJS.Toolkit/WelsonJS.Launcher/app.config b/WelsonJS.Toolkit/WelsonJS.Launcher/app.config index d070bb9..0a85782 100644 --- a/WelsonJS.Toolkit/WelsonJS.Launcher/app.config +++ b/WelsonJS.Toolkit/WelsonJS.Launcher/app.config @@ -7,6 +7,11 @@ + + + + +