www2.0/www-swagg.pl

79 lines
2.0 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};
# The main landing page; pass in the output of the fortune command
get '/' => sub {
2021-02-28 02:27:38 -05:00
my ($c) = @_;
my $fortune = `fortune` || "huh?? no fortune for u\n";
2021-02-27 01:14:38 -05:00
$c->render(fortune => $fortune);
} => 'index';
# Deprecation of IE page
2021-02-28 01:33:35 -05:00
get '/die';
2021-02-27 01:24:34 -05:00
2021-02-28 01:33:35 -05:00
get '/me';
2021-02-27 01:24:34 -05:00
2021-02-28 01:33:35 -05:00
get '/news';
2021-02-27 01:24:34 -05:00
# 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 {
my ($c) = @_;
my $mac = lc $c->param('macaddr'); # Lower-case plz
my $ula6;
# Check the MAC
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);
$halfone = $fields[0] . $fields[1] . $fields[2] . "ff";
$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-03-05 22:31:48 -05:00
($uniqueid = "fd" . substr $digesty, -10) =~ s/(.{1,4})/$1:/g;
# Set the ULA
$ula6 = $uniqueid . ':/48';
}
$c->render(ula6 => $ula6);
};
# Send it
app->start();