welsonjs/WelsonJS.Toolkit/WelsonJS.Launcher/ResourceTools/IpQuery.cs
Namhyeon, Go 849470555a
Update WelsonJS.Toolkit/WelsonJS.Launcher/ResourceTools/IpQuery.cs
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-09-25 15:37:16 +09:00

63 lines
2.2 KiB
C#

// CitiQuery.cs
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: 2025 Catswords OSS and WelsonJS Contributors
// https://github.com/gnh1201/welsonjs
//
using System;
using System.Net.Http;
using System.Net;
using System.Threading.Tasks;
namespace WelsonJS.Launcher.ResourceTools
{
public class IpQuery : IResourceTool
{
private readonly ResourceServer Server;
private readonly HttpClient _httpClient;
private const string Prefix = "ip-query/";
public IpQuery(ResourceServer server, HttpClient httpClient)
{
Server = server;
_httpClient = httpClient;
}
public bool CanHandle(string path)
{
return path.StartsWith(Prefix, StringComparison.OrdinalIgnoreCase);
}
public async Task HandleAsync(HttpListenerContext context, string path)
{
try
{
string target = path.Substring(Prefix.Length).Trim();
string apiKey = Program.GetAppConfig("CriminalIpApiKey");
if (string.IsNullOrEmpty(apiKey))
{
Server.ServeResource(context, "<error>Missing API key</error>", "application/xml", 500);
return;
}
string encoded = Uri.EscapeDataString(target);
string apiPrefix = Program.GetAppConfig("CriminalIpApiPrefix");
string url = $"{apiPrefix}asset/ip/report?ip={encoded}&full=true";
var request = new HttpRequestMessage(HttpMethod.Get, url);
request.Headers.Add("x-api-key", apiKey);
request.Headers.Add("User-Agent", context.Request.UserAgent);
HttpResponseMessage response = await _httpClient.SendAsync(request);
string content = await response.Content.ReadAsStringAsync();
context.Response.StatusCode = (int)response.StatusCode;
Server.ServeResource(context, content, "application/json", (int)response.StatusCode);
}
catch (Exception ex)
{
Server.ServeResource(context, $"<error>{ex.Message}</error>", "application/xml", 500);
}
}
}
}