Sha256: 91d89f97e8c430551196b2dc4e7b9e70b398417f6cc4587b8a89ff9d5eff9022

Contents?: true

Size: 1.51 KB

Versions: 14

Compression:

Stored size: 1.51 KB

Contents

module Saml
  module ProviderStores
    class File
      attr_accessor :providers

      def initialize(metadata_dir = "config/metadata", key_file = "config/ssl/key.pem", key_password = nil)
        @mutex         = Mutex.new
        self.providers = {}

        load_files(metadata_dir, key_file, key_password)
      end

      def find_by_entity_id(entity_id)
        providers[entity_id]
      end

      # Returns provider by source_id or nil if not found.
      def find_by_source_id(source_id)
        providers.find do |entity_id, _|
          Digest::SHA1.digest(entity_id) == source_id
        end.to_a[1]
      end

      def load_files(metadata_dir, key_file, key_password = nil)
        Dir[::File.join(metadata_dir, '*.xml')].each do |file|
          add_metadata(::File.read(file), get_private_key(key_file, key_password))
        end
      end

      def add_metadata(metadata_xml, private_key = nil)
        entity_descriptor = Saml::Elements::EntityDescriptor.parse(metadata_xml, single: true)
        type              = entity_descriptor.sp_sso_descriptor.present? ? 'service_provider' : 'identity_provider'
        provider          = BasicProvider.new(entity_descriptor, private_key, type)

        @mutex.synchronize do
          providers[provider.entity_id] = provider
        end
      end

      private

      def get_private_key(file, password)
        return OpenSSL::PKey::RSA.new(::File.read(file)) unless password.present?
        OpenSSL::PKey::RSA.new(::File.read(file), password)
      end
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
libsaml-2.19.10 lib/saml/provider_stores/file.rb
libsaml-2.19.9 lib/saml/provider_stores/file.rb
libsaml-2.19.8 lib/saml/provider_stores/file.rb
libsaml-2.19.7 lib/saml/provider_stores/file.rb
libsaml-2.19.5 lib/saml/provider_stores/file.rb
libsaml-2.19.6 lib/saml/provider_stores/file.rb
libsaml-2.19.4 lib/saml/provider_stores/file.rb
libsaml-2.19.3 lib/saml/provider_stores/file.rb
libsaml-2.19.2 lib/saml/provider_stores/file.rb
libsaml-2.19.1 lib/saml/provider_stores/file.rb
libsaml-2.18.1 lib/saml/provider_stores/file.rb
libsaml-2.18.0 lib/saml/provider_stores/file.rb
libsaml-2.17.0 lib/saml/provider_stores/file.rb
libsaml-2.16.0 lib/saml/provider_stores/file.rb