refactor(repo): consolidate openflare-server to root and move subprojects to internal/apps

- Merge all files inside openflare-server to the repository root directory.
- Relocate agent, relay, and flared subprojects from internal/ to internal/apps/.
- Combine docker-compose files and update build context paths to root.
- Update GitHub workflows and Dockerfiles to refer to new directories and package names.
- Rewrite Go package imports across all files.
- Resolve database renew test race condition and clean up docs.
This commit is contained in:
ryan
2026-06-19 14:23:29 +08:00
parent 19d476ed7f
commit 63cd906cfc
1064 changed files with 366 additions and 1397 deletions
+81
View File
@@ -0,0 +1,81 @@
// Copyright 2026 Arctel.net
// SPDX-License-Identifier: Apache-2.0
// Package geoip provides OpenFlare-compatible GeoIP lookup helpers.
package geoip
import (
"errors"
"net"
"strings"
pkggeoip "github.com/Rain-kl/Wavelet/pkg/geoip"
)
// LookupView is the legacy OpenFlare GeoIP lookup response shape.
type LookupView struct {
Provider string `json:"provider"`
IP string `json:"ip"`
ISOCode string `json:"iso_code"`
Name string `json:"name"`
Latitude *float64 `json:"latitude,omitempty"`
Longitude *float64 `json:"longitude,omitempty"`
}
const (
errProviderInvalid = "归属方式仅支持 disabled、mmdb、ip-api、geojs、ipinfo"
errIPEmpty = "IP 不能为空"
errIPInvalid = "IP 格式无效"
errLookupEmpty = "未获取到 IP 归属结果"
)
// IsValidProvider reports whether provider is a supported GeoIP backend.
func IsValidProvider(provider string) bool {
return pkggeoip.IsValidProvider(provider)
}
// GeoInfoFromIP resolves geographic information using the configured default provider.
func GeoInfoFromIP(ip net.IP) (*pkggeoip.GeoInfo, error) {
return pkggeoip.GetGeoInfo(ip)
}
// Lookup resolves geographic information for rawIP using the given provider.
func Lookup(provider, rawIP string) (*LookupView, error) {
trimmedProvider := strings.TrimSpace(provider)
if !pkggeoip.IsValidProvider(trimmedProvider) {
return nil, errors.New(errProviderInvalid)
}
trimmedIP := strings.TrimSpace(rawIP)
if trimmedIP == "" {
return nil, errors.New(errIPEmpty)
}
parsedIP := net.ParseIP(trimmedIP)
if parsedIP == nil {
return nil, errors.New(errIPInvalid)
}
if trimmedProvider == pkggeoip.ProviderDisabled {
return &LookupView{
Provider: trimmedProvider,
IP: parsedIP.String(),
}, nil
}
info, err := pkggeoip.LookupGeoInfoWithProvider(trimmedProvider, parsedIP)
if err != nil {
return nil, err
}
if info == nil {
return nil, errors.New(errLookupEmpty)
}
return &LookupView{
Provider: trimmedProvider,
IP: parsedIP.String(),
ISOCode: info.ISOCode,
Name: info.Name,
Latitude: info.Latitude,
Longitude: info.Longitude,
}, nil
}
@@ -0,0 +1,73 @@
// Copyright 2026 Arctel.net
// SPDX-License-Identifier: Apache-2.0
package geoip
import (
"net"
"testing"
pkggeoip "github.com/Rain-kl/Wavelet/pkg/geoip"
)
type fakeLookupProvider struct{}
func (f *fakeLookupProvider) Name() string { return "fake-lookup" }
func (f *fakeLookupProvider) GetGeoInfo(_ net.IP) (*pkggeoip.GeoInfo, error) {
lat := 37.7749
lon := -122.4194
return &pkggeoip.GeoInfo{
ISOCode: "US",
Name: "United States",
Latitude: &lat,
Longitude: &lon,
}, nil
}
func (f *fakeLookupProvider) UpdateDatabase() error { return nil }
func (f *fakeLookupProvider) Close() error { return nil }
func TestLookupWithProvider(t *testing.T) {
previousFactory := pkggeoip.ProviderFactoryForTest()
pkggeoip.SetProviderFactoryForTest(func(provider string) (pkggeoip.GeoIPService, error) {
return &fakeLookupProvider{}, nil
})
t.Cleanup(func() {
pkggeoip.SetProviderFactoryForTest(previousFactory)
})
view, err := Lookup("ipinfo", "8.8.8.8")
if err != nil {
t.Fatalf("Lookup() error = %v", err)
}
if view.Provider != "ipinfo" || view.IP != "8.8.8.8" {
t.Fatalf("unexpected lookup view: %+v", view)
}
if view.ISOCode != "US" || view.Name != "United States" {
t.Fatalf("unexpected geo fields: %+v", view)
}
if view.Latitude == nil || view.Longitude == nil {
t.Fatalf("expected coordinates, got %+v", view)
}
}
func TestLookupRejectsInvalidInput(t *testing.T) {
if _, err := Lookup("invalid", "8.8.8.8"); err == nil {
t.Fatal("expected invalid provider to fail")
}
if _, err := Lookup("ipinfo", "not-an-ip"); err == nil {
t.Fatal("expected invalid IP to fail")
}
}
func TestLookupDisabledProvider(t *testing.T) {
view, err := Lookup("disabled", "8.8.8.8")
if err != nil {
t.Fatalf("Lookup() error = %v", err)
}
if view.Provider != "disabled" || view.IP != "8.8.8.8" {
t.Fatalf("unexpected disabled view: %+v", view)
}
}