president/Websocket.pl

79 lines
1.9 KiB
Perl
Executable File

#!/usr/bin/perl
use strict;
use warnings;
package Websocket;
use List::Util qw(shuffle);
use Mojo::Util qw/html_unescape term_escape/;
use Time::Duration;
use Date::Parse;
use Time::Piece;
use Crypt::Simple;
use File::Slurp;
use Mojo::JSON qw(decode_json encode_json);
use Data::Dumper;
require "./gb.pl";
require "./subroutines.pl";
my $config_file = read_file('./config.json');
my $config = decode_json $config_file;
our $logfile = &subs::home($config->{'logfile'});
`touch $logfile` if not -e $logfile;
our $log = Mojo::Log->new(path => $logfile);
my $device = &subs::device_setter();
my $home_file = &subs::home('~/') . '.president/ws_watcher';
`touch $home_file` unless -e $home_file;
sub send() {
my ($app,$msg) = @_;
my ($db,$database,$sql) = &subs::database_grabber();
my $returner;
if ($msg->{'console'}) {
if (!$msg->{'whoami'}) {
$msg->{'whoami'} = `whoami`;
chomp $msg->{'whoami'};
}
if (!$msg->{'hostname'}) {
$msg->{'hostname'} = `hostname`;
chomp $msg->{'hostname'};
}
}
my $original_msg = $msg;
if ( eval { encode_json $msg } ) {
my $uuid = &subs::random_string_creator(10);
# $msg->{'uuid'} = $uuid;
$msg->{'formatted_name'} = &subs::format_name($msg->{'app'});
my $m = encode_json $msg;
my $server_time = &subs::rightNow();
if (eval { $sql->db } && $sql->dsn !~ /:$/) {
my $lid = undef;
until ($lid) {
my $success = eval { return &subs::db_insert('websocket_messages', {
origin => $original_msg->{'origin'},
server_time => $server_time,
timestamp => $original_msg->{'timestamp'} || $server_time,
message => $m,
destination => $original_msg->{'destination'} || $original_msg->{'browser_tab_id'},
app => $app,
environment => 'manager',
uuid => $uuid,
patience => $original_msg->{'patience'}
}) };
$lid = $success->last_insert_id;
}
# my $home = &subs::home('~/');
# `echo "$server_time" > $home_file`;
}
}
return $returner;
}
1;