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