){
$content .= $_;
}
close(FH);
} else {
$content = qq{
The specified file does not exist
};
}
if ($print) {
print $content;
} else {
return $content;
}
}
sub jsonHandler {
my %data;
my %REQUEST = %{$_[0]};
my $requestBody = $_[1];
my @ALLOWED_COMMANDS = qw(lvectl cloudlinux-awp-admin cloudlinux-limits);
$data{'owner'} = $user_type;
$data{'command'} = 'lvectl';
$data{'plugin_name'} = 'jsonhandler';
foreach my $param (keys %REQUEST)
{
if ($param eq 'handler') {
$data{'method'} = $REQUEST{'handler'};
} elsif ($param eq 'command') {
if (grep {$REQUEST{'command'} eq $_} @ALLOWED_COMMANDS) {
$data{'command'} = $REQUEST{'command'};
}
else {
sendError('COMMAND NOT ALLOWED');
}
} elsif (ref($param) ne 'HASH' && $param ne 'cgiaction' ) {
if (exists $REQUEST{'command'} && $REQUEST{'command'} eq 'cloudlinux-limits' && $param eq 'lveid') {
$data{'params'}{'lve-id'} = $REQUEST{$param};
} else {
$data{'params'}{$param} = $REQUEST{$param};
}
}
}
if(defined $requestBody) {
$data{'params'}{'stdin'} = $requestBody;
}
my $fullCommandStr;
$fullCommandStr = "ulimit -m unlimited -v unlimited && " . CLOUDLINUX_CLI;
$fullCommandStr = sprintf(
"%s --data=%s",
$fullCommandStr, encode_base64(encode_json(\%data), '')
);
my $responseInJson = safeRun($fullCommandStr);
setJsonHeader($responseInJson);
}
sub lvemanagerHandler
{
my ($REQUEST_REF, $plugin_name) = @_;
my %REQUEST = %$REQUEST_REF;
unless (exists $REQUEST{'command'}) {
sendError('COMMAND NOT SPECIFIED');
}
my %data;
$data{'owner'} = $user_type;
$data{'command'} = $REQUEST{'command'};
$data{'plugin_name'} = $plugin_name;
if (exists $REQUEST{'method'}) {
$data{'method'} = $REQUEST{'method'};
}
if (exists $REQUEST{'params'}) {
$data{'params'} = $REQUEST{'params'};
}
if (exists $REQUEST{'attachments[]'}) {
$data{'attachments'} = [];
foreach my $file ( @{$REQUEST{'attachments[]'}} ) {
unshift (@{$data{'attachments'}}, $file);
}
}
if ($data{'owner'} ne OWNER_ADMIN) {
$data{'user_info'} = {
'username' => $CURRENT_USER,
'lve-id' => _getUserIdByName($CURRENT_USER)
};
}
if (exists $REQUEST{'mockJson'} && $REQUEST{'mockJson'}) {
$data{'mockJson'} = $REQUEST{'mockJson'};
}
if (exists $REQUEST{'lang'} && $REQUEST{'lang'}) {
$data{'lang'} = $REQUEST{'lang'};
}
my $fullCommandStr;
if ($data{'owner'} eq OWNER_ADMIN) {
$fullCommandStr = "ulimit -m unlimited -v unlimited && " . CLOUDLINUX_CLI;
} elsif ($data{'owner'} eq OWNER_RESELLER) {
$fullCommandStr = CLOUDLINUX_CLI
} elsif ($data{'owner'} eq OWNER_USER) {
$fullCommandStr = CLOUDLINUX_CLI_USER;
}
$fullCommandStr = sprintf(
"%s --data=%s",
$fullCommandStr, encode_base64(JSON::XS->new->encode(\%data), '')
);
my $responseInJson = safeRun($fullCommandStr);
my %response;
eval {
%response = %{decode_json($responseInJson)};
};
# If decode_json is catched an exeption, send error header with backtrace
if ($@ && $responseInJson ne '') {
sendError('ERROR.wrong_received_data', 0, 0, $responseInJson);
}
if (exists $response{'result'} && $response{'result'} eq 'file') {
responseFile($response{'filepath'})
}
if (exists $response{'result'} && $response{'result'} ne 'success' && $response{'result'} ne 'rollback') {
sendError($responseInJson, 1);
}
if ($responseInJson eq '') {
sendError('RESPONSE OF COMMAND IS EMPTY');
}
setJsonHeader($responseInJson);
}
sub detectOwner
{
if (_isAdmin()) {
return setOwner(OWNER_ADMIN);
}
if (_isReseller()) {
return setOwner(OWNER_RESELLER);
}
return setOwner(OWNER_USER);
}
sub setOwner
{
my ($owner) = @_;
$user_type = $owner;
return $owner;
}
sub _isAdmin
{
if (Whostmgr::ACLS::hasroot()) {
return 1;
}
return 0;
}
sub _isReseller
{
my $RESELLER_LIST_FILE = '/var/cpanel/resellers';
my $result = 0;
if (-e $RESELLER_LIST_FILE) {
open my $f, $RESELLER_LIST_FILE or die "Could not open $RESELLER_LIST_FILE: $!";
while( my $line = <$f>) {
my @data = split /:/, $line;
if ($CURRENT_USER eq $data[0]) {
$result = 1;
last;
}
}
close $f;
}
return $result;
}
sub loadGlobalVariables
{
my $appMode = _getApplicationMode();
my $pluginVersion = getPluginVersion();
my ($assetsStaticPath) = @_;
printf(
'',
$user_type,
$CURRENT_USER,
$current_locale,
$appMode,
$assetsStaticPath.'/i18n/',
$assetsStaticPath.'/',
trim($pluginVersion)
);
}
# Should be present for require
1;