This commit is contained in:
87 files changed
+7008
No files matched your search
@@ -0,0 +1,122 @@
|
||||
<?php namespace RVR\PersistentData\Model;
|
||||
|
||||
use DateTime;
|
||||
use SokoWeb\PersistentData\Model\Model;
|
||||
use SokoWeb\Interfaces\Authentication\IUser;
|
||||
|
||||
class User extends Model implements IUser
|
||||
{
|
||||
protected static string $table = 'users';
|
||||
|
||||
protected static array $fields = ['email', 'password', 'type', 'google_sub', 'created'];
|
||||
|
||||
private static array $types = ['user', 'admin'];
|
||||
|
||||
private string $email = '';
|
||||
|
||||
private ?string $password = null;
|
||||
|
||||
private string $type = 'user';
|
||||
|
||||
private ?string $googleSub = null;
|
||||
|
||||
private DateTime $created;
|
||||
|
||||
public function setEmail(string $email): void
|
||||
{
|
||||
$this->email = $email;
|
||||
}
|
||||
|
||||
public function setPassword(?string $hashedPassword): void
|
||||
{
|
||||
$this->password = $hashedPassword;
|
||||
}
|
||||
|
||||
public function setPlainPassword(string $plainPassword): void
|
||||
{
|
||||
$this->password = password_hash($plainPassword, PASSWORD_BCRYPT);
|
||||
}
|
||||
|
||||
public function setType(string $type): void
|
||||
{
|
||||
if (in_array($type, self::$types)) {
|
||||
$this->type = $type;
|
||||
}
|
||||
}
|
||||
|
||||
public function setGoogleSub(?string $googleSub): void
|
||||
{
|
||||
$this->googleSub = $googleSub;
|
||||
}
|
||||
|
||||
public function setCreatedDate(DateTime $created): void
|
||||
{
|
||||
$this->created = $created;
|
||||
}
|
||||
|
||||
public function setCreated(string $created): void
|
||||
{
|
||||
$this->created = new DateTime($created);
|
||||
}
|
||||
|
||||
public function getEmail(): string
|
||||
{
|
||||
return $this->email;
|
||||
}
|
||||
|
||||
public function getPassword(): ?string
|
||||
{
|
||||
return $this->password;
|
||||
}
|
||||
|
||||
public function getType(): string
|
||||
{
|
||||
return $this->type;
|
||||
}
|
||||
|
||||
public function getGoogleSub(): ?string
|
||||
{
|
||||
return $this->googleSub;
|
||||
}
|
||||
|
||||
public function getCreatedDate(): DateTime
|
||||
{
|
||||
return $this->created;
|
||||
}
|
||||
|
||||
public function getCreated(): string
|
||||
{
|
||||
return $this->created->format('Y-m-d H:i:s');
|
||||
}
|
||||
|
||||
public function hasPermission(int $permission): bool
|
||||
{
|
||||
switch ($permission) {
|
||||
case IUser::PERMISSION_NORMAL:
|
||||
return true;
|
||||
case IUser::PERMISSION_ADMIN:
|
||||
return $this->type === 'admin';
|
||||
default:
|
||||
throw new \Exception('Permission does not exist: ' . $permission);
|
||||
}
|
||||
}
|
||||
|
||||
public function getUniqueId()
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
public function getDisplayName(): string
|
||||
{
|
||||
return $this->email;
|
||||
}
|
||||
|
||||
public function checkPassword(string $password): bool
|
||||
{
|
||||
if ($this->password === null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return password_verify($password, $this->password);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user