Merge branch 'release/v0.7.9'
This commit is contained in:
commit
81f1796a6a
4 changed files with 98 additions and 2 deletions
|
@ -3,6 +3,10 @@ This file is a running track of new features and fixes to each version of the pa
|
||||||
|
|
||||||
This project follows [Semantic Versioning](http://semver.org) guidelines.
|
This project follows [Semantic Versioning](http://semver.org) guidelines.
|
||||||
|
|
||||||
|
## v0.7.9 (Derelict Dermodactylus)
|
||||||
|
### Fixed
|
||||||
|
* Fixes a two-factor authentication bypass present in the password reset process for an account.
|
||||||
|
|
||||||
## v0.7.8 (Derelict Dermodactylus)
|
## v0.7.8 (Derelict Dermodactylus)
|
||||||
### Added
|
### Added
|
||||||
* Nodes can now be put into maintenance mode to deny access to servers temporarily.
|
* Nodes can now be put into maintenance mode to deny access to servers temporarily.
|
||||||
|
|
|
@ -2,8 +2,14 @@
|
||||||
|
|
||||||
namespace Pterodactyl\Http\Controllers\Auth;
|
namespace Pterodactyl\Http\Controllers\Auth;
|
||||||
|
|
||||||
|
use Illuminate\Support\Str;
|
||||||
|
use Prologue\Alerts\AlertsMessageBag;
|
||||||
|
use Illuminate\Contracts\Hashing\Hasher;
|
||||||
|
use Illuminate\Auth\Events\PasswordReset;
|
||||||
|
use Illuminate\Contracts\Events\Dispatcher;
|
||||||
use Pterodactyl\Http\Controllers\Controller;
|
use Pterodactyl\Http\Controllers\Controller;
|
||||||
use Illuminate\Foundation\Auth\ResetsPasswords;
|
use Illuminate\Foundation\Auth\ResetsPasswords;
|
||||||
|
use Pterodactyl\Contracts\Repository\UserRepositoryInterface;
|
||||||
|
|
||||||
class ResetPasswordController extends Controller
|
class ResetPasswordController extends Controller
|
||||||
{
|
{
|
||||||
|
@ -16,6 +22,47 @@ class ResetPasswordController extends Controller
|
||||||
*/
|
*/
|
||||||
public $redirectTo = '/';
|
public $redirectTo = '/';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var bool
|
||||||
|
*/
|
||||||
|
protected $hasTwoFactor = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var \Prologue\Alerts\AlertsMessageBag
|
||||||
|
*/
|
||||||
|
private $alerts;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var \Illuminate\Contracts\Events\Dispatcher
|
||||||
|
*/
|
||||||
|
private $dispatcher;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var \Illuminate\Contracts\Hashing\Hasher
|
||||||
|
*/
|
||||||
|
private $hasher;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var \Pterodactyl\Contracts\Repository\UserRepositoryInterface
|
||||||
|
*/
|
||||||
|
private $userRepository;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ResetPasswordController constructor.
|
||||||
|
*
|
||||||
|
* @param \Prologue\Alerts\AlertsMessageBag $alerts
|
||||||
|
* @param \Illuminate\Contracts\Events\Dispatcher $dispatcher
|
||||||
|
* @param \Illuminate\Contracts\Hashing\Hasher $hasher
|
||||||
|
* @param \Pterodactyl\Contracts\Repository\UserRepositoryInterface $userRepository
|
||||||
|
*/
|
||||||
|
public function __construct(AlertsMessageBag $alerts, Dispatcher $dispatcher, Hasher $hasher, UserRepositoryInterface $userRepository)
|
||||||
|
{
|
||||||
|
$this->alerts = $alerts;
|
||||||
|
$this->dispatcher = $dispatcher;
|
||||||
|
$this->hasher = $hasher;
|
||||||
|
$this->userRepository = $userRepository;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the rules used when validating password reset.
|
* Return the rules used when validating password reset.
|
||||||
*
|
*
|
||||||
|
@ -29,4 +76,49 @@ class ResetPasswordController extends Controller
|
||||||
'password' => 'required|confirmed|min:8',
|
'password' => 'required|confirmed|min:8',
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reset the given user's password. If the user has two-factor authentication enabled on their
|
||||||
|
* account do not automatically log them in. In those cases, send the user back to the login
|
||||||
|
* form with a note telling them their password was changed and to log back in.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Contracts\Auth\CanResetPassword|\Pterodactyl\Models\User $user
|
||||||
|
* @param string $password
|
||||||
|
*
|
||||||
|
* @throws \Pterodactyl\Exceptions\Model\DataValidationException
|
||||||
|
* @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException
|
||||||
|
*/
|
||||||
|
protected function resetPassword($user, $password)
|
||||||
|
{
|
||||||
|
$user = $this->userRepository->update($user->id, [
|
||||||
|
'password' => $this->hasher->make($password),
|
||||||
|
$user->getRememberTokenName() => Str::random(60),
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->dispatcher->dispatch(new PasswordReset($user));
|
||||||
|
|
||||||
|
// If the user is not using 2FA log them in, otherwise skip this step and force a
|
||||||
|
// fresh login where they'll be prompted to enter a token.
|
||||||
|
if (! $user->use_totp) {
|
||||||
|
$this->guard()->login($user);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->hasTwoFactor = $user->use_totp;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the response for a successful password reset.
|
||||||
|
*
|
||||||
|
* @param string $response
|
||||||
|
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
|
||||||
|
*/
|
||||||
|
protected function sendResetResponse($response)
|
||||||
|
{
|
||||||
|
if ($this->hasTwoFactor) {
|
||||||
|
$this->alerts->success('Your password was successfully updated. Please log in to continue.')->flash();
|
||||||
|
}
|
||||||
|
|
||||||
|
return redirect($this->hasTwoFactor ? route('auth.login') : $this->redirectPath())
|
||||||
|
->with('status', trans($response));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@ return [
|
||||||
| change this value if you are not maintaining your own internal versions.
|
| change this value if you are not maintaining your own internal versions.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'version' => '0.7.8',
|
'version' => '0.7.9',
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
@ -48,7 +48,7 @@ return [
|
||||||
'select_none' => 'Alles abwählen',
|
'select_none' => 'Alles abwählen',
|
||||||
'alias' => 'Alias',
|
'alias' => 'Alias',
|
||||||
'primary' => 'Primär',
|
'primary' => 'Primär',
|
||||||
'make_primary' => 'Primät machen',
|
'make_primary' => 'Primär machen',
|
||||||
'none' => 'Nichts',
|
'none' => 'Nichts',
|
||||||
'cancel' => 'Abbrechen',
|
'cancel' => 'Abbrechen',
|
||||||
'created_at' => 'Erstellt am',
|
'created_at' => 'Erstellt am',
|
||||||
|
|
Loading…
Reference in a new issue