diff options
author | Simon Rettberg | 2016-05-19 15:44:06 +0200 |
---|---|---|
committer | Simon Rettberg | 2016-05-19 15:44:06 +0200 |
commit | c9e07bac5aebaf7903bcf9bbaf4bfbc598326346 (patch) | |
tree | b4ab8dd36f8dfed13f564f051cb80db94f0a92c4 /modules-available/baseconfig | |
parent | work work work work work (diff) | |
download | slx-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.php | 85 |
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; + } + +} |