Commit 3dcb66d

mo <mo@mokhan.ca>
2017-11-23 22:31:03
use active directory registry.
1 parent 0f28602
Changed files (5)
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