aboutsummaryrefslogtreecommitdiff
path: root/src/CamilStaps
diff options
context:
space:
mode:
Diffstat (limited to 'src/CamilStaps')
-rw-r--r--src/CamilStaps/BotleaguesApi/ActivationCodeAuthenticationProvider.php5
-rw-r--r--src/CamilStaps/BotleaguesApi/Database/PasswordReminder.php7
-rw-r--r--src/CamilStaps/BotleaguesApi/Database/User.php23
3 files changed, 30 insertions, 5 deletions
diff --git a/src/CamilStaps/BotleaguesApi/ActivationCodeAuthenticationProvider.php b/src/CamilStaps/BotleaguesApi/ActivationCodeAuthenticationProvider.php
index 049dfc4..3fe3ee0 100644
--- a/src/CamilStaps/BotleaguesApi/ActivationCodeAuthenticationProvider.php
+++ b/src/CamilStaps/BotleaguesApi/ActivationCodeAuthenticationProvider.php
@@ -31,10 +31,9 @@ class ActivationCodeAuthenticationProvider implements Provider {
*/
public function authenticate(Request $request, Route $route) {
$user = User::findOrFail($request->route('user'));
- $passwordReminder = PasswordReminder::find($request->route('password_reminder'));
+ $passwordReminder = PasswordReminder::findOrFail($request->route('password_reminder'));
- if (!empty($user) && !empty($passwordReminder) && $passwordReminder->userId == $user->id) {
- $passwordReminder->useToken();
+ if (!empty($user) && !empty($passwordReminder) && $passwordReminder->userId == $user->id && $passwordReminder->isValid()) {
Auth::login($user);
return Auth::user();
}
diff --git a/src/CamilStaps/BotleaguesApi/Database/PasswordReminder.php b/src/CamilStaps/BotleaguesApi/Database/PasswordReminder.php
index 012d140..696a0a1 100644
--- a/src/CamilStaps/BotleaguesApi/Database/PasswordReminder.php
+++ b/src/CamilStaps/BotleaguesApi/Database/PasswordReminder.php
@@ -8,7 +8,6 @@
namespace CamilStaps\BotleaguesApi\Database;
-use Illuminate\Events\Dispatcher;
use Illuminate\Support\Facades\Mail;
class PasswordReminder extends Model {
@@ -24,7 +23,7 @@ class PasswordReminder extends Model {
PasswordReminder::creating(function($passwordReminder) {
$passwordReminder->valid_till = date("Y-m-d H:i:s", time() + 3600);
- $user = User::findOrFail($passwordReminder->userId);
+ $user = User::findOrFail($passwordReminder->userEmail);
Mail::send('botleagues-api::emails.auth.reminder', ['token' => $passwordReminder->token], function($message) use ($user) {
$message->to($user->email, "User " . $user->id);
});
@@ -36,6 +35,10 @@ class PasswordReminder extends Model {
$this->save();
}
+ public function isValid() {
+ return empty($this->used_at) && strtotime($this->valid_till) > time();
+ }
+
public function getDates() {
return ['created_at'];
}
diff --git a/src/CamilStaps/BotleaguesApi/Database/User.php b/src/CamilStaps/BotleaguesApi/Database/User.php
index e74bd82..6b0d863 100644
--- a/src/CamilStaps/BotleaguesApi/Database/User.php
+++ b/src/CamilStaps/BotleaguesApi/Database/User.php
@@ -1,11 +1,13 @@
<?php
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 {
@@ -14,6 +16,7 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon
protected $table = 'users';
protected $hidden = ['password', 'remember_token', 'api_key'];
protected $fillable = ['email', 'password'];
+ protected $primaryKey = 'email';
public function isAdministrator() {
return (bool) $this->isAdministrator;
@@ -90,7 +93,27 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon
return $this->email;
}
+ public function setEmailAttribute($email) {
+ $rules = [
+ 'email' => ['required', 'email', 'unique:' . $this->table]
+ ];
+ $validator = Validator::make(['email' => $email], $rules);
+ if ($validator->fails()) {
+ throw new ValidationException('Invalid input', $validator->errors());
+ }
+
+ $this->attributes['email'] = $email;
+ }
+
public function setPasswordAttribute($password) {
+ $rules = [
+ 'password' => ['required', 'min:7']
+ ];
+ $validator = Validator::make(['password' => $password], $rules);
+ if ($validator->fails()) {
+ throw new ValidationException('Invalid input', $validator->errors());
+ }
+
$this->attributes['password'] = Hash::make($password);
}
} \ No newline at end of file