@@ -2,6 +2,9 @@ package app
22
33import (
44 "fmt"
5+ "net"
6+ "runtime"
7+ "strings"
58 "sync/atomic"
69 "time"
710
@@ -10,7 +13,7 @@ import (
1013 "github.com/aws/aws-sdk-go/aws/session"
1114 "github.com/aws/aws-sdk-go/service/route53"
1215 "github.com/crazy-max/ddns-route53/internal/config"
13- "github.com/crazy-max/ddns-route53/internal/utl "
16+ "github.com/crazy-max/ddns-route53/pkg/identme "
1417 "github.com/hako/durafmt"
1518 "github.com/robfig/cron/v3"
1619 "github.com/rs/zerolog/log"
@@ -22,9 +25,10 @@ type Client struct {
2225 loc * time.Location
2326 cron * cron.Cron
2427 r53 * route53.Route53
28+ im * identme.Client
2529 jobID cron.EntryID
26- lastIPv4 string
27- lastIPv6 string
30+ lastIPv4 net. IP
31+ lastIPv6 net. IP
2832 locker uint32
2933}
3034
@@ -50,6 +54,10 @@ func New(cfg *config.Configuration, loc *time.Location) (*Client, error) {
5054 cron .SecondOptional | cron .Minute | cron .Hour | cron .Dom | cron .Month | cron .Dow | cron .Descriptor ),
5155 )),
5256 r53 : route53 .New (sess , & aws.Config {Credentials : creds }),
57+ im : identme .NewClient (
58+ fmt .Sprintf ("ddns-route53/%s go/%s %s" , cfg .App .Version , runtime .Version ()[2 :], strings .Title (runtime .GOOS )),
59+ cfg .Flags .MaxRetries ,
60+ ),
5361 }, nil
5462}
5563
@@ -95,56 +103,57 @@ func (c *Client) Run() {
95103 c .cron .Entry (c .jobID ).Next )
96104 }
97105
98- // Get current WAN IP
99- wanIPv4 := ""
106+ var wanIPv4 net.IP
100107 if c .cfg .Route53 .HandleIPv4 {
101- wanIPv4 , err = utl . WanIPv4 ()
108+ wanIPv4 , err = c . im . IPv4 ()
102109 if err != nil {
103- log .Warn ().Err (err ).Msg ("Cannot get WAN IPv4 address" )
110+ log .Error ().Err (err ).Msg ("Cannot retrieve WAN IPv4 address" )
104111 } else {
105112 log .Info ().Msgf ("Current WAN IPv4: %s" , wanIPv4 )
106113 }
107- } else {
108- log .Debug ().Msg ("" )
109114 }
110115
111- wanIPv6 := ""
116+ var wanIPv6 net. IP
112117 if c .cfg .Route53 .HandleIPv6 {
113- wanIPv6 , err = utl . WanIPv6 ()
118+ wanIPv6 , err = c . im . IPv6 ()
114119 if err != nil {
115- log .Warn ().Err (err ).Msg ("Cannot get WAN IPv6 address" )
120+ log .Error ().Err (err ).Msg ("Cannot retrieve WAN IPv6 address" )
116121 } else {
117122 log .Info ().Msgf ("Current WAN IPv6: %s" , wanIPv6 )
118123 }
119124 }
120125
121- // Skip if last IP is identical
122- if wanIPv4 == c .lastIPv4 && wanIPv6 == c .lastIPv6 {
123- log .Info ().Msg ("WAN IPv4/IPv6 addresses have not changed since the last update. Skipping..." )
126+ if wanIPv4 == nil && wanIPv6 == nil {
127+ return
128+ }
129+
130+ // Skip if last IP is identical or empty
131+ if wanIPv4 .Equal (c .lastIPv4 ) && wanIPv6 .Equal (c .lastIPv6 ) {
132+ log .Info ().Msg ("WAN IPv4/IPv6 addresses have not changed since last update. Skipping..." )
124133 return
125134 }
126135
127136 // Create Route53 changes
128137 r53Changes := make ([]* route53.Change , len (c .cfg .Route53 .RecordsSet ))
129138 for i , rs := range c .cfg .Route53 .RecordsSet {
130- if wanIPv4 == "" && rs .Type == route53 .RRTypeA {
139+ if wanIPv4 == nil && rs .Type == route53 .RRTypeA {
131140 log .Error ().Msgf ("No WAN IPv4 address available to update %s record" , rs .Name )
132141 continue
133- } else if wanIPv6 == "" && rs .Type == route53 .RRTypeAaaa {
142+ } else if wanIPv6 == nil && rs .Type == route53 .RRTypeAaaa {
134143 log .Error ().Msgf ("No WAN IPv6 address available to update %s record" , rs .Name )
135144 continue
136145 }
137- wanIP := wanIPv4
146+ recordValue := aws . String ( wanIPv4 . String ())
138147 if rs .Type == route53 .RRTypeAaaa {
139- wanIP = wanIPv6
148+ recordValue = aws . String ( wanIPv6 . String ())
140149 }
141150 r53Changes [i ] = & route53.Change {
142151 Action : aws .String ("UPSERT" ),
143152 ResourceRecordSet : & route53.ResourceRecordSet {
144153 Name : aws .String (rs .Name ),
145154 Type : aws .String (rs .Type ),
146155 TTL : aws .Int64 (rs .TTL ),
147- ResourceRecords : []* route53.ResourceRecord {{Value : aws . String ( wanIP ) }},
156+ ResourceRecords : []* route53.ResourceRecord {{Value : recordValue }},
148157 },
149158 }
150159 }
0 commit comments