export server profiles
This commit is contained in:
parent
9936c834db
commit
24a6e14251
|
@ -649,6 +649,58 @@ class LAMConfig {
|
|||
$this->reload();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the server profile data.
|
||||
*
|
||||
* @return array data
|
||||
*/
|
||||
public function exportData() {
|
||||
$data = array();
|
||||
$settingsToIgnore = array('modules', 'types', 'tools', 'jobs');
|
||||
foreach ($this->settings as $setting) {
|
||||
if (in_array($setting, $settingsToIgnore)) {
|
||||
continue;
|
||||
}
|
||||
$data[$setting] = $this->$setting;
|
||||
}
|
||||
$data['typeSettings'] = $this->typeSettings;
|
||||
$data['moduleSettings'] = $this->moduleSettings;
|
||||
$data['toolSettings'] = $this->toolSettings;
|
||||
$data['jobSettings'] = $this->jobSettings;
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Imports server profile data.
|
||||
*
|
||||
* @param array $data config data
|
||||
* @throws LAMException import error
|
||||
*/
|
||||
public function importData($data) {
|
||||
$settingsToIgnore = array('modules', 'types', 'tools', 'jobs');
|
||||
foreach ($data as $dataKey => $dataValue) {
|
||||
if (in_array($dataKey, $settingsToIgnore)) {
|
||||
continue;
|
||||
}
|
||||
if (!in_array($dataKey, $this->settings)) {
|
||||
logNewMessage(LOG_WARNING, 'Ignored setting during import: ' . $dataKey);
|
||||
continue;
|
||||
}
|
||||
if (!(($dataValue === null) || is_array($dataValue) || is_string($dataValue) || is_int($dataValue) || is_bool($dataValue))) {
|
||||
throw new LAMException('Invalid import data type for ' . htmlspecialchars($dataKey) . ': ' . gettype($dataValue));
|
||||
}
|
||||
$this->$dataKey = $dataValue;
|
||||
}
|
||||
$typeSettingsData = !empty($data['typeSettings']) && is_array($data['typeSettings']) ? $data['typeSettings'] : array();
|
||||
$this->typeSettings = $typeSettingsData;
|
||||
$moduleSettingsData = !empty($data['moduleSettings']) && is_array($data['moduleSettings']) ? $data['moduleSettings'] : array();
|
||||
$this->moduleSettings = $moduleSettingsData;
|
||||
$toolSettingsData = !empty($data['toolSettings']) && is_array($data['toolSettings']) ? $data['toolSettings'] : array();
|
||||
$this->toolSettings = $toolSettingsData;
|
||||
$jobSettingsData = !empty($data['jobSettings']) && is_array($data['jobSettings']) ? $data['jobSettings'] : array();
|
||||
$this->jobSettings = $jobSettingsData;
|
||||
}
|
||||
|
||||
/**
|
||||
* Reloads preferences from config file
|
||||
*
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
<?php
|
||||
namespace LAM\PERSISTENCE;
|
||||
use LAMCfgMain;
|
||||
use LAMConfig;
|
||||
use LAMException;
|
||||
|
||||
/*
|
||||
|
@ -46,15 +47,16 @@ class ConfigDataExporter {
|
|||
$jsonData = array();
|
||||
$jsonData['mainConfig'] = $this->_getMainConfigData($mainCfg);
|
||||
$jsonData['certificates'] = $this->_getCertificates($mainCfg);
|
||||
$jsonData['serverProfiles'] = $this->_getServerProfiles();
|
||||
/**
|
||||
* TODO
|
||||
*
|
||||
* webauthn
|
||||
* server profiles
|
||||
* server profile job database
|
||||
* account profiles
|
||||
* PDF profiles
|
||||
* self service profiles
|
||||
* webauthn
|
||||
*/
|
||||
return json_encode($jsonData);
|
||||
}
|
||||
|
@ -88,6 +90,21 @@ class ConfigDataExporter {
|
|||
return $mainCfg->exportCertificates();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the content of the server profiles.
|
||||
*
|
||||
* @return array $data
|
||||
*/
|
||||
public function _getServerProfiles() {
|
||||
$data = array();
|
||||
$profileNames = getConfigProfiles();
|
||||
foreach ($profileNames as $profileName) {
|
||||
$serverProfile = new LAMConfig($profileName);
|
||||
$data[$profileName] = $serverProfile->exportData();
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -103,7 +120,7 @@ class ConfigDataImporter {
|
|||
* @throws LAMException if invalid format
|
||||
*/
|
||||
public function getPossibleImportSteps($json) {
|
||||
$data = json_decode($json);
|
||||
$data = json_decode($json, true);
|
||||
if ($data === null) {
|
||||
throw new LAMException(_('Unable to read import file.'));
|
||||
}
|
||||
|
@ -116,6 +133,13 @@ class ConfigDataImporter {
|
|||
case 'certificates':
|
||||
$steps[] = new ImporterStep(_('SSL certificates'), 'certificates', $value);
|
||||
break;
|
||||
case 'serverProfiles':
|
||||
$mainStep = new ImporterStep(_('Server profiles'), 'serverProfiles', $value);
|
||||
foreach ($value as $profileName => $profileData) {
|
||||
$mainStep->addSubStep(new ImporterStep($profileName, 'serverProfile_' . $profileName, $profileData));
|
||||
}
|
||||
$steps[] = $mainStep;
|
||||
break;
|
||||
default:
|
||||
logNewMessage(LOG_WARNING, 'Unknown import type: ' . $key);
|
||||
}
|
||||
|
@ -185,6 +209,7 @@ class ImporterStep {
|
|||
private $key;
|
||||
private $value;
|
||||
private $active = false;
|
||||
private $subSteps = array();
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
|
@ -196,7 +221,7 @@ class ImporterStep {
|
|||
public function __construct($label, $key, &$value) {
|
||||
$this->label = $label;
|
||||
$this->key = $key;
|
||||
$this->value = $value;
|
||||
$this->value = &$value;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -244,4 +269,22 @@ class ImporterStep {
|
|||
return $this->value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a sub-step.
|
||||
*
|
||||
* @param ImporterStep $subStep sub-step
|
||||
*/
|
||||
public function addSubStep($subStep) {
|
||||
$this->subSteps[] = $subStep;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the sub-steps.
|
||||
*
|
||||
* @return ImporterStep[] sub-steps
|
||||
*/
|
||||
public function getSubSteps() {
|
||||
return $this->subSteps;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -221,7 +221,21 @@ printHeaderContents(_("Import and export configuration"), '../..');
|
|||
elseif (isset($_POST['importConfig'])) {
|
||||
$content->add(new htmlOutputText(_('Import steps')), 12);
|
||||
foreach ($importSteps as $importStep) {
|
||||
$content->add(new htmlResponsiveInputCheckbox('step_' . $importStep->getKey(), true, $importStep->getLabel()), 12);
|
||||
$stepKey = 'step_' . $importStep->getKey();
|
||||
$stepCheckbox = new htmlResponsiveInputCheckbox($stepKey, true, $importStep->getLabel());
|
||||
$stepCheckbox->setLabelAfterCheckbox();
|
||||
$subStepIds = array();
|
||||
$content->add($stepCheckbox, 12);
|
||||
$content->addVerticalSpacer('0.3rem');
|
||||
foreach ($importStep->getSubSteps() as $subStep) {
|
||||
$subStepKey = 'step_' . $subStep->getKey();
|
||||
$subStepIds[] = $subStepKey;
|
||||
$subStepCheckbox = new htmlResponsiveInputCheckbox($subStepKey, true, ' - ' . $subStep->getLabel());
|
||||
$subStepCheckbox->setLabelAfterCheckbox();
|
||||
$content->add($subStepCheckbox, 12);
|
||||
}
|
||||
$stepCheckbox->setTableRowsToShow($subStepIds);
|
||||
$content->addVerticalSpacer('1rem');
|
||||
}
|
||||
$buttonGroup = new htmlGroup();
|
||||
$buttonGroup->addElement(new htmlButton('importConfigConfirm', _('Import')));
|
||||
|
|
|
@ -3,7 +3,7 @@ use PHPUnit\Framework\TestCase;
|
|||
/*
|
||||
|
||||
This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
|
||||
Copyright (C) 2016 - 2019 Roland Gruber
|
||||
Copyright (C) 2016 - 2020 Roland Gruber
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
@ -21,7 +21,7 @@ use PHPUnit\Framework\TestCase;
|
|||
|
||||
*/
|
||||
|
||||
include_once 'lam/tests/utils/configuration.inc';
|
||||
include_once __DIR__ . '/../utils/configuration.inc';
|
||||
|
||||
/**
|
||||
* LAMConfig test case.
|
||||
|
@ -858,6 +858,63 @@ class LAMConfigTest extends TestCase {
|
|||
$this->assertEquals($sizeTypeSettings, sizeof($this->lAMConfig->get_typeSettings()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the export.
|
||||
*/
|
||||
public function testExportData() {
|
||||
$this->lAMConfig->set_defaultLanguage('lang');
|
||||
$this->lAMConfig->set_ServerURL('myserver');
|
||||
$this->lAMConfig->set_typeSettings(array('typetest' => '1'));
|
||||
$this->lAMConfig->set_moduleSettings(array('modtest' => '1'));
|
||||
$this->lAMConfig->setToolSettings(array('tooltest' => '1'));
|
||||
$this->lAMConfig->setJobSettings(array('jobtest' => '1'));
|
||||
|
||||
$data = $this->lAMConfig->exportData();
|
||||
|
||||
$this->assertEquals('lang', $data['defaultLanguage']);
|
||||
$this->assertEquals('myserver', $data['ServerURL']);
|
||||
$this->assertEquals(array('typetest' => '1'), $data['typeSettings']);
|
||||
$this->assertEquals(array('modtest' => '1'), $data['moduleSettings']);
|
||||
$this->assertEquals(array('tooltest' => '1'), $data['toolSettings']);
|
||||
$this->assertEquals(array('jobtest' => '1'), $data['jobSettings']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the import.
|
||||
*/
|
||||
public function testImportData() {
|
||||
$importData = array();
|
||||
$importData['ServerURL'] = 'testserver';
|
||||
$importData['defaultLanguage'] = 'de_DE.utf8';
|
||||
$importData['typeSettings'] = array('typetest' => 'value');
|
||||
$importData['toolSettings'] = array('tooltest' => 'value');
|
||||
$importData['moduleSettings'] = array('modtest' => 'value');
|
||||
$importData['jobSettings'] = array('jobtest' => 'value');
|
||||
$importData['IGNORE_ME'] = 'ignore';
|
||||
|
||||
$this->lAMConfig->importData($importData);
|
||||
|
||||
$this->assertEquals('testserver', $this->lAMConfig->get_ServerURL());
|
||||
$this->assertEquals('de_DE.utf8', $this->lAMConfig->get_defaultLanguage());
|
||||
$this->assertEquals(array('typetest' => 'value'), $this->lAMConfig->get_typeSettings());
|
||||
$this->assertEquals(array('tooltest' => 'value'), $this->lAMConfig->getToolSettings());
|
||||
$this->assertEquals(array('modtest' => 'value'), $this->lAMConfig->get_moduleSettings());
|
||||
$this->assertEquals(array('jobtest' => 'value'), $this->lAMConfig->getJobSettings());
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the import with invalid data.
|
||||
*/
|
||||
public function testImportData_invalid() {
|
||||
$importData = array();
|
||||
$importData['ServerURL'] = 'testserver';
|
||||
$importData['typeSettings'] = array('typetest' => 'value');
|
||||
$importData['defaultLanguage'] = new LAMLanguage('de_de', 'UTF-8', 'DE');
|
||||
|
||||
$this->expectException(LAMException::class);
|
||||
$this->lAMConfig->importData($importData);
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves the config
|
||||
*/
|
||||
|
|
|
@ -37,16 +37,22 @@ class ConfigDataExporterTest extends TestCase {
|
|||
'confMainKey2' => 4,
|
||||
'confMainKey3' => '',
|
||||
);
|
||||
$profileData = array(
|
||||
'profile1' => array('ServerURL' => 'myserver'),
|
||||
'profile2' => array('ServerURL' => 'myserver2'),
|
||||
);
|
||||
$expectedJson = json_encode(array(
|
||||
'mainConfig' => $mainData,
|
||||
'certificates' => 'certs'
|
||||
'certificates' => 'certs',
|
||||
'serverProfiles' => $profileData,
|
||||
));
|
||||
|
||||
$exporter = $this->getMockBuilder('\LAM\PERSISTENCE\ConfigDataExporter')
|
||||
->setMethods(array('_getMainConfigData', '_getCertificates'))
|
||||
->setMethods(array('_getMainConfigData', '_getCertificates', '_getServerProfiles'))
|
||||
->getMock();
|
||||
$exporter->method('_getMainConfigData')->willReturn($mainData);
|
||||
$exporter->method('_getCertificates')->willReturn('certs');
|
||||
$exporter->method('_getServerProfiles')->willReturn($profileData);
|
||||
|
||||
$json = $exporter->exportAsJson();
|
||||
|
||||
|
|
Loading…
Reference in New Issue