@@ -23,6 +23,9 @@ func NewCloudflareDnsUpdateService(client HTTPClient) (*CloudflareDnsUpdateServi
23
23
ttl := viper .GetInt ("cloudflare.ttl" )
24
24
apikey := viper .GetString ("cloudflare.apiKey" )
25
25
zoneId := viper .GetString ("cloudflare.zoneId" )
26
+
27
+ log .Info ().Msg ("initializing cloudflare service" )
28
+
26
29
if len (baseUrl ) == 0 || ttl == 0 || len (apikey ) == 0 || len (zoneId ) == 0 {
27
30
return nil , ErrMissingInfoForServiceInit
28
31
}
@@ -64,6 +67,9 @@ func (c *CloudflareDnsUpdateService) UpdateRecord(request *DynDnsRequest) error
64
67
endpoint := fmt .Sprintf ("%s/zones/%s/dns_records" , c .baseUrl ,
65
68
c .zoneId )
66
69
70
+ logger := log .With ().Str ("func" , "UpdateRecord" ).Str ("registrar" , "cloudflare" ).Str ("endpoint" , endpoint ).Str ("domain" , request .Domain ).Str ("subdomain" , request .Subdomain ).Logger ()
71
+ logger .Info ().Msg ("building update request" )
72
+
67
73
req , err := http .NewRequest ("GET" , endpoint , nil )
68
74
69
75
var r CloudflareQueryResponse
@@ -73,14 +79,20 @@ func (c *CloudflareDnsUpdateService) UpdateRecord(request *DynDnsRequest) error
73
79
74
80
resp , err := c .client .Do (req )
75
81
if err != nil {
76
- return errors .New ("error getting cloudflare request" )
82
+ logger .Error ().Err (err ).Msg (ErrBuildingRequest .Error ())
83
+ return ErrBuildingRequest
77
84
}
78
85
79
86
b , _ := io .ReadAll (resp .Body )
80
87
err = json .Unmarshal (b , & r )
81
88
82
- if resp .StatusCode != http .StatusOK || len (r .Errors ) > 0 || err != nil {
83
- log .Error ().Msg ("could not query record:" + string (b ))
89
+ if err != nil {
90
+ logger .Error ().Err (err ).Msg (ErrParsingResponse .Error ())
91
+ return err
92
+ }
93
+
94
+ if resp .StatusCode != http .StatusOK || len (r .Errors ) > 0 {
95
+ logger .Error ().Interface ("response" , b ).Msg ("could not query record" )
84
96
return errors .New ("could not query record: " + string (b ))
85
97
}
86
98
@@ -95,8 +107,10 @@ func (c *CloudflareDnsUpdateService) UpdateRecord(request *DynDnsRequest) error
95
107
}
96
108
97
109
if len (id ) == 0 {
110
+ logger .Info ().Msg ("entry not found, creating new" )
98
111
return c .newRecord (request )
99
112
} else {
113
+ logger .Info ().Msg ("entry found, updating" )
100
114
return c .editExistingRecord (request , id )
101
115
}
102
116
}
@@ -111,35 +125,40 @@ func (c *CloudflareDnsUpdateService) newRecord(request *DynDnsRequest) error {
111
125
112
126
endpoint := fmt .Sprintf ("%s/zones/%s/dns_records" , c .baseUrl ,
113
127
c .zoneId )
114
- log .Info ().Str ("subdomain" , cloudflareRequest .Subdomain ).Str ("endpoint" , endpoint ).Str ("IP" , cloudflareRequest .IP ).Msg ("building update request" )
128
+
129
+ logger := log .With ().Str ("func" , "newRecord" ).Str ("registrar" , "cloudflare" ).Str ("subdomain" , cloudflareRequest .Subdomain ).Str ("endpoint" , endpoint ).Str ("IP" , cloudflareRequest .IP ).Logger ()
130
+ logger .Info ().Msg ("building new record request" )
115
131
116
132
body , err := json .Marshal (cloudflareRequest )
117
133
if err != nil {
118
- log .Error ().Err (err ).Msg ("marshalling failed" )
119
- return errors . New ( "could not parse request" )
134
+ logger .Error ().Err (err ).Msg (ErrBuildingRequest . Error () )
135
+ return ErrBuildingRequest
120
136
}
121
137
122
138
req , err := http .NewRequest ("POST" , endpoint , bytes .NewBuffer (body ))
123
139
if err != nil {
124
- log .Error ().Err (err ).Msg ("building request failed failed" )
125
- return errors . New ( "could not create request for cloudflare" )
140
+ logger .Error ().Err (err ).Msg (ErrBuildingRequest . Error () )
141
+ return ErrBuildingRequest
126
142
}
127
143
128
144
req .Header .Set ("Content-Type" , "application/json; charset=utf-8" )
129
145
req .Header .Set ("Authorization" , fmt .Sprintf ("Bearer %s" , c .apiKey ))
130
146
147
+ logger .Info ().Msg ("executing request" )
131
148
resp , err := c .client .Do (req )
132
149
if err != nil {
133
- log .Error ().Err (err ).Msg ("executing request failed" )
134
- return errors . New ( "could not execute request" )
150
+ logger .Error ().Err (err ).Msg (ErrExecutingRequest . Error () )
151
+ return ErrExecutingRequest
135
152
}
136
153
137
154
if resp .StatusCode != 200 {
138
155
b , _ := io .ReadAll (resp .Body )
139
- log .Error ().Msg ( "gandi rejected request" )
140
- return fmt . Errorf ( "cloudflare rejected request: %s" , string ( b ))
156
+ logger .Error ().Bytes ( "response" , b ). Msg ( ErrRegistrarRejectedRequest . Error () )
157
+ return ErrRegistrarRejectedRequest
141
158
}
142
159
160
+ logger .Info ().Msg ("request for new record successful" )
161
+
143
162
return nil
144
163
}
145
164
@@ -153,17 +172,19 @@ func (c *CloudflareDnsUpdateService) editExistingRecord(request *DynDnsRequest,
153
172
154
173
endpoint := fmt .Sprintf ("%s/zones/%s/dns_records/%s" , c .baseUrl ,
155
174
c .zoneId , id )
156
- log .Info ().Str ("subdomain" , cloudflareRequest .Subdomain ).Str ("endpoint" , endpoint ).Str ("IP" , cloudflareRequest .IP ).Msg ("building update request" )
175
+
176
+ logger := log .With ().Str ("func" , "editExistingRecord" ).Str ("registrar" , "cloudflare" ).Str ("subdomain" , cloudflareRequest .Subdomain ).Str ("endpoint" , endpoint ).Str ("IP" , cloudflareRequest .IP ).Logger ()
177
+ logger .Info ().Msg ("building request to edit record" )
157
178
158
179
body , err := json .Marshal (cloudflareRequest )
159
180
if err != nil {
160
- log .Error ().Err (err ).Msg ("marshalling failed" )
181
+ logger .Error ().Err (err ).Msg ("marshalling failed" )
161
182
return errors .New ("could not parse request" )
162
183
}
163
184
164
185
req , err := http .NewRequest ("PUT" , endpoint , bytes .NewBuffer (body ))
165
186
if err != nil {
166
- log .Error ().Err (err ).Msg ("building request failed failed" )
187
+ logger .Error ().Err (err ).Msg ("building request failed failed" )
167
188
return errors .New ("could not create request for cloudflare" )
168
189
}
169
190
@@ -172,13 +193,13 @@ func (c *CloudflareDnsUpdateService) editExistingRecord(request *DynDnsRequest,
172
193
173
194
resp , err := c .client .Do (req )
174
195
if err != nil {
175
- log .Error ().Err (err ).Msg ("executing request failed" )
196
+ logger .Error ().Err (err ).Msg ("executing request failed" )
176
197
return errors .New ("could not execute request" )
177
198
}
178
199
179
200
if resp .StatusCode != 200 {
180
201
b , _ := io .ReadAll (resp .Body )
181
- log .Error ().Msg ("cloudflare rejected request" )
202
+ logger .Error (). Bytes ( "response" , b ).Msg ("cloudflare rejected request" )
182
203
return fmt .Errorf ("cloudflare rejected request: %s" , string (b ))
183
204
}
184
205
0 commit comments