- Refactored lib/config.php to use classes
- Added comments to config.php to clarify use Signed-off-by: Diederik de Groot <ddegroot@talon.nl>
This commit is contained in:
18
config.ini
18
config.ini
@@ -15,15 +15,15 @@ cert_priv = NULL
|
|||||||
cert_pub = NULL
|
cert_pub = NULL
|
||||||
hash = NULL
|
hash = NULL
|
||||||
|
|
||||||
[subdirs]
|
;[subdirs]
|
||||||
tftproot = tftpboot
|
;tftproot = tftpboot
|
||||||
firmware = firmware
|
;firmware = firmware
|
||||||
settings = settings
|
;settings = settings
|
||||||
wallpapers = wallpapers
|
;wallpapers = wallpapers
|
||||||
ringtones = ringtones
|
;ringtones = ringtones
|
||||||
locales = locales
|
;locales = locales
|
||||||
countries = countries
|
;countries = countries
|
||||||
languages = languages
|
;languages = languages
|
||||||
|
|
||||||
[settings]
|
[settings]
|
||||||
sshUserId = cisco
|
sshUserId = cisco
|
||||||
|
272
lib/config.php
272
lib/config.php
@@ -1,102 +1,192 @@
|
|||||||
<?php
|
<?php
|
||||||
include_once("logger.php");
|
include_once("logger.php");
|
||||||
include_once("utils.php");
|
include_once("utils.php");
|
||||||
//$base_path = !empty($_SERVER['DOCUMENT_ROOT']) ? realpath($_SERVER['DOCUMENT_ROOT'] . "/.."): realpath(getcwd() . "/..");
|
|
||||||
$base_path = realpath(__DIR__ . DIRECTORY_SEPARATOR . "..");
|
$base_path = realpath(__DIR__ . DIRECTORY_SEPARATOR . "..");
|
||||||
|
|
||||||
$base_config = Array(
|
class ConfigParser {
|
||||||
'main' => Array(
|
private $config = Array();
|
||||||
'debug' => true,
|
private $defaults = '
|
||||||
'default_language' => 'English_United_States',
|
[main]
|
||||||
'log_type' => "NULL",
|
debug = TRUE
|
||||||
'log_level' => 'LOG_EMERG'
|
cache_filename = /tmp/provision_sccp_resolver.cache
|
||||||
),
|
default_language = English_United_States
|
||||||
'subdirs' => Array(
|
log_type = SYSLOG
|
||||||
'tftproot' => 'tftpboot',
|
log_level = LOG_INFO
|
||||||
'firmware' => 'firmware',
|
;log_filename = provision.log
|
||||||
'settings' => 'settings',
|
auto_generate_settings = FALSE
|
||||||
'wallpapers' => 'wallpapers',
|
auto_sign = FALSE
|
||||||
'ringtones' => 'ringtones',
|
auto_encrypt = FALSE
|
||||||
'locales' => 'locales',
|
|
||||||
'countries' => 'countries',
|
|
||||||
'languages' => 'languages'
|
|
||||||
),
|
|
||||||
'security' => Array(
|
|
||||||
'cert_ca' => NULL,
|
|
||||||
'cert_priv' => NULL,
|
|
||||||
'cert_pub' => NULL,
|
|
||||||
'hash' => NULL
|
|
||||||
),
|
|
||||||
'settings' => Array(
|
|
||||||
'sshUserId' => 'cisco',
|
|
||||||
'sshPassword' => 'cisco',
|
|
||||||
'ipAddress' => '0',
|
|
||||||
'datetime' => Array(
|
|
||||||
'template' => 'M/D/YA',
|
|
||||||
'timezone' => 'W. Europe Standard/Daylight Time',
|
|
||||||
'ipaddress' => '10.x.x.x',
|
|
||||||
'mode' => 'Unicast'
|
|
||||||
),
|
|
||||||
'members' => Array(
|
|
||||||
'myhost' => Array(
|
|
||||||
'hostname' => 'myhost.domain.com',
|
|
||||||
'ipv4' => '10.x.x.x',
|
|
||||||
'ipv6' => '2001:470::x:x',
|
|
||||||
'port' => '2000'
|
|
||||||
)
|
|
||||||
),
|
|
||||||
'locale' => Array(
|
|
||||||
'country' => 'United_States',
|
|
||||||
'language' => 'English_United_States',
|
|
||||||
'langcode' => 'en_US',
|
|
||||||
'charset' => 'utf-8'
|
|
||||||
),
|
|
||||||
'urls' => Array(
|
|
||||||
'security' => false,
|
|
||||||
'information' => NULL,
|
|
||||||
'authentication' => NULL,
|
|
||||||
'services' => NULL,
|
|
||||||
'direcory' => NULL,
|
|
||||||
'messages' => NULL,
|
|
||||||
'proxyserver' => NULL
|
|
||||||
)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
$tree_base = Array(
|
|
||||||
'settings' => array('path' => 'tftproot', "strip" => true),
|
|
||||||
'wallpapers' => array('path' => 'tftproot', "strip" => false),
|
|
||||||
'ringtones' => array('path' => 'tftproot', "strip" => true),
|
|
||||||
'locales' => array('path' => 'tftproot', "strip" => true),
|
|
||||||
'firmware' => array('path' => 'tftproot', "strip" => true),
|
|
||||||
'languages' => array('path' => 'locales', "strip" => false),
|
|
||||||
'countries' => array('path' => 'locales', "strip" => false),
|
|
||||||
'default_language' => array('path' => 'locales', "strip" => true),
|
|
||||||
);
|
|
||||||
|
|
||||||
# Merge config
|
[security]
|
||||||
//$ini_array = parse_ini_file("$base_path/config.ini", true, INI_SCANNER_TYPED);
|
cert_ca = NULL
|
||||||
$ini_array = parse_ini_file_multi("$base_path/config.ini", true, INI_SCANNER_TYPED);
|
cert_priv = NULL
|
||||||
if (!empty($ini_array)) {
|
cert_pub = NULL
|
||||||
$config = array_merge($base_config, $ini_array);
|
hash = NULL
|
||||||
}
|
|
||||||
|
|
||||||
# build new config['subdirs'] paths substituting bases from tree_base
|
[subdirs]
|
||||||
foreach ($tree_base as $key => $value) {
|
etc = ../etc
|
||||||
$tmp = $config;
|
tftproot = tftpboot
|
||||||
if (!empty($tmp['subdirs'][$key])) {
|
firmware = firmware
|
||||||
if (substr($tmp['subdirs'][$key], 0, 1) !== "/") {
|
settings = settings
|
||||||
if (is_array($tmp['subdirs'][$value['path']])) {
|
wallpapers = wallpapers
|
||||||
$path = $tmp['subdirs'][$value['path']]['path'].'/'.$tmp['subdirs'][$key];
|
ringtones = ringtones
|
||||||
} else {
|
locales = locales
|
||||||
$path = $tmp['subdirs'][$value['path']].'/'.$tmp['subdirs'][$key];
|
countries = countries
|
||||||
}
|
languages = languages
|
||||||
}
|
|
||||||
$config['subdirs'][$key] = array('path' => $path, 'strip' => $value['strip']);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
[settings]
|
||||||
|
sshUserId = cisco
|
||||||
|
sshPassword = cisco
|
||||||
|
ipAddress = ipv4|ipv6
|
||||||
|
datetime.template = M/D/YA
|
||||||
|
datetime.timezone = W. Europe Standard/Daylight Time
|
||||||
|
datetime.ipaddress = 10.x.x.x
|
||||||
|
datetime.mode = Unicast
|
||||||
|
members.myhost.hostname = myhost.domain.com
|
||||||
|
members.myhost.ipv4 = 10.x.x.x
|
||||||
|
members.myhost.ipv6 = 2001:470::x:x
|
||||||
|
members.myhost.port = 2000
|
||||||
|
;srts.
|
||||||
|
;common.
|
||||||
|
;vendor.
|
||||||
|
locale.country = United_States
|
||||||
|
locale.language = English_United_States
|
||||||
|
locale.langcode = en_US
|
||||||
|
locale.charset = utf-8
|
||||||
|
urls.security = FALSE
|
||||||
|
urls.information = NULL
|
||||||
|
urls.authentication = NULL
|
||||||
|
urls.services = NULL
|
||||||
|
urls.direcory = NULL
|
||||||
|
urls.messages = NULL
|
||||||
|
urls.proxyserver = NULL
|
||||||
|
;vpn.
|
||||||
|
;phoneservices.
|
||||||
|
';
|
||||||
|
|
||||||
|
function __construct($base_path, $config_file) {
|
||||||
|
# Merge defaults with ini file
|
||||||
|
$default_config = $this->parse_multi_ini_string($this->defaults,true,INI_SCANNER_TYPED);
|
||||||
|
$ini_config = $this->parse_multi_ini_file("$base_path/$config_file", true, INI_SCANNER_TYPED);
|
||||||
|
if (!empty($ini_config)) {
|
||||||
|
$config = array_merge($default_config, $ini_config);
|
||||||
|
}
|
||||||
$config['main']['base_path'] = $base_path;
|
$config['main']['base_path'] = $base_path;
|
||||||
$config['main']['tftproot'] = (!empty($config['main']['tftproot'])) ? $base_path . "tftpboot" : '/tftpboot';
|
$config['main']['tftproot'] = (!empty($config['main']['tftproot'])) ? $base_path . "tftpboot" : '/tftpboot';
|
||||||
|
$config['subdirs'] = $this->replaceSubdirTreeStructure($config['subdirs']);
|
||||||
|
$this->config = $config;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* replace config['subdirs'] paths using tree_structure
|
||||||
|
* method imported from old version (and rewritten)
|
||||||
|
* Note: Still not sure if we actually need to do all this
|
||||||
|
*/
|
||||||
|
private function replaceSubdirTreeStructure($tmpSubdirs) {
|
||||||
|
$tree_structure = Array(
|
||||||
|
'etc' => array('parent' => NULL, "strip" => true),
|
||||||
|
'tftproot' => array('parent' => NULL, "strip" => true),
|
||||||
|
'settings' => array('parent' => 'tftproot', "strip" => true),
|
||||||
|
'wallpapers' => array('parent' => 'tftproot', "strip" => false),
|
||||||
|
'ringtones' => array('parent' => 'tftproot', "strip" => true),
|
||||||
|
'locales' => array('parent' => 'tftproot', "strip" => true),
|
||||||
|
'firmware' => array('parent' => 'tftproot', "strip" => true),
|
||||||
|
'languages' => array('parent' => 'locales', "strip" => false),
|
||||||
|
'countries' => array('parent' => 'locales', "strip" => false),
|
||||||
|
);
|
||||||
|
|
||||||
|
$subdirs = Array();
|
||||||
|
foreach ($tree_structure as $key => $value) {
|
||||||
|
if (!empty($tmpSubdirs[$key])) {
|
||||||
|
if (substr($tmpSubdirs[$key], 0, 1) !== "/") {
|
||||||
|
if (!$value['parent']) {
|
||||||
|
$path = $tmpSubdirs[$key];
|
||||||
|
} else {
|
||||||
|
if (is_array($tmpSubdirs[$value['parent']])) {
|
||||||
|
$path = $tmpSubdirs[$value['parent']]['path'].'/'.$tmpSubdirs[$key];
|
||||||
|
} else {
|
||||||
|
$path = $tmpSubdirs[$value['parent']].'/'.$tmpSubdirs[$key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$subdirs[$key] = array('path' => $path, 'strip' => $value['strip']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $subdirs;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* config parser that understands multidimensional ini entries
|
||||||
|
* using "." as the dimension separator
|
||||||
|
* standin replacement for parse_ini_string
|
||||||
|
*/
|
||||||
|
private function parse_multi_ini_string($string, $process_sections = false, $scanner_mode = INI_SCANNER_NORMAL) {
|
||||||
|
$explode_str = '.';
|
||||||
|
$escape_char = "'";
|
||||||
|
// load ini file the normal way
|
||||||
|
$data = parse_ini_string($string, $process_sections, $scanner_mode);
|
||||||
|
if (!$process_sections) {
|
||||||
|
$data = array($data);
|
||||||
|
}
|
||||||
|
foreach ($data as $section_key => $section) {
|
||||||
|
// loop inside the section
|
||||||
|
foreach ($section as $key => $value) {
|
||||||
|
if (strpos($key, $explode_str)) {
|
||||||
|
if (substr($key, 0, 1) !== $escape_char) {
|
||||||
|
// key has a dot. Explode on it, then parse each subkeys
|
||||||
|
// and set value at the right place thanks to references
|
||||||
|
$sub_keys = explode($explode_str, $key);
|
||||||
|
$subs =& $data[$section_key];
|
||||||
|
foreach ($sub_keys as $sub_key) {
|
||||||
|
if (!isset($subs[$sub_key])) {
|
||||||
|
$subs[$sub_key] = [];
|
||||||
|
}
|
||||||
|
$subs =& $subs[$sub_key];
|
||||||
|
}
|
||||||
|
// set the value at the right place
|
||||||
|
$subs = $value;
|
||||||
|
// unset the dotted key, we don't need it anymore
|
||||||
|
unset($data[$section_key][$key]);
|
||||||
|
}
|
||||||
|
// we have escaped the key, so we keep dots as they are
|
||||||
|
else {
|
||||||
|
$new_key = trim($key, $escape_char);
|
||||||
|
$data[$section_key][$new_key] = $value;
|
||||||
|
unset($data[$section_key][$key]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $data;
|
||||||
|
if (!$process_sections) {
|
||||||
|
$data = $data[0];
|
||||||
|
}
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* config file parser that understands multidimensional ini entries
|
||||||
|
* using "." as the dimension separator
|
||||||
|
* standin replacement for parse_ini_file
|
||||||
|
*/
|
||||||
|
private function parse_multi_ini_file($file, $process_sections = false, $scanner_mode = INI_SCANNER_NORMAL) {
|
||||||
|
$string = file_get_contents($file);
|
||||||
|
return $this->parse_multi_ini_string($string, $process_sections, $scanner_mode);
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getConfiguration() {
|
||||||
|
return $this->config;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function printConfiguration() {
|
||||||
|
print_r($this->config);
|
||||||
|
//var_dump($this->config);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$configParser = new ConfigParser($base_path, "config.ini");
|
||||||
|
$config = $configParser->getConfiguration();
|
||||||
|
|
||||||
switch($config['main']['log_type']) {
|
switch($config['main']['log_type']) {
|
||||||
case 'SYSLOG':
|
case 'SYSLOG':
|
||||||
@@ -122,8 +212,6 @@ $print_debug = (!empty($config['main']['debug'])) ? $config['main']['debug'] : '
|
|||||||
$print_debug = ($print_debug == 1) ? 'on' : $print_debug;
|
$print_debug = ($print_debug == 1) ? 'on' : $print_debug;
|
||||||
|
|
||||||
if(defined('STDIN') ) {
|
if(defined('STDIN') ) {
|
||||||
print_r($config);
|
$configParser->printConfiguration();
|
||||||
//var_dump($config);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
@@ -8,49 +8,6 @@ function utf8_urldecode($str) {
|
|||||||
return html_entity_decode($str,null,'UTF-8');;
|
return html_entity_decode($str,null,'UTF-8');;
|
||||||
}
|
}
|
||||||
|
|
||||||
function parse_ini_file_multi($file, $process_sections = false, $scanner_mode = INI_SCANNER_NORMAL) {
|
|
||||||
$explode_str = '.';
|
|
||||||
$escape_char = "'";
|
|
||||||
// load ini file the normal way
|
|
||||||
$data = parse_ini_file($file, $process_sections, $scanner_mode);
|
|
||||||
if (!$process_sections) {
|
|
||||||
$data = array($data);
|
|
||||||
}
|
|
||||||
foreach ($data as $section_key => $section) {
|
|
||||||
// loop inside the section
|
|
||||||
foreach ($section as $key => $value) {
|
|
||||||
if (strpos($key, $explode_str)) {
|
|
||||||
if (substr($key, 0, 1) !== $escape_char) {
|
|
||||||
// key has a dot. Explode on it, then parse each subkeys
|
|
||||||
// and set value at the right place thanks to references
|
|
||||||
$sub_keys = explode($explode_str, $key);
|
|
||||||
$subs =& $data[$section_key];
|
|
||||||
foreach ($sub_keys as $sub_key) {
|
|
||||||
if (!isset($subs[$sub_key])) {
|
|
||||||
$subs[$sub_key] = [];
|
|
||||||
}
|
|
||||||
$subs =& $subs[$sub_key];
|
|
||||||
}
|
|
||||||
// set the value at the right place
|
|
||||||
$subs = $value;
|
|
||||||
// unset the dotted key, we don't need it anymore
|
|
||||||
unset($data[$section_key][$key]);
|
|
||||||
}
|
|
||||||
// we have escaped the key, so we keep dots as they are
|
|
||||||
else {
|
|
||||||
$new_key = trim($key, $escape_char);
|
|
||||||
$data[$section_key][$new_key] = $value;
|
|
||||||
unset($data[$section_key][$key]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!$process_sections) {
|
|
||||||
$data = $data[0];
|
|
||||||
}
|
|
||||||
return $data;
|
|
||||||
}
|
|
||||||
|
|
||||||
function log_debug($message) {
|
function log_debug($message) {
|
||||||
global $logger;
|
global $logger;
|
||||||
$logger->log('LOG_DEBUG', $message);
|
$logger->log('LOG_DEBUG', $message);
|
||||||
|
Reference in New Issue
Block a user