@@ -17,6 +17,7 @@ import (
17
17
"time"
18
18
19
19
"github.com/go-chi/chi"
20
+ "github.com/smallstep/ca-component/provisioner"
20
21
"github.com/smallstep/cli/crypto/tlsutil"
21
22
"github.com/smallstep/cli/jose"
22
23
)
@@ -397,7 +398,7 @@ type mockAuthority struct {
397
398
root func (shasum string ) (* x509.Certificate , error )
398
399
sign func (cr * x509.CertificateRequest , opts SignOptions , claims ... Claim ) (* x509.Certificate , * x509.Certificate , error )
399
400
renew func (cert * x509.Certificate ) (* x509.Certificate , * x509.Certificate , error )
400
- getProvisioners func () (map [ string ] * jose. JSONWebKeySet , error )
401
+ getProvisioners func () ([] * provisioner. Provisioner , error )
401
402
getEncryptedKey func (kid string ) (string , error )
402
403
}
403
404
@@ -444,11 +445,11 @@ func (m *mockAuthority) Renew(cert *x509.Certificate) (*x509.Certificate, *x509.
444
445
return m .ret1 .(* x509.Certificate ), m .ret2 .(* x509.Certificate ), m .err
445
446
}
446
447
447
- func (m * mockAuthority ) GetProvisioners () (map [ string ] * jose. JSONWebKeySet , error ) {
448
+ func (m * mockAuthority ) GetProvisioners () ([] * provisioner. Provisioner , error ) {
448
449
if m .getProvisioners != nil {
449
450
return m .getProvisioners ()
450
451
}
451
- return m .ret1 .(map [ string ] * jose. JSONWebKeySet ), m .err
452
+ return m .ret1 .([] * provisioner. Provisioner ), m .err
452
453
}
453
454
454
455
func (m * mockAuthority ) GetEncryptedKey (kid string ) (string , error ) {
@@ -670,6 +671,82 @@ func Test_caHandler_Renew(t *testing.T) {
670
671
}
671
672
}
672
673
674
+ func Test_caHandler_JWKSetByIssuer (t * testing.T ) {
675
+ type fields struct {
676
+ Authority Authority
677
+ }
678
+ type args struct {
679
+ w http.ResponseWriter
680
+ r * http.Request
681
+ }
682
+
683
+ req , err := http .NewRequest ("GET" , "http://example.com/provisioners/jwk-set-by-issuer" , nil )
684
+ if err != nil {
685
+ t .Fatal (err )
686
+ }
687
+
688
+ var key jose.JSONWebKey
689
+ if err := json .Unmarshal ([]byte (pubKey ), & key ); err != nil {
690
+ t .Fatal (err )
691
+ }
692
+
693
+ p := []* provisioner.Provisioner {
694
+ & provisioner.Provisioner {
695
+ Issuer : "p1" ,
696
+ Key : & key ,
697
+ },
698
+ & provisioner.Provisioner {
699
+ Issuer : "p2" ,
700
+ Key : & key ,
701
+ },
702
+ }
703
+
704
+ tests := []struct {
705
+ name string
706
+ fields fields
707
+ args args
708
+ statusCode int
709
+ }{
710
+ {"ok" , fields {& mockAuthority {ret1 : p }}, args {httptest .NewRecorder (), req }, 200 },
711
+ {"fail" , fields {& mockAuthority {ret1 : p , err : fmt .Errorf ("the error" )}}, args {httptest .NewRecorder (), req }, 500 },
712
+ }
713
+
714
+ expectedKey , err := json .Marshal (key )
715
+ if err != nil {
716
+ t .Fatal (err )
717
+ }
718
+ expected := []byte (`{"map":{"p1":{"keys":[` + string (expectedKey ) + `]},"p2":{"keys":[` + string (expectedKey ) + `]}}}` )
719
+ expectedError := []byte (`{"status":500,"message":"Internal Server Error"}` )
720
+ for _ , tt := range tests {
721
+ t .Run (tt .name , func (t * testing.T ) {
722
+ h := & caHandler {
723
+ Authority : tt .fields .Authority ,
724
+ }
725
+ h .JWKSetByIssuer (tt .args .w , tt .args .r )
726
+
727
+ rec := tt .args .w .(* httptest.ResponseRecorder )
728
+ res := rec .Result ()
729
+ if res .StatusCode != tt .statusCode {
730
+ t .Errorf ("caHandler.JWKSetByIssuer StatusCode = %d, wants %d" , res .StatusCode , tt .statusCode )
731
+ }
732
+ body , err := ioutil .ReadAll (res .Body )
733
+ res .Body .Close ()
734
+ if err != nil {
735
+ t .Errorf ("caHandler.JWKSetByIssuer unexpected error = %v" , err )
736
+ }
737
+ if tt .statusCode < http .StatusBadRequest {
738
+ if ! bytes .Equal (bytes .TrimSpace (body ), expected ) {
739
+ t .Errorf ("caHandler.JWKSetByIssuer Body = %s, wants %s" , body , expected )
740
+ }
741
+ } else {
742
+ if ! bytes .Equal (bytes .TrimSpace (body ), expectedError ) {
743
+ t .Errorf ("caHandler.JWKSetByIssuer Body = %s, wants %s" , body , expectedError )
744
+ }
745
+ }
746
+ })
747
+ }
748
+ }
749
+
673
750
func Test_caHandler_Provisioners (t * testing.T ) {
674
751
type fields struct {
675
752
Authority Authority
@@ -689,14 +766,21 @@ func Test_caHandler_Provisioners(t *testing.T) {
689
766
t .Fatal (err )
690
767
}
691
768
692
- p := map [string ]* jose.JSONWebKeySet {
693
- "p1" : & jose.JSONWebKeySet {
694
- Keys : []jose.JSONWebKey {key },
769
+ p := []* provisioner.Provisioner {
770
+ & provisioner.Provisioner {
771
+ Type : "JWK" ,
772
+ Issuer : "max" ,
773
+ EncryptedKey : "abc" ,
774
+ Key : & key ,
695
775
},
696
- "p2" : & jose.JSONWebKeySet {
697
- Keys : []jose.JSONWebKey {key },
776
+ & provisioner.Provisioner {
777
+ Type : "JWK" ,
778
+ Issuer : "mariano" ,
779
+ EncryptedKey : "def" ,
780
+ Key : & key ,
698
781
},
699
782
}
783
+ pr := ProvisionersResponse {p }
700
784
701
785
tests := []struct {
702
786
name string
@@ -708,11 +792,11 @@ func Test_caHandler_Provisioners(t *testing.T) {
708
792
{"fail" , fields {& mockAuthority {ret1 : p , err : fmt .Errorf ("the error" )}}, args {httptest .NewRecorder (), req }, 500 },
709
793
}
710
794
711
- expectedKey , err := json .Marshal (key )
795
+ expected , err := json .Marshal (pr )
712
796
if err != nil {
713
797
t .Fatal (err )
714
798
}
715
- expected := [] byte ( `{"provisioners":{"p1":{"keys":[` + string ( expectedKey ) + `]},"p2":{"keys":[` + string ( expectedKey ) + `]}}}` )
799
+
716
800
expectedError := []byte (`{"status":500,"message":"Internal Server Error"}` )
717
801
for _ , tt := range tests {
718
802
t .Run (tt .name , func (t * testing.T ) {
0 commit comments