[Catalyst-commits] r10824 - in trunk/Catalyst-Plugin-RequireSSL: . lib/Catalyst/Plugin t t/lib/TestApp/Controller

norbi at dev.catalyst.perl.org norbi at dev.catalyst.perl.org
Tue Jul 7 21:27:01 GMT 2009


Author: norbi
Date: 2009-07-07 21:27:00 +0000 (Tue, 07 Jul 2009)
New Revision: 10824

Added:
   trunk/Catalyst-Plugin-RequireSSL/t/08detach_on_redirect.t
Modified:
   trunk/Catalyst-Plugin-RequireSSL/
   trunk/Catalyst-Plugin-RequireSSL/Changes
   trunk/Catalyst-Plugin-RequireSSL/lib/Catalyst/Plugin/RequireSSL.pm
   trunk/Catalyst-Plugin-RequireSSL/t/lib/TestApp/Controller/SSL.pm
Log:
 r10853 at vger:  mendel | 2009-07-07 23:26:52 +0200
 Implemented detach_on_redirect config option.



Property changes on: trunk/Catalyst-Plugin-RequireSSL
___________________________________________________________________
Name: svk:merge
   - cf8fe1c1-d5c0-41b4-84a9-31cb5e8e0cbe:/local/catalyst/Catalyst-Plugin-RequireSSL:10849
   + cf8fe1c1-d5c0-41b4-84a9-31cb5e8e0cbe:/local/catalyst/Catalyst-Plugin-RequireSSL:10853

Modified: trunk/Catalyst-Plugin-RequireSSL/Changes
===================================================================
--- trunk/Catalyst-Plugin-RequireSSL/Changes	2009-07-07 20:58:31 UTC (rev 10823)
+++ trunk/Catalyst-Plugin-RequireSSL/Changes	2009-07-07 21:27:00 UTC (rev 10824)
@@ -4,6 +4,7 @@
         - Fix Perl Critic test for hard tabs (t0m)
         - Fix POD coverage (t0m)
         - Added allow_ssl() (norbi)
+        - Added detach_on_redirect config option (norbi)
 
 0.06    2007-03-06 11:00:00
         - Added no_cache config option to support wildcard SSL certificates.

Modified: trunk/Catalyst-Plugin-RequireSSL/lib/Catalyst/Plugin/RequireSSL.pm
===================================================================
--- trunk/Catalyst-Plugin-RequireSSL/lib/Catalyst/Plugin/RequireSSL.pm	2009-07-07 20:58:31 UTC (rev 10823)
+++ trunk/Catalyst-Plugin-RequireSSL/lib/Catalyst/Plugin/RequireSSL.pm	2009-07-07 21:27:00 UTC (rev 10824)
@@ -21,6 +21,7 @@
         else {
             $c->_ssl_strip_output(1);
             $c->res->redirect( $redir );
+            $c->detach if $c->config->{require_ssl}->{detach_on_redirect};
         }
     }
 }
@@ -134,6 +135,7 @@
         http => 'www.mydomain.com',
         remain_in_ssl => 0,
         no_cache => 0,
+        detach_on_redirect => 1,
     };
 
     # in any controller methods that should be secured
@@ -182,6 +184,13 @@
 If you have a wildcard certificate you will need to set this option if you are
 using multiple domains on one instance of Catalyst.
 
+    detach_on_redirect 
+
+By default C<< $c->require_ssl >> only calls C<< $c->response->redirect >> but
+does not stop request processing (so it returns and subsequent statements are
+run). This is probably not what you want. If you set this option to a true
+value C<< $c->require_ssl >> will call C<< $c->detach >> when it redirects.
+
 =head1 METHODS
 
 =head2 require_ssl

Added: trunk/Catalyst-Plugin-RequireSSL/t/08detach_on_redirect.t
===================================================================
--- trunk/Catalyst-Plugin-RequireSSL/t/08detach_on_redirect.t	                        (rev 0)
+++ trunk/Catalyst-Plugin-RequireSSL/t/08detach_on_redirect.t	2009-07-07 21:27:00 UTC (rev 10824)
@@ -0,0 +1,30 @@
+#!perl
+
+use strict;
+use warnings;
+
+use FindBin;
+use lib "$FindBin::Bin/lib";
+
+use Test::More tests => 4;
+use Catalyst::Test 'TestApp';
+
+{
+  TestApp->config->{require_ssl}->{detach_on_redirect} = 0;
+
+  # test an SSL redirect
+  ok( my $res = request('http://localhost/ssl/test_detach'), 'request ok' );
+  is( $res->header('location'), 'http://www.mydomain.com/redirect_from_the_action',
+    'the action did the redirect after $c->require_ssl'
+  );
+}
+
+{
+  TestApp->config->{require_ssl}->{detach_on_redirect} = 1;
+
+  # test an SSL redirect
+  ok( my $res = request('http://localhost/ssl/test_detach'), 'request ok' );
+  is( $res->header('location'), 'https://localhost/ssl/test_detach',
+    'the action finished in $c->require_ssl'
+  );
+}

Modified: trunk/Catalyst-Plugin-RequireSSL/t/lib/TestApp/Controller/SSL.pm
===================================================================
--- trunk/Catalyst-Plugin-RequireSSL/t/lib/TestApp/Controller/SSL.pm	2009-07-07 20:58:31 UTC (rev 10823)
+++ trunk/Catalyst-Plugin-RequireSSL/t/lib/TestApp/Controller/SSL.pm	2009-07-07 21:27:00 UTC (rev 10824)
@@ -25,4 +25,15 @@
     $c->res->output( 'Maybe secured' );
 }
 
+sub test_detach : Local {
+    my ( $self, $c ) = @_;
+    
+    $c->require_ssl;
+
+    $c->res->redirect('http://www.mydomain.com/redirect_from_the_action');
+    
+    $c->res->output( 'Test detach' );
+}
+
+
 1;




More information about the Catalyst-commits mailing list