diff --git a/backend/internal/handler/dto/mappers.go b/backend/internal/handler/dto/mappers.go index 371f4f52..4980fd66 100644 --- a/backend/internal/handler/dto/mappers.go +++ b/backend/internal/handler/dto/mappers.go @@ -218,11 +218,6 @@ func ProxyWithAccountCountFromService(p *service.ProxyWithAccountCount) *ProxyWi LatencyMs: p.LatencyMs, LatencyStatus: p.LatencyStatus, LatencyMessage: p.LatencyMessage, - IPAddress: p.IPAddress, - Country: p.Country, - CountryCode: p.CountryCode, - Region: p.Region, - City: p.City, } } diff --git a/backend/internal/handler/dto/types.go b/backend/internal/handler/dto/types.go index 0cbc809b..0da21233 100644 --- a/backend/internal/handler/dto/types.go +++ b/backend/internal/handler/dto/types.go @@ -134,11 +134,6 @@ type ProxyWithAccountCount struct { LatencyMs *int64 `json:"latency_ms,omitempty"` LatencyStatus string `json:"latency_status,omitempty"` LatencyMessage string `json:"latency_message,omitempty"` - IPAddress string `json:"ip_address,omitempty"` - Country string `json:"country,omitempty"` - CountryCode string `json:"country_code,omitempty"` - Region string `json:"region,omitempty"` - City string `json:"city,omitempty"` } type ProxyAccountSummary struct { diff --git a/backend/internal/repository/proxy_probe_service.go b/backend/internal/repository/proxy_probe_service.go index fb6f405e..ad7b6e1c 100644 --- a/backend/internal/repository/proxy_probe_service.go +++ b/backend/internal/repository/proxy_probe_service.go @@ -7,7 +7,6 @@ import ( "io" "log" "net/http" - "strings" "time" "github.com/Wei-Shaw/sub2api/internal/config" @@ -36,7 +35,7 @@ func NewProxyExitInfoProber(cfg *config.Config) service.ProxyExitInfoProber { } const ( - defaultIPInfoURL = "http://ip-api.com/json/?lang=zh-CN" + defaultIPInfoURL = "https://ipinfo.io/json" defaultProxyProbeTimeout = 30 * time.Second ) @@ -79,14 +78,10 @@ func (s *proxyProbeService) ProbeProxy(ctx context.Context, proxyURL string) (*s } var ipInfo struct { - Status string `json:"status"` - Message string `json:"message"` - Query string `json:"query"` - City string `json:"city"` - Region string `json:"region"` - RegionName string `json:"regionName"` - Country string `json:"country"` - CountryCode string `json:"countryCode"` + IP string `json:"ip"` + City string `json:"city"` + Region string `json:"region"` + Country string `json:"country"` } body, err := io.ReadAll(resp.Body) @@ -97,22 +92,11 @@ func (s *proxyProbeService) ProbeProxy(ctx context.Context, proxyURL string) (*s if err := json.Unmarshal(body, &ipInfo); err != nil { return nil, latencyMs, fmt.Errorf("failed to parse response: %w", err) } - if strings.ToLower(ipInfo.Status) != "success" { - if ipInfo.Message == "" { - ipInfo.Message = "ip-api request failed" - } - return nil, latencyMs, fmt.Errorf("ip-api request failed: %s", ipInfo.Message) - } - region := ipInfo.RegionName - if region == "" { - region = ipInfo.Region - } return &service.ProxyExitInfo{ - IP: ipInfo.Query, - City: ipInfo.City, - Region: region, - Country: ipInfo.Country, - CountryCode: ipInfo.CountryCode, + IP: ipInfo.IP, + City: ipInfo.City, + Region: ipInfo.Region, + Country: ipInfo.Country, }, latencyMs, nil } diff --git a/backend/internal/repository/proxy_probe_service_test.go b/backend/internal/repository/proxy_probe_service_test.go index f1cd5721..fe45adbb 100644 --- a/backend/internal/repository/proxy_probe_service_test.go +++ b/backend/internal/repository/proxy_probe_service_test.go @@ -21,7 +21,7 @@ type ProxyProbeServiceSuite struct { func (s *ProxyProbeServiceSuite) SetupTest() { s.ctx = context.Background() s.prober = &proxyProbeService{ - ipInfoURL: "http://ip-api.test/json/?lang=zh-CN", + ipInfoURL: "http://ipinfo.test/json", allowPrivateHosts: true, } } @@ -54,7 +54,7 @@ func (s *ProxyProbeServiceSuite) TestProbeProxy_Success() { s.setupProxyServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { seen <- r.RequestURI w.Header().Set("Content-Type", "application/json") - _, _ = io.WriteString(w, `{"status":"success","query":"1.2.3.4","city":"c","regionName":"r","country":"cc","countryCode":"CC"}`) + _, _ = io.WriteString(w, `{"ip":"1.2.3.4","city":"c","region":"r","country":"cc"}`) })) info, latencyMs, err := s.prober.ProbeProxy(s.ctx, s.proxySrv.URL) @@ -64,12 +64,11 @@ func (s *ProxyProbeServiceSuite) TestProbeProxy_Success() { require.Equal(s.T(), "c", info.City) require.Equal(s.T(), "r", info.Region) require.Equal(s.T(), "cc", info.Country) - require.Equal(s.T(), "CC", info.CountryCode) // Verify proxy received the request select { case uri := <-seen: - require.Contains(s.T(), uri, "ip-api.test", "expected request to go through proxy") + require.Contains(s.T(), uri, "ipinfo.test", "expected request to go through proxy") default: require.Fail(s.T(), "expected proxy to receive request") } diff --git a/backend/internal/service/admin_service.go b/backend/internal/service/admin_service.go index 21c8e00b..04b367e8 100644 --- a/backend/internal/service/admin_service.go +++ b/backend/internal/service/admin_service.go @@ -236,23 +236,21 @@ type ProxyBatchDeleteSkipped struct { // ProxyTestResult represents the result of testing a proxy type ProxyTestResult struct { - Success bool `json:"success"` - Message string `json:"message"` - LatencyMs int64 `json:"latency_ms,omitempty"` - IPAddress string `json:"ip_address,omitempty"` - City string `json:"city,omitempty"` - Region string `json:"region,omitempty"` - Country string `json:"country,omitempty"` - CountryCode string `json:"country_code,omitempty"` + Success bool `json:"success"` + Message string `json:"message"` + LatencyMs int64 `json:"latency_ms,omitempty"` + IPAddress string `json:"ip_address,omitempty"` + City string `json:"city,omitempty"` + Region string `json:"region,omitempty"` + Country string `json:"country,omitempty"` } -// ProxyExitInfo represents proxy exit information from ip-api.com +// ProxyExitInfo represents proxy exit information from ipinfo.io type ProxyExitInfo struct { - IP string - City string - Region string - Country string - CountryCode string + IP string + City string + Region string + Country string } // ProxyExitInfoProber tests proxy connectivity and retrieves exit information @@ -1342,25 +1340,19 @@ func (s *adminServiceImpl) TestProxy(ctx context.Context, id int64) (*ProxyTestR latency := latencyMs s.saveProxyLatency(ctx, id, &ProxyLatencyInfo{ - Success: true, - LatencyMs: &latency, - Message: "Proxy is accessible", - IPAddress: exitInfo.IP, - Country: exitInfo.Country, - CountryCode: exitInfo.CountryCode, - Region: exitInfo.Region, - City: exitInfo.City, - UpdatedAt: time.Now(), + Success: true, + LatencyMs: &latency, + Message: "Proxy is accessible", + UpdatedAt: time.Now(), }) return &ProxyTestResult{ - Success: true, - Message: "Proxy is accessible", - LatencyMs: latencyMs, - IPAddress: exitInfo.IP, - City: exitInfo.City, - Region: exitInfo.Region, - Country: exitInfo.Country, - CountryCode: exitInfo.CountryCode, + Success: true, + Message: "Proxy is accessible", + LatencyMs: latencyMs, + IPAddress: exitInfo.IP, + City: exitInfo.City, + Region: exitInfo.Region, + Country: exitInfo.Country, }, nil } @@ -1380,15 +1372,10 @@ func (s *adminServiceImpl) probeProxyLatency(ctx context.Context, proxy *Proxy) latency := latencyMs s.saveProxyLatency(ctx, proxy.ID, &ProxyLatencyInfo{ - Success: true, - LatencyMs: &latency, - Message: "Proxy is accessible", - IPAddress: exitInfo.IP, - Country: exitInfo.Country, - CountryCode: exitInfo.CountryCode, - Region: exitInfo.Region, - City: exitInfo.City, - UpdatedAt: time.Now(), + Success: true, + LatencyMs: &latency, + Message: "Proxy is accessible", + UpdatedAt: time.Now(), }) } @@ -1469,11 +1456,6 @@ func (s *adminServiceImpl) attachProxyLatency(ctx context.Context, proxies []Pro proxies[i].LatencyStatus = "failed" } proxies[i].LatencyMessage = info.Message - proxies[i].IPAddress = info.IPAddress - proxies[i].Country = info.Country - proxies[i].CountryCode = info.CountryCode - proxies[i].Region = info.Region - proxies[i].City = info.City } } diff --git a/backend/internal/service/proxy.go b/backend/internal/service/proxy.go index 7eb7728f..9cb31808 100644 --- a/backend/internal/service/proxy.go +++ b/backend/internal/service/proxy.go @@ -35,11 +35,6 @@ type ProxyWithAccountCount struct { LatencyMs *int64 LatencyStatus string LatencyMessage string - IPAddress string - Country string - CountryCode string - Region string - City string } type ProxyAccountSummary struct { diff --git a/backend/internal/service/proxy_latency_cache.go b/backend/internal/service/proxy_latency_cache.go index 4a1cc77b..2901df0b 100644 --- a/backend/internal/service/proxy_latency_cache.go +++ b/backend/internal/service/proxy_latency_cache.go @@ -6,15 +6,10 @@ import ( ) type ProxyLatencyInfo struct { - Success bool `json:"success"` - LatencyMs *int64 `json:"latency_ms,omitempty"` - Message string `json:"message,omitempty"` - IPAddress string `json:"ip_address,omitempty"` - Country string `json:"country,omitempty"` - CountryCode string `json:"country_code,omitempty"` - Region string `json:"region,omitempty"` - City string `json:"city,omitempty"` - UpdatedAt time.Time `json:"updated_at"` + Success bool `json:"success"` + LatencyMs *int64 `json:"latency_ms,omitempty"` + Message string `json:"message,omitempty"` + UpdatedAt time.Time `json:"updated_at"` } type ProxyLatencyCache interface { diff --git a/frontend/src/api/admin/proxies.ts b/frontend/src/api/admin/proxies.ts index 1af2ea39..fc526f7a 100644 --- a/frontend/src/api/admin/proxies.ts +++ b/frontend/src/api/admin/proxies.ts @@ -126,7 +126,6 @@ export async function testProxy(id: number): Promise<{ city?: string region?: string country?: string - country_code?: string }> { const { data } = await apiClient.post<{ success: boolean @@ -136,7 +135,6 @@ export async function testProxy(id: number): Promise<{ city?: string region?: string country?: string - country_code?: string }>(`/admin/proxies/${id}/test`) return data } diff --git a/frontend/src/i18n/locales/en.ts b/frontend/src/i18n/locales/en.ts index 3dfbd834..09ebe8e1 100644 --- a/frontend/src/i18n/locales/en.ts +++ b/frontend/src/i18n/locales/en.ts @@ -1634,7 +1634,6 @@ export default { name: 'Name', protocol: 'Protocol', address: 'Address', - location: 'Location', status: 'Status', accounts: 'Accounts', latency: 'Latency', diff --git a/frontend/src/i18n/locales/zh.ts b/frontend/src/i18n/locales/zh.ts index daf39939..f01c1e4b 100644 --- a/frontend/src/i18n/locales/zh.ts +++ b/frontend/src/i18n/locales/zh.ts @@ -1719,7 +1719,6 @@ export default { name: '名称', protocol: '协议', address: '地址', - location: '地理位置', status: '状态', accounts: '账号数', latency: '延迟', diff --git a/frontend/src/types/index.ts b/frontend/src/types/index.ts index 5c1e307c..dabc260d 100644 --- a/frontend/src/types/index.ts +++ b/frontend/src/types/index.ts @@ -367,11 +367,6 @@ export interface Proxy { latency_ms?: number latency_status?: 'success' | 'failed' latency_message?: string - ip_address?: string - country?: string - country_code?: string - region?: string - city?: string created_at: string updated_at: string } diff --git a/frontend/src/views/admin/ProxiesView.vue b/frontend/src/views/admin/ProxiesView.vue index 3bd766b6..9d876972 100644 --- a/frontend/src/views/admin/ProxiesView.vue +++ b/frontend/src/views/admin/ProxiesView.vue @@ -117,21 +117,6 @@ {{ row.host }}:{{ row.port }} - -