Skip to content

Commit

Permalink
Merge pull request #18 from mitydigital/fix/referer-message
Browse files Browse the repository at this point in the history
Fix redirect message on login
  • Loading branch information
martyf committed Aug 26, 2024
2 parents 62f6604 + cabf1f7 commit 061055d
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 9 deletions.
11 changes: 10 additions & 1 deletion src/Concerns/GetsReferrerUrl.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,21 @@

namespace MityDigital\StatamicTwoFactor\Concerns;

use Illuminate\Http\Request;
use Route;

trait GetsReferrerUrl
{
protected function getReferrerUrl()
protected function getReferrerUrl(Request $request)
{
$sessionReferer = session()->get('two_factor_referer', null);

session()->put('two_factor_referer', null);

if ($sessionReferer) {
return $sessionReferer;
}

$url = url()->previous();

$route = collect(Route::getRoutes())->first(function (\Illuminate\Routing\Route $route) use ($url) {
Expand Down
4 changes: 2 additions & 2 deletions src/Http/Controllers/TwoFactorChallengeController.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ public function index(Request $request)
}

// if we have a referrer URL, set it
if ($referrer = $this->getReferrerUrl()) {
// if we are not null, let's set it (this way it won't overwrite on failed attemts)
if ($referrer = $this->getReferrerUrl($request)) {
// if we are not null, let's set it (this way it won't overwrite on failed attempts)
if ($referrer) {
$request->session()->put('statamic_two_factor_referrer', $referrer);
}
Expand Down
4 changes: 2 additions & 2 deletions src/Http/Middleware/EnforceTwoFactor.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,13 +48,13 @@ public function handle(Request $request, Closure $next)
// if we have no challenge token, it has expired
if (! $lastChallenge || Carbon::parse($lastChallenge)->addMinutes(config('statamic-two-factor.validity'))->isPast()) {
// not yet challenged, or expired, so yes, let's challenge
return redirect(cp_route('statamic-two-factor.challenge'));
return redirect(cp_route('statamic-two-factor.challenge'))->with('two_factor_referer', $request->getRequestUri());
}
}
} else {
// we don't care about expiry dates - we just need to know if we have been challenged at all
if (! $lastChallenge) {
return redirect(cp_route('statamic-two-factor.challenge'));
return redirect(cp_route('statamic-two-factor.challenge'))->with('two_factor_referer', $request->getRequestUri());
}
}
}
Expand Down
22 changes: 18 additions & 4 deletions tests/Concerns/GetsReferralUrlTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,10 @@ function createRequestWithReferrer($referrer)

foreach ($packageRoutes as $referrer => $params) {
// create a request with the referrer set
createRequestWithReferrer(cp_route($referrer, $params));
$request = createRequestWithReferrer(cp_route($referrer, $params));

// expect null returned
expect($this->getReferrerUrl())
expect($this->getReferrerUrl($request))
->toBeNull();
}
});
Expand All @@ -48,9 +48,23 @@ function createRequestWithReferrer($referrer)
$route = cp_route('dashboard');

// create a request with the referrer set
createRequestWithReferrer($route);
$request = createRequestWithReferrer($route);

// expect null returned
expect($this->getReferrerUrl())
expect($this->getReferrerUrl($request))
->toBe($route);
});

it('returns the two factor session referrer when present', function () {
// create the route
$route = cp_route('dashboard');

// create a request with the referrer set
$request = createRequestWithReferrer($route);

session()->put('two_factor_referer', '/cp/collections');

// expect null returned
expect($this->getReferrerUrl($request))
->toBe('/cp/collections');
});

0 comments on commit 061055d

Please sign in to comment.