Viewing File: /usr/local/cpanel/base/frontend/jupiter/imunify/imunify.live.pl

#!/usr/local/cpanel/3rdparty/bin/perl

BEGIN { unshift @INC, '/usr/local/cpanel', '/usr/local/cpanel/whostmgr/cgi/imunify/handlers'; }

use strict;
use warnings;
use locale ':not_characters';   # utf-8
use JSON;

use Cpanel::LiveAPI();
use Cpanel::JSON;
use Data::Dumper;
use CGI;

use Imunify::File;
use Imunify::Render;
use Imunify::Wrapper;
use Imunify::Exception;
use Imunify::Utils;

#use CGI::Carp qw(fatalsToBrowser); # uncomment to debug 500 error

my $panel = Cpanel::LiveAPI->new();

eval {
    my $cgi = CGI->new;
    my $json = $cgi->param('POSTDATA');

    if (!$json) {
        main();
    } else {
        my $request = Cpanel::JSON::Load($json);
        my $command = $request->{'command'} || 'default';
        if ($command eq 'commandIE') {
            Imunify::Wrapper::imunfyEmailRequest($request, 0);
        } else {
            Imunify::Wrapper::request($request, 0);
        }
    }

    $panel->end();
};

if ($@) {
    if (ref($@) && $@->can('asJSON')) {
        $@->asJSON();
    } else {
        die Imunify::Exception->new($@)->asJSON();
    }
}

sub main {
    my $i360ieExist = 0;
    if (-e '/var/run/imunifyemail/quarantine.sock') {
        $i360ieExist = 1;
    }

    my $file_path = "/usr/local/cpanel/base/frontend/jupiter/imunify/assets/static/importmap.json";
    my $path_to_static = "./assets/static/";

    my $json_text = do {
        open(my $json_fh, "<:encoding(UTF-8)", $file_path)
            or die("Can't open \"$file_path\": $!\n");
        local $/;
        <$json_fh>
    };

    my $json = JSON->new;
    my $data = $json->decode($json_text);

    foreach my $key (keys %{$data->{imports}}) {
        $data->{imports}{$key} = $path_to_static . $data->{imports}{$key};
    }

    my $importmap = encode_json($data);

    print "Content-type: text/html; charset=utf-8\n\n";
    print $panel->header('');

    print qq{
    <script type="text/javascript">
        var i360role = "client";
        var i360userName = "$ENV{REMOTE_USER}";
        var i360ieExist = "$i360ieExist";
        var I360_DISABLE_LOAD_IMPORTMAP = true;
    </script>};

    print '
    <meta name="importmap-type" content="systemjs-importmap">
    <link rel="stylesheet" type="text/css" href="./assets/static/container.css" />
    <link rel="stylesheet" type="text/css" href="./assets/static/fonts/fonts.css?v1" />
    ';
    print qq {
    <script type="systemjs-importmap">
        ${importmap}
    </script>
    };
    print '
<script src="./assets/static/systemjs-conflict-patch-pre.js"></script>
<script src="./assets/static/shared-dependencies/system.min.js"></script>
<script src="./assets/static/shared-dependencies/amd.min.js"></script>
<script src="./assets/static/shared-dependencies/named-exports.min.js"></script>
<script src="./assets/static/shared-dependencies/named-register.min.js"></script>
<script src="./assets/static/systemjs-conflict-patch-post.js"></script>
<script src="./assets/static/shared-dependencies/zone.min.js"></script>
<script src="./assets/static/load-scripts-after-zone.js?v2"></script>

<div id="spa_wrapper" class="display-flex-column"><div></div></div>
<template id="single-spa-layout">
    <single-spa-router mode="hash" containerEl="#spa_wrapper">
        <div class="i360-app i360-app-outer i360-client i360-cpanel i360-app__container">
            <application name="@imunify/nav-root"></application>
            <div class="main-content">
                <route path="360/:role/email">
                    <application name="@imunify/email-root" loader="loader"></application>
                </route>
                <route default>
                    <application name="@imunify/other-root" loader="loader"></application>
                </route>
            </div>
        </div>
        <div class="i360-app__loader">
            <div class="i360-app__loader-icon"></div>
        </div>
    </single-spa-router>
</template>
';
    print $panel->footer();
}
Back to Directory File Manager