saml_idp 0.1.1 → 0.2.0.pre
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/app/controllers/saml_idp/idp_controller.rb +1 -1
- data/lib/saml_idp.rb +1 -1
- data/lib/saml_idp/assertion_builder.rb +1 -1
- data/lib/saml_idp/configurator.rb +1 -0
- data/lib/saml_idp/metadata_builder.rb +5 -6
- data/lib/saml_idp/version.rb +1 -1
- data/saml_idp.gemspec +2 -2
- data/spec/lib/saml_idp/attribute_decorator_spec.rb +30 -8
- data/spec/lib/saml_idp/configurator_spec.rb +16 -4
- data/spec/lib/saml_idp/controller_spec.rb +4 -4
- data/spec/lib/saml_idp/metadata_builder_spec.rb +5 -2
- data/spec/lib/saml_idp/name_id_formatter_spec.rb +10 -7
- data/spec/lib/saml_idp/request_spec.rb +24 -6
- data/spec/lib/saml_idp/saml_response_spec.rb +3 -1
- data/spec/lib/saml_idp/service_provider_spec.rb +8 -2
- data/spec/lib/saml_idp/signable_spec.rb +4 -1
- data/spec/rails_app/app/controllers/saml_controller.rb +2 -2
- data/spec/support/saml_request_macros.rb +3 -3
- data/spec/xml_security_spec.rb +8 -8
- metadata +15 -18
    
        data/lib/saml_idp.rb
    CHANGED
    
    
| @@ -58,7 +58,7 @@ module SamlIdp | |
| 58 58 | 
             
                              end
         | 
| 59 59 | 
             
                          end
         | 
| 60 60 | 
             
                        end
         | 
| 61 | 
            -
                      end
         | 
| 61 | 
            +
                      end unless config.attributes.nil? || config.attributes.empty?
         | 
| 62 62 | 
             
                      assertion.AuthnStatement AuthnInstant: now_iso, SessionIndex: reference_string do |statement|
         | 
| 63 63 | 
             
                        statement.AuthnContext do |context|
         | 
| 64 64 | 
             
                          context.AuthnContextClassRef Saml::XML::Namespaces::AuthnContext::ClassRef::PASSWORD
         | 
| @@ -9,6 +9,7 @@ module SamlIdp | |
| 9 9 | 
             
                attr_accessor :organization_name
         | 
| 10 10 | 
             
                attr_accessor :organization_url
         | 
| 11 11 | 
             
                attr_accessor :base_saml_location
         | 
| 12 | 
            +
                attr_accessor :entity_id
         | 
| 12 13 | 
             
                attr_accessor :reference_id_generator
         | 
| 13 14 | 
             
                attr_accessor :attribute_service_location
         | 
| 14 15 | 
             
                attr_accessor :single_service_post_location
         | 
| @@ -90,11 +90,10 @@ module SamlIdp | |
| 90 90 |  | 
| 91 91 | 
             
                def build_contact(el)
         | 
| 92 92 | 
             
                  el.ContactPerson contactType: "technical" do |contact|
         | 
| 93 | 
            -
                     | 
| 94 | 
            -
             | 
| 95 | 
            -
             | 
| 96 | 
            -
                     | 
| 97 | 
            -
                    contact.EmailAddress technical_contact.mail_to_string if technical_contact.mail_to_string.present?
         | 
| 93 | 
            +
                    %w[company given_name sur_name telephone mail_to_string].each do |section|
         | 
| 94 | 
            +
                      section_value = technical_contact.public_send(section)
         | 
| 95 | 
            +
                      contact.Company section_value if section_value.present?
         | 
| 96 | 
            +
                    end
         | 
| 98 97 | 
             
                  end
         | 
| 99 98 | 
             
                end
         | 
| 100 99 | 
             
                private :build_contact
         | 
| @@ -105,7 +104,7 @@ module SamlIdp | |
| 105 104 | 
             
                private :reference_string
         | 
| 106 105 |  | 
| 107 106 | 
             
                def entity_id
         | 
| 108 | 
            -
                  configurator.base_saml_location
         | 
| 107 | 
            +
                  configurator.entity_id.presence || configurator.base_saml_location
         | 
| 109 108 | 
             
                end
         | 
| 110 109 | 
             
                private :entity_id
         | 
| 111 110 |  | 
    
        data/lib/saml_idp/version.rb
    CHANGED
    
    
    
        data/saml_idp.gemspec
    CHANGED
    
    | @@ -31,8 +31,8 @@ Gem::Specification.new do |s| | |
| 31 31 |  | 
| 32 32 | 
             
              s.add_development_dependency "rake"
         | 
| 33 33 | 
             
              s.add_development_dependency "simplecov"
         | 
| 34 | 
            -
              s.add_development_dependency "rspec"
         | 
| 35 | 
            -
              s.add_development_dependency "ruby-saml"
         | 
| 34 | 
            +
              s.add_development_dependency "rspec", "~> 2.5"
         | 
| 35 | 
            +
              s.add_development_dependency "ruby-saml", "~> 0.8"
         | 
| 36 36 | 
             
              s.add_development_dependency("rails", "~> 3.2")
         | 
| 37 37 | 
             
              s.add_development_dependency("capybara")
         | 
| 38 38 | 
             
              s.add_development_dependency("timecop")
         | 
| @@ -11,10 +11,21 @@ module SamlIdp | |
| 11 11 | 
             
                let(:name_format) { nil }
         | 
| 12 12 | 
             
                let(:values) { nil }
         | 
| 13 13 |  | 
| 14 | 
            -
                 | 
| 15 | 
            -
             | 
| 16 | 
            -
                 | 
| 17 | 
            -
             | 
| 14 | 
            +
                it "has a valid name" do
         | 
| 15 | 
            +
                  subject.name.should be_nil
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                it "has a valid friendly_name" do
         | 
| 19 | 
            +
                  subject.friendly_name.should be_nil
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                it "has a valid name_format" do
         | 
| 23 | 
            +
                  subject.name_format.should == Saml::XML::Namespaces::Formats::Attr::URI
         | 
| 24 | 
            +
                end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                it "has a valid values" do
         | 
| 27 | 
            +
                  subject.values.should == []
         | 
| 28 | 
            +
                end
         | 
| 18 29 |  | 
| 19 30 | 
             
                describe "with values set" do
         | 
| 20 31 | 
             
                  let(:name) { "test" }
         | 
| @@ -22,10 +33,21 @@ module SamlIdp | |
| 22 33 | 
             
                  let(:name_format) { "some format" }
         | 
| 23 34 | 
             
                  let(:values) { :val }
         | 
| 24 35 |  | 
| 25 | 
            -
                   | 
| 26 | 
            -
             | 
| 27 | 
            -
                   | 
| 28 | 
            -
             | 
| 36 | 
            +
                  it "has a valid name" do
         | 
| 37 | 
            +
                    subject.name.should == name
         | 
| 38 | 
            +
                  end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                  it "has a valid friendly_name" do
         | 
| 41 | 
            +
                    subject.friendly_name.should == friendly_name
         | 
| 42 | 
            +
                  end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                  it "has a valid name_format" do
         | 
| 45 | 
            +
                    subject.name_format.should == name_format
         | 
| 46 | 
            +
                  end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                  it "has a valid values" do
         | 
| 49 | 
            +
                    subject.values.should == [values]
         | 
| 50 | 
            +
                  end
         | 
| 29 51 | 
             
                end
         | 
| 30 52 | 
             
              end
         | 
| 31 53 | 
             
            end
         | 
| @@ -14,10 +14,22 @@ module SamlIdp | |
| 14 14 | 
             
                it { should respond_to :attributes }
         | 
| 15 15 | 
             
                it { should respond_to :service_provider }
         | 
| 16 16 |  | 
| 17 | 
            -
                 | 
| 18 | 
            -
             | 
| 19 | 
            -
                 | 
| 20 | 
            -
             | 
| 17 | 
            +
                it "has a valid x509_certificate" do
         | 
| 18 | 
            +
                  subject.x509_certificate.should == Default::X509_CERTIFICATE
         | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                it "has a valid secret_key" do
         | 
| 22 | 
            +
                  subject.secret_key.should == Default::SECRET_KEY
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                it "has a valid algorithm" do
         | 
| 26 | 
            +
                  subject.algorithm.should == :sha1
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                it "has a valid reference_id_generator" do
         | 
| 30 | 
            +
                  subject.reference_id_generator.should respond_to :call
         | 
| 31 | 
            +
                end
         | 
| 32 | 
            +
             | 
| 21 33 |  | 
| 22 34 | 
             
                it "can call service provider finder" do
         | 
| 23 35 | 
             
                  subject.service_provider.finder.should respond_to :call
         | 
| @@ -28,22 +28,22 @@ describe SamlIdp::Controller do | |
| 28 28 |  | 
| 29 29 | 
             
                it "should create a SAML Response" do
         | 
| 30 30 | 
             
                  saml_response = encode_response(principal)
         | 
| 31 | 
            -
                  response =  | 
| 31 | 
            +
                  response = OneLogin::RubySaml::Response.new(saml_response)
         | 
| 32 32 | 
             
                  response.name_id.should == "foo@example.com"
         | 
| 33 33 | 
             
                  response.issuer.should == "http://example.com"
         | 
| 34 34 | 
             
                  response.settings = saml_settings
         | 
| 35 | 
            -
                  response.is_valid?.should  | 
| 35 | 
            +
                  response.is_valid?.should be_truthy
         | 
| 36 36 | 
             
                end
         | 
| 37 37 |  | 
| 38 38 | 
             
                [:sha1, :sha256, :sha384, :sha512].each do |algorithm_name|
         | 
| 39 39 | 
             
                  it "should create a SAML Response using the #{algorithm_name} algorithm" do
         | 
| 40 40 | 
             
                    self.algorithm = algorithm_name
         | 
| 41 41 | 
             
                    saml_response = encode_response(principal)
         | 
| 42 | 
            -
                    response =  | 
| 42 | 
            +
                    response = OneLogin::RubySaml::Response.new(saml_response)
         | 
| 43 43 | 
             
                    response.name_id.should == "foo@example.com"
         | 
| 44 44 | 
             
                    response.issuer.should == "http://example.com"
         | 
| 45 45 | 
             
                    response.settings = saml_settings
         | 
| 46 | 
            -
                    response.is_valid?.should  | 
| 46 | 
            +
                    response.is_valid?.should be_truthy
         | 
| 47 47 | 
             
                  end
         | 
| 48 48 | 
             
                end
         | 
| 49 49 | 
             
              end
         | 
| @@ -1,9 +1,12 @@ | |
| 1 1 | 
             
            require 'spec_helper'
         | 
| 2 2 | 
             
            module SamlIdp
         | 
| 3 3 | 
             
              describe MetadataBuilder do
         | 
| 4 | 
            -
                 | 
| 4 | 
            +
                it "has a valid fresh" do
         | 
| 5 | 
            +
                  subject.fresh.should_not be_empty
         | 
| 6 | 
            +
                end
         | 
| 7 | 
            +
             | 
| 5 8 | 
             
                it "signs valid xml" do
         | 
| 6 | 
            -
                  Saml::XML::Document.parse(subject.signed).valid_signature?(Default::FINGERPRINT).should  | 
| 9 | 
            +
                  Saml::XML::Document.parse(subject.signed).valid_signature?(Default::FINGERPRINT).should be_truthy
         | 
| 7 10 | 
             
                end
         | 
| 8 11 | 
             
              end
         | 
| 9 12 | 
             
            end
         | 
| @@ -6,7 +6,10 @@ module SamlIdp | |
| 6 6 | 
             
                describe "with one item" do
         | 
| 7 7 | 
             
                  let(:list) { { email_address: ->() { "foo@example.com" } } }
         | 
| 8 8 |  | 
| 9 | 
            -
                   | 
| 9 | 
            +
                  it "has a valid all" do
         | 
| 10 | 
            +
                    subject.all.should == ["urn:oasis:names:tc:SAML:2.0:nameid-format:emailAddress"]
         | 
| 11 | 
            +
                  end
         | 
| 12 | 
            +
             | 
| 10 13 | 
             
                end
         | 
| 11 14 |  | 
| 12 15 | 
             
                describe "with hash describing versions" do
         | 
| @@ -17,23 +20,23 @@ module SamlIdp | |
| 17 20 | 
             
                    }
         | 
| 18 21 | 
             
                  }
         | 
| 19 22 |  | 
| 20 | 
            -
                   | 
| 21 | 
            -
                    should == [
         | 
| 23 | 
            +
                  it "has a valid all" do
         | 
| 24 | 
            +
                    subject.all.should == [
         | 
| 22 25 | 
             
                      "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress",
         | 
| 23 26 | 
             
                      "urn:oasis:names:tc:SAML:2.0:nameid-format:undefined",
         | 
| 24 27 | 
             
                    ]
         | 
| 25 | 
            -
                   | 
| 28 | 
            +
                  end
         | 
| 26 29 | 
             
                end
         | 
| 27 30 |  | 
| 28 31 | 
             
                describe "with actual list" do
         | 
| 29 32 | 
             
                  let(:list) { [:email_address, :undefined] }
         | 
| 30 33 |  | 
| 31 | 
            -
                   | 
| 32 | 
            -
                    should == [
         | 
| 34 | 
            +
                  it "has a valid all" do
         | 
| 35 | 
            +
                    subject.all.should == [
         | 
| 33 36 | 
             
                      "urn:oasis:names:tc:SAML:2.0:nameid-format:emailAddress",
         | 
| 34 37 | 
             
                      "urn:oasis:names:tc:SAML:2.0:nameid-format:undefined",
         | 
| 35 38 | 
             
                    ]
         | 
| 36 | 
            -
                   | 
| 39 | 
            +
                  end
         | 
| 37 40 | 
             
                end
         | 
| 38 41 | 
             
              end
         | 
| 39 42 | 
             
            end
         | 
| @@ -4,11 +4,29 @@ module SamlIdp | |
| 4 4 | 
             
                let(:raw_request) { "<samlp:AuthnRequest AssertionConsumerServiceURL='http://localhost:3000/saml/consume' Destination='http://localhost:1337/saml/auth' ID='_af43d1a0-e111-0130-661a-3c0754403fdb' IssueInstant='2013-08-06T22:01:35Z' Version='2.0' xmlns:samlp='urn:oasis:names:tc:SAML:2.0:protocol'><saml:Issuer xmlns:saml='urn:oasis:names:tc:SAML:2.0:assertion'>localhost:3000</saml:Issuer><samlp:NameIDPolicy AllowCreate='true' Format='urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress' xmlns:samlp='urn:oasis:names:tc:SAML:2.0:protocol'/></samlp:AuthnRequest>" }
         | 
| 5 5 | 
             
                subject { described_class.new raw_request }
         | 
| 6 6 |  | 
| 7 | 
            -
                 | 
| 8 | 
            -
             | 
| 9 | 
            -
                 | 
| 10 | 
            -
             | 
| 11 | 
            -
                 | 
| 12 | 
            -
             | 
| 7 | 
            +
                it "has a valid request_id" do
         | 
| 8 | 
            +
                  subject.request_id.should == "_af43d1a0-e111-0130-661a-3c0754403fdb"
         | 
| 9 | 
            +
                end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                it "has a valid acs_url" do
         | 
| 12 | 
            +
                  subject.acs_url.should == "http://localhost:3000/saml/consume"
         | 
| 13 | 
            +
                end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                it "has a valid service_provider" do
         | 
| 16 | 
            +
                  subject.service_provider.should be_a ServiceProvider
         | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                it "has a valid service_provider" do
         | 
| 20 | 
            +
                  subject.service_provider.should be_truthy
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                it "has a valid issuer" do
         | 
| 24 | 
            +
                  subject.issuer.should == "localhost:3000"
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                it "has a valid valid_signature" do
         | 
| 28 | 
            +
                  subject.valid_signature?.should be_truthy
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
             | 
| 13 31 | 
             
              end
         | 
| 14 32 | 
             
            end
         | 
| @@ -13,8 +13,14 @@ module SamlIdp | |
| 13 13 | 
             
                  let(:fingerprint) { Default::FINGERPRINT }
         | 
| 14 14 | 
             
                  let(:metadata_url) { "http://localhost:3000/metadata" }
         | 
| 15 15 |  | 
| 16 | 
            -
                   | 
| 17 | 
            -
             | 
| 16 | 
            +
                  it "has a valid fingerprint" do
         | 
| 17 | 
            +
                    subject.fingerprint.should == fingerprint
         | 
| 18 | 
            +
                  end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                  it "has a valid metadata_url" do
         | 
| 21 | 
            +
                    subject.metadata_url.should == metadata_url
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
             | 
| 18 24 | 
             
                  it { should be_valid }
         | 
| 19 25 | 
             
                end
         | 
| 20 26 | 
             
              end
         | 
| @@ -1,13 +1,13 @@ | |
| 1 1 | 
             
            module SamlRequestMacros
         | 
| 2 2 |  | 
| 3 3 | 
             
              def make_saml_request(requested_saml_acs_url = "https://foo.example.com/saml/consume")
         | 
| 4 | 
            -
                auth_request =  | 
| 4 | 
            +
                auth_request = OneLogin::RubySaml::Authrequest.new
         | 
| 5 5 | 
             
                auth_url = auth_request.create(saml_settings(requested_saml_acs_url))
         | 
| 6 6 | 
             
                CGI.unescape(auth_url.split("=").last)
         | 
| 7 7 | 
             
              end
         | 
| 8 8 |  | 
| 9 9 | 
             
              def saml_settings(saml_acs_url = "https://foo.example.com/saml/consume")
         | 
| 10 | 
            -
                settings =  | 
| 10 | 
            +
                settings = OneLogin::RubySaml::Settings.new
         | 
| 11 11 | 
             
                settings.assertion_consumer_service_url = saml_acs_url
         | 
| 12 12 | 
             
                settings.issuer = "http://example.com/issuer"
         | 
| 13 13 | 
             
                settings.idp_sso_target_url = "http://idp.com/saml/idp"
         | 
| @@ -16,4 +16,4 @@ module SamlRequestMacros | |
| 16 16 | 
             
                settings
         | 
| 17 17 | 
             
              end
         | 
| 18 18 |  | 
| 19 | 
            -
            end
         | 
| 19 | 
            +
            end
         | 
    
        data/spec/xml_security_spec.rb
    CHANGED
    
    | @@ -7,7 +7,7 @@ module SamlIdp | |
| 7 7 | 
             
                let(:base64cert) { document.elements["//ds:X509Certificate"].text }
         | 
| 8 8 |  | 
| 9 9 | 
             
                it "it run validate without throwing NS related exceptions" do
         | 
| 10 | 
            -
                  document.validate_doc(base64cert, true).should  | 
| 10 | 
            +
                  document.validate_doc(base64cert, true).should be_falsey
         | 
| 11 11 | 
             
                end
         | 
| 12 12 |  | 
| 13 13 | 
             
                it "it run validate with throwing NS related exceptions" do
         | 
| @@ -57,22 +57,22 @@ module SamlIdp | |
| 57 57 | 
             
              describe "Algorithms" do
         | 
| 58 58 | 
             
                it "validate using SHA1" do
         | 
| 59 59 | 
             
                  document = XMLSecurity::SignedDocument.new(fixture(:adfs_response_sha1, false))
         | 
| 60 | 
            -
                  document.validate("F1:3C:6B:80:90:5A:03:0E:6C:91:3E:5D:15:FA:DD:B0:16:45:48:72").should  | 
| 60 | 
            +
                  document.validate("F1:3C:6B:80:90:5A:03:0E:6C:91:3E:5D:15:FA:DD:B0:16:45:48:72").should be_truthy
         | 
| 61 61 | 
             
                end
         | 
| 62 62 |  | 
| 63 63 | 
             
                it "validate using SHA256" do
         | 
| 64 64 | 
             
                  document = XMLSecurity::SignedDocument.new(fixture(:adfs_response_sha256, false))
         | 
| 65 | 
            -
                  document.validate("28:74:9B:E8:1F:E8:10:9C:A8:7C:A9:C3:E3:C5:01:6C:92:1C:B4:BA").should  | 
| 65 | 
            +
                  document.validate("28:74:9B:E8:1F:E8:10:9C:A8:7C:A9:C3:E3:C5:01:6C:92:1C:B4:BA").should be_truthy
         | 
| 66 66 | 
             
                end
         | 
| 67 67 |  | 
| 68 68 | 
             
                it "validate using SHA384" do
         | 
| 69 69 | 
             
                  document = XMLSecurity::SignedDocument.new(fixture(:adfs_response_sha384, false))
         | 
| 70 | 
            -
                  document.validate("F1:3C:6B:80:90:5A:03:0E:6C:91:3E:5D:15:FA:DD:B0:16:45:48:72").should  | 
| 70 | 
            +
                  document.validate("F1:3C:6B:80:90:5A:03:0E:6C:91:3E:5D:15:FA:DD:B0:16:45:48:72").should be_truthy
         | 
| 71 71 | 
             
                end
         | 
| 72 72 |  | 
| 73 73 | 
             
                it "validate using SHA512" do
         | 
| 74 74 | 
             
                  document = XMLSecurity::SignedDocument.new(fixture(:adfs_response_sha512, false))
         | 
| 75 | 
            -
                  document.validate("F1:3C:6B:80:90:5A:03:0E:6C:91:3E:5D:15:FA:DD:B0:16:45:48:72").should  | 
| 75 | 
            +
                  document.validate("F1:3C:6B:80:90:5A:03:0E:6C:91:3E:5D:15:FA:DD:B0:16:45:48:72").should be_truthy
         | 
| 76 76 | 
             
                end
         | 
| 77 77 | 
             
              end
         | 
| 78 78 |  | 
| @@ -106,17 +106,17 @@ module SamlIdp | |
| 106 106 | 
             
                end
         | 
| 107 107 |  | 
| 108 108 | 
             
                describe "StarfieldTMS" do
         | 
| 109 | 
            -
                  let(:response) {  | 
| 109 | 
            +
                  let(:response) { ::OneLogin::RubySaml::Response.new(fixture(:starfield_response)) }
         | 
| 110 110 |  | 
| 111 111 | 
             
                  before do
         | 
| 112 | 
            -
                    response.settings =  | 
| 112 | 
            +
                    response.settings = ::OneLogin::RubySaml::Settings.new(
         | 
| 113 113 | 
             
                      :idp_cert_fingerprint => "8D:BA:53:8E:A3:B6:F9:F1:69:6C:BB:D9:D8:BD:41:B3:AC:4F:9D:4D"
         | 
| 114 114 | 
             
                    )
         | 
| 115 115 | 
             
                  end
         | 
| 116 116 |  | 
| 117 117 | 
             
                  it "be able to validate a good response" do
         | 
| 118 118 | 
             
                    Timecop.freeze Time.parse('2012-11-28 17:55:00 UTC') do
         | 
| 119 | 
            -
                      response.validate!.should  | 
| 119 | 
            +
                      response.validate!.should be_truthy
         | 
| 120 120 | 
             
                    end
         | 
| 121 121 | 
             
                  end
         | 
| 122 122 |  | 
    
        metadata
    CHANGED
    
    | @@ -1,15 +1,15 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: saml_idp
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 5 | 
            -
              prerelease: 
         | 
| 4 | 
            +
              version: 0.2.0.pre
         | 
| 5 | 
            +
              prerelease: 6
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| 8 8 | 
             
            - Jon Phenow
         | 
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date:  | 
| 12 | 
            +
            date: 2014-08-08 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: activesupport
         | 
| @@ -128,33 +128,33 @@ dependencies: | |
| 128 128 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 129 129 | 
             
                none: false
         | 
| 130 130 | 
             
                requirements:
         | 
| 131 | 
            -
                - -  | 
| 131 | 
            +
                - - ~>
         | 
| 132 132 | 
             
                  - !ruby/object:Gem::Version
         | 
| 133 | 
            -
                    version: ' | 
| 133 | 
            +
                    version: '2.5'
         | 
| 134 134 | 
             
              type: :development
         | 
| 135 135 | 
             
              prerelease: false
         | 
| 136 136 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 137 137 | 
             
                none: false
         | 
| 138 138 | 
             
                requirements:
         | 
| 139 | 
            -
                - -  | 
| 139 | 
            +
                - - ~>
         | 
| 140 140 | 
             
                  - !ruby/object:Gem::Version
         | 
| 141 | 
            -
                    version: ' | 
| 141 | 
            +
                    version: '2.5'
         | 
| 142 142 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 143 143 | 
             
              name: ruby-saml
         | 
| 144 144 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 145 145 | 
             
                none: false
         | 
| 146 146 | 
             
                requirements:
         | 
| 147 | 
            -
                - -  | 
| 147 | 
            +
                - - ~>
         | 
| 148 148 | 
             
                  - !ruby/object:Gem::Version
         | 
| 149 | 
            -
                    version: '0'
         | 
| 149 | 
            +
                    version: '0.8'
         | 
| 150 150 | 
             
              type: :development
         | 
| 151 151 | 
             
              prerelease: false
         | 
| 152 152 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 153 153 | 
             
                none: false
         | 
| 154 154 | 
             
                requirements:
         | 
| 155 | 
            -
                - -  | 
| 155 | 
            +
                - - ~>
         | 
| 156 156 | 
             
                  - !ruby/object:Gem::Version
         | 
| 157 | 
            -
                    version: '0'
         | 
| 157 | 
            +
                    version: '0.8'
         | 
| 158 158 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 159 159 | 
             
              name: rails
         | 
| 160 160 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -345,19 +345,16 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 345 345 | 
             
                  version: '0'
         | 
| 346 346 | 
             
                  segments:
         | 
| 347 347 | 
             
                  - 0
         | 
| 348 | 
            -
                  hash:  | 
| 348 | 
            +
                  hash: 557942331411013025
         | 
| 349 349 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 350 350 | 
             
              none: false
         | 
| 351 351 | 
             
              requirements:
         | 
| 352 | 
            -
              - - ! ' | 
| 352 | 
            +
              - - ! '>'
         | 
| 353 353 | 
             
                - !ruby/object:Gem::Version
         | 
| 354 | 
            -
                  version:  | 
| 355 | 
            -
                  segments:
         | 
| 356 | 
            -
                  - 0
         | 
| 357 | 
            -
                  hash: -3584084846075043775
         | 
| 354 | 
            +
                  version: 1.3.1
         | 
| 358 355 | 
             
            requirements: []
         | 
| 359 356 | 
             
            rubyforge_project: 
         | 
| 360 | 
            -
            rubygems_version: 1.8. | 
| 357 | 
            +
            rubygems_version: 1.8.23
         | 
| 361 358 | 
             
            signing_key: 
         | 
| 362 359 | 
             
            specification_version: 3
         | 
| 363 360 | 
             
            summary: SAML Indentity Provider in ruby
         |