* * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ namespace CamilStaps\BotleaguesApi\Database; use CamilStaps\BotleaguesApi\Exception\ValidationException; use Illuminate\Auth\Authenticatable; use Illuminate\Auth\Passwords\CanResetPassword; use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract; use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Validator; class User extends Model implements AuthenticatableContract, CanResetPasswordContract { use Authenticatable, CanResetPassword; protected $table = 'users'; protected $hidden = ['password', 'remember_token', 'api_key']; protected $fillable = ['email', 'password']; protected $primaryKey = 'email'; public $incrementing = false; public function isAdministrator() { return (bool) $this->isAdministrator; } public function validToken($token) { $token = UserToken::where('userEmail', $this->email)->where('token', $token)->where('valid_till', '>', date("Y-m-d H:i:s"))->first(); if (empty($token)) { return false; } $token->refresh(); return true; } public function findPasswordReminders($token = null) { $base = PasswordReminder ::where('userEmail', $this->email) ->where('used_at', null) ->where('valid_till', '>', date('Y-m-d H:i:s')); if ($token == null) { return $base->get(); } else { return $base->where('token', $token)->get(); } } /** * Get the unique identifier for the user. * * @return mixed */ public function getAuthIdentifier() { return $this->getKey(); } /** * Get the password for the user. * @todo not implemented yet * @return string */ public function getAuthPassword() { return $this->password; } /** * Get the token value for the "remember me" session. * @todo not implemented yet * @return string */ public function getRememberToken() { return null; } /** * Set the token value for the "remember me" session. * @todo not implemented yet * @param string $value * @return void */ public function setRememberToken($value) { return null; } /** * Get the column name for the "remember me" token. * @todo not implemented yet * @return string */ public function getRememberTokenName() { return null; } /** * Get the e-mail address where password reset links are sent. * * @return string */ public function getEmailForPasswordReset() { return $this->email; } public function setEmailAttribute($email) { $validator = Validator::make(['email' => $email], ['email' => ['required', 'email', 'unique:' . $this->table]]); if ($validator->fails()) { throw new ValidationException('Invalid input email', $validator->errors()); } return $this->attributes['email'] = $email; } public function setPasswordAttribute($password) { $validator = Validator::make(['password' => $password], ['password' => ['required', 'min:7']]); if ($validator->fails()) { throw new ValidationException('Invalid input', $validator->errors()); } return $this->attributes['password'] = Hash::make($password); } }