lib/saml/kit/configuration.rb in saml-kit-0.2.11 vs lib/saml/kit/configuration.rb in saml-kit-0.2.12

- old
+ new

@@ -1,58 +1,108 @@ module Saml module Kit + # This class represents the main configuration that is use for generating SAML documents. + # + # Saml::Kit::Configuration.new do |config| + # config.issuer = "com:saml:kit" + # config.signature_method = :SHA256 + # config.digest_method = :SHA256 + # config.registry = Saml::Kit::DefaultRegistry.new + # config.session_timeout = 30.minutes + # config.logger = Rails.logger + # end + # + # To specify global configuration it is best to do this in an initialize + # that runs at the start of the program. + # + # Saml::Kit.configure do |configuration| + # configuration.issuer = "https://www.example.com/saml/metadata" + # configuration.generate_key_pair_for(use: :signing) + # configuration.add_key_pair(ENV["X509_CERTIFICATE"], ENV["PRIVATE_KEY"], password: ENV['PRIVATE_KEY_PASSWORD'], use: :encryption) + # end class Configuration + # The issuer or entity_id to use. attr_accessor :issuer - attr_accessor :signature_method, :digest_method - attr_accessor :registry, :session_timeout + # The signature method to use when generating signatures (See {SAML::Kit::Builders::XmlSignature::SIGNATURE_METHODS}) + attr_accessor :signature_method + # The digest method to use when generating signatures (See {SAML::Kit::Builders::XmlSignature::DIGEST_METHODS}) + attr_accessor :digest_method + # The metadata registry to use for searching for metadata associated with an issuer. + attr_accessor :registry + # The session timeout to use when generating an Assertion. + attr_accessor :session_timeout + # The logger to write log messages to. attr_accessor :logger - def initialize + def initialize # :yields configuration @signature_method = :SHA256 @digest_method = :SHA256 @registry = DefaultRegistry.new @session_timeout = 3.hours @logger = Logger.new(STDOUT) @key_pairs = [] yield self if block_given? end - def add_key_pair(certificate, private_key, password:, use: :signing) + # Add a key pair that can be used for either signing or encryption. + # + # @param certificate [String] the x509 certificate with public key. + # @param private_key [String] the plain text private key. + # @param password [String] the password to decrypt the private key. + # @param use [Symbol] the type of key pair, `:signing` or `:encryption` + def add_key_pair(certificate, private_key, password: '', use: :signing) @key_pairs.push(KeyPair.new(certificate, private_key, password, use.to_sym)) end + # Generates a unique key pair that can be used for signing or encryption. + # + # @param use [Symbol] the type of key pair, `:signing` or `:encryption` + # @param password [String] the private key password to use. def generate_key_pair_for(use:, password: SecureRandom.uuid) certificate, private_key = SelfSignedCertificate.new(password).create add_key_pair(certificate, private_key, password: password, use: use) end + # Return each key pair for a specific use. + # + # @param use [Symbol] the type of key pair to return `nil`, `:signing` or `:encryption` def key_pairs(use: nil) use.present? ? @key_pairs.find_all { |x| x.for?(use) } : @key_pairs end + # Return each certificate for a specific use. + # + # @param use [Symbol] the type of key pair to return `nil`, `:signing` or `:encryption` def certificates(use: nil) key_pairs(use: use).flat_map(&:certificate) end + # Return each private for a specific use. + # + # @param use [Symbol] the type of key pair to return `nil`, `:signing` or `:encryption` def private_keys(use: :signing) key_pairs(use: use).flat_map(&:private_key) end + # @deprecated Use {#certificates} instead of this method. def encryption_certificate Saml::Kit.deprecate("encryption_certificate is deprecated. Use certificates(use: :encryption) instead") certificates(use: :encryption).last end + # @deprecated Use {#private_keys} instead of this method. def signing_private_key Saml::Kit.deprecate("signing_private_key is deprecated. Use private_keys(use: :signing) instead") private_keys(use: :signing).last end + # @deprecated Use {#private_keys} instead of this method. def encryption_private_key Saml::Kit.deprecate("encryption_private_key is deprecated. Use private_keys(use: :encryption) instead") private_keys(use: :encryption).last end + # Returns true if there is at least one signing certificate registered. def sign? certificates(use: :signing).any? end end end