store self service profiles as JSON

This commit is contained in:
Roland Gruber 2020-06-01 10:52:55 +02:00
parent aa43b4721b
commit f091b653b8
2 changed files with 53 additions and 3 deletions

View File

@ -6,6 +6,7 @@ use LAM\PDF\PDFStructureWriter;
use LAMCfgMain;
use LAMConfig;
use LAMException;
use selfServiceProfile;
use function LAM\PDF\getAvailableLogos;
use function LAM\PDF\getPDFStructures;
use function LAM\PDF\getPdfTemplateLogoBinary;
@ -74,10 +75,10 @@ class ConfigDataExporter {
$jsonData['accountProfileTemplates'] = $this->_getAccountProfileTemplates();
$jsonData['pdfProfiles'] = $this->_getPdfProfiles($serverProfiles);
$jsonData['pdfProfileTemplates'] = $this->_getPdfProfileTemplates();
$jsonData['selfServiceProfiles'] = $this->_getSelfServiceProfiles();
/**
* TODO
*
* self service profiles
* webauthn
* cron job runs
*/
@ -218,6 +219,26 @@ class ConfigDataExporter {
return $data;
}
/**
* Returns the content of the self service profiles.
*
* @return array data
*/
public function _getSelfServiceProfiles() {
$data = array();
$profileTypes = getSelfServiceProfiles();
foreach ($profileTypes as $profileType => $profileNames) {
foreach ($profileNames as $profileName) {
$profile = loadSelfServiceProfile($profileName, $profileType);
if ($profile === false) {
continue;
}
$data[$profileType][$profileName] = $profile->export();
}
}
return $data;
}
}
/**
@ -273,6 +294,9 @@ class ConfigDataImporter {
case 'pdfProfileTemplates':
$steps[] = new ImporterStep(_('PDF structures') . ' - ' . _('Global templates'), 'pdfProfileTemplates', $value);
break;
case 'selfServiceProfiles':
$steps[] = new ImporterStep(_('Self service profiles'), 'selfServiceProfiles', $value);
break;
default:
logNewMessage(LOG_WARNING, 'Unknown import type: ' . $key);
}
@ -317,6 +341,9 @@ class ConfigDataImporter {
case 'pdfProfileTemplates':
$this->importPdfProfileTemplates($step);
break;
case 'selfServiceProfiles':
$this->importSelfServiceProfiles($step);
break;
default:
logNewMessage(LOG_WARNING, 'Unknown import type: ' . $key);
}
@ -511,6 +538,29 @@ class ConfigDataImporter {
}
}
/**
* Imports the self service profiles.
*
* @param ImporterStep $step importer step
* @throws LAMException error saving profiles
*/
private function importSelfServiceProfiles($step) {
$failedNames = array();
$data = $step->getValue();
foreach ($data as $typeId => $profileData) {
foreach ($profileData as $profileName => $currentProfileData) {
$profile = selfServiceProfile::import($currentProfileData);
$result = saveSelfServiceProfile($profileName, $typeId, $profile);
if (!$result) {
$failedNames[] = $profileName;
}
}
}
if (!empty($failedNames)) {
throw new LAMException(_('Unable to save profile!'), implode(', ', $failedNames));
}
}
}
/**

View File

@ -170,7 +170,7 @@ function checkSelfServiceOptions($scope, $fields, $attributes, $passwordChangeOn
/**
* Returns a list of all available self service profiles (without .conf)
*
* @return array profile names (array(<account type> => array(<profile1>, <profile2>, ...)))
* @return array profile names (array('account type' => array('profile1', 'profile2')))
*/
function getSelfServiceProfiles() {
$types = LAM\TYPES\getTypes();
@ -201,7 +201,7 @@ function getSelfServiceProfiles() {
*
* @param string $name profile name
* @param string $scope account type
* @return selfServiceProfile true if file was readable
* @return false|selfServiceProfile profile or false if file was not readable
*/
function loadSelfServiceProfile($name, $scope) {
if (!preg_match("/^[0-9a-z _-]+$/i", $name) || !preg_match("/^[0-9a-z _-]+$/i", $scope)) {