Class: Onelogin::Saml::LogoutResponse
- Inherits:
-
Object
- Object
- Onelogin::Saml::LogoutResponse
show all
- Includes:
- Coding, Request
- Defined in:
- lib/onelogin/ruby-saml/logout_response.rb
Constant Summary
collapse
- ASSERTION =
"urn:oasis:names:tc:SAML:2.0:assertion"
- PROTOCOL =
"urn:oasis:names:tc:SAML:2.0:protocol"
- DSIG =
"http://www.w3.org/2000/09/xmldsig#"
Constants included
from Request
Request::HTTP_GET, Request::HTTP_POST
Instance Method Summary
collapse
Methods included from Request
#binding_select, #content_get, #content_post
Methods included from Coding
#decode, #deflate, #encode, #escape, #inflate, #unescape
Constructor Details
#initialize(options = { }) ⇒ LogoutResponse
Returns a new instance of LogoutResponse.
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
# File 'lib/onelogin/ruby-saml/logout_response.rb', line 14
def initialize( options = { } )
opt = { :response => nil, :settings => nil }.merge(options)
if opt[:response]
begin
@response = XMLSecurity::SignedDocument.new(decode( opt[:response] ))
raise if @response.nil?
raise if @response.root.nil?
raise if @response.root.namespace != PROTOCOL
document
rescue
@response = XMLSecurity::SignedDocument.new( inflate(decode( opt[:response] ) ) )
end
end
if opt[:settings]
@settings = opt[:settings]
end
end
|
Instance Method Details
#create(options) ⇒ Object
Create a LogoutResponse to to the IdP’s LogoutRequest
(For IdP initiated SLO)
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
# File 'lib/onelogin/ruby-saml/logout_response.rb', line 39
def create( options )
opt = { :transaction_id => nil,
:in_response_to => nil,
:status => "urn:oasis:names:tc:SAML:2.0:status:Success",
:extra_parameters => nil }.merge(options)
return nil if opt[:transaction_id].nil?
@response = REXML::Document.new
@response.context[:attribute_quote] = :quote
uuid = "_" + UUID.new.generate
time = Time.now.utc.strftime("%Y-%m-%dT%H:%M:%SZ")
root = @response.add_element "saml2p:LogoutResponse", { "xmlns:saml2p" => PROTOCOL }
root.attributes['ID'] = uuid
root.attributes['IssueInstant'] = time
root.attributes['Version'] = "2.0"
if opt[:transaction_id]
root.attributes['InResponseTo'] = opt[:transaction_id]
elsif opt[:in_response_to]
root.attributes['InResponseTo'] = opt[:in_response_to]
end
if opt[:status]
status = root.add_element "saml2p:Status"
status_code = status.add_element "saml2p:StatusCode", {
"Value" => opt[:status]
}
end
if @settings && @settings.issuer
issuer = root.add_element "saml:Issuer", {
"xmlns:saml" => "urn:oasis:names:tc:SAML:2.0:assertion"
}
issuer.text = @settings.issuer
end
meta = Metadata.new( @settings )
Logging.debug "Created LogoutResponse:\n#{@response}"
return meta.create_slo_response( to_s, opt[:extra_parameters] )
end
|
#in_response_to ⇒ Object
95
96
97
98
99
100
|
# File 'lib/onelogin/ruby-saml/logout_response.rb', line 95
def in_response_to
element = REXML::XPath.first(@response, "/p:LogoutResponse", {
"p" => PROTOCOL })
return nil if element.nil?
element.attributes["InResponseTo"]
end
|
#is_valid? ⇒ Boolean
109
110
111
|
# File 'lib/onelogin/ruby-saml/logout_response.rb', line 109
def is_valid?
validate(soft = true)
end
|
#issuer ⇒ Object
88
89
90
91
92
93
|
# File 'lib/onelogin/ruby-saml/logout_response.rb', line 88
def issuer
element = REXML::XPath.first(@response, "/p:LogoutResponse/a:Issuer", {
"p" => PROTOCOL, "a" => ASSERTION} )
return nil if element.nil?
element.text
end
|
#success? ⇒ Boolean
102
103
104
105
106
107
108
|
# File 'lib/onelogin/ruby-saml/logout_response.rb', line 102
def success?
element = REXML::XPath.first(@response, "/p:LogoutResponse/p:Status/p:StatusCode", {
"p" => PROTOCOL })
return false if element.nil?
element.attributes["Value"] == "urn:oasis:names:tc:SAML:2.0:status:Success"
end
|
#to_s ⇒ Object
84
85
86
|
# File 'lib/onelogin/ruby-saml/logout_response.rb', line 84
def to_s
@response.to_s
end
|
#to_xml ⇒ Object
function to return the created request as an XML document
79
80
81
82
83
|
# File 'lib/onelogin/ruby-saml/logout_response.rb', line 79
def to_xml
text = ""
@response.write(text, 1)
return text
end
|
#validate(soft = true) ⇒ Object
116
117
118
119
120
121
122
123
124
|
# File 'lib/onelogin/ruby-saml/logout_response.rb', line 116
def validate( soft = true )
return false if @response.nil?
return false if @settings.nil?
return false if @response.validate(@settings, soft) == false
return true
end
|
#validate! ⇒ Object
113
114
115
|
# File 'lib/onelogin/ruby-saml/logout_response.rb', line 113
def validate!
validate( soft = false )
end
|