class SAML::Bindings::HTTPRedirect
Public Instance Methods
build_request(rack_response, endpoint, saml_request, relay_state=nil)
click to toggle source
# File lib/saml/bindings/http_redirect.rb, line 9 def build_request(rack_response, endpoint, saml_request, relay_state=nil) unless relay_state.nil? raise ArgumentError.new("relay_state must not exceed 80 bytes") if relay_state.bytesize > 80 end request = saml_request.to_xml.to_s deflated_saml_request = deflate(request) query = "SAMLRequest=#{deflated_saml_request}" query += "&RelayState=#{url_enc(relay_state)}" unless relay_state.nil? url = "#{endpoint.location}?#{query}" rack_response.redirect url end
build_response(rack_request)
click to toggle source
# File lib/saml/bindings/http_redirect.rb, line 21 def build_response(rack_request) xml_str = inflate(rack_request.params["SAMLResponse"]) xml = Core::Document.new(xml_str).root Core::Response.from_xml(xml) end
Private Instance Methods
base64_dec(str)
click to toggle source
# File lib/saml/bindings/http_redirect.rb, line 58 def base64_dec(str) Base64.decode64(str) end
base64_enc(str)
click to toggle source
# File lib/saml/bindings/http_redirect.rb, line 54 def base64_enc(str) Base64.encode64(str) end
compress(str)
click to toggle source
# File lib/saml/bindings/http_redirect.rb, line 40 def compress(str) z = Zlib::Deflate.deflate(str, Zlib::BEST_COMPRESSION) # The SAML standard requires RFC1951 compliance. Zlib::Deflate # are RFC1950 compliant. By removing the 2 byte header and the # 4 byte tail (checksum), what's left is a deflate stream as # described in RFC1951. z[2..-5] end
decompress(str)
click to toggle source
# File lib/saml/bindings/http_redirect.rb, line 49 def decompress(str) z = Zlib::Inflate.new(-Zlib::MAX_WBITS) # Raw processing (no head or tail) z.inflate(str) end
deflate(str)
click to toggle source
Described in section 3.4.4.1
# File lib/saml/bindings/http_redirect.rb, line 30 def deflate(str) url_enc(base64_enc(compress(str))) end
inflate(str)
click to toggle source
# File lib/saml/bindings/http_redirect.rb, line 34 def inflate(str) # FIXME do we never need to URL.decode? decompress(base64_dec(str)) end
url_dec(str)
click to toggle source
# File lib/saml/bindings/http_redirect.rb, line 66 def url_dec(str) CGI.unescape(str) end
url_enc(str)
click to toggle source
# File lib/saml/bindings/http_redirect.rb, line 62 def url_enc(str) CGI.escape(str) end