system: first part of SCP backup merge

This commit is contained in:
Franco Fichtner 2018-04-03 22:06:07 +00:00
parent 00c7507be0
commit 2c8827bf35
5 changed files with 220 additions and 3 deletions

3
plist
View File

@ -415,6 +415,7 @@
/usr/local/opnsense/mvc/app/library/OPNsense/Backup/GDrive.php
/usr/local/opnsense/mvc/app/library/OPNsense/Backup/IBackupProvider.php
/usr/local/opnsense/mvc/app/library/OPNsense/Backup/Nextcloud.php
/usr/local/opnsense/mvc/app/library/OPNsense/Backup/Scp.php
/usr/local/opnsense/mvc/app/library/OPNsense/Base/Filters/QueryFilter.php
/usr/local/opnsense/mvc/app/library/OPNsense/Base/UIModelGrid.php
/usr/local/opnsense/mvc/app/library/OPNsense/Base/ViewTranslator.php
@ -434,6 +435,8 @@
/usr/local/opnsense/mvc/app/library/OPNsense/Firewall/Util.php
/usr/local/opnsense/mvc/app/models/OPNsense/Backup/NextcloudSettings.php
/usr/local/opnsense/mvc/app/models/OPNsense/Backup/NextcloudSettings.xml
/usr/local/opnsense/mvc/app/models/OPNsense/Backup/ScpSettings.php
/usr/local/opnsense/mvc/app/models/OPNsense/Backup/ScpSettings.xml
/usr/local/opnsense/mvc/app/models/OPNsense/Base/BaseModel.php
/usr/local/opnsense/mvc/app/models/OPNsense/Base/BaseModelMigration.php
/usr/local/opnsense/mvc/app/models/OPNsense/Base/Constraints/AllOrNoneConstraint.php

View File

@ -0,0 +1,130 @@
<?php
/*
* Copyright (C) 2018 David Harrigan
* Copyright (C) 2018 Deciso B.V.
* Copyright (C) 2018 Fabian Franz
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
* OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
namespace OPNsense\Backup;
use OPNsense\Core\Config;
/**
* Class SCP backup
* @package OPNsense\Backup
*/
class Scp extends Base implements IBackupProvider
{
/**
* get required (user interface) fields for backup connector
* @return array configuration fields, types and description
*/
public function getConfigurationFields()
{
$fields = array(
array(
'name' => 'enabled',
'type' => 'checkbox',
'label' => gettext('Enable'),
),
array(
'name' => 'hostname',
'type' => 'text',
'label' => gettext('Hostname'),
'help' => gettext('Set the remote hostname.'),
),
array(
'name' => 'port',
'type' => 'text',
'label' => gettext('Port'),
'help' => gettext('Set the remote port.'),
),
array(
'name' => 'username',
'type' => 'text',
'label' => gettext('Remote Username'),
'help' => gettext('Set the remote username.'),
),
array(
'name' => 'remotedirectory',
'type' => 'text',
'label' => gettext('Remote Directory'),
'help' => gettext('Set the remote directory to backup the config file to.'),
)
);
$mdl = new ScpSettings();
foreach ($fields as &$field) {
$field['value'] = (string)$mdl->getNodeByReference($field['name']);
}
return $fields;
}
/**
* backup provider name
* @return string user friendly name
*/
public function getName()
{
return gettext('Secure Copy');
}
/**
* validate and set configuration
* @param array $conf configuration array
* @return array of validation errors when not saved
*/
public function setConfiguration($conf)
{
$mdl = new ScpSettings();
$this->setModelProperties($mdl, $conf);
$validation_messages = $this->validateModel($mdl);
if (empty($validation_messages)) {
$mdl->serializeToConfig();
Config::getInstance()->save();
}
return $validation_messages;
}
/**
* @return array filelist
*/
public function backup()
{
// not configured / issue, return empty list
return array();
}
/**
* Is this provider enabled
* @return boolean enabled status
*/
public function isEnabled()
{
$mdl = new ScpSettings();
return (string)$mdl->enabled === "1";
}
}

View File

@ -1,9 +1,7 @@
<model>
<mount>//system/backup/nextcloud</mount>
<version>1.0.0</version>
<description>
OPNsense Nextcloud Backup Settings
</description>
<description>OPNsense Nextcloud Backup Settings</description>
<items>
<enabled type="BooleanField">
<default>0</default>

View File

@ -0,0 +1,39 @@
<?php
/*
* Copyright (C) 2018 David Harrigan
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
* OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
namespace OPNsense\Backup;
use OPNsense\Base\BaseModel;
/**
* Class SCP Backup Settings
* @package Backup
*/
class ScpSettings extends BaseModel
{
}

View File

@ -0,0 +1,47 @@
<model>
<mount>//system/backup/scp</mount>
<description>Backup the config using SCP.</description>
<version>0.1.0</version>
<items>
<enabled type="BooleanField">
<default>0</default>
<Required>Y</Required>
</enabled>
<hostname type="TextField">
<mask>/\S*/</mask>
<ValidationMessage>Please provide a hostname.</ValidationMessage>
<Constraints>
<check001>
<type>DependConstraint</type>
<addFields>
<field1>enabled</field1>
</addFields>
</check001>
</Constraints>
</hostname>
<port type="IntegerField">
<default>22</default>
<Required>Y</Required>
<MinimumValue>1</MinimumValue>
<MaximumValue>65535</MaximumValue>
<ValidationMessage>Please provide a valid port number between 1 and 65535. Port 22 is the default.</ValidationMessage>
</port>
<username type="TextField">
<mask>/\S*/</mask>
<ValidationMessage>Please provide a username.</ValidationMessage>
<Constraints>
<check001>
<type>DependConstraint</type>
<addFields>
<field1>enabled</field1>
</addFields>
</check001>
</Constraints>
</username>
<remotedirectory type="TextField">
<default>OPNsense-Backup</default>
<Required>Y</Required>
<ValidationMessage>Please provide a remote directory.</ValidationMessage>
</remotedirectory>
</items>
</model>