2121import org .w3c .dom .NodeList ;
2222
2323import com .onelogin .saml2 .exception .ValidationError ;
24- import com .onelogin .saml2 .exception .XMLEntityException ;
2524import com .onelogin .saml2 .exception .SettingsException ;
2625import com .onelogin .saml2 .http .HttpRequest ;
2726import com .onelogin .saml2 .settings .Saml2Settings ;
@@ -60,31 +59,6 @@ public class LogoutRequest {
6059 */
6160 private final HttpRequest request ;
6261
63- /**
64- * NameID.
65- */
66- private String nameId ;
67-
68- /**
69- * NameID Format.
70- */
71- private String nameIdFormat ;
72-
73- /**
74- * nameId NameQualifier
75- */
76- private String nameIdNameQualifier ;
77-
78- /**
79- * nameId SP NameQualifier
80- */
81- private String nameIdSPNameQualifier ;
82-
83- /**
84- * SessionIndex. When the user is logged, this stored it from the AuthnStatement of the SAML Response
85- */
86- private String sessionIndex ;
87-
8862 /**
8963 * URL of the current host + current view
9064 */
@@ -117,7 +91,14 @@ public class LogoutRequest {
11791 * The NameID NameQualifier that will be set in the LogoutRequest.
11892 * @param nameIdSPNameQualifier
11993 * The SP Name Qualifier that will be set in the LogoutRequest.
94+ *
95+ * @deprecated use {@link #LogoutRequest(Saml2Settings, HttpRequest)} to build a
96+ * received request from the HTTP request, or
97+ * {@link #LogoutRequest(Saml2Settings, LogoutRequestParams)} with
98+ * {@link LogoutRequestParams#LogoutRequestParams(String, String, String, String, String)}
99+ * to build a new request to be sent
120100 */
101+ @ Deprecated
121102 public LogoutRequest (Saml2Settings settings , HttpRequest request , String nameId , String sessionIndex , String nameIdFormat , String nameIdNameQualifier , String nameIdSPNameQualifier ) {
122103 this .settings = settings ;
123104 this .request = request ;
@@ -130,16 +111,12 @@ public LogoutRequest(Saml2Settings settings, HttpRequest request, String nameId,
130111 }
131112
132113 if (samlLogoutRequest == null ) {
114+ LogoutRequestParams params = new LogoutRequestParams (sessionIndex , nameId , nameIdFormat , nameIdNameQualifier , nameIdSPNameQualifier );
133115 id = Util .generateUniqueID (settings .getUniqueIDPrefix ());
134116 issueInstant = Calendar .getInstance ();
135- this .nameId = nameId ;
136- this .nameIdFormat = nameIdFormat ;
137- this .nameIdNameQualifier = nameIdNameQualifier ;
138- this .nameIdSPNameQualifier = nameIdSPNameQualifier ;
139- this .sessionIndex = sessionIndex ;
140117
141- StrSubstitutor substitutor = generateSubstitutor (settings );
142- logoutRequestString = postProcessXml (substitutor .replace (getLogoutRequestTemplate ()), settings );
118+ StrSubstitutor substitutor = generateSubstitutor (params , settings );
119+ logoutRequestString = postProcessXml (substitutor .replace (getLogoutRequestTemplate ()), params , settings );
143120 } else {
144121 logoutRequestString = Util .base64decodedInflated (samlLogoutRequest );
145122 Document doc = Util .loadXML (logoutRequestString );
@@ -163,7 +140,14 @@ public LogoutRequest(Saml2Settings settings, HttpRequest request, String nameId,
163140 * The nameIdFormat that will be set in the LogoutRequest.
164141 * @param nameIdNameQualifier
165142 * The NameID NameQualifier will be set in the LogoutRequest.
143+ *
144+ * @deprecated use {@link #LogoutRequest(Saml2Settings, HttpRequest)} to build a
145+ * received request from the HTTP request, or
146+ * {@link #LogoutRequest(Saml2Settings, LogoutRequestParams)} with
147+ * {@link LogoutRequestParams#LogoutRequestParams(String, String, String, String)}
148+ * to build a new request to be sent
166149 */
150+ @ Deprecated
167151 public LogoutRequest (Saml2Settings settings , HttpRequest request , String nameId , String sessionIndex , String nameIdFormat , String nameIdNameQualifier ) {
168152 this (settings , request , nameId , sessionIndex , nameIdFormat , nameIdNameQualifier , null );
169153 }
@@ -181,7 +165,14 @@ public LogoutRequest(Saml2Settings settings, HttpRequest request, String nameId,
181165 * The SessionIndex (taken from the SAML Response in the SSO process).
182166 * @param nameIdFormat
183167 * The nameIdFormat that will be set in the LogoutRequest.
168+ *
169+ * @deprecated use {@link #LogoutRequest(Saml2Settings, HttpRequest)} to build a
170+ * received request from the HTTP request, or
171+ * {@link #LogoutRequest(Saml2Settings, LogoutRequestParams)} with
172+ * {@link LogoutRequestParams#LogoutRequestParams(String, String, String)}
173+ * to build a new request to be sent
184174 */
175+ @ Deprecated
185176 public LogoutRequest (Saml2Settings settings , HttpRequest request , String nameId , String sessionIndex , String nameIdFormat ) {
186177 this (settings , request , nameId , sessionIndex , nameIdFormat , null );
187178 }
@@ -197,23 +188,34 @@ public LogoutRequest(Saml2Settings settings, HttpRequest request, String nameId,
197188 * The NameID that will be set in the LogoutRequest.
198189 * @param sessionIndex
199190 * The SessionIndex (taken from the SAML Response in the SSO process).
191+ *
192+ * @deprecated use {@link #LogoutRequest(Saml2Settings, HttpRequest)} to build a
193+ * received request from the HTTP request, or
194+ * {@link #LogoutRequest(Saml2Settings, LogoutRequestParams)} with
195+ * {@link LogoutRequestParams#LogoutRequestParams(String, String)}
196+ * to build a new request to be sent
200197 */
198+ @ Deprecated
201199 public LogoutRequest (Saml2Settings settings , HttpRequest request , String nameId , String sessionIndex ) {
202200 this (settings , request , nameId , sessionIndex , null );
203201 }
204202
205203 /**
206- * Constructs the LogoutRequest object.
204+ * Constructs a LogoutRequest object when a new request should be generated
205+ * and sent.
207206 *
208207 * @param settings
209208 * OneLogin_Saml2_Settings
209+ *
210+ * @see #LogoutRequest(Saml2Settings, LogoutRequestParams)
210211 */
211212 public LogoutRequest (Saml2Settings settings ) {
212- this (settings , null , null , null );
213+ this (settings , new LogoutRequestParams () );
213214 }
214215
215216 /**
216- * Constructs the LogoutRequest object.
217+ * Constructs the LogoutRequest object when a received request should be extracted
218+ * from the HTTP request and parsed.
217219 *
218220 * @param settings
219221 * OneLogin_Saml2_Settings
@@ -224,6 +226,26 @@ public LogoutRequest(Saml2Settings settings, HttpRequest request) {
224226 this (settings , request , null , null );
225227 }
226228
229+ /**
230+ * Constructs the LogoutRequest object when a new request should be generated
231+ * and sent.
232+ *
233+ * @param settings
234+ * OneLogin_Saml2_Settings
235+ * @param params
236+ * a set of authentication request input parameters that shape the
237+ * request to create
238+ */
239+ public LogoutRequest (Saml2Settings settings , LogoutRequestParams params ) {
240+ this .settings = settings ;
241+ this .request = null ;
242+ id = Util .generateUniqueID (settings .getUniqueIDPrefix ());
243+ issueInstant = Calendar .getInstance ();
244+
245+ StrSubstitutor substitutor = generateSubstitutor (params , settings );
246+ logoutRequestString = postProcessXml (substitutor .replace (getLogoutRequestTemplate ()), params , settings );
247+ }
248+
227249 /**
228250 * Allows for an extension class to post-process the LogoutRequest XML generated
229251 * for this request, in order to customize the result.
@@ -237,12 +259,14 @@ public LogoutRequest(Saml2Settings settings, HttpRequest request) {
237259 * @param logoutRequestXml
238260 * the XML produced for this LogoutRequest by the standard
239261 * implementation provided by {@link LogoutRequest}
262+ * @param params
263+ * the logout request input parameters
240264 * @param settings
241265 * the settings
242266 * @return the post-processed XML for this LogoutRequest, which will then be
243267 * returned by any call to {@link #getLogoutRequestXml()}
244268 */
245- protected String postProcessXml (final String logoutRequestXml , final Saml2Settings settings ) {
269+ protected String postProcessXml (final String logoutRequestXml , final LogoutRequestParams params , final Saml2Settings settings ) {
246270 return logoutRequestXml ;
247271 }
248272
@@ -286,12 +310,14 @@ public String getLogoutRequestXml() {
286310 /**
287311 * Substitutes LogoutRequest variables within a string by values.
288312 *
313+ * @param params
314+ * the logout request input parameters
289315 * @param settings
290- * Saml2Settings object. Setting data
316+ * Saml2Settings object. Setting data
291317 *
292- * @return the StrSubstitutor object of the LogoutRequest
318+ * @return the StrSubstitutor object of the LogoutRequest
293319 */
294- private StrSubstitutor generateSubstitutor (Saml2Settings settings ) {
320+ private StrSubstitutor generateSubstitutor (LogoutRequestParams params , Saml2Settings settings ) {
295321 Map <String , String > valueMap = new HashMap <String , String >();
296322
297323 valueMap .put ("id" , Util .toXml (id ));
@@ -308,14 +334,16 @@ private StrSubstitutor generateSubstitutor(Saml2Settings settings) {
308334
309335 valueMap .put ("issuer" , Util .toXml (settings .getSpEntityId ()));
310336
337+ String nameId = params .getNameId ();
338+ String requestedNameIdFormat = params .getNameIdFormat ();
311339 String nameIdFormat = null ;
312- String spNameQualifier = this . nameIdSPNameQualifier ;
313- String nameQualifier = this . nameIdNameQualifier ;
340+ String spNameQualifier = params . getNameIdSPNameQualifier () ;
341+ String nameQualifier = params . getNameIdNameQualifier () ;
314342 if (nameId != null ) {
315- if (this . nameIdFormat == null && !settings .getSpNameIDFormat ().equals (Constants .NAMEID_UNSPECIFIED )) {
343+ if (requestedNameIdFormat == null && !settings .getSpNameIDFormat ().equals (Constants .NAMEID_UNSPECIFIED )) {
316344 nameIdFormat = settings .getSpNameIDFormat ();
317345 } else {
318- nameIdFormat = this . nameIdFormat ;
346+ nameIdFormat = requestedNameIdFormat ;
319347 }
320348 } else {
321349 nameId = settings .getIdpEntityId ();
@@ -348,6 +376,7 @@ private StrSubstitutor generateSubstitutor(Saml2Settings settings) {
348376 valueMap .put ("nameIdStr" , nameIdStr );
349377
350378 String sessionIndexStr = "" ;
379+ String sessionIndex = params .getSessionIndex ();
351380 if (sessionIndex != null ) {
352381 sessionIndexStr = " <samlp:SessionIndex>" + Util .toXml (sessionIndex ) + "</samlp:SessionIndex>" ;
353382 }
0 commit comments