Changeset 5052

Show
Ignore:
Timestamp:
01/20/08 16:10:01 (5 years ago)
Author:
tokuhirom
Message:

test fixed. and some code move Moxy::Plugin::Serer::HTTPProxy to Moxy::P::Server.

Location:
lang/perl/Moxy/trunk
Files:
1 added
3 modified

Legend:

Unmodified
Added
Removed
  • lang/perl/Moxy/trunk/lib/Moxy/Plugin/Server/HTTPProxy.pm

    r5046 r5052  
    33use warnings; 
    44use utf8; 
     5use Moxy::Plugin::Server; 
    56use Encode; 
    67use HTTP::Proxy ':log'; 
     
    1011use LWP::UserAgent; 
    1112use URI; 
    12 use HTML::Parser; 
    1313use HTML::Entities; 
    1414use URI::Escape; 
     
    2424            my $base = URI->new($args->{response}->request->uri); 
    2525            $base->query_form({}); 
    26             return $class->_render_control_panel($base, $args->{response}->request->uri); 
     26            return render_control_panel($base, $args->{response}->request->uri); 
    2727        }, 
    2828        run_server => sub { $class->run_server($context, $config) }, 
     
    9090} 
    9191 
    92 sub _render_control_panel { 
    93     my ($class, $base, $current_url) = @_; 
    94  
    95     return sprintf(<<"...", encode_entities($current_url)); 
    96     <form method="get" action="$base"> 
    97         <input type="text" name="q" value="\%s" size="40" /> 
    98         <input type="submit" value="go" /> 
    99     </form> 
    100 ... 
    101 } 
    102  
    10392sub _ua { 
    10493    my ($class, $config) = @_; 
     
    126115            my $content_type = $res->header('Content-Type'); 
    127116            if ($content_type =~ /html/i) { 
    128                 $res->content( _rewrite($base, $res->content, $url) ); 
     117                $res->content( rewrite($base, $res->content, $url) ); 
    129118            } 
    130119        } 
     
    134123        my $res = HTTP::Response->new(200, 'about:blank'); 
    135124        $res->header('Content-Type' => 'text/html; charset=utf8'); 
    136         my $panel = $class->_render_control_panel($base, ''); 
     125        my $panel = render_control_panel($base, ''); 
    137126        $res->content(qq{<html><head></head><body>$panel</body></html>}); 
    138127        return $res; 
     
    188177} 
    189178 
    190 sub _rewrite { 
    191     my ($base, $html, $url) = @_; 
    192  
    193     my $output = ''; 
    194     my $base_url = URI->new($url); 
    195     my $parser = HTML::Parser->new( 
    196         api_version   => 3, 
    197         start_h       => [ sub { 
    198             my ($tagname, $attr, $orig) = @_; 
    199  
    200             if ($tagname eq 'a' || $tagname eq 'A') { 
    201                 $output .= "<$tagname"; 
    202                 my @parts; 
    203                 my $href = delete $attr->{href}; 
    204                 if ($href) { 
    205                     $output .= " "; 
    206                     push @parts, 
    207                       sprintf( qq{href="$base?q=%s"}, 
    208                         uri_escape(URI->new($href)->abs($base_url)) ); 
    209                 } 
    210                 push @parts, map { sprintf qq{%s="%s"}, encode_entities($_), encode_entities($attr->{$_}) } keys %$attr; 
    211                 $output .= join " ", @parts; 
    212                 $output .= ">"; 
    213             } elsif ($tagname =~ /form/i) { 
    214                 $output .= "<$tagname"; 
    215                 my @parts; 
    216                 my $action = delete $attr->{action}; 
    217                 if ($action) { 
    218                     $output .= " "; 
    219                     push @parts, sprintf(qq{action="$base?q=%s"}, 
    220                         uri_escape(URI->new($action)->abs($base_url)) 
    221                     ); 
    222                 } 
    223                 push @parts, map { sprintf qq{$_="%s"}, encode_entities($attr->{$_}) } keys %$attr; 
    224                 $output .= join " ", @parts; 
    225                 $output .= ">"; 
    226             } elsif ($tagname =~ /img/i) { 
    227                 $output .= "<$tagname"; 
    228                 my @parts; 
    229                 my $src = delete $attr->{src}; 
    230                 if ($src) { 
    231                     $output .= " "; 
    232                     push @parts, sprintf(qq{src="$base?q=%s"}, 
    233                         uri_escape(URI->new($src)->abs($base_url)) 
    234                     ); 
    235                 } 
    236                 push @parts, map { sprintf qq{%s="%s"}, encode_entities($_), encode_entities($attr->{$_}) } grep !/^\/$/, keys %$attr; 
    237                 $output .= join " ", @parts; 
    238                 $output .= ">"; 
    239             } else { 
    240                 $output .= $orig; 
    241                 return; 
    242             } 
    243         }, "tagname, attr, text" ], 
    244         end_h  => [ sub { $output .= shift }, "text"], 
    245         text_h => [ sub { $output .= shift }, "text"], 
    246     ); 
    247  
    248     $parser->boolean_attribute_value('__BOOLEAN__'); 
    249     $parser->parse($html); 
    250     $output; 
    251 } 
    252  
    2531791; 
    254180__END__ 
  • lang/perl/Moxy/trunk/t/plugin-application.t

    r3016 r5052  
    22use warnings; 
    33use Test::Base; 
    4 use Moxy::Plugin::Application; 
     4use Moxy::Plugin::Server; 
    55 
    66sub rewrite { 
    7     Moxy::Plugin::Application::_rewrite('http://localhost:9999/', shift, 'http://relative.example.jp/'); 
     7    Moxy::Plugin::Server::rewrite('http://localhost:9999/', shift, 'http://relative.example.jp/'); 
    88} 
    99 
  • lang/perl/Moxy/trunk/t/xss.t

    r3026 r5052  
    1 use strict;use warnings; 
    2 use Moxy::Plugin::Application; 
     1use strict; 
     2use warnings; 
     3use Moxy::Plugin::Server; 
    34use Test::More tests => 1; 
    45 
    5 unlike(Moxy::Plugin::Application->_render_control_panel('http://example.com/', '<script>alert("FOO");</script>'), qr{<script>}); 
     6unlike(Moxy::Plugin::Server::render_control_panel('http://example.com/', '<script>alert("FOO");</script>'), qr{<script>});