@@ -289,28 +289,11 @@ func (cb *clientCertificateClaimBuilder) AddClaims(_ context.Context, r *Request
289289// The returned builders do not include those claims derived from HTTP requests. Claims derived from HTTP
290290// requests are handled by NewRequestBuilders and DecodeServerRequest.
291291func NewClaimBuilders (n random.Noncer , client xhttpclient.Interface , o Options ) (ClaimBuilders , error ) {
292- var (
293- builders = ClaimBuilders {requestClaimBuilder {}}
294- staticClaimBuilder = make (staticClaimBuilder )
295- )
296-
297- if o .Remote != nil { // scan the metadata looking for static values that should be applied when invoking the remote server
298- metadata := make (map [string ]interface {})
299- for _ , value := range o .Metadata {
300- switch {
301- case len (value .Key ) == 0 :
302- return nil , ErrMissingKey
303- case value .IsFromHTTP ():
304- continue
305- case ! value .IsStatic ():
306- return nil , fmt .Errorf ("a value is required for the static metadata: %s" , value .Key )
307- default :
308- msg , err := value .RawMessage ()
309- if err != nil {
310- return nil , err
311- }
312- metadata [value .Key ] = msg
313- }
292+ builders := ClaimBuilders {requestClaimBuilder {}}
293+ if o .Remote != nil {
294+ metadata , err := getStaticValues (o .Metadata )
295+ if err != nil {
296+ return nil , fmt .Errorf ("remote claim builder configuration failure: metadata error: %w" , err )
314297 }
315298
316299 remoteClaimBuilder , err := newRemoteClaimBuilder (client , metadata , o .Remote )
@@ -321,31 +304,12 @@ func NewClaimBuilders(n random.Noncer, client xhttpclient.Interface, o Options)
321304 builders = append (builders , remoteClaimBuilder )
322305 }
323306
324- for _ , value := range o .Claims {
325- switch {
326- case len (value .Key ) == 0 :
327- return nil , ErrMissingKey
328-
329- case value .IsFromHTTP ():
330- continue
331-
332- case ! value .IsStatic ():
333- return nil , fmt .Errorf ("a value is required for the static claim: %s" , value .Key )
334-
335- default :
336- msg , err := value .RawMessage ()
337- if err != nil {
338- return nil , err
339- }
340-
341- staticClaimBuilder [value .Key ] = msg
342- }
343- }
344-
345- if len (staticClaimBuilder ) > 0 {
346- builders = append (builders , staticClaimBuilder )
307+ staticClaims , err := getStaticValues (o .Claims )
308+ if err != nil {
309+ return nil , fmt .Errorf ("static claim builder configuration failure: %w" , err )
347310 }
348311
312+ builders = append (builders , staticClaimBuilder (staticClaims ))
349313 if o .Nonce && n != nil {
350314 builders = append (builders , nonceClaimBuilder {n : n })
351315 }
@@ -371,3 +335,26 @@ func NewClaimBuilders(n random.Noncer, client xhttpclient.Interface, o Options)
371335
372336 return builders , err
373337}
338+
339+ func getStaticValues (vals []Value ) (map [string ]any , error ) {
340+ var errs []error
341+
342+ m := make (map [string ]any )
343+ for _ , value := range vals {
344+ if len (value .Key ) == 0 {
345+ errs = append (errs , fmt .Errorf ("valid static field `%s`: %w" , value .Key , ErrVariableNotAllowed ))
346+
347+ continue
348+ }
349+
350+ if value .IsFromHTTP () {
351+ continue
352+ }
353+
354+ msg , err := value .RawMessage ()
355+ errs = append (errs , err )
356+ m [value .Key ] = msg
357+ }
358+
359+ return m , errors .Join (errs ... )
360+ }
0 commit comments