mirror of
https://github.com/gnh1201/welsonjs.git
synced 2025-10-26 10:31:17 +00:00
Renamed the CitiQuery tool and related files to IpQuery for clarity. Updated all references from CitiApiKey and CitiApiPrefix to CriminalIpApiKey and CriminalIpApiPrefix in code, resources, and UI. Adjusted the editor UI and backend to use the new naming and API configuration.
63 lines
2.2 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
}
|