viewing paste Unknown #25579 | PHP

Posted on the
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
<?php
// +---------------------------------------------------------------------------+
// | PHP version 5.5.5                                                         |
// +---------------------------------------------------------------------------+
// | Copyright (c) 2006-2016                                                   |
// +---------------------------------------------------------------------------+
// | 26.04.2016 02:31:53 YEKT 2016                                             |
// |                                                                           |
// +---------------------------------------------------------------------------+
// | Author: Kenik <kenik2006@gmail.com>                                       |
// +---------------------------------------------------------------------------+
//
/**
 * @package Capsule
 */
 
namespace Cp\CpUser;
 
use Capsule\Common\String;
use Capsule\Exception;
use Capsule\Db\Db;
use Capsule\Module\Module;
/**
 * User.php
 *
 * @package Capsule
 * @author kenik <kenik2006@gmail.com>
 *
 * @property
 */
class User extends Module
{
    /**
     * Минимальная длина пароля.
     *
     * @var int
     */
    const PASSWORD_MIN_LENGTH = 6;
 
    /**
     * Весовой параметр из двух цифр является двоичным логарифмом счетчика
     * итераций низлежащего хэширующего алгоритма, основанного на Blowfish, и
     * должен быть в диапазоне 04-31
     *
     * @var numeric string 04-31
     */
    const PASSWORD_COST = '09';
 
    protected function setPassword($value, $name) {
        if (!$value && array_key_exists($name, $this->data) &&
                $this->data[$name]) {
            // I do not want to change the password
            return $this;
        }
        $str = './' . join(array_merge(range('a','z'), range('A','Z'), range(0, 9)));
        $salt = substr(str_shuffle($str), 22);
        $pass = $value;
        if (self::PASSWORD_MIN_LENGTH > String::length($pass)) {
            $msg = 'Wrong password length';
            throw new Exception($msg);
        }
        $hash = crypt($pass, '$2a$' . self::PASSWORD_COST . '$' . $salt . '$');
        if (strlen($hash) < strlen($salt)) {
            $msg = 'Crypt error';
            throw new Exception($msg);
        }
        $this->data[$name] = $hash;
        return $this;
    }
 
    /**
     * Проверка пароля.
     *
     * @param unknown $password
     * @return boolean
     */
    public function password($password) {
        $hash = $this->password;
        return crypt(strval($password), $hash) === $hash;
    }
 
    /**
     * @param string $login
     * @return self
     */
    public static function getElementByLogin($login) {
        $db = Db::getInstance();
        $table = self::config()->table->name;
        $sql = 'SELECT * FROM `' . $table . '`
               WHERE `login` = ' . $db->qt($login);
        $objects = self::populate($db->query($sql));
        // array_shift returns NULL if array is empty
        return array_shift($objects);
    }
 
    /**
     * @param string $email
     * @return self
     */
    public static function getElementByEmail($email) {
        $db = Db::getInstance();
        $table = self::config()->table->name;
        $sql = 'SELECT * FROM `' . $table . '`
               WHERE `email` = ' . $db->qt($email);
        $objects = self::populate($db->query($sql));
        // array_shift returns NULL if array is empty
        return array_shift($objects);
    }
 
    /**
     * @param string $nick
     * @return array
     */
    public static function getElementByNickname($nick) {
        $db = Db::getInstance();
        $table = self::config()->table->name;
        $sql = 'SELECT * FROM `' . $table . '`
               WHERE `nickname` = ' . $db->qt($nick);
        $objects = self::populate($db->query($sql));
        // array_shift returns NULL if array is empty
        return array_shift($objects);
    }
}
Viewed 640 times, submitted by unknown.