| ... | ... |
@@ -194,7 +194,7 @@ sub startup {
|
| 194 | 194 |
$r->get('/blobdiff/(#diff)/(*file)')->name('blobdiff');
|
| 195 | 195 |
|
| 196 | 196 |
# Raw |
| 197 |
- $r->get('/raw/:rev/(*file)', {file => undef})->to('controller#raw');
|
|
| 197 |
+ $r->get('/raw/:rev/(*file)', {file => undef})->name('raw');
|
|
| 198 | 198 |
|
| 199 | 199 |
# Archive |
| 200 | 200 |
$r->get('/archive/(:rev).(tar.gz')->name('archive')->to(archive_type => 'tar');
|
| ... | ... |
@@ -0,0 +1,8 @@ |
| 1 |
+ <% |
|
| 2 |
+ use Encode 'encode'; |
|
| 3 |
+ |
|
| 4 |
+ $self->res->headers->content_type('text/plain;charset=UTF-8');
|
|
| 5 |
+ $self->res->body(encode('UTF-8', 'あ'));
|
|
| 6 |
+ $self->rendered; |
|
| 7 |
+ return; |
|
| 8 |
+ %> |
| ... | ... |
@@ -1,17 +1,12 @@ |
| 1 |
-package Gitprep::Controller; |
|
| 2 |
-use Mojo::Base 'Mojolicious::Controller'; |
|
| 3 |
- |
|
| 4 |
-sub raw {
|
|
| 5 |
- my $self = shift; |
|
| 6 |
- |
|
| 1 |
+<% |
|
| 7 | 2 |
# Parameters |
| 8 |
- my $user = $self->param('user');
|
|
| 9 |
- my $project = $self->param('project');
|
|
| 10 |
- my $rev = $self->param('rev');
|
|
| 11 |
- my $file = $self->param('file');
|
|
| 3 |
+ my $user = param('user');
|
|
| 4 |
+ my $project = param('project');
|
|
| 5 |
+ my $rev = param('rev');
|
|
| 6 |
+ my $file = param('file');
|
|
| 12 | 7 |
|
| 13 | 8 |
# Git |
| 14 |
- my $git = $self->app->git; |
|
| 9 |
+ my $git = app->git; |
|
| 15 | 10 |
|
| 16 | 11 |
# Blob raw |
| 17 | 12 |
my $blob_raw = $git->blob_raw($user, $project, $rev, $file); |
| ... | ... |
@@ -20,7 +15,7 @@ sub raw {
|
| 20 | 15 |
my $type = $git->blob_contenttype($user, $project, $rev, $file); |
| 21 | 16 |
|
| 22 | 17 |
# Convert text/* content type to text/plain |
| 23 |
- if ($self->app->config->{basic}{prevent_xss} &&
|
|
| 18 |
+ if (app->config->{basic}{prevent_xss} &&
|
|
| 24 | 19 |
($type =~ m#^text/[a-z]+\b(.*)$# || |
| 25 | 20 |
($type =~ m#^[a-z]+/[a-z]\+xml\b(.*)$#))) |
| 26 | 21 |
{
|
| ... | ... |
@@ -35,17 +30,18 @@ sub raw {
|
| 35 | 30 |
elsif ($type =~ m/^text\//) { $file_name .= '.txt' }
|
| 36 | 31 |
|
| 37 | 32 |
# Content disposition |
| 38 |
- my $sandbox = $self->app->config->{basic}{prevent_xss} &&
|
|
| 33 |
+ my $sandbox = app->config->{basic}{prevent_xss} &&
|
|
| 39 | 34 |
$type !~ m#^(?:text/[a-z]+|image/(?:gif|png|jpeg))(?:[ ;]|$)#; |
| 40 | 35 |
my $content_disposition = $sandbox ? 'attachment' : 'inline'; |
| 41 | 36 |
$content_disposition .= "; filename=$file_name"; |
| 42 | 37 |
|
| 43 | 38 |
# Response |
| 39 |
+ $self->res->code(200); |
|
| 44 | 40 |
$self->res->headers->content_disposition($content_disposition); |
| 45 | 41 |
$self->res->headers->content_type($type); |
| 42 |
+ $self->res->body($blob_raw); |
|
| 43 |
+ $self->rendered; |
|
| 44 |
+ $self->stash->{'mojo.routed'} = 1;
|
|
| 46 | 45 |
|
| 47 |
- $self->render(data => $blob_raw); |
|
| 48 |
-} |
|
| 49 |
- |
|
| 50 |
-1; |
|
| 51 |
- |
|
| 46 |
+ return; |
|
| 47 |
+%> |