33
33
*/
34
34
package fr .paris .lutece .plugins .forms .web ;
35
35
36
- import java .sql .Timestamp ;
37
- import java .time .LocalDateTime ;
38
- import java .util .*;
39
- import java .util .stream .Collectors ;
40
-
41
- import javax .servlet .http .HttpServletRequest ;
42
-
43
36
import fr .paris .lutece .plugins .forms .business .*;
44
- import fr .paris .lutece .plugins .genericattributes .business .ResponseHome ;
45
- import fr .paris .lutece .portal .service .util .AppLogService ;
46
- import org .apache .commons .fileupload .FileItem ;
47
- import org .apache .commons .lang3 .StringUtils ;
48
- import org .apache .commons .lang3 .math .NumberUtils ;
49
-
50
37
import fr .paris .lutece .plugins .forms .exception .FormNotFoundException ;
51
38
import fr .paris .lutece .plugins .forms .exception .MaxFormResponseException ;
52
39
import fr .paris .lutece .plugins .forms .exception .QuestionValidationException ;
77
64
import fr .paris .lutece .portal .service .security .SecurityTokenService ;
78
65
import fr .paris .lutece .portal .service .security .UserNotSignedException ;
79
66
import fr .paris .lutece .portal .service .spring .SpringContextService ;
67
+ import fr .paris .lutece .portal .service .util .AppLogService ;
80
68
import fr .paris .lutece .portal .service .util .AppPathService ;
81
69
import fr .paris .lutece .portal .service .util .AppPropertiesService ;
82
70
import fr .paris .lutece .portal .util .mvc .commons .annotations .Action ;
87
75
import fr .paris .lutece .portal .web .upload .MultipartHttpServletRequest ;
88
76
import fr .paris .lutece .portal .web .xpages .XPage ;
89
77
import fr .paris .lutece .util .url .UrlItem ;
90
- import org .apache .james .mime4j .dom .datetime .DateTime ;
78
+ import org .apache .commons .fileupload .FileItem ;
79
+ import org .apache .commons .lang3 .StringUtils ;
80
+ import org .apache .commons .lang3 .math .NumberUtils ;
81
+
82
+ import javax .servlet .http .HttpServletRequest ;
83
+ import java .sql .Timestamp ;
84
+ import java .time .LocalDateTime ;
85
+ import java .util .*;
86
+ import java .util .stream .Collectors ;
91
87
92
88
/**
93
89
*
@@ -143,7 +139,7 @@ public class FormXPage extends MVCApplication
143
139
private static final String MARK_FORM_LIST = "form_list" ;
144
140
private static final String MARK_DISPLAY_CAPTCHA = "display_captcha" ;
145
141
private static final String MARK_CAPTCHA = "captcha" ;
146
-
142
+ private static final String AUTH_PROVIDER = "auth_provider" ;
147
143
// Other
148
144
private static FormService _formService = SpringContextService .getBean ( FormService .BEAN_NAME );
149
145
private ICaptchaSecurityService _captchaSecurityService = new CaptchaSecurityService ( );
@@ -153,7 +149,8 @@ public class FormXPage extends MVCApplication
153
149
private StepDisplayTree _stepDisplayTree ;
154
150
private IBreadcrumb _breadcrumb ;
155
151
private boolean _bInactiveStateBypassed ;
156
- private boolean IsRequestComingFromAction = false ;
152
+ private Boolean isRequestFromLoginPage = false ;
153
+
157
154
158
155
/**
159
156
* Return the default XPage with the list of all available Form
@@ -312,9 +309,6 @@ public synchronized XPage getStepView( HttpServletRequest request ) throws SiteM
312
309
{
313
310
_breadcrumb = SpringContextService .getBean ( form .getBreadcrumbName ( ) );
314
311
}
315
- if (_formResponseManager != null && !_formResponseManager .getIsBackupResponseAlreadyInitiated () && _formResponseManager .getIsResponseLoadedFromBackup ()) {
316
- _formResponseManager .setBackupResponseAlreadyInitiated (true );
317
- }
318
312
initFormResponseManager ( request , form );
319
313
if ( _formResponseManager .getFormResponse ( ).isFromSave ( ) )
320
314
{
@@ -361,7 +355,6 @@ public synchronized XPage getStepView( HttpServletRequest request ) throws SiteM
361
355
SiteMessageService .setMessage ( request , FormsConstants .MESSAGE_ERROR_INACTIVE_FORM , SiteMessage .TYPE_ERROR );
362
356
}
363
357
}
364
- IsRequestComingFromAction = true ;
365
358
XPage xPage = getXPage ( TEMPLATE_VIEW_STEP , getLocale ( request ), model );
366
359
xPage .setTitle ( strTitleForm );
367
360
xPage .setPathLabel ( strPathForm );
@@ -451,7 +444,6 @@ private void getFormStepModel( Form form, HttpServletRequest request, Map<String
451
444
@ Action ( value = ACTION_PREVIOUS_STEP )
452
445
public synchronized XPage doReturnStep ( HttpServletRequest request ) throws SiteMessageException , UserNotSignedException
453
446
{
454
- IsRequestComingFromAction = true ;
455
447
boolean bSessionLost = isSessionLost ( );
456
448
try
457
449
{
@@ -471,8 +463,7 @@ public synchronized XPage doReturnStep( HttpServletRequest request ) throws Site
471
463
{
472
464
// The condition below : We don't want to fill the FormResponseManager when just logged in with response made when user wasn't logged in
473
465
//for exemple in case you are at step 2, you log in and you have to go back to step 1 that you already saved in backup
474
- if (_formResponseManager .getIsBackupResponseAlreadyInitiated () && _formResponseManager .getIsResponseLoadedFromBackup ()
475
- || !_formResponseManager .getIsResponseLoadedFromBackup () && _formResponseManager .getFormResponse ().getCreation () != null ) {
466
+ if (_formResponseManager .getFormResponse ().getCreation () != null ) {
476
467
FormsResponseUtils .fillResponseManagerWithResponses (request , false , _formResponseManager , _stepDisplayTree .getQuestions (), false );
477
468
}
478
469
}
@@ -504,7 +495,6 @@ public synchronized XPage doReturnStep( HttpServletRequest request ) throws Site
504
495
@ Action ( value = ACTION_GO_TO_STEP )
505
496
public synchronized XPage doGoToStep ( HttpServletRequest request ) throws SiteMessageException , UserNotSignedException
506
497
{
507
- IsRequestComingFromAction = true ;
508
498
509
499
boolean bSessionLost = isSessionLost ( );
510
500
@@ -554,7 +544,6 @@ public synchronized XPage doGoToStep( HttpServletRequest request ) throws SiteMe
554
544
@ Action ( value = ACTION_FORM_RESPONSE_SUMMARY )
555
545
public synchronized XPage doFormResponseSummary ( HttpServletRequest request ) throws SiteMessageException , UserNotSignedException
556
546
{
557
- IsRequestComingFromAction = true ;
558
547
Form form = null ;
559
548
try
560
549
{
@@ -649,7 +638,6 @@ private Map<String, Object> buildModelForSummary( Form form, HttpServletRequest
649
638
@ Action ( value = ACTION_SAVE_FORM_RESPONSE )
650
639
public synchronized XPage doSaveFormResponse ( HttpServletRequest request ) throws SiteMessageException , UserNotSignedException , AccessDeniedException
651
640
{
652
- IsRequestComingFromAction = true ;
653
641
// CSRF Token control
654
642
if ( !SecurityTokenService .getInstance ( ).validate ( request , ACTION_SAVE_FORM_RESPONSE ) )
655
643
{
@@ -696,7 +684,6 @@ public synchronized XPage doSaveFormResponse( HttpServletRequest request ) throw
696
684
@ Action ( value = ACTION_SAVE_FORM_RESPONSE_SUMMARY )
697
685
public synchronized XPage doSaveFormResponseSummary ( HttpServletRequest request ) throws SiteMessageException , UserNotSignedException , AccessDeniedException
698
686
{
699
- IsRequestComingFromAction = true ;
700
687
// CSRF Token control
701
688
if ( !SecurityTokenService .getInstance ( ).validate ( request , ACTION_SAVE_FORM_RESPONSE ) )
702
689
{
@@ -934,7 +921,6 @@ public synchronized XPage doSaveStep( HttpServletRequest request ) throws SiteMe
934
921
errorList .stream ( ).collect ( Collectors .joining ( ) )
935
922
}, null , null , null , SiteMessage .TYPE_ERROR , null , getViewFullUrl ( VIEW_STEP ) );
936
923
}
937
- IsRequestComingFromAction = true ;
938
924
return getStepView ( request );
939
925
}
940
926
@@ -962,7 +948,6 @@ private boolean isCaptchaKO( HttpServletRequest request, boolean needValidation
962
948
@ Action ( value = ACTION_SAVE_FOR_BACKUP )
963
949
public synchronized XPage doSaveForBackup ( HttpServletRequest request ) throws SiteMessageException , UserNotSignedException , AccessDeniedException
964
950
{
965
- IsRequestComingFromAction = true ;
966
951
// CSRF Token control
967
952
if ( !SecurityTokenService .getInstance ( ).validate ( request , ACTION_SAVE_FORM_RESPONSE ) )
968
953
{
@@ -1010,7 +995,6 @@ public synchronized XPage doSaveForBackup( HttpServletRequest request ) throws S
1010
995
1011
996
_formService .saveFormForBackup ( formResponse );
1012
997
_formResponseManager .setFormResponseUpdateDate ( formResponse .getUpdateStatus ( ) );
1013
- _formResponseManager .setIsResponseLoadedFromBackup (false );
1014
998
_formService .saveFormForBackup (formResponse );
1015
999
}
1016
1000
return getStepView ( request );
@@ -1032,7 +1016,6 @@ public synchronized XPage doSaveForBackup( HttpServletRequest request ) throws S
1032
1016
@ Action ( value = ACTION_RESET_BACKUP )
1033
1017
public synchronized XPage doResetBackup ( HttpServletRequest request ) throws SiteMessageException , UserNotSignedException , AccessDeniedException
1034
1018
{
1035
- IsRequestComingFromAction = true ;
1036
1019
// CSRF Token control
1037
1020
if ( !SecurityTokenService .getInstance ( ).validate ( request , ACTION_SAVE_FORM_RESPONSE ) )
1038
1021
{
@@ -1076,8 +1059,6 @@ public synchronized XPage doResetBackup( HttpServletRequest request ) throws Sit
1076
1059
@ Action ( value = ACTION_ADD_ITERATION )
1077
1060
public synchronized XPage doAddIteration ( HttpServletRequest request ) throws SiteMessageException , UserNotSignedException
1078
1061
{
1079
- IsRequestComingFromAction = true ;
1080
-
1081
1062
try
1082
1063
{
1083
1064
boolean bSessionLost = isSessionLost ( );
@@ -1120,8 +1101,6 @@ public synchronized XPage doAddIteration( HttpServletRequest request ) throws Si
1120
1101
@ Action ( value = ACTION_REMOVE_ITERATION )
1121
1102
public synchronized XPage doRemoveIteration ( HttpServletRequest request ) throws SiteMessageException , UserNotSignedException
1122
1103
{
1123
- IsRequestComingFromAction = true ;
1124
-
1125
1104
try
1126
1105
{
1127
1106
boolean bSessionLost = isSessionLost ( );
@@ -1164,7 +1143,6 @@ public synchronized XPage doRemoveIteration( HttpServletRequest request ) throws
1164
1143
@ Action ( value = ACTION_UPLOAD )
1165
1144
public synchronized XPage doSynchronousUploadDocument ( HttpServletRequest request ) throws SiteMessageException , UserNotSignedException
1166
1145
{
1167
- IsRequestComingFromAction = true ;
1168
1146
1169
1147
boolean bSessionLost = isSessionLost ( );
1170
1148
if ( bSessionLost )
@@ -1246,12 +1224,22 @@ public synchronized XPage doSynchronousUploadDocument( HttpServletRequest reques
1246
1224
1247
1225
return getStepView ( request );
1248
1226
}
1249
-
1227
+ /*
1228
+ * Check if the request is from a login page
1229
+ */
1230
+ private void isRequestFromALoginPage (HttpServletRequest request )
1231
+ {
1232
+ String urlFromRequestReferer = request .getHeader ("referer" );
1233
+ if (urlFromRequestReferer != null && urlFromRequestReferer .contains (AUTH_PROVIDER ))
1234
+ {
1235
+ isRequestFromLoginPage = true ;
1236
+ }
1237
+ }
1250
1238
private void initFormResponseManager ( HttpServletRequest request , Form form )
1251
1239
{
1252
1240
LuteceUser user = SecurityService .getInstance ( ).getRegisteredUser ( request );
1253
-
1254
- if ( _formResponseManager == null || ! _formResponseManager . getIsResponseLoadedFromBackup () && ! IsRequestComingFromAction )
1241
+ isRequestFromALoginPage ( request );
1242
+ if ( _formResponseManager == null || isRequestFromLoginPage )
1255
1243
{
1256
1244
if ( user != null && form .isBackupEnabled () )
1257
1245
{
@@ -1261,6 +1249,7 @@ private void initFormResponseManager( HttpServletRequest request, Form form )
1261
1249
{
1262
1250
_formResponseManager = new FormResponseManager ( form );
1263
1251
}
1252
+ isRequestFromLoginPage = false ;
1264
1253
}
1265
1254
}
1266
1255
@@ -1326,7 +1315,6 @@ private void init( int nIdForm )
1326
1315
_formResponseManager = null ;
1327
1316
_stepDisplayTree = null ;
1328
1317
_breadcrumb = null ;
1329
- IsRequestComingFromAction = false ;
1330
1318
}
1331
1319
1332
1320
/**
0 commit comments