Permalink
Browse files

Item14150: Recompute validation keys on cached pages

Fix provided by MichaelDaum. Cached pages were keeping their original
cached validation keys.  Once they expired, it was impossible to submit
forms on cached pages without refreshing the cache.
  • Loading branch information...
1 parent e6426cf commit 377070f12059e6fcb1bd595d6245f6dea00fe571 @gac410 gac410 committed Aug 31, 2016
Showing with 17 additions and 0 deletions.
  1. +8 −0 core/lib/Foswiki/PageCache.pm
  2. +9 −0 core/lib/Foswiki/Validation.pm
@@ -681,6 +681,14 @@ sub _handleDirtyArea {
$prefs->popTopicContext();
};
+ my $request = $session->{request};
+ my $context = $request->url( -full => 1, -path => 1, -query => 1 ) . time();
+ my $cgis = $session->{users}->getCGISession();
+ my $usingStrikeOne = $Foswiki::cfg{Validation}{Method} eq 'strikeone';
+
+ $text =~
+s/<input type='hidden' name='validation_key' value='(\?.*?)' \/>/Foswiki::Validation::updateValidationKey($cgis, $context, $usingStrikeOne, $1)/gei;
+
#Foswiki::Func::writeDebug("out text='$text'") if TRACE;
return $text;
}
@@ -92,6 +92,15 @@ sub addValidationKey {
return "<input type='hidden' name='validation_key' value='?$nonce' />";
}
+sub updateValidationKey {
+ my ( $cgis, $context, $strikeone, $oldKey ) = @_;
+
+ # expire old key
+ expireValidationKeys( $cgis, $oldKey );
+
+ return addValidationKey( $cgis, $context, $strikeone );
+}
+
=begin TML
---++ StaticMethod generateValidationKey( $cgis, $context, $strikeone ) -> $nonce

0 comments on commit 377070f

Please sign in to comment.