Files
overwatch/lib/modules/SystemServices/SystemServices.API.php

147 lines
5.7 KiB
PHP

<?php
class SystemServices {
function loadInst()
{
static $inst = null;
if ($inst === null) {
$inst = new self;
}
return $inst;
}
function module_loaded()
{
self::API_Register();
return true;
}
function API_Register()
{
apiql::register("!SYSTEM/!INSTALL/!PACKAGE[json]", "SystemServices::InstallPackage");
apiql::register("!SYSTEM/!REMOVE/!PACKAGE[json]", "SystemServices::RemovePackage");
apiql::register("!SYSTEM/!CLEAN/!PACKAGES", "SystemServices::CleanPackages");
}
function CleanPackages()
{
$process = new React\ChildProcess\Process('exec apt-get clean');
$process->on('exit', function($exitCode, $termSignal) {
global $clients;
if($exitCode > 0)
{
$ResponseArray = array("response_type"=>"error",
"response_msg"=>"Package cache cleanup failed.",
"apt_exit_code"=>$exitCode,
"error_code"=>"APT_500C");
} else {
$ResponseArray = array("response_type"=>"success",
"response_msg"=>"Package cache cleanup succeeded.",
"apt_exit_code"=>$exitCode,
"response_code"=>"APT_200C");
}
foreach($clients as $client)
{
$client->write(json_encode($ResponseArray)."\r\n");
}
return json_encode($ResponseArray);
});
$process->start($loop);
}
function InstallPackage($sql)
{
global $loop;
$Package = $sql['PACKAGE']['packages'];
#$Reinstall = $sql['REINSTALL'];
if(is_array($Package))
{
foreach($Package as $value)
{
if(empty($PackageLine))
{
$PackageLine = $value;
} else {
$PackageLine .= " ".$value;
}
}
} else {
$PackageLine = $Package;
}
$process = new React\ChildProcess\Process('exec apt-get -y install '.$PackageLine);
$process->on('exit', function($exitCode, $termSignal) {
global $clients;
if($exitCode > 0)
{
$ResponseArray = array("response_type"=>"error",
"response_msg"=>"Package installation failed.",
"apt_exit_code"=>$exitCode,
"error_code"=>"APT_500I");
} else {
$ResponseArray = array("response_type"=>"success",
"response_msg"=>"Package installation succeeded.",
"apt_exit_code"=>$exitCode,
"response_code"=>"APT_200I");
}
foreach($clients as $client)
{
$client->write(json_encode($ResponseArray)."\r\n");
}
return json_encode($ResponseArray);
});
$process->start($loop);
}
function RemovePackage($sql)
{
global $loop;
$Package = $sql['PACKAGE']['packages'];
#$Reinstall = $sql['REINSTALL'];
if(is_array($Package))
{
foreach($Package as $value)
{
if(empty($PackageLine))
{
$PackageLine = $value;
} else {
$PackageLine .= " ".$value;
}
}
} else {
$PackageLine = $Package;
}
$process = new React\ChildProcess\Process('exec apt-get -y remove '.$PackageLine);
$process->on('exit', function($exitCode, $termSignal) {
global $clients;
if($exitCode > 0)
{
$ResponseArray = array("response_type"=>"error",
"response_msg"=>"Package removal failed.",
"apt_exit_code"=>$exitCode,
"error_code"=>"APT_500R");
} else {
$ResponseArray = array("response_type"=>"success",
"response_msg"=>"Package removal succeeded.",
"apt_exit_code"=>$exitCode,
"response_code"=>"APT_200R");
}
foreach($clients as $client)
{
$client->write(json_encode($ResponseArray)."\r\n");
}
return json_encode($ResponseArray);
});
$process->start($loop);
}
}