source: trunk/library/Zend/Validate/File/Sha1.php @ 5146

Revision 5146, 4.8 KB checked in by wmerlotto, 13 years ago (diff)

Ticket #2305 - Enviando alteracoes, desenvolvidas internamente na Prognus. Library: adicionando arquivos.

Line 
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-2010 Zend Technologies USA Inc. (http://www.zend.com)
18 * @license   http://framework.zend.com/license/new-bsd     New BSD License
19 * @version   $Id: Sha1.php 22668 2010-07-25 14:50:46Z thomas $
20 */
21
22/**
23 * @see Zend_Validate_File_Hash
24 */
25require_once 'Zend/Validate/File/Hash.php';
26
27/**
28 * Validator for the sha1 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 */
35class Zend_Validate_File_Sha1 extends Zend_Validate_File_Hash
36{
37    /**
38     * @const string Error constants
39     */
40    const DOES_NOT_MATCH = 'fileSha1DoesNotMatch';
41    const NOT_DETECTED   = 'fileSha1NotDetected';
42    const NOT_FOUND      = 'fileSha1NotFound';
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 sha1 hashes",
49        self::NOT_DETECTED   => "A sha1 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     * @return void
67     */
68    public function __construct($options)
69    {
70        if ($options instanceof Zend_Config) {
71            $options = $options->toArray();
72        } elseif (is_scalar($options)) {
73            $options = array('hash1' => $options);
74        } elseif (!is_array($options)) {
75            require_once 'Zend/Validate/Exception.php';
76            throw new Zend_Validate_Exception('Invalid options to validator provided');
77        }
78
79        $this->setHash($options);
80    }
81
82    /**
83     * Returns all set sha1 hashes
84     *
85     * @return array
86     */
87    public function getSha1()
88    {
89        return $this->getHash();
90    }
91
92    /**
93     * Sets the sha1 hash for one or multiple files
94     *
95     * @param  string|array $options
96     * @return Zend_Validate_File_Hash Provides a fluent interface
97     */
98    public function setHash($options)
99    {
100        if (!is_array($options)) {
101            $options = (array) $options;
102        }
103
104        $options['algorithm'] = 'sha1';
105        parent::setHash($options);
106        return $this;
107    }
108
109    /**
110     * Sets the sha1 hash for one or multiple files
111     *
112     * @param  string|array $options
113     * @return Zend_Validate_File_Hash Provides a fluent interface
114     */
115    public function setSha1($options)
116    {
117        $this->setHash($options);
118        return $this;
119    }
120
121    /**
122     * Adds the sha1 hash for one or multiple files
123     *
124     * @param  string|array $options
125     * @return Zend_Validate_File_Hash Provides a fluent interface
126     */
127    public function addHash($options)
128    {
129        if (!is_array($options)) {
130            $options = (array) $options;
131        }
132
133        $options['algorithm'] = 'sha1';
134        parent::addHash($options);
135        return $this;
136    }
137
138    /**
139     * Adds the sha1 hash for one or multiple files
140     *
141     * @param  string|array $options
142     * @return Zend_Validate_File_Hash Provides a fluent interface
143     */
144    public function addSha1($options)
145    {
146        $this->addHash($options);
147        return $this;
148    }
149
150    /**
151     * Defined by Zend_Validate_Interface
152     *
153     * Returns true if and only if the given file confirms the set hash
154     *
155     * @param  string $value Filename to check for hash
156     * @param  array  $file  File data from Zend_File_Transfer
157     * @return boolean
158     */
159    public function isValid($value, $file = null)
160    {
161        // Is file readable ?
162        require_once 'Zend/Loader.php';
163        if (!Zend_Loader::isReadable($value)) {
164            return $this->_throw($file, self::NOT_FOUND);
165        }
166
167        $hashes = array_unique(array_keys($this->_hash));
168        $filehash = hash_file('sha1', $value);
169        if ($filehash === false) {
170            return $this->_throw($file, self::NOT_DETECTED);
171        }
172
173        foreach ($hashes as $hash) {
174            if ($filehash === $hash) {
175                return true;
176            }
177        }
178
179        return $this->_throw($file, self::DOES_NOT_MATCH);
180    }
181}
Note: See TracBrowser for help on using the repository browser.