Commit 2bb0a36

mo <mo@mokhan.ca>
2018-03-12 01:09:55
build response with status message.
1 parent 5dc6608
Changed files (5)
lib
saml
kit
spec
saml
kit
support
lib/saml/kit/builders/templates/response.builder
@@ -6,6 +6,7 @@ xml.Response response_options do
   signature_for(reference_id: id, xml: xml)
   xml.Status do
     xml.StatusCode Value: status_code
+    xml.StatusMessage(status_message) if status_message.present?
   end
   render assertion, xml: xml
 end
lib/saml/kit/builders/response.rb
@@ -9,7 +9,7 @@ module Saml
         include XmlTemplatable
         attr_reader :user, :request
         attr_accessor :id, :reference_id, :now
-        attr_accessor :version, :status_code
+        attr_accessor :version, :status_code, :status_message
         attr_accessor :issuer, :destination
         attr_reader :configuration
 
@@ -21,6 +21,7 @@ module Saml
           @now = Time.now.utc
           @version = '2.0'
           @status_code = Namespaces::SUCCESS
+          @status_message = nil
           @issuer = configuration.entity_id
           @encryption_certificate = request.try(:provider).try(:encryption_certificates).try(:last)
           @encrypt = encryption_certificate.present?
spec/saml/kit/builders/response_spec.rb
@@ -38,6 +38,13 @@ RSpec.describe Saml::Kit::Builders::Response do
       expect(result.issuer).to eql(issuer)
       expect(result.assertion.issuer).to eql(issuer)
     end
+
+    it 'builds a response with a status code' do
+      subject.status_code = Saml::Kit::Namespaces::REQUESTER_ERROR
+      subject.status_message = 'Invalid message signature'
+      result = subject.build
+      expect(result.status_message).to eql('Invalid message signature')
+    end
   end
 
   describe '#to_xml' do
spec/support/erb_templating.rb
@@ -15,8 +15,8 @@ module ErbTemplating
       @erb.result(binding)
     end
 
-    def method_missing(name, *args)
-      @data[name]
+    def method_missing(method, *)
+      @data[method] || super
     end
 
     def respond_to_missing?(method, *)
.reek
@@ -37,6 +37,7 @@ Attribute:
   - Saml::Kit::Builders::Response#now
   - Saml::Kit::Builders::Response#reference_id
   - Saml::Kit::Builders::Response#status_code
+  - Saml::Kit::Builders::Response#status_message
   - Saml::Kit::Builders::Response#version
   - Saml::Kit::Builders::ServiceProviderMetadata#acs_urls
   - Saml::Kit::Builders::ServiceProviderMetadata#logout_urls
@@ -62,7 +63,7 @@ ControlParameter:
   - Saml::Kit::Metadata#to_xml
   - Saml::Kit::Signature#to_xml
 TooManyInstanceVariables:
-  max_instance_variables: 11
+  max_instance_variables: 12
 TooManyMethods:
   max_methods: 30
 TooManyStatements: