@@ -59,6 +59,11 @@ func (k SDKAgentKeyType) string() string {
59
59
60
60
const execEnvVar = `AWS_EXECUTION_ENV`
61
61
62
+ var validChars = map [rune ]bool {
63
+ '!' : true , '#' : true , '$' : true , '%' : true , '&' : true , '\'' : true , '*' : true , '+' : true ,
64
+ '-' : true , '.' : true , '^' : true , '_' : true , '`' : true , '|' : true , '~' : true ,
65
+ }
66
+
62
67
// requestUserAgent is a build middleware that set the User-Agent for the request.
63
68
type requestUserAgent struct {
64
69
sdkAgent , userAgent * smithyhttp.UserAgentBuilder
@@ -178,24 +183,24 @@ func getOrAddRequestUserAgent(stack *middleware.Stack) (*requestUserAgent, error
178
183
179
184
// AddUserAgentKey adds the component identified by name to the User-Agent string.
180
185
func (u * requestUserAgent ) AddUserAgentKey (key string ) {
181
- u .userAgent .AddKey (key )
186
+ u .userAgent .AddKey (strings . Map ( rules , key ) )
182
187
}
183
188
184
189
// AddUserAgentKeyValue adds the key identified by the given name and value to the User-Agent string.
185
190
func (u * requestUserAgent ) AddUserAgentKeyValue (key , value string ) {
186
- u .userAgent .AddKeyValue (key , value )
191
+ u .userAgent .AddKeyValue (strings . Map ( rules , key ), strings . Map ( rules , value ) )
187
192
}
188
193
189
194
// AddUserAgentKey adds the component identified by name to the User-Agent string.
190
195
func (u * requestUserAgent ) AddSDKAgentKey (keyType SDKAgentKeyType , key string ) {
191
196
// TODO: should target sdkAgent
192
- u .userAgent .AddKey (keyType .string () + "/" + key )
197
+ u .userAgent .AddKey (keyType .string () + "/" + strings . Map ( rules , key ) )
193
198
}
194
199
195
200
// AddUserAgentKeyValue adds the key identified by the given name and value to the User-Agent string.
196
201
func (u * requestUserAgent ) AddSDKAgentKeyValue (keyType SDKAgentKeyType , key , value string ) {
197
202
// TODO: should target sdkAgent
198
- u .userAgent .AddKeyValue (keyType .string ()+ "/" + key , value )
203
+ u .userAgent .AddKeyValue (keyType .string (), strings . Map ( rules , key ) + "#" + strings . Map ( rules , value ) )
199
204
}
200
205
201
206
// ID the name of the middleware.
@@ -241,3 +246,16 @@ func updateHTTPHeader(request *smithyhttp.Request, header string, value string)
241
246
}
242
247
request .Header [header ] = append (request .Header [header ][:0 ], current )
243
248
}
249
+
250
+ func rules (r rune ) rune {
251
+ switch {
252
+ case r >= '0' && r <= '9' :
253
+ return r
254
+ case r >= 'A' && r <= 'Z' || r >= 'a' && r <= 'z' :
255
+ return r
256
+ case validChars [r ]:
257
+ return r
258
+ default :
259
+ return '-'
260
+ }
261
+ }
0 commit comments