@@ -635,27 +635,13 @@ func (t templateHelpers) jsonFromJWT(path string, token string) interface{} {
635635 return ""
636636 }
637637
638- decode := func (seg string ) (interface {}, bool ) {
639- b , err := base64 .RawURLEncoding .DecodeString (seg )
640- if err != nil {
641- log .Error ("error decoding jwt segment: " , err )
642- return nil , false
643- }
644- var v interface {}
645- if err := json .Unmarshal (b , & v ); err != nil {
646- log .Error ("error unmarshalling jwt segment: " , err )
647- return nil , false
648- }
649- return v , true
650- }
651-
652- composite := make (map [string ]interface {})
653- if h , ok := decode (parts [0 ]); ok {
654- composite ["header" ] = h
655- }
656- if p , ok := decode (parts [1 ]); ok {
657- composite ["payload" ] = p
658- }
638+ composite := make (map [string ]interface {})
639+ if h , ok := decodeJWTSegment (parts [0 ]); ok {
640+ composite ["header" ] = h
641+ }
642+ if p , ok := decodeJWTSegment (parts [1 ]); ok {
643+ composite ["payload" ] = p
644+ }
659645
660646 jsonBytes , err := json .Marshal (composite )
661647 if err != nil {
@@ -677,6 +663,22 @@ func (t templateHelpers) jsonFromJWT(path string, token string) interface{} {
677663 }
678664}
679665
666+ // decodeJWTSegment decodes a single JWT segment (header or payload) into a generic map/array.
667+ // It returns the decoded JSON value and a boolean indicating success.
668+ func decodeJWTSegment (seg string ) (interface {}, bool ) {
669+ b , err := base64 .RawURLEncoding .DecodeString (seg )
670+ if err != nil {
671+ log .Error ("error decoding jwt segment: " , err )
672+ return nil , false
673+ }
674+ var v interface {}
675+ if err := json .Unmarshal (b , & v ); err != nil {
676+ log .Error ("error unmarshalling jwt segment: " , err )
677+ return nil , false
678+ }
679+ return v , true
680+ }
681+
680682func sumNumbers (numbers []string , format string ) string {
681683 var sum float64 = 0
682684 for _ , number := range numbers {
0 commit comments