diff options
Diffstat (limited to 'modules-available/sysconfig/inc')
6 files changed, 161 insertions, 155 deletions
diff --git a/modules-available/sysconfig/inc/configmodule.inc.php b/modules-available/sysconfig/inc/configmodule.inc.php index 9fc3db21..ca40094a 100644 --- a/modules-available/sysconfig/inc/configmodule.inc.php +++ b/modules-available/sysconfig/inc/configmodule.inc.php @@ -14,6 +14,7 @@ abstract class ConfigModule private $moduleId = 0; private $moduleArchive = false; private $moduleTitle = false; + private $moduleStatus = false; private $currentVersion = 0; protected $moduleData = false; @@ -28,6 +29,7 @@ abstract class ConfigModule if (self::$moduleTypes !== false) return; self::$moduleTypes = array(); + Module::isAvailable('sysconfig'); foreach (glob(dirname(__FILE__) . '/configmodule/*.inc.php', GLOB_NOSORT) as $file) { require_once $file; } @@ -58,14 +60,17 @@ abstract class ConfigModule */ public static function registerModule($id, $title, $description, $group, $unique, $sortOrder = 0) { - if (isset(self::$moduleTypes[$id])) + if (isset(self::$moduleTypes[$id])) { Util::traceError("Config Module $id already registered!"); + } $moduleClass = 'ConfigModule_' . $id; $wizardClass = $id . '_Start'; - if (!class_exists($moduleClass)) + if (!class_exists($moduleClass)) { Util::traceError("Class $moduleClass does not exist!"); - if (get_parent_class($moduleClass) !== 'ConfigModule') + } + if (!is_subclass_of($moduleClass, 'ConfigModule')) { Util::traceError("$moduleClass does not have ConfigModule as its parent!"); + } self::$moduleTypes[$id] = array( 'title' => $title, 'description' => $description, @@ -86,11 +91,28 @@ abstract class ConfigModule public static function getInstance($moduleType) { self::loadDb(); - if (!isset(self::$moduleTypes[$moduleType])) + if (!isset(self::$moduleTypes[$moduleType])) { + error_log('Unknown module type: ' . $moduleType); return false; + } return new self::$moduleTypes[$moduleType]['moduleClass']; } + public static function instanceFromDbRow($dbRow) + { + $instance = self::getInstance($dbRow['moduletype']); + $instance->currentVersion = $dbRow['version']; + $instance->moduleArchive = $dbRow['filepath']; + $instance->moduleData = json_decode($dbRow['contents'], true); + $instance->moduleId = $dbRow['moduleid']; + $instance->moduleTitle = $dbRow['title']; + $instance->moduleStatus = $dbRow['status']; + if ($instance->moduleVersion() > $instance->currentVersion) { + $instance->markFailed(); + } + return $instance; + } + /** * Get module instance from id. * @@ -99,19 +121,11 @@ abstract class ConfigModule */ public static function get($moduleId) { - $ret = Database::queryFirst("SELECT title, moduletype, filepath, contents, version FROM configtgz_module " + $ret = Database::queryFirst("SELECT moduleid, title, moduletype, filepath, contents, version, status FROM configtgz_module " . " WHERE moduleid = :moduleid LIMIT 1", array('moduleid' => $moduleId)); if ($ret === false) return false; - $instance = self::getInstance($ret['moduletype']); - if ($instance === false) - return false; - $instance->currentVersion = $ret['version']; - $instance->moduleArchive = $ret['filepath']; - $instance->moduleData = json_decode($ret['contents'], true); - $instance->moduleId = $moduleId; - $instance->moduleTitle = $ret['title']; - return $instance; + return self::instanceFromDbRow($ret); } /** @@ -123,23 +137,18 @@ abstract class ConfigModule public static function getAll($moduleType = false) { if ($moduleType === false) { - $ret = Database::simpleQuery("SELECT moduleid, title, moduletype, filepath, contents, version FROM configtgz_module"); + $ret = Database::simpleQuery("SELECT moduleid, title, moduletype, filepath, contents, version, status FROM configtgz_module"); } else { - $ret = Database::simpleQuery("SELECT moduleid, title, moduletype, filepath, contents, version FROM configtgz_module " + $ret = Database::simpleQuery("SELECT moduleid, title, moduletype, filepath, contents, version, status FROM configtgz_module " . " WHERE moduletype = :moduletype", array('moduletype' => $moduleType)); } if ($ret === false) return false; $list = array(); while ($row = $ret->fetch(PDO::FETCH_ASSOC)) { - $instance = self::getInstance($row['moduletype']); + $instance = self::instanceFromDbRow($row); if ($instance === false) - return false; - $instance->currentVersion = $row['version']; - $instance->moduleArchive = $row['filepath']; - $instance->moduleData = json_decode($row['contents'], true); - $instance->moduleId = $row['moduleid']; - $instance->moduleTitle = $row['title']; + continue; $list[] = $instance; } return $list; @@ -200,6 +209,16 @@ abstract class ConfigModule return CONFIG_TGZ_LIST_DIR . '/modules/' . $this->moduleType() . '_id-' . $this->moduleId . '__' . mt_rand() . '-' . time() . '.tgz'; } + + public function allowDownload() + { + return false; + } + + public function needRebuild() + { + return $this->moduleStatus !== 'OK' || $this->currentVersion < $this->moduleVersion(); + } /** * Get module id (in db) @@ -230,6 +249,11 @@ abstract class ConfigModule { return $this->moduleArchive; } + + public final function status() + { + return $this->moduleStatus; + } /** * Get the module type. diff --git a/modules-available/sysconfig/inc/configmodule/adauth.inc.php b/modules-available/sysconfig/inc/configmodule/adauth.inc.php index 180ac717..db06a4a4 100644 --- a/modules-available/sysconfig/inc/configmodule/adauth.inc.php +++ b/modules-available/sysconfig/inc/configmodule/adauth.inc.php @@ -1,5 +1,12 @@ <?php +class ConfigModule_AdAuth extends ConfigModuleBaseLdap +{ + + const MODID = 'AdAuth'; + +} + ConfigModule::registerModule( ConfigModule_AdAuth::MODID, // ID Dictionary::translateFileModule('sysconfig', 'config-module', 'adAuth_title'), // Title @@ -7,69 +14,3 @@ ConfigModule::registerModule( Dictionary::translateFileModule('sysconfig', 'config-module', 'group_authentication'), // Group true // Only one per config? ); - -class ConfigModule_AdAuth extends ConfigModule -{ - - const MODID = 'AdAuth'; - const VERSION = 1; - - private static $REQUIRED_FIELDS = array('server', 'searchbase', 'binddn'); - private static $OPTIONAL_FIELDS = array('bindpw', 'home', 'ssl', 'fingerprint', 'certificate', 'homeattr'); - - protected function generateInternal($tgz, $parent) - { - Trigger::ldadp($this->id(), $parent); - $config = $this->moduleData; - if (isset($config['certificate']) && !is_string($config['certificate'])) { - unset($config['certificate']); - } - if (preg_match('/^([^\:]+)\:(\d+)$/', $config['server'], $out)) { - $config['server'] = $out[1]; - $config['adport'] = $out[2]; - } else { - if (isset($config['certificate'])) { - $config['adport'] = 636; - } else { - $config['adport'] = 389; - } - } - $config['parentTask'] = $parent; - $config['failOnParentFail'] = false; - $config['proxyip'] = Property::getServerIp(); - $config['proxyport'] = 3100 + $this->id(); - $config['filename'] = $tgz; - $config['moduleid'] = $this->id(); - return Taskmanager::submit('CreateLdapConfig', $config); - } - - protected function moduleVersion() - { - return self::VERSION; - } - - protected function validateConfig() - { - // Check if required fields are filled - return Util::hasAllKeys($this->moduleData, self::$REQUIRED_FIELDS); - } - - public function setData($key, $value) - { - if (!in_array($key, self::$REQUIRED_FIELDS) && !in_array($key, self::$OPTIONAL_FIELDS)) - return false; - $this->moduleData[$key] = $value; - return true; - } - - // ############## Callbacks ############################# - - /** - * Server IP changed - rebuild all AD modules. - */ - public function event_serverIpChanged() - { - $this->generate(false); - } - -} diff --git a/modules-available/sysconfig/inc/configmodule/branding.inc.php b/modules-available/sysconfig/inc/configmodule/branding.inc.php index 4a9718d6..fd11dade 100644 --- a/modules-available/sysconfig/inc/configmodule/branding.inc.php +++ b/modules-available/sysconfig/inc/configmodule/branding.inc.php @@ -53,4 +53,9 @@ class ConfigModule_Branding extends ConfigModule return false; } + public function allowDownload() + { + return true; + } + } diff --git a/modules-available/sysconfig/inc/configmodule/customodule.inc.php b/modules-available/sysconfig/inc/configmodule/customodule.inc.php index 8d1b6bf0..336d794f 100644 --- a/modules-available/sysconfig/inc/configmodule/customodule.inc.php +++ b/modules-available/sysconfig/inc/configmodule/customodule.inc.php @@ -53,4 +53,9 @@ class ConfigModule_CustomModule extends ConfigModule return false; } + public function allowDownload() + { + return true; + } + } diff --git a/modules-available/sysconfig/inc/configmodule/ldapauth.inc.php b/modules-available/sysconfig/inc/configmodule/ldapauth.inc.php index ed1a47c3..1a706234 100644 --- a/modules-available/sysconfig/inc/configmodule/ldapauth.inc.php +++ b/modules-available/sysconfig/inc/configmodule/ldapauth.inc.php @@ -1,77 +1,23 @@ <?php -ConfigModule::registerModule( - ConfigModule_LdapAuth::MODID, // ID - Dictionary::translateFileModule('sysconfig', 'config-module', 'ldapAuth_title'), // Title - Dictionary::translateFileModule('sysconfig', 'config-module', 'ldapAuth_description'), // Description - Dictionary::translateFileModule('sysconfig', 'config-module', 'group_authentication'), // Group - true // Only one per config? -); - -class ConfigModule_LdapAuth extends ConfigModule +class ConfigModule_LdapAuth extends ConfigModuleBaseLdap { const MODID = 'LdapAuth'; - const VERSION = 1; - private static $REQUIRED_FIELDS = array('server', 'searchbase'); - private static $OPTIONAL_FIELDS = array('binddn', 'bindpw', 'home', 'ssl', 'fingerprint', 'certificate'); - - protected function generateInternal($tgz, $parent) + protected function preTaskmanagerHook(&$config) { - Trigger::ldadp($this->id(), $parent); - $config = $this->moduleData; - if (isset($config['certificate']) && !is_string($config['certificate'])) { - unset($config['certificate']); - } - if (preg_match('/^([^\:]+)\:(\d+)$/', $config['server'], $out)) { - $config['server'] = $out[1]; - $config['adport'] = $out[2]; // sic! - } else { - if (isset($config['certificate'])) { - $config['adport'] = 636; - } else { - $config['adport'] = 389; - } - } - $config['parentTask'] = $parent; - $config['failOnParentFail'] = false; - $config['proxyip'] = Property::getServerIp(); - $config['proxyport'] = 3100 + $this->id(); - $config['filename'] = $tgz; - $config['moduleid'] = $this->id(); + // Just set the flag so the taskmanager job knows we're dealing with a normal ldap server, + // not AD scheme $config['plainldap'] = true; - return Taskmanager::submit('CreateLdapConfig', $config); - } - - protected function moduleVersion() - { - return self::VERSION; - } - - protected function validateConfig() - { - // Check if required fields are filled - return Util::hasAllKeys($this->moduleData, self::$REQUIRED_FIELDS); - } - - public function setData($key, $value) - { - if (!in_array($key, self::$REQUIRED_FIELDS) && !in_array($key, self::$OPTIONAL_FIELDS)) - return false; - $this->moduleData[$key] = $value; - return true; - } - - // ############## Callbacks ############################# - - /** - * Server IP changed - rebuild all LDAP modules. - */ - public function event_serverIpChanged() - { - error_log('Calling generate on ' . $this->title()); - $this->generate(false); } } + +ConfigModule::registerModule( + ConfigModule_LdapAuth::MODID, // ID + Dictionary::translateFileModule('sysconfig', 'config-module', 'ldapAuth_title'), // Title + Dictionary::translateFileModule('sysconfig', 'config-module', 'ldapAuth_description'), // Description + Dictionary::translateFileModule('sysconfig', 'config-module', 'group_authentication'), // Group + true // Only one per config? +); diff --git a/modules-available/sysconfig/inc/configmodulebaseldap.inc.php b/modules-available/sysconfig/inc/configmodulebaseldap.inc.php new file mode 100644 index 00000000..760593e1 --- /dev/null +++ b/modules-available/sysconfig/inc/configmodulebaseldap.inc.php @@ -0,0 +1,85 @@ +<?php + +abstract class ConfigModuleBaseLdap extends ConfigModule +{ + + const VERSION = 2; + + private static $REQUIRED_FIELDS = array('server', 'searchbase'); + private static $OPTIONAL_FIELDS = array('binddn', 'bindpw', 'home', 'ssl', 'fingerprint', 'certificate', 'homeattr', + 'shareRemapMode', 'shareRemapCreate', 'shareDocuments', 'shareDownloads', 'shareDesktop', 'shareMedia', 'shareOther', 'shareHomeDrive'); + + protected function generateInternal($tgz, $parent) + { + Trigger::ldadp($this->id(), $parent); + $config = $this->moduleData; + if (isset($config['certificate']) && !is_string($config['certificate'])) { + unset($config['certificate']); + } + if (preg_match('/^([^\:]+)\:(\d+)$/', $config['server'], $out)) { + $config['server'] = $out[1]; + $config['adport'] = $out[2]; + } else { + if (isset($config['certificate'])) { + $config['adport'] = 636; + } else { + $config['adport'] = 389; + } + } + $config['parentTask'] = $parent; + $config['failOnParentFail'] = false; + $config['proxyip'] = Property::getServerIp(); + $config['proxyport'] = 3100 + $this->id(); + $config['filename'] = $tgz; + $config['moduleid'] = $this->id(); + if (!isset($config['shareRemapMode'])) { + $config['shareRemapMode'] = 3; + } + if (!isset($config['shareHomeDrive'])) { + $config['shareHomeDrive'] = 'H:'; + } + $this->preTaskmanagerHook($config); + return Taskmanager::submit('CreateLdapConfig', $config); + } + + /** + * Hook called before running CreateLdapConfig task with the + * configuration to be passed to the task. Passed by reference + * so it can be modified. + * + * @param array $config + */ + protected function preTaskmanagerHook(&$config) + { + } + + protected function moduleVersion() + { + return self::VERSION; + } + + protected function validateConfig() + { + // Check if required fields are filled + return Util::hasAllKeys($this->moduleData, self::$REQUIRED_FIELDS); + } + + public function setData($key, $value) + { + if (!in_array($key, self::$REQUIRED_FIELDS) && !in_array($key, self::$OPTIONAL_FIELDS)) + return false; + $this->moduleData[$key] = $value; + return true; + } + + // ############## Callbacks ############################# + + /** + * Server IP changed - rebuild all AD modules. + */ + public function event_serverIpChanged() + { + $this->generate(false); + } + +} |