1
0
Fork 0
mirror of https://gitlab.com/pnx-tools/dns-updater.git synced 2026-06-16 05:54:56 +02:00

ip/resolver: move services that just parses the ip from a http response to use basic_http service instead.

This commit is contained in:
Henrik Hautakoski 2023-08-15 09:39:13 +02:00
parent 2ddf2dadd7
commit ab15df5258
7 changed files with 20 additions and 221 deletions

View file

@ -1,39 +0,0 @@
package ifconfigme
import (
"io"
"net"
"net/http"
"strings"
)
type Service struct {
url string
}
func New() *Service {
return &Service{
url: "https://ifconfig.me/ip",
}
}
func (s Service) Name() string {
return "ifconfig.me"
}
func (s Service) Lookup() (net.IP, error) {
resp, err := http.DefaultClient.Get(s.url)
if err != nil {
return nil, err
}
body, err := io.ReadAll(resp.Body)
if err != nil {
return nil, err
}
// Trim spaces and stuff.
ip_str := strings.TrimSpace(string(body))
return net.ParseIP(ip_str), err
}

View file

@ -1,31 +0,0 @@
package ifconfigme
import (
"net"
"net/http"
"net/http/httptest"
"testing"
"github.com/stretchr/testify/assert"
)
func TestService_Name(t *testing.T) {
s := Service{}
assert.Equal(t, "ifconfig.me", s.Name())
}
func TestService_Lookup(t *testing.T) {
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
_, err := w.Write([]byte("113.145.244.129"))
assert.NoError(t, err)
}))
defer server.Close()
s := Service{url: server.URL}
ip, err := s.Lookup()
assert.NoError(t, err)
assert.Equal(t, net.IPv4(113, 145, 244, 129), ip)
}

View file

@ -1,35 +0,0 @@
package ipecho
import (
"io"
"net"
"net/http"
)
type Service struct {
url string
}
func New() *Service {
return &Service{
url: "http://ipecho.net/plain",
}
}
func (s Service) Name() string {
return "ipecho"
}
func (s Service) Lookup() (net.IP, error) {
resp, err := http.DefaultClient.Get(s.url)
if err != nil {
return nil, err
}
body, err := io.ReadAll(resp.Body)
if err != nil {
return nil, err
}
return net.ParseIP(string(body)), nil
}

View file

@ -1,31 +0,0 @@
package ipecho
import (
"net"
"net/http"
"net/http/httptest"
"testing"
"github.com/stretchr/testify/assert"
)
func TestService_Name(t *testing.T) {
s := Service{}
assert.Equal(t, "ipecho", s.Name())
}
func TestService_Lookup(t *testing.T) {
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
_, err := w.Write([]byte("188.242.103.22"))
assert.NoError(t, err)
}))
defer server.Close()
s := Service{url: server.URL}
ip, err := s.Lookup()
assert.NoError(t, err)
assert.Equal(t, net.IPv4(188, 242, 103, 22), ip)
}

View file

@ -1,46 +0,0 @@
package ipme
import (
"io"
"net"
"net/http"
"strings"
)
type Service struct {
url string
}
func New() *Service {
return &Service{
url: "https://ip.me",
}
}
func (s Service) Name() string {
return "ip.me"
}
func (s Service) Lookup() (net.IP, error) {
req, err := http.NewRequest("GET", s.url, nil)
if err != nil {
return nil, err
}
req.Header.Add("User-Agent", "curl")
resp, err := http.DefaultClient.Do(req)
if err != nil {
return nil, err
}
body, err := io.ReadAll(resp.Body)
if err != nil {
return nil, err
}
// Trim spaces and stuff.
ip_str := strings.TrimSpace(string(body))
return net.ParseIP(ip_str), err
}

View file

@ -1,33 +0,0 @@
package ipme
import (
"net"
"net/http"
"net/http/httptest"
"testing"
"github.com/stretchr/testify/assert"
)
func TestService_Name(t *testing.T) {
s := Service{}
assert.Equal(t, "ip.me", s.Name())
}
func TestService_Lookup(t *testing.T) {
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
assert.Equal(t, "curl", r.Header.Get("User-Agent"))
_, err := w.Write([]byte("255.240.85.2"))
assert.NoError(t, err)
}))
defer server.Close()
s := Service{url: server.URL}
ip, err := s.Lookup()
assert.NoError(t, err)
assert.Equal(t, net.IPv4(255, 240, 85, 2), ip)
}

View file

@ -3,10 +3,9 @@ package lookup
import (
"errors"
"net"
"net/http"
"dnsupdater/ip/resolver/ifconfigme"
"dnsupdater/ip/resolver/ipecho"
"dnsupdater/ip/resolver/ipme"
"dnsupdater/ip/resolver/basic_http"
"dnsupdater/ip/resolver/jsonip"
)
@ -39,7 +38,22 @@ func Lookup() (net.IP, error) {
func init() {
Provide(jsonip.New())
Provide(ifconfigme.New())
Provide(ipme.New())
Provide(ipecho.New())
Provide(&basic_http.Service{
ServiceName: "ifconfig.me",
Url: "https://ifconfig.me/ip",
})
Provide(&basic_http.Service{
ServiceName: "ip.me",
Url: "https://ip.me",
Headers: http.Header{
"User-Agent": []string{"curl"},
},
})
Provide(&basic_http.Service{
ServiceName: "ipecho",
Url: "http://ipecho.net/plain",
})
}