@@ -200,6 +200,8 @@ func (a AttributeValueFQN) Name() string {
200
200
201
201
// Structure capable of generating a split plan from a given set of data tags.
202
202
type granter struct {
203
+ logger * slog.Logger
204
+
203
205
// The data attributes (tags) that this granter is responsible for.
204
206
tags []AttributeValueFQN
205
207
@@ -235,7 +237,7 @@ func (r *granter) addGrant(fqn AttributeValueFQN, kas string, attr *policy.Attri
235
237
func (r * granter ) addMappedKey (fqn AttributeValueFQN , sk * policy.SimpleKasKey ) error {
236
238
key := sk .GetPublicKey ()
237
239
if key == nil || key .GetKid () == "" || key .GetPem () == "" {
238
- slog .Debug ("invalid cached key in policy service" ,
240
+ r . logger .Debug ("invalid cached key in policy service" ,
239
241
slog .String ("kas" , sk .GetKasUri ()),
240
242
slog .Any ("value" , fqn ),
241
243
)
@@ -252,15 +254,15 @@ func (r *granter) addMappedKey(fqn AttributeValueFQN, sk *policy.SimpleKasKey) e
252
254
253
255
rl , err := NewResourceLocator (sk .GetKasUri ())
254
256
if err != nil {
255
- slog .Debug ("invalid KAS URL in policy service" ,
257
+ r . logger .Debug ("invalid KAS URL in policy service" ,
256
258
slog .String ("kas" , sk .GetKasUri ()),
257
259
slog .Any ("value" , fqn ),
258
260
slog .Any ("error" , err ),
259
261
)
260
262
return fmt .Errorf ("invalid KAS URL in policy service associated with [%s]: %w" , fqn , err )
261
263
}
262
264
rl .identifier = key .GetKid ()
263
- slog .Debug ("added mapped key" ,
265
+ r . logger .Debug ("added mapped key" ,
264
266
slog .Any ("fqn" , fqn ),
265
267
slog .String ("kas" , sk .GetKasUri ()),
266
268
slog .String ("kid" , key .GetKid ()),
@@ -330,7 +332,7 @@ func (r *granter) addAllGrants(fqn AttributeValueFQN, ag grantableObject, attr *
330
332
// Check for mapped keys
331
333
for _ , k := range ag .GetKasKeys () {
332
334
if k == nil || k .GetKasUri () == "" {
333
- slog .Debug ("invalid KAS key in policy service" ,
335
+ r . logger .Debug ("invalid KAS key in policy service" ,
334
336
slog .Any ("simple_kas_key" , k ),
335
337
slog .Any ("value" , fqn ),
336
338
)
@@ -341,7 +343,7 @@ func (r *granter) addAllGrants(fqn AttributeValueFQN, ag grantableObject, attr *
341
343
result = r .typ
342
344
err := r .addMappedKey (fqn , k )
343
345
if err != nil {
344
- slog .Debug ("failed to add mapped key" ,
346
+ r . logger .Debug ("failed to add mapped key" ,
345
347
slog .Any ("fqn" , fqn ),
346
348
slog .String ("kas" , kasURI ),
347
349
slog .Any ("error" , err ),
@@ -367,7 +369,7 @@ func (r *granter) addAllGrants(fqn AttributeValueFQN, ag grantableObject, attr *
367
369
for _ , k := range g .GetKasKeys () {
368
370
err := r .addMappedKey (fqn , k )
369
371
if err != nil {
370
- slog .Warn ("failed to add mapped key" ,
372
+ r . logger .Warn ("failed to add mapped key" ,
371
373
slog .Any ("fqn" , fqn ),
372
374
slog .String ("kas" , kasURI ),
373
375
slog .Any ("error" , err ),
@@ -378,15 +380,15 @@ func (r *granter) addAllGrants(fqn AttributeValueFQN, ag grantableObject, attr *
378
380
}
379
381
ks := g .GetPublicKey ().GetCached ().GetKeys ()
380
382
if len (ks ) == 0 {
381
- slog .Debug ("no cached key in policy service" ,
383
+ r . logger .Debug ("no cached key in policy service" ,
382
384
slog .String ("kas" , kasURI ),
383
385
slog .Any ("value" , fqn ),
384
386
)
385
387
continue
386
388
}
387
389
for _ , k := range ks {
388
390
if k .GetKid () == "" || k .GetPem () == "" {
389
- slog .Debug ("invalid cached key in policy service" ,
391
+ r . logger .Debug ("invalid cached key in policy service" ,
390
392
slog .String ("kas" , kasURI ),
391
393
slog .Any ("value" , fqn ),
392
394
slog .Any ("key" , k ),
@@ -404,7 +406,7 @@ func (r *granter) addAllGrants(fqn AttributeValueFQN, ag grantableObject, attr *
404
406
}
405
407
err := r .addMappedKey (fqn , sk )
406
408
if err != nil {
407
- slog .Warn ("failed to add mapped key" ,
409
+ r . logger .Warn ("failed to add mapped key" ,
408
410
slog .Any ("fqn" , fqn ),
409
411
slog .String ("kas" , kasURI ),
410
412
slog .Any ("error" , err ),
@@ -426,7 +428,7 @@ func (r granter) byAttribute(fqn AttributeValueFQN) *keyAccessGrant {
426
428
}
427
429
428
430
// Gets a list of directory of KAS grants for a list of attribute FQNs
429
- func newGranterFromService (ctx context.Context , keyCache * kasKeyCache , as sdkconnect.AttributesServiceClient , fqns ... AttributeValueFQN ) (granter , error ) {
431
+ func newGranterFromService (ctx context.Context , logger * slog. Logger , keyCache * kasKeyCache , as sdkconnect.AttributesServiceClient , fqns ... AttributeValueFQN ) (granter , error ) {
430
432
fqnsStr := make ([]string , len (fqns ))
431
433
for i , v := range fqns {
432
434
fqnsStr [i ] = v .String ()
@@ -443,6 +445,7 @@ func newGranterFromService(ctx context.Context, keyCache *kasKeyCache, as sdkcon
443
445
}
444
446
445
447
grants := granter {
448
+ logger : logger ,
446
449
tags : fqns ,
447
450
grantTable : make (map [string ]* keyAccessGrant ),
448
451
keyCache : & rlKeyCache {c : make (map [ResourceLocator ]* policy.SimpleKasKey )},
@@ -455,23 +458,23 @@ func newGranterFromService(ctx context.Context, keyCache *kasKeyCache, as sdkcon
455
458
def := pair .GetAttribute ()
456
459
457
460
if def != nil {
458
- storeKeysToCache (def .GetGrants (), def .GetKasKeys (), keyCache , grants .keyCache )
461
+ storeKeysToCache (logger , def .GetGrants (), def .GetKasKeys (), keyCache , grants .keyCache )
459
462
}
460
463
v := pair .GetValue ()
461
464
gType := noKeysFound
462
465
if v != nil {
463
466
gType = grants .addAllGrants (fqn , v , def )
464
- storeKeysToCache (v .GetGrants (), v .GetKasKeys (), keyCache , grants .keyCache )
467
+ storeKeysToCache (logger , v .GetGrants (), v .GetKasKeys (), keyCache , grants .keyCache )
465
468
}
466
469
467
470
// If no more specific grant was found, then add the value grants
468
471
if gType == noKeysFound && def != nil {
469
472
gType = grants .addAllGrants (fqn , def , def )
470
- storeKeysToCache (def .GetGrants (), def .GetKasKeys (), keyCache , grants .keyCache )
473
+ storeKeysToCache (logger , def .GetGrants (), def .GetKasKeys (), keyCache , grants .keyCache )
471
474
}
472
475
if gType == noKeysFound && def .GetNamespace () != nil {
473
476
grants .addAllGrants (fqn , def .GetNamespace (), def )
474
- storeKeysToCache (def .GetNamespace ().GetGrants (), def .GetNamespace ().GetKasKeys (), keyCache , grants .keyCache )
477
+ storeKeysToCache (logger , def .GetNamespace ().GetGrants (), def .GetNamespace ().GetKasKeys (), keyCache , grants .keyCache )
475
478
}
476
479
}
477
480
@@ -515,11 +518,11 @@ func algProto2OcryptoKeyType(e policy.Algorithm) ocrypto.KeyType {
515
518
}
516
519
}
517
520
518
- func storeKeysToCache (kases []* policy.KeyAccessServer , keys []* policy.SimpleKasKey , c * kasKeyCache , kc * rlKeyCache ) {
521
+ func storeKeysToCache (logger * slog. Logger , kases []* policy.KeyAccessServer , keys []* policy.SimpleKasKey , c * kasKeyCache , kc * rlKeyCache ) {
519
522
for _ , kas := range kases {
520
523
keys := kas .GetPublicKey ().GetCached ().GetKeys ()
521
524
if len (keys ) == 0 {
522
- slog .Debug ("no cached key in policy service" , slog .String ("kas" , kas .GetUri ()))
525
+ logger .Debug ("no cached key in policy service" , slog .String ("kas" , kas .GetUri ()))
523
526
continue
524
527
}
525
528
for _ , ki := range keys {
@@ -535,7 +538,7 @@ func storeKeysToCache(kases []*policy.KeyAccessServer, keys []*policy.SimpleKasK
535
538
if kc != nil && ki .GetKid () != "" && ki .GetPem () != "" {
536
539
rl , err := NewResourceLocator (kas .GetUri ())
537
540
if err != nil {
538
- slog .Debug ("failed to create ResourceLocator" ,
541
+ logger .Debug ("failed to create ResourceLocator" ,
539
542
slog .String ("kas" , kas .GetUri ()),
540
543
slog .Any ("error" , err ),
541
544
)
@@ -570,7 +573,7 @@ func storeKeysToCache(kases []*policy.KeyAccessServer, keys []*policy.SimpleKasK
570
573
if kc != nil && key .GetPublicKey ().GetKid () != "" && key .GetPublicKey ().GetPem () != "" {
571
574
rl , err := NewResourceLocator (key .GetKasUri ())
572
575
if err != nil {
573
- slog .Debug ("failed to create ResourceLocator" ,
576
+ logger .Debug ("failed to create ResourceLocator" ,
574
577
slog .String ("kas" , key .GetKasUri ()),
575
578
slog .Any ("error" , err ),
576
579
)
@@ -585,8 +588,9 @@ func storeKeysToCache(kases []*policy.KeyAccessServer, keys []*policy.SimpleKasK
585
588
// Given a policy (list of data attributes or tags),
586
589
// get a set of grants from attribute values to KASes.
587
590
// Unlike `newGranterFromService`, this works offline.
588
- func newGranterFromAttributes (keyCache * kasKeyCache , attrs ... * policy.Value ) (granter , error ) {
591
+ func newGranterFromAttributes (logger * slog. Logger , keyCache * kasKeyCache , attrs ... * policy.Value ) (granter , error ) {
589
592
grants := granter {
593
+ logger : logger ,
590
594
grantTable : make (map [string ]* keyAccessGrant ),
591
595
mapTable : make (map [string ][]* ResourceLocator ),
592
596
tags : make ([]AttributeValueFQN , len (attrs )),
@@ -608,16 +612,16 @@ func newGranterFromAttributes(keyCache *kasKeyCache, attrs ...*policy.Value) (gr
608
612
}
609
613
610
614
if grants .addAllGrants (fqn , v , def ) != noKeysFound {
611
- storeKeysToCache (v .GetGrants (), v .GetKasKeys (), keyCache , grants .keyCache )
615
+ storeKeysToCache (logger , v .GetGrants (), v .GetKasKeys (), keyCache , grants .keyCache )
612
616
continue
613
617
}
614
618
// If no more specific grant was found, then add the attr grants
615
619
if grants .addAllGrants (fqn , def , def ) != noKeysFound {
616
- storeKeysToCache (def .GetGrants (), def .GetKasKeys (), keyCache , grants .keyCache )
620
+ storeKeysToCache (logger , def .GetGrants (), def .GetKasKeys (), keyCache , grants .keyCache )
617
621
continue
618
622
}
619
623
grants .addAllGrants (fqn , namespace , def )
620
- storeKeysToCache (namespace .GetGrants (), namespace .GetKasKeys (), keyCache , grants .keyCache )
624
+ storeKeysToCache (logger , namespace .GetGrants (), namespace .GetKasKeys (), keyCache , grants .keyCache )
621
625
}
622
626
623
627
return grants , nil
@@ -846,7 +850,7 @@ func (r *granter) insertKeysForAttribute(e attributeBooleanExpression) (booleanK
846
850
var err error
847
851
rl , err = NewResourceLocator (kas )
848
852
if err != nil {
849
- slog .Warn ("invalid KAS URL in policy service" ,
853
+ r . logger .Warn ("invalid KAS URL in policy service" ,
850
854
slog .String ("kas" , kas ),
851
855
slog .Any ("value" , term ),
852
856
slog .Any ("error" , err ),
@@ -859,7 +863,7 @@ func (r *granter) insertKeysForAttribute(e attributeBooleanExpression) (booleanK
859
863
}
860
864
op := ruleToOperator (clause .def .GetRule ())
861
865
if op == unspecified {
862
- slog .Warn ("unknown attribute rule type" , slog .Any ("rule" , clause ))
866
+ r . logger .Warn ("unknown attribute rule type" , slog .Any ("rule" , clause ))
863
867
}
864
868
kc := keyClause {
865
869
operator : op ,
@@ -888,7 +892,7 @@ func (r *granter) assignKeysTo(e attributeBooleanExpression) (booleanKeyExpressi
888
892
}
889
893
op := ruleToOperator (clause .def .GetRule ())
890
894
if op == unspecified {
891
- slog .Warn ("unknown attribute rule type" , slog .Any ("rule" , clause ))
895
+ r . logger .Warn ("unknown attribute rule type" , slog .Any ("rule" , clause ))
892
896
}
893
897
kc := keyClause {
894
898
operator : op ,
0 commit comments