PageRenderTime 17ms CodeModel.GetById 12ms app.highlight 2ms RepoModel.GetById 2ms app.codeStats 0ms

/src/lib/Zend/Validate/File/Md5.php

https://bitbucket.org/mkrasuski/magento-ce
PHP | 182 lines | 73 code | 17 blank | 92 comment | 7 complexity | 4af983e349f6c2bc3a3fb6bc05d51e32 MD5 | raw file
  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 license@zend.com so we can send you a copy immediately.
 14 *
 15 * @category  Zend
 16 * @package   Zend_Validate
 17 * @copyright  Copyright (c) 2005-2015 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_File_Hash
 24 */
 25#require_once 'Zend/Validate/File/Hash.php';
 26
 27/**
 28 * Validator for the md5 hash of given files
 29 *
 30 * @category  Zend
 31 * @package   Zend_Validate
 32 * @copyright  Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
 33 * @license   http://framework.zend.com/license/new-bsd     New BSD License
 34 */
 35class Zend_Validate_File_Md5 extends Zend_Validate_File_Hash
 36{
 37    /**
 38     * @const string Error constants
 39     */
 40    const DOES_NOT_MATCH = 'fileMd5DoesNotMatch';
 41    const NOT_DETECTED   = 'fileMd5NotDetected';
 42    const NOT_FOUND      = 'fileMd5NotFound';
 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 md5 hashes",
 49        self::NOT_DETECTED   => "A md5 hash could not be evaluated for the given file",
 50        self::NOT_FOUND      => "File '%value%' is not readable or does not exist",
 51    );
 52
 53    /**
 54     * Hash of the file
 55     *
 56     * @var string
 57     */
 58    protected $_hash;
 59
 60    /**
 61     * Sets validator options
 62     *
 63     * $hash is the hash we accept for the file $file
 64     *
 65     * @param  string|array $options
 66     * @throws Zend_Validate_Exception
 67     * @return Zend_Validate_File_Md5
 68     */
 69    public function __construct($options)
 70    {
 71        if ($options instanceof Zend_Config) {
 72            $options = $options->toArray();
 73        } elseif (is_scalar($options)) {
 74            $options = array('hash1' => $options);
 75        } elseif (!is_array($options)) {
 76            #require_once 'Zend/Validate/Exception.php';
 77            throw new Zend_Validate_Exception('Invalid options to validator provided');
 78        }
 79
 80        $this->setMd5($options);
 81    }
 82
 83    /**
 84     * Returns all set md5 hashes
 85     *
 86     * @return array
 87     */
 88    public function getMd5()
 89    {
 90        return $this->getHash();
 91    }
 92
 93    /**
 94     * Sets the md5 hash for one or multiple files
 95     *
 96     * @param  string|array $options
 97     * @return Zend_Validate_File_Hash Provides a fluent interface
 98     */
 99    public function setHash($options)
100    {
101        if (!is_array($options)) {
102            $options = (array) $options;
103        }
104
105        $options['algorithm'] = 'md5';
106        parent::setHash($options);
107        return $this;
108    }
109
110    /**
111     * Sets the md5 hash for one or multiple files
112     *
113     * @param  string|array $options
114     * @return Zend_Validate_File_Hash Provides a fluent interface
115     */
116    public function setMd5($options)
117    {
118        $this->setHash($options);
119        return $this;
120    }
121
122    /**
123     * Adds the md5 hash for one or multiple files
124     *
125     * @param  string|array $options
126     * @return Zend_Validate_File_Hash Provides a fluent interface
127     */
128    public function addHash($options)
129    {
130        if (!is_array($options)) {
131            $options = (array) $options;
132        }
133
134        $options['algorithm'] = 'md5';
135        parent::addHash($options);
136        return $this;
137    }
138
139    /**
140     * Adds the md5 hash for one or multiple files
141     *
142     * @param  string|array $options
143     * @return Zend_Validate_File_Hash Provides a fluent interface
144     */
145    public function addMd5($options)
146    {
147        $this->addHash($options);
148        return $this;
149    }
150
151    /**
152     * Defined by Zend_Validate_Interface
153     *
154     * Returns true if and only if the given file confirms the set hash
155     *
156     * @param  string $value Filename to check for hash
157     * @param  array  $file  File data from Zend_File_Transfer
158     * @return boolean
159     */
160    public function isValid($value, $file = null)
161    {
162        // Is file readable ?
163        #require_once 'Zend/Loader.php';
164        if (!Zend_Loader::isReadable($value)) {
165            return $this->_throw($file, self::NOT_FOUND);
166        }
167
168        $hashes = array_unique(array_keys($this->_hash));
169        $filehash = hash_file('md5', $value);
170        if ($filehash === false) {
171            return $this->_throw($file, self::NOT_DETECTED);
172        }
173
174        foreach($hashes as $hash) {
175            if ($filehash === $hash) {
176                return true;
177            }
178        }
179
180        return $this->_throw($file, self::DOES_NOT_MATCH);
181    }
182}