]> git.xolatile.top Git - gorillanest.git/commitdiff
I Doubt It Works The Same
authorEmil Williams <emilemilemil@cock.li>
Wed, 20 Aug 2025 23:46:09 +0000 (23:46 +0000)
committerEmil Williams <emilemilemil@cock.li>
Wed, 20 Aug 2025 23:46:09 +0000 (23:46 +0000)
1  2 
gorillanest.pl.cgi
gorillanest.pl.fcgi

index 49a6e4ef2c22964085558412aa779112b11361b7,c964c8faa8aa46fabeecaa9ce95a877b28aa5330..8f688aaf2fd5ea67f529fb3a22d4f9e1926af969
mode 100755,100644..100755
@@@ -2,10 -2,9 +2,8 @@@
  
  use strict;
  use warnings;
 -
  use CGI;
- use FCGI;
  use Switch::Back;
- use Syntax::Keyword::Try;
  use Template;
  use URI::Escape;
  use Cwd;
@@@ -61,61 -62,43 +61,45 @@@ sub GN::repository { # /$username/$repo
      return \%data;
  }
  
- sub GN::main {
-     open STDERR, '>', LOG_FILE or die LOG_FILE . ": $!";
-     my $sock = FCGI::OpenSocket('/tmp/gorillanest.socket', 100);
-     try {
-         my $root = GIT_ROOT;
-         my $dbfile = DB_FILE;
-         my %data = (
-             found => 0,
-             access => 0,
-             );
-         my $request = FCGI::Request(\*STDIN, \*STDOUT, \*STDERR, \%ENV, $sock);
-         my $template = Template->new({INCLUDE_PATH => TEMPLATE_ROOT});
-         my $head = 0;
-         my $a_template;
-         while($request->Accept() >= 0) {
-             $data{access} += 1;
-             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 =~ USER_REPOSITORY;
-                 info("name:", $data{username} || '', "repo:", $data{repository} || '');
-                 if ($uri eq '/') {
-                     %data = %{GN::index($root, \%data)};
-                     $a_template = "index.tt";
-                 } elsif ($data{repository}) {
-                     %data = %{GN::repository($root, \%data)};
-                     $a_template = "repository.tt";
-                 } elsif ($data{username}) {
-                     %data = %{GN::user($root, \%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");
-     }
-     FCGI::CloseSocket($sock);
+ sub serve_template {
+     my ($file, @rest) = @_;
+     my %vars = @rest ? @rest : ();
+     
+     $template->process($file, \%vars)
+         or info("Template: " . $template->error());
  }
  
- GN::main();
+ 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 $root = GIT_ROOT;
++my $dbfile = DB_FILE;
+ 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;
++master() if !caller;
++
++1;
index 0000000000000000000000000000000000000000,f4c068706640b7e16157bce2fbd0680473275f93..2692877baeb8b41d2804239002a7e8492b6e434b
mode 000000,100755..100755
--- /dev/null
@@@ -1,0 -1,19 +1,22 @@@
 -require "gorillanest.pl.cgi";
 -
 -our $request = FCGI::Request();
+ #!/usr/bin/env perl
+ use strict;
+ use warnings;
+ use Syntax::Keyword::Try;
+ use FCGI;
++use lib '.';
++# BEGIN { require 'config.pl'; }
++BEGIN { require 'gorillanest.pl.cgi'; }
+ try {
++    open STDERR, '>', LOG_FILE or die LOG_FILE . ": $!";
++    my $sock = FCGI::OpenSocket(SOCKET_FILE, 100);
++    my $request = FCGI::Request(\*STDIN, \*STDOUT, \*STDERR, \%ENV, $sock);
+     while($request->Accept() >= 0) {
+               master();
+     }
+ } catch ($error) {
+     info("Crashed: $error");
+ }