Changeset 10723

Show
Ignore:
Timestamp:
04/29/08 12:10:23 (5 years ago)
Author:
tokuhirom
Message:

HTTP::Engine の context を内部までくいこませて簡素化。でもここまでしか侵入させないよ。

Files:
1 modified

Legend:

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

    r10722 r10723  
    136136 
    137137sub render_start_page { 
    138     my ($base, $current_url) = @_; 
     138    my $base = shift; 
    139139 
    140140    return sprintf(<<"..."); 
     
    166166    $self->log(debug => "Authorization header: $session_id"); 
    167167    if ($session_id) { 
    168         my $uri = URI->new($c->req->uri); 
    169         $self->log(debug => "Request URI: $uri"); 
    170  
    171         my $base = $uri->clone; 
    172         $base->path(''); 
    173         $base->query_form({}); 
    174  
    175         (my $url = $uri->path_query) =~ s!^/!!; 
    176         $url = uf_uristr(uri_unescape $url); 
    177         my $response = $self->_make_response( 
    178             url      => $url, 
    179             request  => $c->req->as_http_request, 
    180             base_url => $base, 
     168        $self->_make_response( 
     169            c => $c, 
    181170            user_id  => $session_id, 
    182171        ); 
    183         $c->res->set_http_response($response); 
    184172    } else { 
    185173        $c->res->status(401); 
     
    193181    my %args = validate( 
    194182        @_ => +{ 
    195             url      => qr{^https?://}, 
    196             request  => { isa  => 'HTTP::Request' }, 
    197             base_url => qr{^https?://}, 
    198             user_id  => { type => SCALAR }, 
     183            c       => { isa  => 'HTTP::Engine::Context', }, 
     184            user_id => { type => SCALAR }, 
    199185        } 
    200186    ); 
    201     my $url = $args{url}; 
    202     my $base_url = $args{base_url}; 
     187    my $c = $args{c}; 
     188 
     189    my $base = $c->req->uri->clone; 
     190    $base->path(''); 
     191    $base->query_form({}); 
     192 
     193    (my $url = $c->req->uri->path_query) =~ s!^/!!; 
     194    $url = uf_uristr(uri_unescape $url); 
    203195 
    204196    if ($url) { 
     
    206198        my $res = $self->_do_request( 
    207199            url     => $url, 
    208             request => $args{request}, 
     200            request => $c->req->as_http_request, 
    209201            user_id => $args{user_id}, 
    210202        ); 
     
    219211                $location->port($uri->port); 
    220212            } 
    221             $res->header( 'Location' => $base_url . '/' . uri_escape( $location ) ); 
     213            $res->header( 'Location' => $base . '/' . uri_escape( $location ) ); 
    222214            $self->log(debug => "redirect to " . $res->header('Location')); 
    223215        } else { 
     
    225217            $self->log("Content-Type: $content_type"); 
    226218            if ($content_type =~ /html/i) { 
    227                 $res->content( encode($res->charset, rewrite($base_url, decode($res->charset, $res->content), $url)) ); 
     219                $res->content( encode($res->charset, rewrite($base, decode($res->charset, $res->content), $url)) ); 
    228220            } 
    229221            use bytes; 
    230222            $res->header('Content-Length' => bytes::length($res->content)); 
    231223        } 
    232         return $res; 
     224        $c->res->set_http_response($res); 
    233225    } else { 
    234226        # please input url. 
    235         my $res = HTTP::Response->new(200, 'about:blank'); 
    236         $res->header('Content-Type' => 'text/html; charset=utf8'); 
    237         my $panel = render_start_page($base_url, ''); 
    238         $res->content($panel); 
    239         return $res; 
     227        $c->res->status(200); 
     228        $c->res->content_type('text/html; charset=utf8'); 
     229        $c->res->body( render_start_page($base) ); 
    240230    } 
    241231}