Completed
Push — develop-3.0 ( 5ab583...f20237 )
by Mohamed
06:33
created

CheckForMaintenanceMode   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 48
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 6

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 8
c 1
b 0
f 0
lcom 1
cbo 6
dl 0
loc 48
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A siteDownMessage() 0 6 2
A handle() 0 10 1
B isUserAllowedToAccess() 0 9 5
1
<?php
2
3
/*
4
 * This file is part of the Tinyissue package.
5
 *
6
 * (c) Mohamed Alsharaf <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace Tinyissue\Http\Middleware;
13
14
use Closure;
15
use Illuminate\Http\Request;
16
use Symfony\Component\HttpKernel\Exception\HttpException;
17
18
/**
19
 * @author Mohamed Alsharaf <[email protected]>
20
 */
21
class CheckForMaintenanceMode extends MiddlewareAbstract
22
{
23
    /**
24
     * Handle an incoming request.
25
     *
26
     * @param \Illuminate\Http\Request $request
27
     * @param \Closure                 $next
28
     *
29
     * @return mixed
30
     *
31
     * @throws \Symfony\Component\HttpKernel\Exception\HttpException
32
     */
33
    public function handle(Request $request, Closure $next)
34
    {
35
        // Allow admin & login page to always view the site event in maintenance mode
36
        $this->isUserAllowedToAccess($request);
37
38
        // Show message to administrator
39
        $this->siteDownMessage();
40
41
        return $next($request);
42
    }
43
44
    /**
45
     * @param Request $request
46
     *
47
     * @return void
48
     */
49
    protected function isUserAllowedToAccess(Request $request)
50
    {
51
        $siteDown = $this->app->isDownForMaintenance();
52
        $isLogin = $request->is('/', 'logout', 'signin');
53
54
        if ($siteDown && !$isLogin && ($this->getAuth()->guest() || !$this->getLoggedUser()->isAdmin())) {
55
            throw new HttpException(503);
56
        }
57
    }
58
59
    /**
60
     * @return void
61
     */
62
    protected function siteDownMessage()
63
    {
64
        if ($this->app->isDownForMaintenance()) {
65
            $this->app['session']->flash('notice-error', trans('tinyissue.site_maintenance_message'));
66
        }
67
    }
68
}
69