@@ -52,8 +52,8 @@ func TestAudit_HMACFields(t *testing.T) {
52
52
require .NoError (t , err )
53
53
54
54
// Request 1
55
- // Enable the audit device. A test probe request will audited along with the associated
56
- // to the creation response
55
+ // Enable the audit device. A test probe request will audited along
56
+ // with the associated creation response
57
57
_ , err = client .Logical ().Write ("sys/audit/" + devicePath , deviceData )
58
58
require .NoError (t , err )
59
59
@@ -212,3 +212,89 @@ func TestAudit_HMACFields(t *testing.T) {
212
212
require .True (t , strings .HasPrefix (wrapInfo ["token" ].(string ), hmacPrefix ))
213
213
require .Equal (t , wrapInfo ["token" ].(string ), hashedWrapToken )
214
214
}
215
+
216
+ // TestAudit_Headers validates that headers are audited correctly. This includes
217
+ // the default headers (x-correlation-id and user-agent) along with user-specified
218
+ // headers.
219
+ func TestAudit_Headers (t * testing.T ) {
220
+ cluster := minimal .NewTestSoloCluster (t , nil )
221
+ client := cluster .Cores [0 ].Client
222
+
223
+ tempDir := t .TempDir ()
224
+ logFile , err := os .CreateTemp (tempDir , "" )
225
+ require .NoError (t , err )
226
+ devicePath := "file"
227
+ deviceData := map [string ]any {
228
+ "type" : "file" ,
229
+ "description" : "" ,
230
+ "local" : false ,
231
+ "options" : map [string ]any {
232
+ "file_path" : logFile .Name (),
233
+ },
234
+ }
235
+
236
+ _ , err = client .Logical ().Write ("sys/config/auditing/request-headers/x-some-header" , map [string ]interface {}{
237
+ "hmac" : false ,
238
+ })
239
+ require .NoError (t , err )
240
+
241
+ // User-Agent header is audited by default
242
+ client .AddHeader ("User-Agent" , "foo-agent" )
243
+
244
+ // X-Some-Header has been added to audited headers manually
245
+ client .AddHeader ("X-Some-Header" , "some-value" )
246
+
247
+ // X-Some-Other-Header will not be audited
248
+ client .AddHeader ("X-Some-Other-Header" , "some-other-value" )
249
+
250
+ // Request 1
251
+ // Enable the audit device. A test probe request will audited along
252
+ // with the associated creation response
253
+ _ , err = client .Logical ().Write ("sys/audit/" + devicePath , deviceData )
254
+ require .NoError (t , err )
255
+
256
+ // Request 2
257
+ // Ensure the device has been created.
258
+ devices , err := client .Sys ().ListAudit ()
259
+ require .NoError (t , err )
260
+ require .Len (t , devices , 1 )
261
+
262
+ // Request 3
263
+ resp , err := client .Sys ().SealStatus ()
264
+ require .NoError (t , err )
265
+ require .NotEmpty (t , resp )
266
+
267
+ expectedHeaders := map [string ]interface {}{
268
+ "user-agent" : []interface {}{"foo-agent" },
269
+ "x-some-header" : []interface {}{"some-value" },
270
+ }
271
+
272
+ entries := make ([]map [string ]interface {}, 0 )
273
+ scanner := bufio .NewScanner (logFile )
274
+
275
+ for scanner .Scan () {
276
+ entry := make (map [string ]interface {})
277
+
278
+ err := json .Unmarshal (scanner .Bytes (), & entry )
279
+ require .NoError (t , err )
280
+
281
+ request , ok := entry ["request" ].(map [string ]interface {})
282
+ require .True (t , ok )
283
+
284
+ // test probe will not have headers set
285
+ requestPath , ok := request ["path" ].(string )
286
+ require .True (t , ok )
287
+
288
+ if requestPath != "sys/audit/test" {
289
+ headers , ok := request ["headers" ].(map [string ]interface {})
290
+
291
+ require .True (t , ok )
292
+ require .Equal (t , expectedHeaders , headers )
293
+ }
294
+
295
+ entries = append (entries , entry )
296
+ }
297
+
298
+ // This count includes the initial test probe upon creation of the audit device
299
+ require .Equal (t , 4 , len (entries ))
300
+ }
0 commit comments