www2.0/www-swagg.pl

122 lines
3.1 KiB
Perl
Raw Normal View History

#!/usr/bin/env perl
# Daniel Bowling <swaggboi@slackware.uk>
# Mar 2021
use Mojolicious::Lite;
use Regexp::Common qw{net};
use Digest::SHA qw{sha1_hex};
2021-03-06 17:20:56 -05:00
use Number::Format qw{format_number};
2021-03-12 23:22:50 -05:00
plugin 'Config';
# CGI scripts
2021-06-03 23:56:51 -04:00
plugin CGI => ['/cgi-bin/guest.cgi', './cgi-bin/guest_mm.cgi'];
plugin CGI => ['/cgi-bin/whoami.cgi', './cgi-bin/whoami.cgi'];
2021-03-07 20:44:58 -05:00
2021-03-13 02:21:16 -05:00
# Handle the session
2021-03-13 02:15:04 -05:00
under sub {
my ($c) = @_;
my $sessionLife = 604800;
2021-03-12 23:22:50 -05:00
if ($c->cookie('banner') eq 'seen') {
# Set session for a week
$c->session(expiration => $sessionLife, banner => 'seen');
# Kill plain-text cookie
$c->cookie(banner => 'seen', {expires => 1});
2021-03-12 23:22:50 -05:00
}
# Pass in the expiration for plain-text cookie
$c->stash(sessionLife => $sessionLife);
# Opt out of Google FLoC
# https://paramdeo.com/blog/opting-your-website-out-of-googles-floc-network
$c->res->headers->header('Permissions-Policy', 'interest-cohort=()');
2021-03-13 02:25:06 -05:00
1;
2021-03-13 02:15:04 -05:00
};
2021-03-12 23:22:50 -05:00
2021-03-13 02:15:04 -05:00
# The main landing page; index.html
get '/', sub {
2021-02-28 02:27:38 -05:00
my ($c) = @_;
2021-03-07 20:55:34 -05:00
my $count = format_number time; # Grab epoch and add commas
2021-03-06 20:24:16 -05:00
my $fortune = `/usr/games/fortune` || `fortune` || "huh??\n";
2021-03-06 17:20:56 -05:00
$c->stash(
2021-03-06 17:20:56 -05:00
count => $count,
fortune => $fortune
);
$c->render();
}, 'index';
# Process mac address to ula6 ala the ol' ula6.cgi script:
# - Current time of day in 64-bit NTP format
# - Obtain EUI64
# - Cat first with second
# - Compute SHA-1 of third and use least significant 40 bits
# TODO: This ancient code could certainly be cleaned up
get '/ula6', sub {
2021-03-07 20:57:42 -05:00
my ($c) = @_;
2021-03-07 20:44:58 -05:00
my ($mac, $ula6);
# Check the MAC
2021-04-15 21:52:41 -04:00
$mac = $c->param('macaddr') ? lc $c->param('macaddr') : '';
2021-03-12 23:22:50 -05:00
if ($mac =~ /$RE{net}{MAC}/) {
# Local vars for this bit
my (
$binfield,
$decfield,
$digesty,
$epoch,
@fields,
$fulleui,
$halfone,
$halftwo,
$hexfield,
$uniqueid
);
# EUI64
@fields = split(/:/, $mac);
2021-04-15 21:52:41 -04:00
$halftwo = "fe" . $fields[3] . $fields[4] . $fields[5];
$binfield = sprintf "%b", hex $fields[0];
$decfield = sprintf "%d", hex $fields[0];
2021-03-05 22:31:48 -05:00
$decfield = ($binfield =~ /1[01]$/) ? $decfield - 2 : $decfield + 2;
$hexfield = sprintf "%x", int $decfield;
$halfone = $hexfield . $fields[1] . $fields[2] . "ff";
$fulleui = $halfone . $halftwo;
# Current time of day
$epoch = time() + 2208988800;
# Cat with the time
$digesty = sha1_hex($epoch . $fulleui);
2021-04-15 22:21:43 -04:00
($uniqueid = "fd" . substr $digesty, -10) =~ s/(.{4})/$1:/g;
# Set the ULA
$ula6 = $uniqueid . ':/48';
}
$c->render(ula6 => $ula6);
};
# Reset session cookie
get '/reset', sub {
my ($c) = @_;
$c->session(expires => 1);
$c->redirect_to('index');
};
2021-03-13 02:15:04 -05:00
# Default route
get '/:route', [route => [qw{die me news portal}]], sub {
2021-03-13 23:26:17 -05:00
my ($c) = @_;
2021-03-13 02:19:51 -05:00
$c->render(template => $c->stash('route'));
};
2021-03-13 02:15:04 -05:00
# Send it
2021-03-12 23:22:50 -05:00
app->secrets(app->config->{secrets}) || die $!;
app->start();