Skip to content

Commit

Permalink
New saml attrs (#238)
Browse files Browse the repository at this point in the history
* add new property "attributes" to set client attributes
  • Loading branch information
wolfaba authored Apr 4, 2022
1 parent 788731d commit 2c69790
Show file tree
Hide file tree
Showing 5 changed files with 181 additions and 0 deletions.
40 changes: 40 additions & 0 deletions REFERENCE.md
Original file line number Diff line number Diff line change
Expand Up @@ -1579,6 +1579,42 @@ Default value: `false`

backchannel.logout.url

##### `saml_name_id_format`

saml_name_id_format

##### `saml_artifact_binding_url`

saml_artifact_binding_url

##### `saml_single_logout_service_url_redirect`

saml_single_logout_service_url_redirect

##### `saml_assertion_consumer_url_post`

saml_assertion_consumer_url_post

##### `saml_encrypt`

saml.encrypt

##### `saml_assertion_signature`

saml.assertion.signature

##### `saml_signing_certificate`

saml.signing.certificate

##### `saml_encryption_certificate`

saml.encryption.certificate

##### `saml_signing_private_key`

saml.signing.private.key

##### `base_url`

baseUrl
Expand Down Expand Up @@ -1699,6 +1735,10 @@ Default value: `[]`

rootUrl

##### `admin_url`

adminUrl

##### `secret`

secret
Expand Down
14 changes: 14 additions & 0 deletions lib/puppet/provider/keycloak_client/kcadm.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,27 @@ def attributes_properties
:login_theme,
:access_token_lifespan,
:backchannel_logout_url,
:saml_name_id_format,
:saml_artifact_binding_url,
:saml_single_logout_service_url_redirect,
:saml_assertion_consumer_url_post,
:saml_encrypt,
:saml_assertion_signature,
:saml_signing_certificate,
:saml_encryption_certificate,
:saml_signing_private_key,
]
end

def dot_attributes_properties
[
:access_token_lifespan,
:backchannel_logout_url,
:saml_encrypt,
:saml_assertion_signature,
:saml_signing_certificate,
:saml_encryption_certificate,
:saml_signing_private_key,
]
end

Expand Down
40 changes: 40 additions & 0 deletions lib/puppet/type/keycloak_client.rb
Original file line number Diff line number Diff line change
Expand Up @@ -158,10 +158,50 @@ def insync?(is)
desc 'rootUrl'
end

newproperty(:admin_url) do
desc 'adminUrl'
end

newproperty(:backchannel_logout_url) do
desc 'backchannel.logout.url'
end

newproperty(:saml_name_id_format) do
desc 'saml_name_id_format'
end

newproperty(:saml_artifact_binding_url) do
desc 'saml_artifact_binding_url'
end

newproperty(:saml_single_logout_service_url_redirect) do
desc 'saml_single_logout_service_url_redirect'
end

newproperty(:saml_assertion_consumer_url_post) do
desc 'saml_assertion_consumer_url_post'
end

newproperty(:saml_encrypt) do
desc 'saml.encrypt'
end

newproperty(:saml_assertion_signature) do
desc 'saml.assertion.signature'
end

newproperty(:saml_signing_certificate) do
desc 'saml.signing.certificate'
end

newproperty(:saml_encryption_certificate) do
desc 'saml.encryption.certificate'
end

newproperty(:saml_signing_private_key) do
desc 'saml.signing.private.key'
end

newproperty(:redirect_uris, array_matching: :all, parent: PuppetX::Keycloak::ArrayProperty) do
desc 'redirectUris'
defaultto []
Expand Down
77 changes: 77 additions & 0 deletions spec/acceptance/5_client_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,24 @@ class { 'keycloak':
service_accounts_enabled => true,
browser_flow => 'foo',
}
keycloak_client { 'saml.foo.bar':
realm => 'test',
root_url => 'https://saml.foo.bar/root',
admin_url => 'https://saml.foo.bar/admin',
base_url => 'https://saml.foo.bar',
redirect_uris => ['https://saml.foo.bar/test1'],
default_client_scopes => ['role_list'],
protocol => 'saml',
saml_name_id_format => 'transient',
saml_artifact_binding_url => 'https://saml.foo.bar/mellon/artifactResponse',
saml_single_logout_service_url_redirect => 'https://saml.foo.bar/mellon/logout',
saml_assertion_consumer_url_post => 'https://saml.foo.bar/mellon/postResponse',
saml_encrypt => 'true',
saml_assertion_signature => 'true',
saml_signing_certificate => 'MIIDQzCCAiugAwIBAgIUNALBnAmwcPKLdBer4e0i22JiEd0wDQYJKoZIhvcNAQELBQAwMDEuMCwGA1UEAwwlc2FtbF9zaWduaW5nX2NlcnRpZmljYXRlLXRlc3QuZm9vLmJhcjAgFw0yMjAzMTgyMjU1MTNaGA8yMTIyMDIyMjIyNTUxM1owMDEuMCwGA1UEAwwlc2FtbF9zaWduaW5nX2NlcnRpZmljYXRlLXRlc3QuZm9vLmJhcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPKEr/vAExQ9LxF9oiiyz7JNdHgB8wxGEd5SN7YF6UOToLH2lQL5PelGnsVD13y9/ZN2qr3xl54zz8IT8EimT8YXc0k7JEDLnKrvkz/xGSKnSFnudNM7B6i2VgM7uMbCCKKbOlULALUUnUmOAsKjRyTjcue4D1tULnha+ph+h/1T9Oc0VmDf6BV54lEwOe7m7teOZCTnrM2Ll2dsZV2tgMywt87r9/yQWt3rbMjaVsLUsgV/SBd4RU6WDrsae6P7ccOWeoFyQ4fP7i7Z+Wpa8Y9pdnNraqBNmkKb4pNkW+sJkkfA47YHafAtQO4E1cOnlsKJo0fXeMgiViCoDLVYPwcCAwEAAaNTMFEwHQYDVR0OBBYEFMuSde+sXzqeWtZPfY7Bsun3h3fzMB8GA1UdIwQYMBaAFMuSde+sXzqeWtZPfY7Bsun3h3fzMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAF+KdjMVaLGJmbBpV+mw6G9QVZ8DkiMKKz5+K2usCMCVf9XWVIyYXExsTBACk1FObHjXfHkk1A9nXOEFqgPBVS8CgSspVfQjIGhDy1lwhPkDvtyuIKIDb2kf52xTru/bsAWuSEXcjbKqszN6l78AaR93n6sZKUkIsnDpvi/mG4xXBumiluJyedbQw9yj/NsYouALGWWQeHDwNJGcAxDxiLvIZjXkAo6IXRQ85n29TiLFCbF5hPmiBlUNfo5reuobvhd+qDZOssiJ4q4VrSkHZ/u4Ri623+dgyZbDqwQ20NigfuoRaxbFWxbjl5T/lg30r7sqy/YOW2wevA0wSqyxMfw=',
saml_encryption_certificate => 'MIIDSTCCAjGgAwIBAgIUbJ6dLiM4/T9uLT4gd13tuD469lkwDQYJKoZIhvcNAQELBQAwMzExMC8GA1UEAwwoc2FtbF9lbmNyeXB0aW9uX2NlcnRpZmljYXRlLXRlc3QuZm9vLmJhcjAgFw0yMjAzMTgyMjU1NDlaGA8yMTIyMDIyMjIyNTU0OVowMzExMC8GA1UEAwwoc2FtbF9lbmNyeXB0aW9uX2NlcnRpZmljYXRlLXRlc3QuZm9vLmJhcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKmzbda8/vwS3vn1OflWhcquzhh+FphTCA4PoRsqT2/AE5cbEPqVdPQxIUVXNL+l4LM7Kl4H0vSoi3gHlH1SQCc/772gXDtByxHP0QYg+FaEIG+LbsFYeB1jJMhGblf+0xOH3uPtN9jzjkz8Xhzpcq/xgTOJDyQPfSamzW0xUtK3iXd8B7K9nNdmOm9uLPZ1p2JLhvOJu6I6dapjLDoWgJnSnaYMgRuxShktTafWU3wolyo6c6+wago/CaoEdlrcwO7VvOd/gdhAuYUhYypD7t+1mWisEBWxLo2omflr2rm2nWQX5EKx4U1lhEPxxlo0AkCCj/7hQyJt5jMzg/4QGNUCAwEAAaNTMFEwHQYDVR0OBBYEFMNcZ9lzmttxhrdVXLm+deYLJyjeMB8GA1UdIwQYMBaAFMNcZ9lzmttxhrdVXLm+deYLJyjeMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAEeYMFSGUGeWkgNKTmPL3l445ai4zMWUi92+vHeta44GlBKUAbNvC8Ab4mdVFCZF0lvKqUVfeKtTDD9wSko5XjjuhblLci7oa/gOFpp3dfb5d5xtNsSoVD9ndPopApYugGlKEJI9qL39FyP9Js+rm13gsHNrMGXIfBE+FSFXu0sp0NRBnbqvz5cB8jSRb40v67tGmFVadYhomIpFsES2FuM3bY6YbD0hJ4ozLczgpfPOYw41xIAGSgbB6rwRsu+VwV7L2DW3wtq6CHksLYoiNDmdZXz0HDqmfHcMKlpUPpAkY/8q6xaO/QNEzohI60TfMRklpCLP/25n4ao3VqrHdZo=',
saml_signing_private_key => 'MIIEpAIBAAKCAQEAtzXe4xaXsz5KdSQdz/4+jMdO1HiBNBuL2dIQ4b+DSP5IhSU+VPQP26G49fBWkN2ZSGMhOfvfxbcGjudIl7RRKRN1XqTgada/irqhU80Z8FTYWgl6A5px87nL1peCm8f2w6N220KLdoYI/KapdNP1CUXR6iBJOrEZ3lV3CtZR5DkeOvdMEsmyhP5ajI4PMKU15ANmq8S7vPd2q/OGSQziAj467gDFDTXTWVVo1vV1HWSz9an2wdIU7XdgrzRbuuCvgb5LLpbdyy+3j3RieoQAiDAiabKZqSMhiYc6mx21tD7ppN+H6RqzRulj/7WLdxckEJ736s1xSk8boOQhEqPoIQIDAQABAoIBAQCn3aQrTjgQ87IlQsJOIRYOx09jPkakB9lL6z2sml0gNF0eIdHK5RTimHtwXJX0hhY8TRfUmQOflONdbG0HEyCKElooLcmxMCKwafAHaJWrrxHM7YHua0SdnE84f/ob4kwnVU9B9ubx4j25wLrjYJHTvTVo38w5Cqw5GvXH6DeAc4gg0xtl1kYy53xO+3ybZDZy7EpEKFbgSLNZIryrIk3v1v2uWQWj30Gb2OqppTRt2X+zSSph5MUqPIfKUweL3Ow2MbCBdNESp8QifdUld1RWEgVbZWSvcZmfYpr9w/rU+JVrVydmCBx0k8VWJmBobZydr4niVLhkhuzY8DvfLyJBAoGBAOFijou/Mh2B4mRdycwOxBcJUeL318K5MR6ondidP5SEcHpTavaQjqE9N+I0W0GPsJhzuBiUHq60TjC5GV3OYTp/G+4M4ibVYyR9UG3CrHAlgu9asakVfcOHhOJmyyD1FtI4BlNNI+nv4Ds7nHahv3yFSF/pes9VaAKm9k5ZTzmXAoGBANAYwOW8obHCLmHcrJyHcZX9icJAXP+GvmpsJpZaBSE2bs/K2cwLZnBoiUX1jH+7wWtUV2CfATMAD2UASocaYrSSF91bZAJNe3D9QliRC10IZ6SBn1Pw7u3uYVHb7JE6z4IGIrn503En5ncZcxfoc0JE9bNIM3tyEygetS/EifMHAoGAAp0Z+hTlh+IRtghAZtVlAL9i67bkEaYEI87gxbpNGnPOuhxtiR50CPqkw0LILCJ2cc4lvGM7V9tPbNE4shXKmtsOf9w2YyzmUW4CmMNBLKvCsPPkS4msQ7A2okl+4Yr2EMoFiMHEQNo/R3CRh+6oQdFp3XLfsbfT1PQKty3h9VECgYEAn6euL1R21fO+NDTjdcBww/veelt5Pk65vtq1DDuKnf2uLNxcFzFT6cA6OaN3pPR/JAJ0e1vixqcwKHR9uYPj4NgJWTpp015w67JS+bJmfn0ZT1xnyjYaig+POQe7S31MgVyFvhvPPoy3Q/8Rj3E3JMvVmjQ102slCW3t4vUuRXcCgYAkfbK84PXNvDWXQFR27fWJsLwLzORYxnk0l4oFOOJy926m/WMOfw33pVhsJInHK+iRKwPv33zo5YkB1BeGWedvM/gAgq5eSo+eqSkKn5M+eaDTlvWFrDK5tW21m49wtYOKDGo99tjgfaoJDDhGkX0NdKZ23BEvW1AInhCPNyE5rg==',
}
EOS

apply_manifest(pp, catch_failures: true)
Expand Down Expand Up @@ -90,6 +108,65 @@ class { 'keycloak':
expect(data).to eq([])
end
end

it 'has created SAML client' do
on hosts, '/opt/keycloak/bin/kcadm-wrapper.sh get clients/saml.foo.bar -r test' do
data = JSON.parse(stdout)
expect(data['id']).to eq('saml.foo.bar')
expect(data['clientId']).to eq('saml.foo.bar')
expect(data['defaultClientScopes']).to eq(['role_list'])
expect(data['rootUrl']).to eq('https://saml.foo.bar/root')
expect(data['adminUrl']).to eq('https://saml.foo.bar/admin')
expect(data['baseUrl']).to eq('https://saml.foo.bar')
expect(data['redirectUris']).to eq(['https://saml.foo.bar/test1'])
expect(data['attributes']['saml_name_id_format']).to eq('transient')
expect(data['attributes']['saml_artifact_binding_url']).to eq('https://saml.foo.bar/mellon/artifactResponse')
expect(data['attributes']['saml_single_logout_service_url_redirect']).to eq('https://saml.foo.bar/mellon/logout')
expect(data['attributes']['saml_assertion_consumer_url_post']).to eq('https://saml.foo.bar/mellon/postResponse')
expect(data['attributes']['saml.encrypt']).to eq('true')
expect(data['attributes']['saml.assertion.signature']).to eq('true')
expect(data['attributes']['saml.signing.certificate']).to eq('MIIDQzCCAiugAwIBAgIUNALBnAmwcPKLdBer4e0i22JiEd0' \
'wDQYJKoZIhvcNAQELBQAwMDEuMCwGA1UEAwwlc2FtbF9zaWduaW5nX2NlcnRpZmljYXRlLXRlc3QuZm9vLmJhcjAgFw0yMjAzMTgyMjU1M' \
'TNaGA8yMTIyMDIyMjIyNTUxM1owMDEuMCwGA1UEAwwlc2FtbF9zaWduaW5nX2NlcnRpZmljYXRlLXRlc3QuZm9vLmJhcjCCASIwDQYJKoZ' \
'IhvcNAQEBBQADggEPADCCAQoCggEBAPKEr/vAExQ9LxF9oiiyz7JNdHgB8wxGEd5SN7YF6UOToLH2lQL5PelGnsVD13y9/ZN2qr3xl54zz' \
'8IT8EimT8YXc0k7JEDLnKrvkz/xGSKnSFnudNM7B6i2VgM7uMbCCKKbOlULALUUnUmOAsKjRyTjcue4D1tULnha+ph+h/1T9Oc0VmDf6BV' \
'54lEwOe7m7teOZCTnrM2Ll2dsZV2tgMywt87r9/yQWt3rbMjaVsLUsgV/SBd4RU6WDrsae6P7ccOWeoFyQ4fP7i7Z+Wpa8Y9pdnNraqBNm' \
'kKb4pNkW+sJkkfA47YHafAtQO4E1cOnlsKJo0fXeMgiViCoDLVYPwcCAwEAAaNTMFEwHQYDVR0OBBYEFMuSde+sXzqeWtZPfY7Bsun3h3f' \
'zMB8GA1UdIwQYMBaAFMuSde+sXzqeWtZPfY7Bsun3h3fzMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAF+KdjMVaLGJm' \
'bBpV+mw6G9QVZ8DkiMKKz5+K2usCMCVf9XWVIyYXExsTBACk1FObHjXfHkk1A9nXOEFqgPBVS8CgSspVfQjIGhDy1lwhPkDvtyuIKIDb2k' \
'f52xTru/bsAWuSEXcjbKqszN6l78AaR93n6sZKUkIsnDpvi/mG4xXBumiluJyedbQw9yj/NsYouALGWWQeHDwNJGcAxDxiLvIZjXkAo6IX' \
'RQ85n29TiLFCbF5hPmiBlUNfo5reuobvhd+qDZOssiJ4q4VrSkHZ/u4Ri623+dgyZbDqwQ20NigfuoRaxbFWxbjl5T/lg30r7sqy/YOW2w' \
'evA0wSqyxMfw=')
expect(data['attributes']['saml.encryption.certificate']).to eq('MIIDSTCCAjGgAwIBAgIUbJ6dLiM4/T9uLT4gd13tuD46' \
'9lkwDQYJKoZIhvcNAQELBQAwMzExMC8GA1UEAwwoc2FtbF9lbmNyeXB0aW9uX2NlcnRpZmljYXRlLXRlc3QuZm9vLmJhcjAgFw0yMjAzMT' \
'gyMjU1NDlaGA8yMTIyMDIyMjIyNTU0OVowMzExMC8GA1UEAwwoc2FtbF9lbmNyeXB0aW9uX2NlcnRpZmljYXRlLXRlc3QuZm9vLmJhcjCC' \
'ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKmzbda8/vwS3vn1OflWhcquzhh+FphTCA4PoRsqT2/AE5cbEPqVdPQxIUVXNL+l4L' \
'M7Kl4H0vSoi3gHlH1SQCc/772gXDtByxHP0QYg+FaEIG+LbsFYeB1jJMhGblf+0xOH3uPtN9jzjkz8Xhzpcq/xgTOJDyQPfSamzW0xUtK3' \
'iXd8B7K9nNdmOm9uLPZ1p2JLhvOJu6I6dapjLDoWgJnSnaYMgRuxShktTafWU3wolyo6c6+wago/CaoEdlrcwO7VvOd/gdhAuYUhYypD7t' \
'+1mWisEBWxLo2omflr2rm2nWQX5EKx4U1lhEPxxlo0AkCCj/7hQyJt5jMzg/4QGNUCAwEAAaNTMFEwHQYDVR0OBBYEFMNcZ9lzmttxhrdV' \
'XLm+deYLJyjeMB8GA1UdIwQYMBaAFMNcZ9lzmttxhrdVXLm+deYLJyjeMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAE' \
'eYMFSGUGeWkgNKTmPL3l445ai4zMWUi92+vHeta44GlBKUAbNvC8Ab4mdVFCZF0lvKqUVfeKtTDD9wSko5XjjuhblLci7oa/gOFpp3dfb5' \
'd5xtNsSoVD9ndPopApYugGlKEJI9qL39FyP9Js+rm13gsHNrMGXIfBE+FSFXu0sp0NRBnbqvz5cB8jSRb40v67tGmFVadYhomIpFsES2Fu' \
'M3bY6YbD0hJ4ozLczgpfPOYw41xIAGSgbB6rwRsu+VwV7L2DW3wtq6CHksLYoiNDmdZXz0HDqmfHcMKlpUPpAkY/8q6xaO/QNEzohI60Tf' \
'MRklpCLP/25n4ao3VqrHdZo=')
expect(data['attributes']['saml.signing.private.key']).to eq('MIIEpAIBAAKCAQEAtzXe4xaXsz5KdSQdz/4+jMdO1HiBNBu' \
'L2dIQ4b+DSP5IhSU+VPQP26G49fBWkN2ZSGMhOfvfxbcGjudIl7RRKRN1XqTgada/irqhU80Z8FTYWgl6A5px87nL1peCm8f2w6N220KLd' \
'oYI/KapdNP1CUXR6iBJOrEZ3lV3CtZR5DkeOvdMEsmyhP5ajI4PMKU15ANmq8S7vPd2q/OGSQziAj467gDFDTXTWVVo1vV1HWSz9an2wdI' \
'U7XdgrzRbuuCvgb5LLpbdyy+3j3RieoQAiDAiabKZqSMhiYc6mx21tD7ppN+H6RqzRulj/7WLdxckEJ736s1xSk8boOQhEqPoIQIDAQABA' \
'oIBAQCn3aQrTjgQ87IlQsJOIRYOx09jPkakB9lL6z2sml0gNF0eIdHK5RTimHtwXJX0hhY8TRfUmQOflONdbG0HEyCKElooLcmxMCKwafA' \
'HaJWrrxHM7YHua0SdnE84f/ob4kwnVU9B9ubx4j25wLrjYJHTvTVo38w5Cqw5GvXH6DeAc4gg0xtl1kYy53xO+3ybZDZy7EpEKFbgSLNZI' \
'ryrIk3v1v2uWQWj30Gb2OqppTRt2X+zSSph5MUqPIfKUweL3Ow2MbCBdNESp8QifdUld1RWEgVbZWSvcZmfYpr9w/rU+JVrVydmCBx0k8V' \
'WJmBobZydr4niVLhkhuzY8DvfLyJBAoGBAOFijou/Mh2B4mRdycwOxBcJUeL318K5MR6ondidP5SEcHpTavaQjqE9N+I0W0GPsJhzuBiUH' \
'q60TjC5GV3OYTp/G+4M4ibVYyR9UG3CrHAlgu9asakVfcOHhOJmyyD1FtI4BlNNI+nv4Ds7nHahv3yFSF/pes9VaAKm9k5ZTzmXAoGBANA' \
'YwOW8obHCLmHcrJyHcZX9icJAXP+GvmpsJpZaBSE2bs/K2cwLZnBoiUX1jH+7wWtUV2CfATMAD2UASocaYrSSF91bZAJNe3D9QliRC10IZ' \
'6SBn1Pw7u3uYVHb7JE6z4IGIrn503En5ncZcxfoc0JE9bNIM3tyEygetS/EifMHAoGAAp0Z+hTlh+IRtghAZtVlAL9i67bkEaYEI87gxbp' \
'NGnPOuhxtiR50CPqkw0LILCJ2cc4lvGM7V9tPbNE4shXKmtsOf9w2YyzmUW4CmMNBLKvCsPPkS4msQ7A2okl+4Yr2EMoFiMHEQNo/R3CRh' \
'+6oQdFp3XLfsbfT1PQKty3h9VECgYEAn6euL1R21fO+NDTjdcBww/veelt5Pk65vtq1DDuKnf2uLNxcFzFT6cA6OaN3pPR/JAJ0e1vixqc' \
'wKHR9uYPj4NgJWTpp015w67JS+bJmfn0ZT1xnyjYaig+POQe7S31MgVyFvhvPPoy3Q/8Rj3E3JMvVmjQ102slCW3t4vUuRXcCgYAkfbK84' \
'PXNvDWXQFR27fWJsLwLzORYxnk0l4oFOOJy926m/WMOfw33pVhsJInHK+iRKwPv33zo5YkB1BeGWedvM/gAgq5eSo+eqSkKn5M+eaDTlvW' \
'FrDK5tW21m49wtYOKDGo99tjgfaoJDDhGkX0NdKZ23BEvW1AInhCPNyE5rg==')
end
end
end

context 'updates client' do
Expand Down
10 changes: 10 additions & 0 deletions spec/unit/puppet/type/keycloak_client_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -84,9 +84,19 @@
:login_theme,
:backchannel_logout_url,
:root_url,
:admin_url,
:base_url,
:browser_flow,
:direct_grant_flow,
:saml_name_id_format,
:saml_artifact_binding_url,
:saml_single_logout_service_url_redirect,
:saml_assertion_consumer_url_post,
:saml_encrypt,
:saml_assertion_signature,
:saml_signing_certificate,
:saml_encryption_certificate,
:saml_signing_private_key,
].each do |p|
it "should accept a #{p}" do
config[p] = 'foo'
Expand Down

0 comments on commit 2c69790

Please sign in to comment.