chiark / gitweb /
wip
[cgi-auth-flexible.git] / cgi-auth-flexible.pm
index 382b845ddc0c45016c9b004fac989b374659f2eb..7f2f979c6e8846048a8255ec33b9015bf718cfb4 100644 (file)
@@ -588,8 +588,10 @@ sub _check_divert_core ($) {
     }
 
     die unless $cookt eq 'y';
-    die unless $parmt eq 'y';
-    die unless $cookh eq $parmh;
+    unless ($r->{S}{promise_check_mutate} && $meth eq 'GET') {
+        die unless $parmt eq 'y';
+        die unless $cookh eq $parmh;
+    }
     $r->{AssocSecret} = $cooks;
     $r->{UserOK} = $cooku;
     print STDERR "C-D-C OK\n";
@@ -926,6 +928,12 @@ sub _assert_checked ($) {
     die "unchecked" unless exists $r->{Divert};
 }
 
+sub _is_post ($) {
+    my ($r) = @_;
+    my $meth = $r->_ch('get_method');
+    return $meth eq 'POST';
+}
+
 sub _must_be_post ($) {
     my ($r) = @_;
     my $meth = $r->_ch('get_method');
@@ -939,6 +947,13 @@ sub check_mutate ($) {
     $r->_must_be_post();
 }
 
+sub mutate_ok ($) {
+    my ($r) = @_;
+    $r->_assert_checked();
+    die if $r->{Divert};
+    return $r->_is_post();
+}
+
 #---------- output ----------
 
 sub secret_cookie_val ($) {