A Transparent and Verifiable Way to Sync the AT Protocol's PLC Directory

useragent in plc dir reqs

Changed files
+19 -1
cmd
plcbundle
commands
internal
plcclient
+8 -1
cmd/plcbundle/commands/common.go
··· 132 132 // Create PLC client if URL provided 133 133 var client *plcclient.Client 134 134 if opts.PLCURL != "" { 135 - client = plcclient.NewClient(opts.PLCURL) 135 + // Build user agent with version 136 + userAgent := fmt.Sprintf("plcbundle/%s", 137 + GetVersion()) 138 + 139 + client = plcclient.NewClient( 140 + opts.PLCURL, 141 + plcclient.WithUserAgent(userAgent), 142 + ) 136 143 } 137 144 138 145 // Set handle resolver URL from flag or option
+11
internal/plcclient/client.go
··· 19 19 httpClient *http.Client 20 20 rateLimiter *RateLimiter 21 21 logger Logger 22 + userAgent string 22 23 } 23 24 24 25 // Logger is a simple logging interface ··· 48 49 } 49 50 } 50 51 52 + // WithUserAgent sets a custom user agent string 53 + func WithUserAgent(userAgent string) ClientOption { 54 + return func(c *Client) { 55 + c.userAgent = userAgent 56 + } 57 + } 58 + 51 59 // WithTimeout sets a custom HTTP timeout 52 60 func WithTimeout(timeout time.Duration) ClientOption { 53 61 return func(c *Client) { ··· 75 83 }, 76 84 rateLimiter: NewRateLimiter(90, time.Minute), 77 85 logger: defaultLogger{}, 86 + userAgent: "plcbundle/dev", 78 87 } 79 88 80 89 for _, opt := range opts { ··· 153 162 if err != nil { 154 163 return nil, 0, err 155 164 } 165 + req.Header.Set("User-Agent", c.userAgent) 156 166 157 167 // Add query parameters 158 168 q := req.URL.Query() ··· 252 262 if err != nil { 253 263 return nil, err 254 264 } 265 + req.Header.Set("User-Agent", c.userAgent) 255 266 256 267 resp, err := c.httpClient.Do(req) 257 268 if err != nil {