Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /**
- * Description of Auth1
- *
- * 201 User Name is already taken.
- * @author Ivaylo Ivanov
- */
- namespace Models;
- class Authorization {
- private $_databaseInstance = NULL,
- $_errors = array();
- public function __construct($databaseInstance) {
- $this->_databaseInstance = $databaseInstance;
- }
- /**
- * Връща масив от информация за потребителя и привилегиите му.
- * @param type $user_name
- * @param type $user_password
- * @param type $remember_me
- * @return boolean
- */
- public function login($user_name, $user_password, $serializable = true) {
- // SQL - Взима потребителя заедно с неговите привилегии ако сществува.
- $sql = "
- SELECT *
- FROM users
- LEFT JOIN privileges
- ON privileges_id = user_privileges
- WHERE user_name = :user AND user_ban = 0";
- // Подготовка на параметрите подавани към базата данни.
- $params = array(
- ':user' => array(
- 'param' => (string) $user_name,
- 'type' => 2
- )
- );
- // Заявка към база данни
- $this->_databaseInstance->query($sql, $params, 2);
- // Проверява дали има резултат. Ако няма то не съществува такъв потребител и връща FALSE.
- if (empty($this->_databaseInstance->getCount())) {
- // Грешка 201
- // Несъществуващо име.
- $this->_errors[201] = 1;
- return FALSE;
- }
- // След като има такъв потребител присвоява цялата информация за него на променливата $user_credentials
- // За прегледност !
- $user_credentials = $this->_databaseInstance->getResult()[0];
- // Проверява дали паролата му съответсва.
- if (!password_verify($user_password, $user_credentials['user_password'])) {
- // Грешка 202
- // Грешна парола.
- $this->_errors[202] = 1;
- return FALSE;
- }
- // Премахва паролата от масива.
- unset($user_credentials['user_password']);
- // Серилиазира масива за запис в базата данни.
- if ($serializable) {
- $user_credentials = serialize(base64_encode($user_credentials));
- }
- // Връща изчистения масив.
- return $user_credentials;
- }
- /**
- * регистрация на нов потребител . Връща true или false.
- * @param type $user_name
- * @param type $user_password
- * @param type $user_email
- * @param type $passwordCost
- * @return boolean
- */
- public function register($user_name, $user_password, $user_email, $passwordCost = 10) {
- // SQL - Пробва дали може да бъде записал новият потребител.
- $sql = "INSERT INTO users
- (user_password, user_name, user_registered, user_active, user_email)
- VALUES (:password, :user, :time, :time, :email);";
- // Подготовка на параметрите
- $params = array(
- ':password' => array(
- 'param' => (string) password_hash($user_password, PASSWORD_BCRYPT, array('cost' => $passwordCost)),
- 'type' => 2
- ),
- ':user' => array(
- 'param' => (string) $user_name,
- 'type' => 2
- ),
- ':email' => array(
- 'param' => (string) $user_email,
- 'type' => 2
- ),
- ':time' => array(
- 'param' => (int) time(),
- 'type' => 1
- )
- );
- // Заявка към базата данни
- $this->_databaseInstance->query($sql, $params, 2);
- // Проверяваме дали има грешки
- if (empty($this->_databaseInstance->getErrors())) {
- // Успешна регистрация
- // Връща true
- return TRUE;
- } else {
- // Записваме кодът на грешката
- $this->_errors[203] = 1;
- // Грешка 203
- // Съществува потребител с това име и/или имейл. Не мжое да бъдете регистриран.
- // Връща false.
- return FALSE;
- }
- }
- function logout() {
- // Излишно. Ще се имплементира в Контролера -> logout
- }
- public function passwordRecovery($email, $newPasswordCost) {
- // Инициализираме масива който ще бъде върнат по късно
- $result = array();
- // SQL - Проверява за потребител с подадения емаил.
- $sql = "
- SELECT user_id,user_name,user_email
- FROM users
- WHERE user_email = :email";
- // Подготовка на параметрите
- $params = array(
- ':email' => array(
- 'param' => (string) $email,
- 'type' => 2
- )
- );
- // Заявка към базата данни
- $this->_databaseInstance->query($sql, $params, 2);
- // Изчистваме масива $params тъй като по доло ще го използваме отново за втора заявка.
- unset($params);
- // Проверяваме дали има върнат резултат
- if ($this->_databaseInstance->getCount()) {
- // Генерираме нова парола
- $newPassword = $this->randomString();
- // Присвояваме резултата от заявката на нова променлива, за прегледност
- $user_credentials = $this->_databaseInstance->getResult()[0];
- // Пълним масив, който ще бъде върнат
- $result['user_name'] = $user_credentials['user_name'];
- $result['user_email'] = $user_credentials['user_email'];
- $result['user_password'] = $newPassword;
- $result['user_password_encoded'] = password_hash($newPassword, PASSWORD_BCRYPT, array('cost' => $newPasswordCost));
- // SQL - актуализиране на новата парола на потребителя
- $sql = "
- UPDATE users
- SET user_password = :pass
- WHERE user_id = :user_id;";
- // Подготвяме новите параметри
- $params = array(
- ':pass' => array(
- 'param' => (string) $result['user_password_encoded'],
- 'type' => 2
- ),
- ':user_id' => array(
- 'param' => (int) $user_credentials['user_id'],
- 'type' => 1
- )
- );
- // Заявка към базата данни
- $this->_databaseInstance->query($sql, $params, 2);
- // Връщане масив с имейл, име и новата парола който трябва да бъде подаден на mailer-a.
- return $result;
- } else {
- // Записваме кодът на грешката
- $this->_errors[204] = 1;
- // Грешка 204
- // Несъществува потребител с тавък имейл
- return FALSE;
- }
- }
- /**
- * Генериране на нова парола
- * @param type $length
- * @return string
- * @link http://www.phpf1.com/tutorial/generate-random-string.html
- */
- public function randomString($length = 8) {
- $validCharacters = "abcdefghijklmnopqrstuxyvwzABCDEFGHIJKLMNOPQRSTUXYVWZ";
- $validCharNumber = strlen($validCharacters);
- $result = "";
- for ($i = 0; $i < $length; $i++) {
- $index = mt_rand(0, $validCharNumber - 1);
- $result .= $validCharacters[$index];
- }
- return $result;
- }
- /**
- * Връща масива от грешки
- * @return type
- */
- public function get_errors() {
- return $this->_errors;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement