Skip to content

Commit 9ae0608

Browse files
committed
Move middleware logic to dedicated Shield class
1 parent 8042ba1 commit 9ae0608

File tree

2 files changed

+63
-27
lines changed

2 files changed

+63
-27
lines changed

src/Middleware/RedirectIfStageFrontIsEnabled.php

Lines changed: 19 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -3,52 +3,44 @@
33
namespace CodeZero\StageFront\Middleware;
44

55
use Closure;
6+
use CodeZero\StageFront\Shield;
67
use Illuminate\Support\Facades\Config;
7-
use Illuminate\Support\Facades\Session;
88

99
class RedirectIfStageFrontIsEnabled
1010
{
1111
/**
12-
* Handle an incoming request.
12+
* Shield instance.
1313
*
14-
* @param \Illuminate\Http\Request $request
15-
* @param \Closure $next
14+
* @var \CodeZero\StageFront\Shield
15+
*/
16+
protected $shield;
17+
18+
/**
19+
* Create a new RedirectIfStageFrontIsEnabled instance.
1620
*
17-
* @return mixed
21+
* @param \CodeZero\StageFront\Shield $shield
1822
*/
19-
public function handle($request, Closure $next)
23+
public function __construct(Shield $shield)
2024
{
21-
$disabled = ! Config::get('stagefront.enabled', false);
22-
$unlocked = Session::get('stagefront.unlocked', false);
23-
$stageFrontUrl = Config::get('stagefront.url');
24-
$ignoredUrls = Config::get('stagefront.ignore_urls', []);
25-
array_push($ignoredUrls, $stageFrontUrl);
26-
27-
if ($unlocked || $disabled || $this->urlIsIgnored($request, $ignoredUrls)) {
28-
return $next($request);
29-
}
30-
31-
return redirect($stageFrontUrl);
25+
$this->shield = $shield;
3226
}
3327

3428
/**
35-
* Check if a URL should be ignored.
29+
* Handle an incoming request.
3630
*
3731
* @param \Illuminate\Http\Request $request
38-
* @param array $ignoredUrls
32+
* @param \Closure $next
3933
*
40-
* @return bool
34+
* @return mixed
4135
*/
42-
protected function urlIsIgnored($request, $ignoredUrls)
36+
public function handle($request, Closure $next)
4337
{
44-
foreach ($ignoredUrls as $url) {
45-
$url = trim($url, '/');
38+
$stageFrontUrl = Config::get('stagefront.url');
4639

47-
if ($request->is($url)) {
48-
return true;
49-
}
40+
if ($this->shield->requiresLogin()) {
41+
return redirect($stageFrontUrl);
5042
}
5143

52-
return false;
44+
return $next($request);
5345
}
5446
}

src/Shield.php

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?php
2+
3+
namespace CodeZero\StageFront;
4+
5+
use Illuminate\Support\Facades\Config;
6+
use Illuminate\Support\Facades\Request;
7+
use Illuminate\Support\Facades\Session;
8+
9+
class Shield
10+
{
11+
/**
12+
* Check if StageFront requires the user to log in.
13+
*
14+
* @return bool
15+
*/
16+
public function requiresLogin()
17+
{
18+
$enabled = Config::get('stagefront.enabled', false);
19+
$unlocked = Session::get('stagefront.unlocked', false);
20+
21+
return $enabled && ! $unlocked && ! $this->currentUrlIsIgnored();
22+
}
23+
24+
/**
25+
* Check if the current URL should be ignored.
26+
*
27+
* @return bool
28+
*/
29+
protected function currentUrlIsIgnored()
30+
{
31+
$ignoredUrls = Config::get('stagefront.ignore_urls', []);
32+
$ignoredUrls[] = Config::get('stagefront.url');
33+
34+
foreach ($ignoredUrls as $url) {
35+
$url = trim($url, '/');
36+
37+
if (Request::is($url)) {
38+
return true;
39+
}
40+
}
41+
42+
return false;
43+
}
44+
}

0 commit comments

Comments
 (0)