geoip_adapter.go 828 B

123456789101112131415161718192021222324252627
  1. package parser
  2. import "github.com/0xJacky/Nginx-UI/internal/geolite"
  3. // GeoLiteAdapter adapts the geolite.Service to the parser.GeoIPService interface.
  4. type GeoLiteAdapter struct {
  5. geoService *geolite.Service
  6. }
  7. // NewGeoLiteAdapter creates a new adapter.
  8. func NewGeoLiteAdapter(service *geolite.Service) *GeoLiteAdapter {
  9. return &GeoLiteAdapter{geoService: service}
  10. }
  11. // Search performs a geo IP lookup and converts the result to the parser's GeoLocation type.
  12. func (a *GeoLiteAdapter) Search(ip string) (*GeoLocation, error) {
  13. location, err := a.geoService.Search(ip)
  14. if err != nil || location == nil {
  15. return nil, err // No error, but no location found, or an actual error occurred.
  16. }
  17. return &GeoLocation{
  18. RegionCode: location.RegionCode,
  19. Province: location.Province,
  20. City: location.City,
  21. }, nil
  22. }