diff --git a/sysutils/scp-backup/Makefile b/sysutils/scp-backup/Makefile new file mode 100644 index 000000000..2cb6b262b --- /dev/null +++ b/sysutils/scp-backup/Makefile @@ -0,0 +1,7 @@ +PLUGIN_NAME= scp-backup +PLUGIN_VERSION= 0.1.0 +PLUGIN_COMMENT= Perform config backups using SCP. +PLUGIN_MAINTAINER= dharrigan@gmail.com +PLUGIN_DEVEL= yes + +.include "../../Mk/plugins.mk" diff --git a/sysutils/scp-backup/pkg-descr b/sysutils/scp-backup/pkg-descr new file mode 100644 index 000000000..e2c3d466a --- /dev/null +++ b/sysutils/scp-backup/pkg-descr @@ -0,0 +1 @@ +A simple plugin to perform config backups using SCP. diff --git a/sysutils/scp-backup/src/opnsense/mvc/app/controllers/OPNsense/ScpBackup/Api/GeneralController.php b/sysutils/scp-backup/src/opnsense/mvc/app/controllers/OPNsense/ScpBackup/Api/GeneralController.php new file mode 100644 index 000000000..e989fad11 --- /dev/null +++ b/sysutils/scp-backup/src/opnsense/mvc/app/controllers/OPNsense/ScpBackup/Api/GeneralController.php @@ -0,0 +1,113 @@ +request->isGet()) { + $mdlGeneral = $this->getModel(); + $publicKey = fopen("/conf/sshd/ssh_host_rsa_key.pub", "r"); + if($publicKey) { + $mdlGeneral->publickey = fread($publicKey, filesize("/conf/sshd/ssh_host_rsa_key.pub")); + fclose($publicKey); + } + $result['general'] = $mdlGeneral->getNodes(); + } + return $result; + } + + public function setAction() + { + $result = array("result"=>"failed"); + if ($this->request->isPost()) { + $mdlGeneral = $this->getModel(); + $backend = new Backend(); + $mdlCron = new Cron(); + $mdlGeneral->setNodes($this->request->getPost("general")); + $mdlGeneral->publickey = null; + $valMsgs = $mdlGeneral->performValidation(); + foreach ($valMsgs as $field => $msg) { + if (!array_key_exists("validation", $result)) { + $result["validations"] = array(); + } + $result["validations"][$msg->getField()] = $msg->getMessage(); + } + if($valMsgs->count() == 0) { + if($mdlGeneral->cronuuid->__toString() == "" and $mdlGeneral->enabled->__toString() == "1") { + // First Time Save + $cronUuid = $mdlCron->newDailyJob("ScpBackup", "scpbackup perform", "Backup config using SCP", "*", "1"); + if ($mdlCron->performValidation()->count() == 0) { + $mdlCron->serializeToConfig(); + // save data to config, do not validate because the current in memory model doesn't know about the cron item just created. + $mdlGeneral->cronuuid = $cronUuid; + $mdlGeneral->serializeToConfig($validateFullModel = false, $disable_validation = true); + Config::getInstance()->save(); + $backend->configdRun('template reload OPNsense/Cron'); + $result["result"] = "cron job [" . $cronUuid . "] created to backup config file daily using SCP."; + } + } elseif ($mdlGeneral->cronuuid->__toString() != "" and $mdlGeneral->enabled->__toString() == "0") { + // Removal of Cron Job and deactivation of the backup + $cronUuid = $mdlGeneral->cronuuid->__toString(); + if($mdlCron->jobs->job->del($cronUuid)) { + $mdlCron->serializeToConfig(); + $mdlGeneral->cronuuid = null; + $mdlGeneral->serializeToConfig($validateFullModel = false, $disable_validation = true); + Config::getInstance()->save(); + $backend->configdRun('template reload OPNsense/Cron'); + $result["result"] = "cron job [" . $cronUuid . "] to backup config file deleted."; + } else { + $result["result"] = "unable to delete cron job [". $cronUuid . "]"; + } + } else { + // Update the backup configuration + $mdlGeneral->serializeToConfig(); + Config::getInstance()->save(); + $result["result"] = "SCP backup configuration updated."; + } + } + } + return $result; + } + +} diff --git a/sysutils/scp-backup/src/opnsense/mvc/app/controllers/OPNsense/ScpBackup/GeneralController.php b/sysutils/scp-backup/src/opnsense/mvc/app/controllers/OPNsense/ScpBackup/GeneralController.php new file mode 100644 index 000000000..bde85aadf --- /dev/null +++ b/sysutils/scp-backup/src/opnsense/mvc/app/controllers/OPNsense/ScpBackup/GeneralController.php @@ -0,0 +1,42 @@ +view->pick('OPNsense/ScpBackup/general'); + $this->view->generalForm = $this->getForm("general"); + } +} + diff --git a/sysutils/scp-backup/src/opnsense/mvc/app/controllers/OPNsense/ScpBackup/forms/general.xml b/sysutils/scp-backup/src/opnsense/mvc/app/controllers/OPNsense/ScpBackup/forms/general.xml new file mode 100644 index 000000000..7dd9591b0 --- /dev/null +++ b/sysutils/scp-backup/src/opnsense/mvc/app/controllers/OPNsense/ScpBackup/forms/general.xml @@ -0,0 +1,39 @@ +
diff --git a/sysutils/scp-backup/src/opnsense/mvc/app/models/OPNsense/ScpBackup/ACL/ACL.xml b/sysutils/scp-backup/src/opnsense/mvc/app/models/OPNsense/ScpBackup/ACL/ACL.xml new file mode 100644 index 000000000..d31898bd9 --- /dev/null +++ b/sysutils/scp-backup/src/opnsense/mvc/app/models/OPNsense/ScpBackup/ACL/ACL.xml @@ -0,0 +1,9 @@ +