Commit 3dcb66d
2017-11-23 22:31:03
1 parent
0f28602
Changed files (5)
airport
app
models
config
initializers
db
spec
airport/app/models/metadata_registry.rb
@@ -0,0 +1,20 @@
+class MetadataRegistry
+ def register_url(url, verify_ssl: true)
+ content = Saml::Kit::DefaultRegistry::HttpApi.new(url, verify_ssl: verify_ssl).get
+ register(Saml::Kit::Metadata.from(content))
+ end
+
+ def register(metadata)
+ record = Metadatum.find_or_create_by!(issuer, metadata.entity_id)
+ record.metadata = metadata.to_xml
+ record.save!
+ metadata
+ end
+
+ def metadata_for(entity_id)
+ Saml::Kit::Metadata.from(Metadatum.find_by!(entity_id: entity_id).metadata)
+ rescue ActiveRecord::RecordNotFound => error
+ Rails.logger.error(error)
+ nil
+ end
+end
airport/config/initializers/saml_kit.rb
@@ -1,4 +1,5 @@
Saml::Kit.configure do |configuration|
configuration.issuer = ENV['ISSUER']
+ configuration.registry = MetadataRegistry.new
Rails.configuration.x.idp_metadata = configuration.registry.register_url("#{ENV['IDP_METADATA_URL']}", verify_ssl: Rails.env.production?)
end
airport/db/migrate/20171123220807_create_metadata.rb
@@ -1,10 +1,11 @@
class CreateMetadata < ActiveRecord::Migration[5.1]
def change
create_table :metadata do |t|
- t.string :issuer, index: true
+ t.string :issuer
t.text :metadata
t.timestamps
end
+ add_index :metadata, [:issuer], unique: true
end
end
airport/db/schema.rb
@@ -17,7 +17,7 @@ ActiveRecord::Schema.define(version: 20171123220807) do
t.text "metadata"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
- t.index ["issuer"], name: "index_metadata_on_issuer"
+ t.index ["issuer"], name: "index_metadata_on_issuer", unique: true
end
end
airport/spec/factories.rb
@@ -1,6 +1,6 @@
FactoryGirl.define do
factory :metadatum do
entity_id FFaker::Internet.uri("https")
- metadata Saml::Kit::IdentityProvider::Builder.new.to_xml
+ metadata Saml::Kit::IdentityProviderMetadata::Builder.new.to_xml
end
end