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
{
@@ -936,7 +923,6 @@ public synchronized XPage doSaveStep( HttpServletRequest request ) throws SiteMe
936
923
errorList .stream ( ).collect ( Collectors .joining ( ) )
937
924
}, null , null , null , SiteMessage .TYPE_ERROR , null , getViewFullUrl ( VIEW_STEP ) );
938
925
}
939
- IsRequestComingFromAction = true ;
940
926
return getStepView ( request );
941
927
}
942
928
@@ -964,7 +950,6 @@ private boolean isCaptchaKO( HttpServletRequest request, boolean needValidation
964
950
@ Action ( value = ACTION_SAVE_FOR_BACKUP )
965
951
public synchronized XPage doSaveForBackup ( HttpServletRequest request ) throws SiteMessageException , UserNotSignedException , AccessDeniedException
966
952
{
967
- IsRequestComingFromAction = true ;
968
953
// CSRF Token control
969
954
if ( !SecurityTokenService .getInstance ( ).validate ( request , ACTION_SAVE_FORM_RESPONSE ) )
970
955
{
@@ -1012,7 +997,6 @@ public synchronized XPage doSaveForBackup( HttpServletRequest request ) throws S
1012
997
1013
998
_formService .saveFormForBackup ( formResponse );
1014
999
_formResponseManager .setFormResponseUpdateDate ( formResponse .getUpdateStatus ( ) );
1015
- _formResponseManager .setIsResponseLoadedFromBackup (false );
1016
1000
_formService .saveFormForBackup (formResponse );
1017
1001
}
1018
1002
return getStepView ( request );
@@ -1034,7 +1018,6 @@ public synchronized XPage doSaveForBackup( HttpServletRequest request ) throws S
1034
1018
@ Action ( value = ACTION_RESET_BACKUP )
1035
1019
public synchronized XPage doResetBackup ( HttpServletRequest request ) throws SiteMessageException , UserNotSignedException , AccessDeniedException
1036
1020
{
1037
- IsRequestComingFromAction = true ;
1038
1021
// CSRF Token control
1039
1022
if ( !SecurityTokenService .getInstance ( ).validate ( request , ACTION_SAVE_FORM_RESPONSE ) )
1040
1023
{
@@ -1078,8 +1061,6 @@ public synchronized XPage doResetBackup( HttpServletRequest request ) throws Sit
1078
1061
@ Action ( value = ACTION_ADD_ITERATION )
1079
1062
public synchronized XPage doAddIteration ( HttpServletRequest request ) throws SiteMessageException , UserNotSignedException
1080
1063
{
1081
- IsRequestComingFromAction = true ;
1082
-
1083
1064
try
1084
1065
{
1085
1066
boolean bSessionLost = isSessionLost ( );
@@ -1122,8 +1103,6 @@ public synchronized XPage doAddIteration( HttpServletRequest request ) throws Si
1122
1103
@ Action ( value = ACTION_REMOVE_ITERATION )
1123
1104
public synchronized XPage doRemoveIteration ( HttpServletRequest request ) throws SiteMessageException , UserNotSignedException
1124
1105
{
1125
- IsRequestComingFromAction = true ;
1126
-
1127
1106
try
1128
1107
{
1129
1108
boolean bSessionLost = isSessionLost ( );
@@ -1166,7 +1145,6 @@ public synchronized XPage doRemoveIteration( HttpServletRequest request ) throws
1166
1145
@ Action ( value = ACTION_UPLOAD )
1167
1146
public synchronized XPage doSynchronousUploadDocument ( HttpServletRequest request ) throws SiteMessageException , UserNotSignedException
1168
1147
{
1169
- IsRequestComingFromAction = true ;
1170
1148
1171
1149
boolean bSessionLost = isSessionLost ( );
1172
1150
if ( bSessionLost )
@@ -1248,12 +1226,22 @@ public synchronized XPage doSynchronousUploadDocument( HttpServletRequest reques
1248
1226
1249
1227
return getStepView ( request );
1250
1228
}
1251
-
1229
+ /*
1230
+ * Check if the request is from a login page
1231
+ */
1232
+ private void isRequestFromALoginPage (HttpServletRequest request )
1233
+ {
1234
+ String urlFromRequestReferer = request .getHeader ("referer" );
1235
+ if (urlFromRequestReferer != null && urlFromRequestReferer .contains (AUTH_PROVIDER ))
1236
+ {
1237
+ isRequestFromLoginPage = true ;
1238
+ }
1239
+ }
1252
1240
private void initFormResponseManager ( HttpServletRequest request , Form form )
1253
1241
{
1254
1242
LuteceUser user = SecurityService .getInstance ( ).getRegisteredUser ( request );
1255
-
1256
- if ( _formResponseManager == null || ! _formResponseManager . getIsResponseLoadedFromBackup () && ! IsRequestComingFromAction )
1243
+ isRequestFromALoginPage ( request );
1244
+ if ( _formResponseManager == null || isRequestFromLoginPage )
1257
1245
{
1258
1246
if ( user != null && form .isBackupEnabled () )
1259
1247
{
@@ -1263,6 +1251,7 @@ private void initFormResponseManager( HttpServletRequest request, Form form )
1263
1251
{
1264
1252
_formResponseManager = new FormResponseManager ( form );
1265
1253
}
1254
+ isRequestFromLoginPage = false ;
1266
1255
}
1267
1256
}
1268
1257
@@ -1328,7 +1317,6 @@ private void init( int nIdForm )
1328
1317
_formResponseManager = null ;
1329
1318
_stepDisplayTree = null ;
1330
1319
_breadcrumb = null ;
1331
- IsRequestComingFromAction = false ;
1332
1320
}
1333
1321
1334
1322
/**
0 commit comments