summaryrefslogtreecommitdiffstats
path: root/modules-available/baseconfig
diff options
context:
space:
mode:
authorSimon Rettberg2016-05-19 15:44:06 +0200
committerSimon Rettberg2016-05-19 15:44:06 +0200
commitc9e07bac5aebaf7903bcf9bbaf4bfbc598326346 (patch)
treeb4ab8dd36f8dfed13f564f051cb80db94f0a92c4 /modules-available/baseconfig
parentwork work work work work (diff)
downloadslx-admin-c9e07bac5aebaf7903bcf9bbaf4bfbc598326346.tar.gz
slx-admin-c9e07bac5aebaf7903bcf9bbaf4bfbc598326346.tar.xz
slx-admin-c9e07bac5aebaf7903bcf9bbaf4bfbc598326346.zip
Move Validator include to basconfig module
Diffstat (limited to 'modules-available/baseconfig')
-rw-r--r--modules-available/baseconfig/inc/validator.inc.php85
1 files changed, 85 insertions, 0 deletions
diff --git a/modules-available/baseconfig/inc/validator.inc.php b/modules-available/baseconfig/inc/validator.inc.php
new file mode 100644
index 00000000..23debd2c
--- /dev/null
+++ b/modules-available/baseconfig/inc/validator.inc.php
@@ -0,0 +1,85 @@
+<?php
+
+/**
+ * This class contains all the helper functions that
+ * can be referenced by a config setting. Every function
+ * here is supposed to validate the given config value
+ * and either return the validated and possibly sanitized
+ * value, or false to indicate that the given value is invalid.
+ * The passed value is a reference, as it can also be modified
+ * by the validator to tweak the value that is being
+ * displayed in the web interface, compared to the returned
+ * value, which will only be used by the client directly,
+ * and is not displayed by the web interface.
+ */
+class Validator
+{
+
+ public static function validate($condition, &$displayValue)
+ {
+ if (empty($condition))
+ return $displayValue;
+ $data = explode(':', $condition, 2);
+ switch ($data[0]) {
+ case 'regex':
+ if (preg_match($data[1], $displayValue))
+ return $displayValue;
+ return false;
+ case 'list':
+ return self::validateList($data[1], $displayValue);
+ case 'function':
+ return self::$data[1]($displayValue);
+ default:
+ Util::traceError('Unknown validation method: ' . $data[0]);
+ }
+ return false; // make code inspector happy - doesn't know traceError doesn't return
+ }
+
+ /**
+ * Validate linux password. If already in $6$ hash form,
+ * the unchanged value will be returned.
+ * if empty, an empty string will also be returned.
+ * Otherwise it it assumed that the value is a plain text
+ * password that is supposed to be hashed.
+ */
+ private static function linuxPassword(&$displayValue)
+ {
+ if (empty($displayValue))
+ return '';
+ if (preg_match('/^\$[156]\$.+\$./', $displayValue))
+ return $displayValue;
+ return Crypto::hash6($displayValue);
+ }
+
+ /**
+ * "Fix" network share path for SMB shares where a backslash
+ * is used instead of a slash.
+ * @param string $displayValue network path
+ * @return string cleaned up path
+ */
+ private static function networkShare(&$displayValue)
+ {
+ $displayValue = trim($displayValue);
+ if (substr($displayValue, 0, 2) === '\\\\')
+ $displayValue = str_replace('\\', '/', $displayValue);
+ $returnValue = $displayValue;
+ if (substr($returnValue, 0, 2) === '//')
+ $returnValue = str_replace(' ', '\\040', $returnValue);
+ return $returnValue;
+ }
+
+ /**
+ * Validate value against list.
+ * @param string $list The list as a string of items, separated by "|"
+ * @param string $displayValue The value to validate
+ * @return boolean|string The value, if in list, false otherwise
+ */
+ private static function validateList($list, &$displayValue)
+ {
+ $list = explode('|', $list);
+ if (in_array($displayValue, $list))
+ return $displayValue;
+ return false;
+ }
+
+}