- Fix POD coverage (t0m)
- Added allow_ssl() (norbi)
- Added detach_on_redirect config option (norbi)
+ - Cleaned up _redirect_uri() (norbi)
0.06 2007-03-06 11:00:00
- Added no_cache config option to support wildcard SSL certificates.
sub _redirect_uri {
my ( $c, $type ) = @_;
- # XXX: Cat needs a $c->req->host method...
- # until then, strip off the leading protocol from base
if ( !$c->config->{require_ssl}->{$type} ) {
- my $host = $c->req->base;
- $host =~ s/^http(s?):\/\///;
- $c->config->{require_ssl}->{$type} = $host;
+ my $req_uri = $c->req->uri;
+ $c->config->{require_ssl}->{$type} =
+ join(':', $req_uri->host, $req_uri->_port);
}
- if ( $c->config->{require_ssl}->{$type} !~ /\/$/xms ) {
- $c->config->{require_ssl}->{$type} .= '/';
- }
+ $c->config->{require_ssl}->{$type} =~ s/\/+$//;
+
+ my $redir = $c->req->uri->clone;
+ $redir->scheme($type);
+ $redir->host_port($c->config->{require_ssl}->{$type});
- my $redir
- = $type . '://' . $c->config->{require_ssl}->{$type} . $c->req->path;
-
- if ( scalar $c->req->param ) {
- my @params;
- foreach my $arg ( sort keys %{ $c->req->params } ) {
- if ( ref $c->req->params->{$arg} ) {
- my $list = $c->req->params->{$arg};
- push @params, map { "$arg=" . $_ } sort @{$list};
- }
- else {
- push @params, "$arg=" . $c->req->params->{$arg};
- }
- }
- $redir .= '?' . join( '&', @params );
- }
-
if ( $c->config->{require_ssl}->{no_cache} ) {
delete $c->config->{require_ssl}->{$type};
}
isnt( $res->content, 'Secured', 'no content displayed on secure page, ok' );\r
\r
# test redirection params\r
-ok( $res = request('http://localhost/ssl/secured?a=2&a=1&b=3&c=4'), 'request ok' );\r
+ok( $res = request('http://localhost/ssl/secured?a=1&a=2&b=3&c=4'), 'request ok' );\r
is( $res->header('location'), 'https://localhost/ssl/secured?a=1&a=2&b=3&c=4', 'redirect with params ok' );\r
\r
# test that it does not redirect for actions where SSL mode is optional\r
is( $res->header('location'), 'http://localhost/ssl/unsecured', 'redirect uri ok' );\r
\r
# test redirection params\r
- ok( $res = request('https://localhost/ssl/unsecured?a=2&a=1&b=3&c=4'), 'request ok' );\r
+ ok( $res = request('https://localhost/ssl/unsecured?a=1&a=2&b=3&c=4'), 'request ok' );\r
is( $res->header('location'), 'http://localhost/ssl/unsecured?a=1&a=2&b=3&c=4', 'redirect with params ok' );\r
\r
# test that it does not redirect for actions where SSL mode is optional\r