dont waste my time
This commit is contained in:
parent
15bb3d5b02
commit
44b0e7d9a1
115
gorillanest
115
gorillanest
@ -1,115 +0,0 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use CGI;
|
||||
use FCGI;
|
||||
use Switch::Back;
|
||||
use Syntax::Keyword::Try;
|
||||
use Sys::Syslog;
|
||||
use Template;
|
||||
use URI::Escape;
|
||||
use Cwd;
|
||||
|
||||
use Data::Dumper;
|
||||
sub info {
|
||||
syslog("info", join(' ', @_));
|
||||
}
|
||||
|
||||
# significant dirs only
|
||||
sub GN::directories {
|
||||
my $root = $_[0];
|
||||
opendir my $dir, $root or die "Cannot open directory: $!";
|
||||
my @directories;
|
||||
my %drop = (
|
||||
'.' => 0,
|
||||
'..' => 0,
|
||||
);
|
||||
foreach (readdir $dir) {
|
||||
push(@directories, $_) if (-d join('/', $_[0], $_) && ($drop{$_} // 1));
|
||||
}
|
||||
closedir $dir;
|
||||
return \@directories;
|
||||
}
|
||||
|
||||
# probably should output all repos recursively, currently just outputs list of users
|
||||
sub GN::index { # /
|
||||
my ($root, $dataref) = @_;
|
||||
my %data = %$dataref;
|
||||
my @directories = map { my $i = $_; map { join('/', $i, $_) } @{GN::directories(join('/', $root, $i))} } @{GN::directories($root)};
|
||||
$data{directories} = \@directories;
|
||||
if ($data{directories}) { $data{found} = 1; }
|
||||
return \%data;
|
||||
}
|
||||
|
||||
sub GN::user { # /$username/
|
||||
my ($root, $dataref) = @_;
|
||||
my %data = %$dataref;
|
||||
my @directories = @{GN::directories(join('/', $root, $data{username}))};
|
||||
$data{directories} = \@directories;
|
||||
if ($data{directories}) { $data{found} = 1; }
|
||||
return \%data;
|
||||
}
|
||||
|
||||
sub GN::repository { # /$username/$repository
|
||||
my ($root, $dataref) = @_;
|
||||
my %data = %$dataref;
|
||||
my $d = getcwd();
|
||||
chdir(join('/', $root, $data{username}, $data{repository}));
|
||||
warn 'sneed ' . getcwd() . "\n";
|
||||
$data{log} = Dumper(split(/\n/, qx(git log --pretty=format:\'%H | %an | %ad | %s%x0a\'))); # It technically works # | tac | tr -s \'\n\'
|
||||
chdir($d);
|
||||
$data{found} = 1;
|
||||
return \%data;
|
||||
}
|
||||
|
||||
openlog("gorillanest", "ndelay,pid", Sys::Syslog::LOG_DAEMON);
|
||||
try {
|
||||
my $public = 'git/public';
|
||||
my $dbfile = 'gorillanest.sqlite3';
|
||||
my %data = (
|
||||
found => 0,
|
||||
);
|
||||
my $request = FCGI::Request();
|
||||
my $template = Template->new({INCLUDE_PATH => 'template'});
|
||||
my $head = 0;
|
||||
my $a_template;
|
||||
while($request->Accept() >= 0) {
|
||||
my $cgi = CGI->new;
|
||||
my %header = (
|
||||
-Content_Type => 'text/html',
|
||||
-charset => 'UTF-8',
|
||||
);
|
||||
my $method = $ENV{'REQUEST_METHOD'} || '';
|
||||
my $uri = $ENV{'REQUEST_URI'} || '/';
|
||||
if ($method eq 'HEAD') {
|
||||
$head = 1;
|
||||
} elsif ($method eq 'GET') {
|
||||
($data{username}, $data{repository}) = $uri =~ m{^/([a-zA-Z0-9_.]+)(?:/([a-zA-Z0-9_.]+))?};
|
||||
info("name:", $data{username} || '', "repo:", $data{repository} || '');
|
||||
if ($uri eq '/') {
|
||||
%data = %{GN::index($public, \%data)};
|
||||
$a_template = "index.tt";
|
||||
} elsif ($data{repository}) {
|
||||
%data = %{GN::repository($public, \%data)};
|
||||
$a_template = "repository.tt";
|
||||
} elsif ($data{username}) {
|
||||
%data = %{GN::user($public, \%data)};
|
||||
$a_template = "index_user.tt";
|
||||
}
|
||||
if (!$data{found}) {
|
||||
$header{-status} = '404 Not Found';
|
||||
$a_template = "404.tt";
|
||||
}
|
||||
print $cgi->header(%header);
|
||||
if ($head) { $head = 0; continue; }
|
||||
$template->process($a_template, \%data) or info("Template: " . $template->error());
|
||||
} else {
|
||||
$header{-status} = '405 Method Not Allowed';
|
||||
print $cgi->header(%header);
|
||||
}
|
||||
}
|
||||
} catch ($error) {
|
||||
info("Crashed: $error");
|
||||
}
|
||||
105
gorillanest.pl.cgi
Normal file
105
gorillanest.pl.cgi
Normal file
@ -0,0 +1,105 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use CGI;
|
||||
use Switch::Back;
|
||||
use Template;
|
||||
use URI::Escape;
|
||||
use Cwd;
|
||||
|
||||
use Data::Dumper;
|
||||
sub info {
|
||||
print STDERR join(' ', @_);
|
||||
}
|
||||
|
||||
our $template = Template->new({INCLUDE_PATH => 'template'});
|
||||
|
||||
# significant dirs only
|
||||
sub GN::directories {
|
||||
my $root = $_[0];
|
||||
opendir my $dir, $root or die "Cannot open directory '$root': $!";
|
||||
my @directories;
|
||||
my %drop = (
|
||||
'.' => 0,
|
||||
'..' => 0,
|
||||
);
|
||||
foreach (readdir $dir) {
|
||||
push(@directories, $_) if (-d join('/', $_[0], $_) && ($drop{$_} // 1));
|
||||
}
|
||||
closedir $dir;
|
||||
return \@directories;
|
||||
}
|
||||
|
||||
# probably should output all repos recursively, currently just outputs list of users
|
||||
sub GN::index { # /
|
||||
my ($root, $dataref) = @_;
|
||||
my %data = %$dataref;
|
||||
my @directories = map { my $i = $_; map { join('/', $i, $_) } @{GN::directories(join('/', $root, $i))} } @{GN::directories($root)};
|
||||
$data{directories} = \@directories;
|
||||
if ($data{directories}) { $data{found} = 1; }
|
||||
return \%data;
|
||||
}
|
||||
|
||||
sub GN::user { # /$username/
|
||||
my ($root, $dataref) = @_;
|
||||
my %data = %$dataref;
|
||||
my @directories = @{GN::directories(join('/', $root, $data{username}))};
|
||||
$data{directories} = \@directories;
|
||||
if ($data{directories}) { $data{found} = 1; }
|
||||
return \%data;
|
||||
}
|
||||
|
||||
sub GN::repository { # /$username/$repository
|
||||
my ($root, $dataref) = @_;
|
||||
my %data = %$dataref;
|
||||
my $d = getcwd();
|
||||
chdir(join('/', $root, $data{username}, $data{repository}));
|
||||
warn 'sneed ' . getcwd() . "\n";
|
||||
$data{log} = Dumper(split(/\n/, qx(git log --pretty=format:\'%H | %an | %ad | %s%x0a\'))); # It technically works # | tac | tr -s \'\n\'
|
||||
chdir($d);
|
||||
$data{found} = 1;
|
||||
return \%data;
|
||||
}
|
||||
|
||||
sub serve_template {
|
||||
my ($file, @rest) = @_;
|
||||
my %vars = @rest ? @rest : ();
|
||||
|
||||
$template->process($file, \%vars)
|
||||
or info("Template: " . $template->error());
|
||||
}
|
||||
|
||||
my %routes = (
|
||||
'/' => sub { serve_template("index.tt", @_) },
|
||||
'/~([a-zA-Z0-9_.]+)' => sub { serve_template("index_user.tt", @_) },
|
||||
'/~([a-zA-Z0-9_.]+)/([a-zA-Z0-9_.]+)' => sub { serve_template("repository.tt", @_) },
|
||||
);
|
||||
|
||||
my $public = 'git/public';
|
||||
my $dbfile = 'gorillanest.sqlite3';
|
||||
my %data = (
|
||||
found => 0,
|
||||
);
|
||||
|
||||
sub master {
|
||||
my $cgi = CGI->new;
|
||||
my %header = (
|
||||
-Content_Type => 'text/html',
|
||||
-charset => 'UTF-8',
|
||||
);
|
||||
my $method = $ENV{'REQUEST_METHOD'} || '';
|
||||
my $uri = $ENV{'REQUEST_URI'} || '/';
|
||||
|
||||
for my $pattern (keys %routes) {
|
||||
if ($uri =~ m{^$pattern$}) {
|
||||
my $handler = $routes{$pattern};
|
||||
$handler->($uri, $1, $2, $3);
|
||||
}
|
||||
}
|
||||
|
||||
serve_template("404.tt"); # XXX missing code
|
||||
}
|
||||
|
||||
master() if !caller; 1;
|
||||
19
gorillanest.pl.fcgi
Executable file
19
gorillanest.pl.fcgi
Executable file
@ -0,0 +1,19 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Syntax::Keyword::Try;
|
||||
use FCGI;
|
||||
|
||||
require "gorillanest.pl.cgi";
|
||||
|
||||
our $request = FCGI::Request();
|
||||
|
||||
try {
|
||||
while($request->Accept() >= 0) {
|
||||
master();
|
||||
}
|
||||
} catch ($error) {
|
||||
info("Crashed: $error");
|
||||
}
|
||||
21
lighttpd-cgi.conf
Normal file
21
lighttpd-cgi.conf
Normal file
@ -0,0 +1,21 @@
|
||||
server.modules = (
|
||||
"mod_cgi",
|
||||
"mod_rewrite",
|
||||
"mod_setenv"
|
||||
)
|
||||
|
||||
server.document-root = var.CWD
|
||||
server.port = 5050
|
||||
|
||||
url.rewrite-once = (
|
||||
"/" => "/gorillanest.pl.cgi"
|
||||
)
|
||||
|
||||
setenv.add-environment = (
|
||||
"PERL5LIB" => env.PERL5LIB
|
||||
)
|
||||
|
||||
|
||||
cgi.assign = (
|
||||
".pl.cgi" => "/usr/bin/perl"
|
||||
)
|
||||
@ -17,7 +17,7 @@ setenv.add-environment = (
|
||||
|
||||
fastcgi.server = (
|
||||
"/gorillanest" => ((
|
||||
"bin-path" => "gorillanest",
|
||||
"bin-path" => "gorillanest.pl.fcgi",
|
||||
"socket" => "gorillanest.sock",
|
||||
))
|
||||
)
|
||||
Loading…
Reference in New Issue
Block a user