sourcereader.cgi
Permalink
#!/usr/bin/env perl
#utf8
# use Acme::PerlTidy;
use utf8;
use FindBin;
use lib qq{$FindBin::Bin/../../perl5/lib/perl5};
# use local::lib qq{$FindBin::Bin/../../perl5};
use Mojolicious::Lite;
use Mojo::Util qw/md5_sum/;
use Path::Class;
use Encode;
use Encode::Guess qw/euc-jp shiftjis/;
use Try::Tiny;
app->secret(md5_sum $0 );
app->log->level('error');
#app->log->level('debug')->path(qq{$0.log})->debug(app->secret);
#use Data::Dumper;
#app->helper( deepdumper => sub {
# shift;
# Data::Dumper->new([@_])->Indent(1)->Terse(1)->Dump;
#} );
get '/' => sub {
my $self = shift;
my $rel_path = $self->param('file') || $FindBin::Script;
my $fullpath = file( $FindBin::Bin, $rel_path )->cleanup;
$rel_path = $fullpath->relative($FindBin::Bin);
$self->stash(
title => 'Error!',
);
if ( $rel_path !~ /\.\./ and $rel_path =~ /\.(p[ml]|mt|(ps|c)gi|(cs|j)s|html?)\z/ms) {# pm,pl,mt,psgi,cgi,css,js,html,htm
my $code = try { $fullpath->slurp } catch { undef };
if ( $code ) {
my $enc = guess_encoding($code);
$enc = Encode::find_encoding('utf8') unless ref $enc;
my $url = $self->url_for->clone;
$url->query->param( 'file' => $rel_path );
$url->path->trailing_slash(0);
$self->render(
permalink => $url->to_abs,
template => 'index',
title => $rel_path,
# debug => $self->deepdumper( $self->url_for ),
code => $enc->decode($code),
);
}
else {
$self->render( 'error' );
}
}
else {
$self->render( 'error' );
}
};
app->start;
__DATA__
@@ index.html.ep
% layout 'main';
<p><%= link_to 'Permalink' => $permalink %></p>
<pre><code><%= $code %></code></pre>
@@ error.html.ep
% layout 'main';
<p>選択されたファイルは存在しないか表示できません。</p>
@@ layouts/main.html.ep
<!DOCTYPE html>
<html>
<head>
<meta charset="<%= app->renderer->encoding %>">
<title><%= $title %> - devel.nqou.net</title>
<link rel="stylesheet" href="http://google-code-prettify.googlecode.com/svn/trunk/src/prettify.css">
<link rel="stylesheet" href="devel.css">
</head>
<body>
<h1><%= $title %></h1>
<%= content %>
<script src="http://google-code-prettify.googlecode.com/svn/trunk/src/prettify.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
<script src="start.prettyPrint.js"></script>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-3538047-4']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
</body>
</html>