[ Index ] |
PHP Cross Reference of moodle-2.8 |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * Zend Framework 4 * 5 * LICENSE 6 * 7 * This source file is subject to the new BSD license that is bundled 8 * with this package in the file LICENSE.txt. 9 * It is also available through the world-wide-web at this URL: 10 * http://framework.zend.com/license/new-bsd 11 * If you did not receive a copy of the license and are unable to 12 * obtain it through the world-wide-web, please send an email 13 * to [email protected] so we can send you a copy immediately. 14 * 15 * @category Zend 16 * @package Zend_Validate 17 * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com) 18 * @license http://framework.zend.com/license/new-bsd New BSD License 19 * @version $Id$ 20 */ 21 22 /** 23 * @see Zend_Validate_Abstract 24 */ 25 require_once 'Zend/Validate/Abstract.php'; 26 27 /** 28 * Validator for the hash of given files 29 * 30 * @category Zend 31 * @package Zend_Validate 32 * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com) 33 * @license http://framework.zend.com/license/new-bsd New BSD License 34 */ 35 class Zend_Validate_File_Hash extends Zend_Validate_Abstract 36 { 37 /** 38 * @const string Error constants 39 */ 40 const DOES_NOT_MATCH = 'fileHashDoesNotMatch'; 41 const NOT_DETECTED = 'fileHashHashNotDetected'; 42 const NOT_FOUND = 'fileHashNotFound'; 43 44 /** 45 * @var array Error message templates 46 */ 47 protected $_messageTemplates = array( 48 self::DOES_NOT_MATCH => "File '%value%' does not match the given hashes", 49 self::NOT_DETECTED => "A hash could not be evaluated for the given file", 50 self::NOT_FOUND => "File '%value%' could not be found" 51 ); 52 53 /** 54 * Hash of the file 55 * 56 * @var string 57 */ 58 protected $_hash; 59 60 /** 61 * Sets validator options 62 * 63 * @param string|array $options 64 * @return void 65 */ 66 public function __construct($options) 67 { 68 if ($options instanceof Zend_Config) { 69 $options = $options->toArray(); 70 } elseif (is_scalar($options)) { 71 $options = array('hash1' => $options); 72 } elseif (!is_array($options)) { 73 require_once 'Zend/Validate/Exception.php'; 74 throw new Zend_Validate_Exception('Invalid options to validator provided'); 75 } 76 77 if (1 < func_num_args()) { 78 $options['algorithm'] = func_get_arg(1); 79 } 80 81 $this->setHash($options); 82 } 83 84 /** 85 * Returns the set hash values as array, the hash as key and the algorithm the value 86 * 87 * @return array 88 */ 89 public function getHash() 90 { 91 return $this->_hash; 92 } 93 94 /** 95 * Sets the hash for one or multiple files 96 * 97 * @param string|array $options 98 * @return Zend_Validate_File_Hash Provides a fluent interface 99 */ 100 public function setHash($options) 101 { 102 $this->_hash = null; 103 $this->addHash($options); 104 105 return $this; 106 } 107 108 /** 109 * Adds the hash for one or multiple files 110 * 111 * @param string|array $options 112 * @return Zend_Validate_File_Hash Provides a fluent interface 113 */ 114 public function addHash($options) 115 { 116 if (is_string($options)) { 117 $options = array($options); 118 } else if (!is_array($options)) { 119 require_once 'Zend/Validate/Exception.php'; 120 throw new Zend_Validate_Exception("False parameter given"); 121 } 122 123 $known = hash_algos(); 124 if (!isset($options['algorithm'])) { 125 $algorithm = 'crc32'; 126 } else { 127 $algorithm = $options['algorithm']; 128 unset($options['algorithm']); 129 } 130 131 if (!in_array($algorithm, $known)) { 132 require_once 'Zend/Validate/Exception.php'; 133 throw new Zend_Validate_Exception("Unknown algorithm '{$algorithm}'"); 134 } 135 136 foreach ($options as $value) { 137 $this->_hash[$value] = $algorithm; 138 } 139 140 return $this; 141 } 142 143 /** 144 * Defined by Zend_Validate_Interface 145 * 146 * Returns true if and only if the given file confirms the set hash 147 * 148 * @param string $value Filename to check for hash 149 * @param array $file File data from Zend_File_Transfer 150 * @return boolean 151 */ 152 public function isValid($value, $file = null) 153 { 154 // Is file readable ? 155 require_once 'Zend/Loader.php'; 156 if (!Zend_Loader::isReadable($value)) { 157 return $this->_throw($file, self::NOT_FOUND); 158 } 159 160 $algos = array_unique(array_values($this->_hash)); 161 $hashes = array_unique(array_keys($this->_hash)); 162 foreach ($algos as $algorithm) { 163 $filehash = hash_file($algorithm, $value); 164 if ($filehash === false) { 165 return $this->_throw($file, self::NOT_DETECTED); 166 } 167 168 foreach($hashes as $hash) { 169 if ($filehash === $hash) { 170 return true; 171 } 172 } 173 } 174 175 return $this->_throw($file, self::DOES_NOT_MATCH); 176 } 177 178 /** 179 * Throws an error of the given type 180 * 181 * @param string $file 182 * @param string $errorType 183 * @return false 184 */ 185 protected function _throw($file, $errorType) 186 { 187 if ($file !== null) { 188 $this->_value = $file['name']; 189 } 190 191 $this->_error($errorType); 192 return false; 193 } 194 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 20:29:05 2014 | Cross-referenced by PHPXref 0.7.1 |