added certificates to export
This commit is contained in:
		
							parent
							
								
									00c5a014b4
								
							
						
					
					
						commit
						e8d421ae04
					
				| 
						 | 
					@ -2698,6 +2698,7 @@ class LAMCfgMain {
 | 
				
			||||||
	 * Imports configuration data.
 | 
						 * Imports configuration data.
 | 
				
			||||||
	 *
 | 
						 *
 | 
				
			||||||
	 * @param array $data config data
 | 
						 * @param array $data config data
 | 
				
			||||||
 | 
						 * @throws LAMException import error
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	public function importData($data) {
 | 
						public function importData($data) {
 | 
				
			||||||
		foreach ($data as $dataKey => $dataValue) {
 | 
							foreach ($data as $dataKey => $dataValue) {
 | 
				
			||||||
| 
						 | 
					@ -2712,6 +2713,51 @@ class LAMCfgMain {
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Returns the content of the server certificates file
 | 
				
			||||||
 | 
						 *
 | 
				
			||||||
 | 
						 * @return null|string certificates
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public function exportCertificates() {
 | 
				
			||||||
 | 
							$fileName = $this->getSSLCaCertPath();
 | 
				
			||||||
 | 
							if ($fileName === null) {
 | 
				
			||||||
 | 
								return null;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							$content = null;
 | 
				
			||||||
 | 
							$handle = @fopen($fileName, "r");
 | 
				
			||||||
 | 
							if ($handle) {
 | 
				
			||||||
 | 
								$content = fread($handle, 10000000);
 | 
				
			||||||
 | 
								fclose($handle);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return $content;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Imports the server certificates.
 | 
				
			||||||
 | 
						 *
 | 
				
			||||||
 | 
						 * @param null|string $certsContent certificates
 | 
				
			||||||
 | 
						 * @throws LAMException write to file failed
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public function importCertificates($certsContent) {
 | 
				
			||||||
 | 
							$fileName = $this->getSSLCaCertPath();
 | 
				
			||||||
 | 
							if (empty($certsContent)) {
 | 
				
			||||||
 | 
								if ($fileName !== null) {
 | 
				
			||||||
 | 
									unlink($fileName);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								return;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							$fileName = $this->getInternalSSLCaCertFileName();
 | 
				
			||||||
 | 
							$handle = @fopen($fileName, "wb");
 | 
				
			||||||
 | 
							if ($handle) {
 | 
				
			||||||
 | 
								fputs($handle, $certsContent);
 | 
				
			||||||
 | 
								fclose($handle);
 | 
				
			||||||
 | 
								@chmod($fileName, 0600);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
 | 
								throw new LAMException(printf(_('Unable to write file %s.'), $fileName));
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	* Reloads preferences from config file config.cfg
 | 
						* Reloads preferences from config file config.cfg
 | 
				
			||||||
	*
 | 
						*
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -42,21 +42,52 @@ class ConfigDataExporter {
 | 
				
			||||||
	 * Exports LAM's configuration data in JSON format.
 | 
						 * Exports LAM's configuration data in JSON format.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	public function exportAsJson() {
 | 
						public function exportAsJson() {
 | 
				
			||||||
 | 
							$mainCfg = $this->_getMainConfiguration();
 | 
				
			||||||
		$jsonData = array();
 | 
							$jsonData = array();
 | 
				
			||||||
		$jsonData['mainConfig'] = $this->_getMainConfigData();
 | 
							$jsonData['mainConfig'] = $this->_getMainConfigData($mainCfg);
 | 
				
			||||||
 | 
							$jsonData['certificates'] = $this->_getCertificates($mainCfg);
 | 
				
			||||||
 | 
							/**
 | 
				
			||||||
 | 
							 * TODO
 | 
				
			||||||
 | 
							 *
 | 
				
			||||||
 | 
							 * webauthn
 | 
				
			||||||
 | 
							 * server profiles
 | 
				
			||||||
 | 
							 * server profile job database
 | 
				
			||||||
 | 
							 * account profiles
 | 
				
			||||||
 | 
							 * PDF profiles
 | 
				
			||||||
 | 
							 * self service profiles
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
		return json_encode($jsonData);
 | 
							return json_encode($jsonData);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Returns the main configuration.
 | 
				
			||||||
 | 
						 *
 | 
				
			||||||
 | 
						 * @return LAMCfgMain main config
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public function _getMainConfiguration() {
 | 
				
			||||||
 | 
							return new LAMCfgMain();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * Internal function to read master configuration.
 | 
						 * Internal function to read master configuration.
 | 
				
			||||||
	 *
 | 
						 *
 | 
				
			||||||
 | 
						 * @param LAMCfgMain $mainCfg main config
 | 
				
			||||||
	 * @return array data
 | 
						 * @return array data
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	public function _getMainConfigData() {
 | 
						public function _getMainConfigData($mainCfg) {
 | 
				
			||||||
		$mainCfg = new LAMCfgMain();
 | 
					 | 
				
			||||||
		return $mainCfg->exportData();
 | 
							return $mainCfg->exportData();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Returns the certificate file content.
 | 
				
			||||||
 | 
						 *
 | 
				
			||||||
 | 
						 * @param LAMCfgMain $mainCfg main config
 | 
				
			||||||
 | 
						 * @return array data
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public function _getCertificates($mainCfg) {
 | 
				
			||||||
 | 
							return $mainCfg->exportCertificates();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
| 
						 | 
					@ -82,6 +113,9 @@ class ConfigDataImporter {
 | 
				
			||||||
				case 'mainConfig':
 | 
									case 'mainConfig':
 | 
				
			||||||
					$steps[] = new ImporterStep(_('General settings'), 'mainConfig', $value);
 | 
										$steps[] = new ImporterStep(_('General settings'), 'mainConfig', $value);
 | 
				
			||||||
					break;
 | 
										break;
 | 
				
			||||||
 | 
									case 'certificates':
 | 
				
			||||||
 | 
										$steps[] = new ImporterStep(_('SSL certificates'), 'certificates', $value);
 | 
				
			||||||
 | 
										break;
 | 
				
			||||||
				default:
 | 
									default:
 | 
				
			||||||
					logNewMessage(LOG_WARNING, 'Unknown import type: ' . $key);
 | 
										logNewMessage(LOG_WARNING, 'Unknown import type: ' . $key);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
| 
						 | 
					@ -96,7 +130,7 @@ class ConfigDataImporter {
 | 
				
			||||||
	 * Runs the actual import.
 | 
						 * Runs the actual import.
 | 
				
			||||||
	 *
 | 
						 *
 | 
				
			||||||
	 * @param ImporterStep[] $steps import steps
 | 
						 * @param ImporterStep[] $steps import steps
 | 
				
			||||||
	 * @throws LAMException if error occured
 | 
						 * @throws LAMException if error occurred
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	public function runImport($steps) {
 | 
						public function runImport($steps) {
 | 
				
			||||||
		foreach ($steps as $step) {
 | 
							foreach ($steps as $step) {
 | 
				
			||||||
| 
						 | 
					@ -106,9 +140,10 @@ class ConfigDataImporter {
 | 
				
			||||||
			$key = $step->getKey();
 | 
								$key = $step->getKey();
 | 
				
			||||||
			switch ($key) {
 | 
								switch ($key) {
 | 
				
			||||||
				case 'mainConfig':
 | 
									case 'mainConfig':
 | 
				
			||||||
					$cfgMain = new LAMCfgMain();
 | 
										$this->importMainConfig($step->getValue());
 | 
				
			||||||
					$cfgMain->importData($step->getValue());
 | 
										break;
 | 
				
			||||||
					$cfgMain->save();
 | 
									case 'certificates':
 | 
				
			||||||
 | 
										$this->importCertificates($step->getValue());
 | 
				
			||||||
					break;
 | 
										break;
 | 
				
			||||||
				default:
 | 
									default:
 | 
				
			||||||
					logNewMessage(LOG_WARNING, 'Unknown import type: ' . $key);
 | 
										logNewMessage(LOG_WARNING, 'Unknown import type: ' . $key);
 | 
				
			||||||
| 
						 | 
					@ -116,6 +151,29 @@ class ConfigDataImporter {
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Imports the main configuration.
 | 
				
			||||||
 | 
						 *
 | 
				
			||||||
 | 
						 * @param array $data main config data
 | 
				
			||||||
 | 
						 * @throws LAMException error during import
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						private function importMainConfig($data) {
 | 
				
			||||||
 | 
							$cfgMain = new LAMCfgMain();
 | 
				
			||||||
 | 
							$cfgMain->importData($data);
 | 
				
			||||||
 | 
							$cfgMain->save();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Imports the SSL certificates.
 | 
				
			||||||
 | 
						 *
 | 
				
			||||||
 | 
						 * @param null|string $data file content
 | 
				
			||||||
 | 
						 * @throws LAMException error during import
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						private function importCertificates($data) {
 | 
				
			||||||
 | 
							$cfgMain = new LAMCfgMain();
 | 
				
			||||||
 | 
							$cfgMain->importCertificates($data);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,7 @@
 | 
				
			||||||
<?php
 | 
					<?php
 | 
				
			||||||
namespace LAM\CONFIG;
 | 
					namespace LAM\CONFIG;
 | 
				
			||||||
use htmlButton;
 | 
					use htmlButton;
 | 
				
			||||||
 | 
					use htmlGroup;
 | 
				
			||||||
use htmlInputFileUpload;
 | 
					use htmlInputFileUpload;
 | 
				
			||||||
use htmlLink;
 | 
					use htmlLink;
 | 
				
			||||||
use htmlOutputText;
 | 
					use htmlOutputText;
 | 
				
			||||||
| 
						 | 
					@ -222,8 +223,10 @@ printHeaderContents(_("Import and export configuration"), '../..');
 | 
				
			||||||
            foreach ($importSteps as $importStep) {
 | 
					            foreach ($importSteps as $importStep) {
 | 
				
			||||||
                $content->add(new htmlResponsiveInputCheckbox('step_' . $importStep->getKey(), true, $importStep->getLabel()), 12);
 | 
					                $content->add(new htmlResponsiveInputCheckbox('step_' . $importStep->getKey(), true, $importStep->getLabel()), 12);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
	        $content->add(new htmlButton('importConfigConfirm', _('Import')), 12);
 | 
					            $buttonGroup = new htmlGroup();
 | 
				
			||||||
	        $content->add(new htmlButton('importCancel', _('Cancel')), 12);
 | 
						        $buttonGroup->addElement(new htmlButton('importConfigConfirm', _('Import')));
 | 
				
			||||||
 | 
						        $buttonGroup->addElement(new htmlButton('importCancel', _('Cancel')));
 | 
				
			||||||
 | 
						        $content->add($buttonGroup, 12);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        elseif (isset($_POST['importConfigConfirm'])) {
 | 
					        elseif (isset($_POST['importConfigConfirm'])) {
 | 
				
			||||||
			$handle = fopen($_SESSION['configImportFile'], "r");
 | 
								$handle = fopen($_SESSION['configImportFile'], "r");
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -37,12 +37,16 @@ class ConfigDataExporterTest extends TestCase {
 | 
				
			||||||
			'confMainKey2' => 4,
 | 
								'confMainKey2' => 4,
 | 
				
			||||||
			'confMainKey3' => '',
 | 
								'confMainKey3' => '',
 | 
				
			||||||
		);
 | 
							);
 | 
				
			||||||
		$expectedJson = json_encode(array('mainConfig' => $mainData));
 | 
							$expectedJson = json_encode(array(
 | 
				
			||||||
 | 
								'mainConfig' => $mainData,
 | 
				
			||||||
 | 
								'certificates' => 'certs'
 | 
				
			||||||
 | 
							));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		$exporter = $this->getMockBuilder('\LAM\PERSISTENCE\ConfigDataExporter')
 | 
							$exporter = $this->getMockBuilder('\LAM\PERSISTENCE\ConfigDataExporter')
 | 
				
			||||||
			->setMethods(array('_getMainConfigData'))
 | 
								->setMethods(array('_getMainConfigData', '_getCertificates'))
 | 
				
			||||||
			->getMock();
 | 
								->getMock();
 | 
				
			||||||
		$exporter->method('_getMainConfigData')->willReturn($mainData);
 | 
							$exporter->method('_getMainConfigData')->willReturn($mainData);
 | 
				
			||||||
 | 
							$exporter->method('_getCertificates')->willReturn('certs');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		$json = $exporter->exportAsJson();
 | 
							$json = $exporter->exportAsJson();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue