1
0
mirror of https://github.com/cydrobolt/polr.git synced 2024-09-19 15:11:40 +02:00
polr/app/Helpers/UserHelper.php
2017-03-12 18:35:19 -04:00

110 lines
2.8 KiB
PHP

<?php
namespace App\Helpers;
use App\Models\User;
use App\Helpers\CryptoHelper;
use Hash;
class UserHelper {
public static $USER_ROLES = [
'admin' => 'admin',
'default' => '',
];
public static function userExists($username) {
/* XXX: used primarily with test cases */
$user = self::getUserByUsername($username, $inactive=true);
return ($user ? true : false);
}
public static function emailExists($email) {
/* XXX: used primarily with test cases */
$user = self::getUserByEmail($email, $inactive=true);
return ($user ? true : false);
}
public static function validateUsername($username) {
return ctype_alnum($username);
}
public static function userIsAdmin($username) {
return (self::getUserByUsername($username)->role == self::$USER_ROLES['admin']);
}
public static function checkCredentials($username, $password) {
$user = User::where('active', 1)
->where('username', $username)
->first();
if ($user == null) {
return false;
}
$correct_password = Hash::check($password, $user->password);
if (!$correct_password) {
return false;
}
else {
return ['username' => $username, 'role' => $user->role];
}
}
public static function resetRecoveryKey($username) {
$recovery_key = CryptoHelper::generateRandomHex(50);
$user = self::getUserByUsername($username);
if (!$user) {
return false;
}
$user->recovery_key = $recovery_key;
$user->save();
return $recovery_key;
}
public static function userResetKeyCorrect($username, $recovery_key, $inactive=false) {
// Given a username and a recovery key, return true if they match.
$user = self::getUserByUsername($username, $inactive);
if ($user) {
if ($recovery_key != $user->recovery_key) {
return false;
}
}
else {
return false;
}
return true;
}
public static function getUserBy($attr, $value, $inactive=false) {
$user = User::where($attr, $value);
if (!$inactive) {
// if user must be active
$user = $user
->where('active', 1);
}
return $user->first();
}
public static function getUserById($user_id, $inactive=false) {
return self::getUserBy('id', $user_id, $inactive);
}
public static function getUserByUsername($username, $inactive=false) {
return self::getUserBy('username', $username, $inactive);
}
public static function getUserByEmail($email, $inactive=false) {
return self::getUserBy('email', $email, $inactive);
}
}