From c36a83c9b8efd595749d71b8c1457cd299314421 Mon Sep 17 00:00:00 2001 From: Henrik Hautakoski Date: Thu, 19 Feb 2026 10:23:11 +0100 Subject: [PATCH] resolver: make decoders return string instead of byte slice --- ip/resolver/decoder/jsonip.go | 8 ++------ ip/resolver/decoder/myip.go | 8 ++------ ip/resolver/http/service.go | 20 ++++++++++++-------- 3 files changed, 16 insertions(+), 20 deletions(-) diff --git a/ip/resolver/decoder/jsonip.go b/ip/resolver/decoder/jsonip.go index 3b5b850..5b6f053 100644 --- a/ip/resolver/decoder/jsonip.go +++ b/ip/resolver/decoder/jsonip.go @@ -5,16 +5,12 @@ import ( "io" ) -func Jsonip(r io.Reader) ([]byte, error) { +func Jsonip(r io.Reader) (string, error) { var v struct { Ip string `json:"ip"` Location string `json:"geo-ip"` Help string `json:"API Help"` } - var val []byte err := json.NewDecoder(r).Decode(&v) - if err == nil { - val = []byte(v.Ip) - } - return val, err + return v.Ip, err } diff --git a/ip/resolver/decoder/myip.go b/ip/resolver/decoder/myip.go index d820a48..e38ffd7 100644 --- a/ip/resolver/decoder/myip.go +++ b/ip/resolver/decoder/myip.go @@ -5,16 +5,12 @@ import ( "io" ) -func MyIP(r io.Reader) ([]byte, error) { +func MyIP(r io.Reader) (string, error) { var v struct { Ip string `json:"ip"` Country string `json:"country"` Cc string `json:"cc"` } - var val []byte err := json.NewDecoder(r).Decode(&v) - if err == nil { - val = []byte(v.Ip) - } - return val, err + return v.Ip, err } diff --git a/ip/resolver/http/service.go b/ip/resolver/http/service.go index d8771c5..5f5e6ec 100644 --- a/ip/resolver/http/service.go +++ b/ip/resolver/http/service.go @@ -1,6 +1,7 @@ package http import ( + "bufio" "context" "io" "net" @@ -11,7 +12,7 @@ import ( "dnsupdater/ip/internal" ) -type Decoder func(io.Reader) ([]byte, error) +type Decoder func(io.Reader) (string, error) type Service struct { ServiceName string @@ -31,16 +32,19 @@ func (s Service) Lookup(ctx context.Context) (net.IP, error) { } if s.Decoder == nil { - s.Decoder = io.ReadAll + s.Decoder = func(r io.Reader) (string, error) { + line, err := bufio.NewReader(r).ReadString('\n') + if err == nil || err == io.EOF { + line = strings.TrimRight(line, "\r\n") + line = strings.TrimSpace(line) + } + return line, err + } } body, err := s.Decoder(resp.Body) - if err != nil { + if err != nil && err != io.EOF { return nil, err } - - // Trim spaces and stuff. - ip_str := strings.TrimSpace(string(body)) - - return internal.ParseIP(ip_str) + return internal.ParseIP(string(body)) }