-serve-dev:
+serve-dev lighttpd-cgi:
lighttpd -D -f ./service/lighttpd-cgi.conf
+
+lighttpd-fcgi:
+ lighttpd -D -f ./service/lighttpd-fcgi.conf
+
+cgi fcgi:
+ ./gorillanest -$@
+
+run: fcgi
Everything runs from this directory via './gorillanest'.
-gorillanest will provide GIT & HTTP access for all repos in /public/ unconditionally, and /private/ for authorized connections.
+---
+
+./git -- Root (~$user/$repository)
+./marketing -- Useless Trash
+./perl -- Perl Source
+./service -- lighttpd, nginx, and other service files
+./static -- Static Served Files
+./template -- Perl Templates
+./config.default.pl -- default configuration, don't edit this, copy it to ./config.pl
+./config.pl -- (nonexistant) configuration overrides against ./config.default.pl
+./gorillanest -- Runscript
+./Makefile -- Anon's autism for starting webserver
--- /dev/null
+#!/bin/sh
+
+cd "$(dirname "$(readlink -f "$0")")"
+
+CGI='./perl/cgi.pl'
+FCGI='./perl/fcgi.pl'
+
+run=$FCGI
+
+while [ ! -z $1 ]; do
+ if [ $1 = '-cgi' ]; then
+ run=$CGI
+ elif [ $1 = '-fcgi' ]; then
+ run=$FCGI
+ else break; fi
+ shift
+done
+
+$run $@
+
+# I'm a fan for linguistic redundancy in software
+# This is technically a mental disorder
+++ /dev/null
-#!/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;
+++ /dev/null
-#!/usr/bin/env perl
-
-use strict;
-use warnings;
-
-use Syntax::Keyword::Try;
-use FCGI;
-
-use lib '.';
-BEGIN { require 'gorillanest.pl.cgi'; }
-
-while (1) {
- try {
- open STDERR, '>', LOG_FILE or die LOG_FILE . ": $!";
- my $request = FCGI::Request( \*STDIN, \*STDOUT, \*STDERR, \%ENV, BARE_REQUEST ? 0 : FCGI::OpenSocket(SOCKET_FILE, SOCKET_MAX_CONNECTIONS));
- while($request->Accept() >= 0) {
- master();
- }
- } catch ($error) {
- info("Crashed: $error");
- }
- exit 1 unless (IMMORTAL);
-}
--- /dev/null
+#!/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 qw(. ..);
+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;
--- /dev/null
+#!/usr/bin/env perl
+
+use strict;
+use warnings;
+
+use Syntax::Keyword::Try;
+use FCGI;
+
+use lib qw(perl);
+BEGIN { require 'cgi.pl'; }
+
+while (1) {
+ try {
+ open STDERR, '>', LOG_FILE or die LOG_FILE . ": $!";
+ my $request = FCGI::Request( \*STDIN, \*STDOUT, \*STDERR, \%ENV, BARE_REQUEST ? 0 : FCGI::OpenSocket(SOCKET_FILE, SOCKET_MAX_CONNECTIONS));
+ while($request->Accept() >= 0) {
+ master();
+ }
+ } catch ($error) {
+ info("Crashed: $error");
+ }
+ exit 1 unless (IMMORTAL);
+}
server.port = 5050
url.rewrite-once = (
- "/" => "/gorillanest.pl.cgi"
+ "/" => "/perl/cgi.pl"
)
setenv.add-environment = (
)
cgi.assign = (
- ".pl.cgi" => "/usr/bin/perl"
+ ".pl" => "/usr/bin/perl"
)
fastcgi.server = (
"/gorillanest" => ((
- "bin-path" => "gorillanest.pl.fcgi",
+ "bin-path" => "perl/fcgi.pl",
"socket" => "gorillanest.sock",
))
)