252 lines
8.0 KiB
Perl
Executable File
252 lines
8.0 KiB
Perl
Executable File
#!/usr/bin/env perl;
|
|
|
|
use strict;
|
|
use warnings;
|
|
use IO::Compress::Gzip qw(gzip);
|
|
|
|
require "./subroutines.pl";
|
|
our $config_file = read_file('./config.json');
|
|
our $config = decode_json $config_file;
|
|
our $logfile = &subs::home($config->{'logfile'});
|
|
`touch $logfile` if not -e $logfile;
|
|
our $log = Mojo::Log->new(path => $logfile);
|
|
|
|
|
|
hook before_dispatch => sub {
|
|
my ($c) = @_;
|
|
|
|
my $path = $c->req->url->path;
|
|
my $port = $c->req->url->base->port;
|
|
my $local_address = $c->tx->local_address;
|
|
my $remote_address = $c->tx->remote_address;
|
|
|
|
if ($local_address ne $remote_address) {
|
|
# $log->info($local_address . ' ' . $path . ' ' . $port);
|
|
}
|
|
|
|
$c->session('reject_count', 0) unless $c->session('reject_count');
|
|
if ($local_address ne $remote_address) {
|
|
my $nl = &subs::db_query('select * from neighbour_link where initiator=? and initiated=? order by server_time desc limit 1', $remote_address, $local_address)->hashes;
|
|
if (scalar @{$nl} == 0 && $c->param('my_name') && $c->param('signatorial')) {
|
|
my $nlrq = $c->render_to_string(
|
|
template => 'configure/neighbour_link_request',
|
|
local_address => $local_address,
|
|
remote_address => $remote_address,
|
|
my_name => $c->param('my_name'),
|
|
signatorial => $c->param('signatorial')
|
|
);
|
|
#$c->render(template => 'guest_layouts/pending', message => '... hold on!');
|
|
#$c->session('authentication' => 'pending');
|
|
#$c->rendered;
|
|
#}
|
|
&Websocket::send('server', { alert => $nlrq });
|
|
}
|
|
elsif ($nl->[0]->{'status'} ne 'blacklisted') {
|
|
# $c->session('authentication', $nl->[0]->{'status'});
|
|
}
|
|
else {
|
|
# $c->session('authentication' => 'denial');
|
|
}
|
|
}
|
|
if ($c->session('authentication') eq 'denial') {
|
|
my $denial = $c->render(template => 'guest_layouts/denial', message => '... and fuck you too!');
|
|
$c->session('authentication' => 'denial');
|
|
$c->rendered;
|
|
return;
|
|
# $c->continue;
|
|
}
|
|
if ($c->session('authentication') ne 'approved') {
|
|
my $total_upload = 0;
|
|
my @uploads = @{$c->req->uploads};
|
|
foreach my $u ( @uploads ) {
|
|
$total_upload += $u->size;
|
|
}
|
|
if ($total_upload > 10000000 || $c->session('authentication') eq 'fuck you') {
|
|
$c->stash('no' => 1);
|
|
my $denial = $c->render(template => 'guest_layouts/denial', message => '... and fuck you too!');
|
|
$c->session('authentication' => 'fuck you');
|
|
&subs::say_it('fuck you! time consumer');
|
|
$c->rendered;
|
|
}
|
|
}
|
|
|
|
|
|
# &subs::log_writer($remote_address . ' ' . $path);
|
|
|
|
|
|
my $allowances = {
|
|
guest => [
|
|
'/js/mailbox.js',
|
|
'/',
|
|
'/js/jquery-ui.js',
|
|
'/js/jquery.ui.touch-punch.min.js',
|
|
'/js/universal.js',
|
|
'/js/homepage.js',
|
|
'/js/jquery.js',
|
|
'/js/numeral.min.js',
|
|
'/mail/ws',
|
|
'/mail/homepage_form'
|
|
],
|
|
resident => [
|
|
'manager'
|
|
],
|
|
citizen => [
|
|
'/configure',
|
|
'/manager/magazine/publish',
|
|
]
|
|
};
|
|
|
|
|
|
#if ($port eq $ENV{PORT_MAIN} && ($path ne '/') && $path !~ /^\/images\/jbuttons/ && $path ne '/css/store.css' && $path ne '/css/universal.css' && $path ne '/images/decipherable/envelope.png' && $path ne "/images/decipherable/gift.png" && $path ne '/payment' && $path ne '/play' && $path ne '/images/make%20believe/cancel_button.png' && $path ne '/box_office/ticket_request') {
|
|
# $c->stash('no' => 1);
|
|
#}
|
|
if ($c->session('authentication') ne 'approved' && $ENV{PURPOSE} eq 'locker' &&
|
|
$path ne '/css/store.css' &&
|
|
$path ne '/public_view' &&
|
|
$path ne '/css/universal.css' &&
|
|
$path ne '/denial' &&
|
|
$path !~ /^\/images\/jbuttons/ &&
|
|
$path ne '/manager/gate' &&
|
|
$path ne '/manager/say_it' &&
|
|
$path ne '/images/decipherable/envelope.png' &&
|
|
$path ne "/images/decipherable/gift.png" &&
|
|
$path ne '/images/make%20believe/cancel_button.png' &&
|
|
$path ne '/payment' &&
|
|
$path ne '/play' &&
|
|
$path ne '/box_office/ticket_request') {
|
|
$c->stash('no' => 1);
|
|
}
|
|
|
|
my $privilege = $c->session('privilege');
|
|
my @a_loud_thing;
|
|
if ($privilege) {
|
|
if ((@a_loud_thing = grep { $path =~ $_ } @{$allowances->{'citizen'}}) && $privilege ne 'citizen') {
|
|
if (scalar @a_loud_thing == 0) {
|
|
$c->stash('no' => 1);
|
|
}
|
|
}
|
|
elsif ((@a_loud_thing = grep { $path =~ $_ } @{$allowances->{'resident'}}) && ($privilege ne 'citizen' && $privilege ne 'resident')) {
|
|
if (scalar @a_loud_thing == 0) {
|
|
$c->stash('no' => 1);
|
|
}
|
|
}
|
|
elsif ((@a_loud_thing = grep { $path eq $_ } @{$allowances->{'guest'}}) && ($privilege ne 'citizen' && $privilege ne 'resident' && $privilege eq 'guest')) {
|
|
if (scalar @a_loud_thing == 0) {
|
|
$c->stash('no' => 1);
|
|
}
|
|
}
|
|
}
|
|
|
|
unless ($c->param('browser_tab_id') || $c->session('browser_tab_id')) {
|
|
my $ug = Data::UUID->new;
|
|
my $uuid = $ug->create_str();
|
|
$c->stash('browser_tab_id' => $uuid );
|
|
$c->session('browser_tab_id' => $uuid );
|
|
$c->stash('website' => '');
|
|
}
|
|
else {
|
|
my $ug = Data::UUID->new;
|
|
my $uuid = $ug->create_str();
|
|
$c->stash('browser_tab_id' => $c->session('browser_tab_id'));
|
|
$c->session('browser_tab_id' => $uuid);
|
|
}
|
|
|
|
unless ($c->param('browser_tab')) {
|
|
my $ug = Data::UUID->new;
|
|
my $uuid = $ug->create_str();
|
|
$c->stash('browser_tab' => $uuid );
|
|
$c->session('browser_tab' => $uuid );
|
|
}
|
|
else {
|
|
$c->stash('browser_tab' => '2');
|
|
}
|
|
|
|
unless ($path eq '/icons/logos/WelcomeLogo.png' ||
|
|
$path eq "/image/make%20believe/crown.png" ||
|
|
$path eq "/images/make%20believe/lock.png" ||
|
|
$path eq '/images/make%20believe/cancel_button.png' ||
|
|
$path eq "/images/make%20believe/up.png" ||
|
|
$path eq "/images/decipherable/gift.png" ||
|
|
$path eq "/images/decipherable/envelope.png" ||
|
|
$path =~ '^/images/jbuttons' ||
|
|
$path eq '/sesh_check' ||
|
|
$path eq '/gate' ||
|
|
$path eq '/js/gate.js' ||
|
|
$path eq '/js/jquery.js' ||
|
|
$path eq '/js/numeral.min.js' ||
|
|
$path eq '/js/universal.js' ||
|
|
$path eq '/css/universal.css' ||
|
|
$path eq '/css/store.css' ||
|
|
$path eq '/js/homepage.js' ||
|
|
$path eq '/teletype/information' ||
|
|
$path =~ '^/box_office' ||
|
|
$path eq '/denial' ||
|
|
$path eq '/js/jquery.ui.touch-punch.min.js' ||
|
|
$path eq '/play' || $path eq '/file_open' ||
|
|
$path eq '/payment' ||
|
|
$path eq '/box_office/ticket_request' ||
|
|
$path =~ '^/public_view' ||
|
|
$path eq '/', ) {
|
|
|
|
my $device = &subs::device_setter();
|
|
$c->stash('device' => $device);
|
|
$c->stash('string' => $Manager::random_caching_string);
|
|
if ($c->param('ws_auth') && $remote_address ne $local_address) {
|
|
my $success = 0;
|
|
my $wsa = $c->param('ws_auth');
|
|
my $pa = &subs::setting_grabber({ app => '__president', setting => 'ws_pa' });
|
|
my @ws_auth = split $gb::universal_splitter, &subs::decrypter($pa, $wsa);
|
|
if ($remote_address eq $ws_auth[0] && $ws_auth[1] eq &subs::signatorial_designer()) {
|
|
$c->session('authentication' => 'approved');
|
|
# $c->session('suds' => $c->param('suds'));
|
|
# $c->session('server_time' => &subs::rightNow());
|
|
$success = 1;
|
|
}
|
|
if ($success == 0) {
|
|
&authentication_passer($c)
|
|
}
|
|
|
|
}
|
|
else {
|
|
my $man = &authentication_passer($c);
|
|
}
|
|
|
|
}
|
|
};
|
|
|
|
hook after_render => sub {
|
|
my ($c, $output, $format) = @_;
|
|
# Check if "gzip => 1" has been set in the stash
|
|
return unless $c->stash->{gzip};
|
|
|
|
# Check if user agent accepts gzip compression
|
|
return unless ($c->req->headers->accept_encoding // '') =~ /gzip/i;
|
|
$c->res->headers->append(Vary => 'Accept-Encoding');
|
|
|
|
# Compress content with gzip
|
|
$c->res->headers->content_encoding('gzip');
|
|
|
|
gzip $output, \my $compressed;
|
|
$$output = $compressed;
|
|
|
|
};
|
|
|
|
hook after_dispatch => sub {
|
|
my ($c) = @_;
|
|
if ($c->res->code == 500) {
|
|
|
|
foreach my $h (reverse sort @{$c->stash('mojo.log')->{'parent'}->{'history'}} ) {
|
|
if (eval { $h->[3]->{'message'} }) {
|
|
my $errors = eval { decode_json &subs::setting_grabber({ app => 'terminal', setting => 'errors' }) } || [];
|
|
my $uuid = &subs::random_string_creator(12);
|
|
my $error = { timestamp => &subs::rightNow, code => $c->res->code, msg => $c->req->url->path . '<br>' . $h->[3]->{'message'}, uuid => $uuid };
|
|
push @{$errors}, $error;
|
|
my $jerror = encode_json $errors;
|
|
|
|
&subs::setting_setter({ app => 'terminal', setting => 'errors', value => $jerror });
|
|
&Websocket::send('server', { view => 'errors', console => $error, error => $uuid });
|
|
}
|
|
}
|
|
}
|
|
};
|
|
1; |