summaryrefslogtreecommitdiffstats
path: root/modules-available/sysconfig/inc
diff options
context:
space:
mode:
authorSimon Rettberg2016-07-06 11:55:35 +0200
committerSimon Rettberg2016-07-06 11:55:35 +0200
commitdcb27f27031991668afafeffe5ea6dc04035a663 (patch)
tree79612a6b4d44f29a808d95a34cf06198f4a4453f /modules-available/sysconfig/inc
parent[dozmod] api: Add error checks, implement lecture list resource type (diff)
downloadslx-admin-dcb27f27031991668afafeffe5ea6dc04035a663.tar.gz
slx-admin-dcb27f27031991668afafeffe5ea6dc04035a663.tar.xz
slx-admin-dcb27f27031991668afafeffe5ea6dc04035a663.zip
[sysconfig] Refactor ldapauth and adauth classes; show mainpage warning; improve config module handling
Diffstat (limited to 'modules-available/sysconfig/inc')
-rw-r--r--modules-available/sysconfig/inc/configmodule.inc.php70
-rw-r--r--modules-available/sysconfig/inc/configmodule/adauth.inc.php73
-rw-r--r--modules-available/sysconfig/inc/configmodule/branding.inc.php5
-rw-r--r--modules-available/sysconfig/inc/configmodule/customodule.inc.php5
-rw-r--r--modules-available/sysconfig/inc/configmodule/ldapauth.inc.php78
-rw-r--r--modules-available/sysconfig/inc/configmodulebaseldap.inc.php85
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);
+ }
+
+}