diff options
| author | Emil Williams | 2025-08-21 01:01:39 +0000 |
|---|---|---|
| committer | Emil Williams | 2025-08-21 01:01:39 +0000 |
| commit | d72f41647a08d0940b2c69ca0ab9f975fd773b5b (patch) | |
| tree | 910e88dc5101c6541c3d1404823d94133884c233 /gorillanest.pl.cgi | |
| parent | 658f9c0c0fcce6a6371fbdaf8f74a5ca4265c9a9 (diff) | |
| download | gorillanest-d72f41647a08d0940b2c69ca0ab9f975fd773b5b.tar.xz gorillanest-d72f41647a08d0940b2c69ca0ab9f975fd773b5b.tar.zst | |
Hide Everything, Hyde!
Diffstat (limited to 'gorillanest.pl.cgi')
| -rwxr-xr-x | gorillanest.pl.cgi | 121 |
1 files changed, 0 insertions, 121 deletions
diff --git a/gorillanest.pl.cgi b/gorillanest.pl.cgi deleted file mode 100755 index cebe11b..0000000 --- a/gorillanest.pl.cgi +++ /dev/null @@ -1,121 +0,0 @@ -#!/usr/bin/env perl - -# XXX -# why are we passing around root like a cheap whore? because root is where things are (f(x) -> y) -# looking into it, i think we should have a global config object using -# https://metacpan.org/pod/Readonly fuck read only, constants are for faggots -# -# i modified the routing heavily, this is how people do it; very scary -# pretty clean -# you must also realize that not all routes are necessarily templates, then they are routed by nginx. -# it could be a redirect for example, so the original solution would -# complicate beyond comprehension ACK. - -use strict; -use warnings; -use CGI; -use Template; -use URI::Escape; -use Cwd; -use Data::Dumper; -use Git::Repository; - -use lib '.'; -BEGIN { require 'config.default.pl'; } -BEGIN { require 'config.pl'; } - -sub info { - warn join(' ', @_); -} - - -sub serve_template { - my $template = Template->new({INCLUDE_PATH => 'template'}); - my ($template_name, $data) = @_; - - $template->process($template_name, $data) - or info("Template: " . $template->error()); -} - -# significant dirs only -sub GN::directories { - my $root = $_[0]; - opendir my $dir, $root or die "$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) = @_; - my %data; - - 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; } - - serve_template("index.tt", \%data); -} - -sub GN::user { # /$username/ - my ($root, $username) = @_; - - my %data; - my @directories = @{GN::directories(join('/', $root, $data{username}))}; - $data{directories} = \@directories; - if ($data{directories}) { $data{found} = 1; } - - serve_template("index_user.tt", \%data); -} - -sub GN::repository { # /$username/$repository - my ($root, $username, $repository) = @_; - - die 'not implemented'; -} - -my $root = GIT_ROOT; -my $dbfile = DB_FILE; - -my %data = ( - found => 0, -); - -my %routes = ( - '/' => sub { GN::index($root); }, - '/~([\w.]+)' => sub { GN::user($root, @_) }, - '/~([\w.]+)/([\w.]+)' => sub { GN::repository($root, @_) }, -); -my %route_regex_cache = map { $_ => qr{^$_$} } keys %routes; - -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 =~ $route_regex_cache{$pattern}) { - my $handler = $routes{$pattern}; - $handler->($uri, $1, $2, $3); - return; - } - } - - serve_template("404.tt", {}); # XXX missing code -} - -master() if !caller; - -1; |
