OPNsense Plugin: install.sh Installer-Script (self-contained, alle Dateien inline)

This commit is contained in:
cynfo3000
2026-02-28 14:13:54 +01:00
parent a7d3971b5d
commit 1832bce852
5 changed files with 688 additions and 61 deletions
@@ -2,12 +2,47 @@
namespace OPNsense\RMMAgent\Api;
use OPNsense\Base\ApiMutableServiceControllerBase;
use OPNsense\Base\ApiControllerBase;
class ServiceController extends ApiMutableServiceControllerBase
class ServiceController extends ApiControllerBase
{
protected static $internalServiceClass = '\OPNsense\RMMAgent\RMMAgent';
protected static $internalServiceTemplate = 'OPNsense/RMMAgent/config.yaml';
protected static $internalServiceEnabled = 'general.Enabled';
protected static $internalServiceName = 'rmmagent';
public function statusAction()
{
$backend = new \OPNsense\Core\Backend();
$response = trim($backend->configdRun('rmmagent status'));
if (strpos($response, 'is running') !== false) {
return array('status' => 'running', 'message' => $response);
} else {
return array('status' => 'stopped', 'message' => $response);
}
}
public function startAction()
{
$backend = new \OPNsense\Core\Backend();
$response = trim($backend->configdRun('rmmagent start'));
return array('status' => 'ok', 'message' => $response);
}
public function stopAction()
{
$backend = new \OPNsense\Core\Backend();
$response = trim($backend->configdRun('rmmagent stop'));
return array('status' => 'ok', 'message' => $response);
}
public function restartAction()
{
$backend = new \OPNsense\Core\Backend();
$response = trim($backend->configdRun('rmmagent restart'));
return array('status' => 'ok', 'message' => $response);
}
public function reconfigureAction()
{
$backend = new \OPNsense\Core\Backend();
$response = trim($backend->configdRun('rmmagent reconfigure'));
return array('status' => 'ok', 'message' => $response);
}
}
@@ -2,20 +2,54 @@
namespace OPNsense\RMMAgent\Api;
use OPNsense\Base\ApiMutableModelControllerBase;
use OPNsense\Base\ApiControllerBase;
use OPNsense\RMMAgent\RMMAgent;
use OPNsense\Core\Config;
class SettingsController extends ApiMutableModelControllerBase
class SettingsController extends ApiControllerBase
{
protected static $internalModelName = 'rmmagent';
protected static $internalModelClass = 'OPNsense\RMMAgent\RMMAgent';
public function getAction()
{
return $this->getBase('general', 'general');
$mdl = new RMMAgent();
$result = array('general' => array());
foreach ($mdl->general->iterateItems() as $key => $node) {
$result['general'][$key] = (string)$node;
}
return $result;
}
public function setAction()
{
return $this->setBase('general', 'general');
$result = array('result' => 'failed');
if ($this->request->isPost()) {
$mdl = new RMMAgent();
$post = $this->request->getPost('general');
if (!empty($post)) {
foreach ($post as $key => $value) {
$node = $mdl->general->$key;
if ($node !== null) {
$node->setValue($value);
}
}
}
$valMsgs = $mdl->performValidation();
if ($valMsgs->count() > 0) {
$result['validations'] = array();
foreach ($valMsgs as $msg) {
$result['validations']['general.' . $msg->getField()] = $msg->getMessage();
}
} else {
$mdl->serializeToConfig();
Config::getInstance()->save();
$result['result'] = 'saved';
}
}
return $result;
}
}
@@ -9,15 +9,47 @@
mapDataToFormUI(data_get_map).done(function () {
formatTokenizersUI();
$('.selectpicker').selectpicker('refresh');
updateServiceControlUI('rmmagent');
});
// Service status abrufen
ajaxCall('/api/rmmagent/service/status', {}, function (data, status) {
if (data && data['status']) {
var badge = data['status'] === 'running'
? '<span class="label label-success">Running</span>'
: '<span class="label label-danger">Stopped</span>';
$('#service_status_container').html(badge);
}
});
$('#saveAct').unbind('click').click(function () {
saveFormToEndpoint('/api/rmmagent/settings/set', 'frm_GeneralSettings', function () {
$('#saveAct_progress').addClass('fa fa-spinner fa-pulse');
ajaxCall('/api/rmmagent/service/reconfigure', {}, function (data, status) {
updateServiceControlUI('rmmagent');
$('#saveAct_progress').removeClass('fa fa-spinner fa-pulse');
// Status aktualisieren
ajaxCall('/api/rmmagent/service/status', {}, function (data, status) {
if (data && data['status']) {
var badge = data['status'] === 'running'
? '<span class="label label-success">Running</span>'
: '<span class="label label-danger">Stopped</span>';
$('#service_status_container').html(badge);
}
});
});
});
});
$('#restartAct').unbind('click').click(function () {
$('#restartAct_progress').addClass('fa fa-spinner fa-pulse');
ajaxCall('/api/rmmagent/service/restart', {}, function (data, status) {
$('#restartAct_progress').removeClass('fa fa-spinner fa-pulse');
ajaxCall('/api/rmmagent/service/status', {}, function (data, status) {
if (data && data['status']) {
var badge = data['status'] === 'running'
? '<span class="label label-success">Running</span>'
: '<span class="label label-danger">Stopped</span>';
$('#service_status_container').html(badge);
}
});
});
});
@@ -26,7 +58,7 @@
<div class="content-box" style="padding: 10px;">
<div class="content-box-header">
<h3>{{ lang._('RMM Agent Einstellungen') }}</h3>
<h3>{{ lang._('RMM Agent') }} <small id="service_status_container"><span class="label label-default">...</span></small></h3>
</div>
<div class="content-box-main">
<div class="table-responsive">
@@ -36,16 +68,10 @@
<div class="col-md-12">
<hr/>
<button class="btn btn-primary" id="saveAct" type="button">
<b>{{ lang._('Speichern') }}</b> <i id="saveAct_progress"></i>
<b>{{ lang._('Speichern & Anwenden') }}</b> <i id="saveAct_progress"></i>
</button>
<button class="btn btn-default" id="restartAct" type="button">
<b>{{ lang._('Neustart') }}</b> <i id="restartAct_progress"></i>
</button>
</div>
</div>
<div class="content-box" style="padding: 10px; margin-top: 20px;">
<div class="content-box-header">
<h3>{{ lang._('Dienst-Status') }}</h3>
</div>
<div class="content-box-main">
{{ partial("layout_partials/service_control", ['serviceName': 'rmmagent']) }}
</div>
</div>