@@ -5,23 +5,39 @@ module Tools
55 # Use this for building the SAML logout request XML
66 module LogoutRequestBuilder
77 def self . build ( options = { } )
8- name_id_format = options [ :name_id_format ] || EMAIL_FORMAT
9-
108 # Mandatory
119 name_id = options . fetch ( :name_id )
1210 issuer = options . fetch ( :issuer )
1311
1412 builder = Nokogiri ::XML ::Builder . new do |xml |
1513 xml . LogoutRequest ( "xmlns:samlp" => NS_MAP [ "samlp" ] , "xmlns:saml" => NS_MAP [ "saml" ] , "ID" => Samlr ::Tools . uuid , "IssueInstant" => Samlr ::Tools ::Timestamp . stamp , "Version" => "2.0" ) do
1614 xml . doc . root . namespace = xml . doc . root . namespace_definitions . find { |ns | ns . prefix == "samlp" }
17-
1815 xml [ "saml" ] . Issuer ( issuer )
19- xml [ "saml" ] . NameID ( name_id , "Format" => name_id_format )
16+ xml [ "saml" ] . NameID ( name_id , logout_options ( options ) )
2017 end
2118 end
2219
2320 builder . to_xml ( COMPACT )
2421 end
22+
23+ def self . logout_options ( options )
24+ name_id_options = options [ :name_id_options ] || { }
25+ options = { "Format" => format_option ( options ) }
26+ options . merge! ( "NameQualifier" => name_id_options [ :name_qualifier ] ) if name_id_options [ :name_qualifier ]
27+ options . merge! ( "SPNameQualifier" => name_id_options [ :spname_qualifier ] ) if name_id_options [ :spname_qualifier ]
28+ options
29+ end
30+
31+ def self . format_option ( options )
32+ if options [ :name_id_format ]
33+ warn "[DEPRECATION] options[:name_id_format] is deprecated. Please use options[:name_id_options][:format] instead"
34+ options [ :name_id_format ]
35+ elsif options [ :name_id_options ] && options [ :name_id_options ] [ :format ]
36+ options [ :name_id_options ] [ :format ]
37+ else
38+ EMAIL_FORMAT
39+ end
40+ end
2541 end
2642 end
2743end
0 commit comments