Skip to content

Commit 6f832af

Browse files
authored
Alternative to support multiple x509 Certificates via procs (#211)
* Adds support for multiple multiple x509 certificates, secret keys, and passwords by providing procs in the idp configuration. * Call the proc in the tests * Add documentation in the form of a comment in the README.md * fix extra space * remove additional change * Fix metadata x509 certificate
1 parent 4b7e4c8 commit 6f832af

File tree

6 files changed

+15
-8
lines changed

6 files changed

+15
-8
lines changed

README.md

+5
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,11 @@ KEY DATA
7878
-----END RSA PRIVATE KEY-----
7979
CERT
8080

81+
# x509_certificate, secret_key, and password may also be set from within a proc, for example:
82+
# config.x509_certificate = -> { File.read("cert.pem") }
83+
# config.secret_key = -> { SecretKeyFinder.key_for(id: 1) }
84+
# config.password = -> { "password" }
85+
8186
# config.password = "secret_key_password"
8287
# config.algorithm = :sha256 # Default: sha1 only for development.
8388
# config.organization_name = "Your Organization"

lib/saml_idp/configurator.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ class Configurator
2525
attr_accessor :logger
2626

2727
def initialize
28-
self.x509_certificate = Default::X509_CERTIFICATE
29-
self.secret_key = Default::SECRET_KEY
28+
self.x509_certificate = -> { Default::X509_CERTIFICATE }
29+
self.secret_key = -> { Default::SECRET_KEY }
3030
self.algorithm = :sha1
3131
self.reference_id_generator = ->() { SecureRandom.uuid }
3232
self.service_provider = OpenStruct.new

lib/saml_idp/metadata_builder.rb

+2-1
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,8 @@ def raw_algorithm
152152
private :raw_algorithm
153153

154154
def x509_certificate
155-
SamlIdp.config.x509_certificate
155+
certificate = SamlIdp.config.x509_certificate.is_a?(Proc) ? SamlIdp.config.x509_certificate.call : SamlIdp.config.x509_certificate
156+
certificate
156157
.to_s
157158
.gsub(/-----BEGIN CERTIFICATE-----/,"")
158159
.gsub(/-----END CERTIFICATE-----/,"")

lib/saml_idp/signature_builder.rb

+2-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ def raw
2121
end
2222

2323
def x509_certificate
24-
SamlIdp.config.x509_certificate
24+
certificate = SamlIdp.config.x509_certificate.is_a?(Proc) ? SamlIdp.config.x509_certificate.call : SamlIdp.config.x509_certificate
25+
certificate
2526
.to_s
2627
.gsub(/-----BEGIN CERTIFICATE-----/,"")
2728
.gsub(/-----END CERTIFICATE-----/,"")

lib/saml_idp/signed_info_builder.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -65,12 +65,12 @@ def clean_algorithm_name
6565
private :clean_algorithm_name
6666

6767
def secret_key
68-
SamlIdp.config.secret_key
68+
SamlIdp.config.secret_key.is_a?(Proc) ? SamlIdp.config.secret_key.call : SamlIdp.config.secret_key
6969
end
7070
private :secret_key
7171

7272
def password
73-
SamlIdp.config.password
73+
SamlIdp.config.password.is_a?(Proc) ? SamlIdp.config.password.call : SamlIdp.config.password
7474
end
7575
private :password
7676

spec/lib/saml_idp/configurator_spec.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@ module SamlIdp
2020
it { should respond_to :logger }
2121

2222
it "has a valid x509_certificate" do
23-
expect(subject.x509_certificate).to eq(Default::X509_CERTIFICATE)
23+
expect(subject.x509_certificate.call).to eq(Default::X509_CERTIFICATE)
2424
end
2525

2626
it "has a valid secret_key" do
27-
expect(subject.secret_key).to eq(Default::SECRET_KEY)
27+
expect(subject.secret_key.call).to eq(Default::SECRET_KEY)
2828
end
2929

3030
it "has a valid algorithm" do

0 commit comments

Comments
 (0)