Provider::boot()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 14
rs 9.7998
c 0
b 0
f 0
cc 1
nc 1
nop 1
1
<?php
2
3
namespace Spinzar\Firewall;
4
5
use Spinzar\Firewall\Commands\UnblockIp;
6
use Spinzar\Firewall\Events\AttackDetected;
7
use Spinzar\Firewall\Listeners\BlockIp;
8
use Spinzar\Firewall\Listeners\CheckLogin;
9
use Spinzar\Firewall\Listeners\NotifyUsers;
10
use Illuminate\Auth\Events\Failed as LoginFailed;
11
use Illuminate\Console\Scheduling\Schedule;
12
use Illuminate\Routing\Router;
13
use Illuminate\Support\ServiceProvider;
14
15
class Provider extends ServiceProvider
16
{
17
    /**
18
     * Bootstrap the application services.
19
     *
20
     * @param Router $router
21
     *
22
     * @return void
23
     */
24
    public function boot(Router $router)
25
    {
26
        $this->publishes([
27
            __DIR__ . '/Config/firewall.php'                                            => config_path('firewall.php'),
28
            __DIR__ . '/Migrations/2019_07_15_000000_create_firewall_ips_table.php'     => database_path('migrations/2019_07_15_000000_create_firewall_ips_table.php'),
29
            __DIR__ . '/Migrations/2019_07_15_000000_create_firewall_logs_table.php'    => database_path('migrations/2019_07_15_000000_create_firewall_logs_table.php'),
30
            __DIR__ . '/Resources/lang'                                                 => resource_path('lang/vendor/firewall'),
31
        ], 'firewall');
32
33
        $this->registerMiddleware($router);
34
        $this->registerListeners();
35
        $this->registerTranslations();
36
        $this->registerCommands();
37
    }
38
39
    /**
40
     * Register the application services.
41
     *
42
     * @return void
43
     */
44
    public function register()
45
    {
46
        $this->mergeConfigFrom(__DIR__ . '/Config/firewall.php', 'firewall');
47
48
        $this->app->register(\Jenssegers\Agent\AgentServiceProvider::class);
49
    }
50
51
    /**
52
     * Register middleware.
53
     *
54
     * @param Router $router
55
     *
56
     * @return void
57
     */
58
    public function registerMiddleware($router)
59
    {
60
        $router->middlewareGroup('firewall.all', config('firewall.all_middleware'));
61
        $router->aliasMiddleware('firewall.agent', 'Spinzar\Firewall\Middleware\Agent');
62
        $router->aliasMiddleware('firewall.bot', 'Spinzar\Firewall\Middleware\Bot');
63
        $router->aliasMiddleware('firewall.ip', 'Spinzar\Firewall\Middleware\Ip');
64
        $router->aliasMiddleware('firewall.geo', 'Spinzar\Firewall\Middleware\Geo');
65
        $router->aliasMiddleware('firewall.lfi', 'Spinzar\Firewall\Middleware\Lfi');
66
        $router->aliasMiddleware('firewall.php', 'Spinzar\Firewall\Middleware\Php');
67
        $router->aliasMiddleware('firewall.referrer', 'Spinzar\Firewall\Middleware\Referrer');
68
        $router->aliasMiddleware('firewall.rfi', 'Spinzar\Firewall\Middleware\Rfi');
69
        $router->aliasMiddleware('firewall.session', 'Spinzar\Firewall\Middleware\Session');
70
        $router->aliasMiddleware('firewall.sqli', 'Spinzar\Firewall\Middleware\Sqli');
71
        $router->aliasMiddleware('firewall.swear', 'Spinzar\Firewall\Middleware\Swear');
72
        $router->aliasMiddleware('firewall.url', 'Spinzar\Firewall\Middleware\Url');
73
        $router->aliasMiddleware('firewall.whitelist', 'Spinzar\Firewall\Middleware\Whitelist');
74
        $router->aliasMiddleware('firewall.xss', 'Spinzar\Firewall\Middleware\Xss');
75
    }
76
77
    /**
78
     * Register listeners.
79
     *
80
     * @return void
81
     */
82
    public function registerListeners()
83
    {
84
        $this->app['events']->listen(AttackDetected::class, BlockIp::class);
85
        $this->app['events']->listen(AttackDetected::class, NotifyUsers::class);
86
        $this->app['events']->listen(LoginFailed::class, CheckLogin::class);
87
    }
88
89
    /**
90
     * Register translations.
91
     *
92
     * @return void
93
     */
94
    public function registerTranslations()
95
    {
96
        $lang_path = resource_path('lang/vendor/firewall');
97
98
        if (is_dir($lang_path)) {
99
            $this->loadTranslationsFrom($lang_path, 'firewall');
100
        } else {
101
            $this->loadTranslationsFrom(__DIR__ . '/Resources/lang', 'firewall');
102
        }
103
    }
104
105
    public function registerCommands()
106
    {
107
        $this->commands(UnblockIp::class);
108
109
        $this->app->booted(function () {
110
            app(Schedule::class)->command('firewall:unblockip')->everyMinute();
111
        });
112
    }
113
}
114