Skip to content

Commit 645e06c

Browse files
committed
reduced duplicate code
1 parent b6a3850 commit 645e06c

File tree

6 files changed

+125
-121
lines changed

6 files changed

+125
-121
lines changed

src/Abstracts/Middleware.php

Lines changed: 5 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,16 @@
33
namespace Akaunting\Firewall\Abstracts;
44

55
use Akaunting\Firewall\Events\AttackDetected;
6-
use Akaunting\Firewall\Models\Log;
6+
use Akaunting\Firewall\Traits\Helper;
77
use Closure;
88
use Illuminate\Support\Facades\Redirect;
99
use Illuminate\Support\Facades\Response;
10-
use Symfony\Component\HttpFoundation\IpUtils;
1110

1211
abstract class Middleware
1312
{
13+
use Helper;
14+
1415
public $request = null;
15-
public $input = null;
1616
public $middleware = null;
1717
public $user_id = null;
1818

@@ -40,7 +40,7 @@ public function skip($request)
4040
{
4141
$this->prepare($request);
4242

43-
if (!$this->isEnabled()) {
43+
if ($this->isDisabled()) {
4444
return true;
4545
}
4646

@@ -62,83 +62,10 @@ public function skip($request)
6262
public function prepare($request)
6363
{
6464
$this->request = $request;
65-
$this->input = $request->input();
6665
$this->middleware = strtolower((new \ReflectionClass($this))->getShortName());
6766
$this->user_id = auth()->id() ?: 0;
6867
}
6968

70-
public function isEnabled()
71-
{
72-
return config('firewall.middleware.' . $this->middleware . '.enabled', config('firewall.enabled'));
73-
}
74-
75-
public function isWhitelist()
76-
{
77-
return IpUtils::checkIp($this->ip(), config('firewall.whitelist'));
78-
}
79-
80-
public function isMethod()
81-
{
82-
if (!$methods = config('firewall.middleware.' . $this->middleware . '.methods')) {
83-
return false;
84-
}
85-
86-
if (in_array('all', $methods)) {
87-
return true;
88-
}
89-
90-
return in_array(strtolower($this->request->method()), $methods);
91-
}
92-
93-
public function isRoute()
94-
{
95-
if (!$routes = config('firewall.middleware.' . $this->middleware . '.routes')) {
96-
return false;
97-
}
98-
99-
foreach ($routes['except'] as $ex) {
100-
if (!$this->request->is($ex)) {
101-
continue;
102-
}
103-
104-
return true;
105-
}
106-
107-
foreach ($routes['only'] as $on) {
108-
if ($this->request->is($on)) {
109-
continue;
110-
}
111-
112-
return true;
113-
}
114-
115-
return false;
116-
}
117-
118-
public function isInput($name)
119-
{
120-
if (!$inputs = config('firewall.middleware.' . $this->middleware . '.inputs')) {
121-
return true;
122-
}
123-
124-
if (!empty($inputs['only']) && !in_array((string) $name, (array) $inputs['only'])) {
125-
return false;
126-
}
127-
128-
return !in_array((string) $name, (array) $inputs['except']);
129-
}
130-
131-
public function ip()
132-
{
133-
if ($cf_ip = $this->request->header('CF_CONNECTING_IP')) {
134-
$ip = $cf_ip;
135-
} else {
136-
$ip = $this->request->ip();
137-
}
138-
139-
return $ip;
140-
}
141-
14269
public function getPatterns()
14370
{
14471
return config('firewall.middleware.' . $this->middleware . '.patterns', []);
@@ -149,7 +76,7 @@ public function check($patterns)
14976
$log = null;
15077

15178
foreach ($patterns as $pattern) {
152-
if (!$match = $this->match($pattern, $this->input)) {
79+
if (!$match = $this->match($pattern, $this->request->input())) {
15380
continue;
15481
}
15582

@@ -211,21 +138,6 @@ public function prepareInput($value)
211138
return $value;
212139
}
213140

214-
public function log()
215-
{
216-
$log = Log::create([
217-
'ip' => $this->ip(),
218-
'level' => 'medium',
219-
'middleware' => $this->middleware,
220-
'user_id' => $this->user_id,
221-
'url' => $this->request->fullUrl(),
222-
'referrer' => $this->request->server('HTTP_REFERER') ?: 'NULL',
223-
'request' => urldecode(http_build_query($this->input)),
224-
]);
225-
226-
return $log;
227-
}
228-
229141
public function respond($response, $data = [])
230142
{
231143
if ($response['code'] == 200) {

src/Listeners/CheckLogin.php

Lines changed: 7 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@
33
namespace Akaunting\Firewall\Listeners;
44

55
use Akaunting\Firewall\Events\AttackDetected;
6-
use Akaunting\Firewall\Models\Log;
6+
use Akaunting\Firewall\Traits\Helper;
77
use Illuminate\Auth\Events\Failed as Event;
88

99
class CheckLogin
1010
{
11+
use Helper;
12+
1113
/**
1214
* Handle the event.
1315
*
@@ -20,45 +22,22 @@ public function handle(Event $event)
2022
return;
2123
}
2224

23-
$log = $this->log();
25+
$log = $this->log('login');
2426

2527
event(new AttackDetected($log));
2628
}
2729

2830
public function skip($event)
2931
{
3032
$this->request = request();
33+
$this->user_id = 0;
3134

32-
if (!config('firewall.enabled') || !config('firewall.middleware.login.enabled')) {
35+
if ($this->isDisabled('login')) {
3336
return true;
3437
}
3538

36-
if (in_array($this->ip(), config('firewall.whitelist'))) {
39+
if ($this->isWhitelist()) {
3740
return true;
3841
}
3942
}
40-
41-
public function log()
42-
{
43-
return Log::create([
44-
'ip' => $this->ip(),
45-
'level' => 'medium',
46-
'middleware' => 'login',
47-
'user_id' => '0',
48-
'url' => $this->request->fullUrl(),
49-
'referrer' => $this->request->server('HTTP_REFERER') ?: 'NULL',
50-
'request' => urldecode(http_build_query($this->request->input())),
51-
]);
52-
}
53-
54-
public function ip()
55-
{
56-
if ($cf_ip = $this->request->header('CF_CONNECTING_IP')) {
57-
$ip = $cf_ip;
58-
} else {
59-
$ip = $this->request->ip();
60-
}
61-
62-
return $ip;
63-
}
6443
}

src/Middleware/Lfi.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@
66

77
class Lfi extends Middleware
88
{
9+
// All done by parent class
910
}

src/Middleware/Session.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@
66

77
class Session extends Middleware
88
{
9+
// All done by parent class
910
}

src/Middleware/Xss.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@
66

77
class Xss extends Middleware
88
{
9+
// All done by parent class
910
}

src/Traits/Helper.php

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
<?php
2+
3+
namespace Akaunting\Firewall\Traits;
4+
5+
use Akaunting\Firewall\Models\Log;
6+
use Symfony\Component\HttpFoundation\IpUtils;
7+
8+
trait Helper
9+
{
10+
public function isEnabled($middleware = null)
11+
{
12+
$middleware = $middleware ?? $this->middleware;
13+
14+
return config('firewall.middleware.' . $middleware . '.enabled', config('firewall.enabled'));
15+
}
16+
17+
public function isDisabled($middleware = null)
18+
{
19+
return !$this->isEnabled($middleware);
20+
}
21+
22+
public function isWhitelist()
23+
{
24+
return IpUtils::checkIp($this->ip(), config('firewall.whitelist'));
25+
}
26+
27+
public function isMethod($middleware = null)
28+
{
29+
$middleware = $middleware ?? $this->middleware;
30+
31+
if (!$methods = config('firewall.middleware.' . $middleware . '.methods')) {
32+
return false;
33+
}
34+
35+
if (in_array('all', $methods)) {
36+
return true;
37+
}
38+
39+
return in_array(strtolower($this->request->method()), $methods);
40+
}
41+
42+
public function isRoute($middleware = null)
43+
{
44+
$middleware = $middleware ?? $this->middleware;
45+
46+
if (!$routes = config('firewall.middleware.' . $middleware . '.routes')) {
47+
return false;
48+
}
49+
50+
foreach ($routes['except'] as $ex) {
51+
if (!$this->request->is($ex)) {
52+
continue;
53+
}
54+
55+
return true;
56+
}
57+
58+
foreach ($routes['only'] as $on) {
59+
if ($this->request->is($on)) {
60+
continue;
61+
}
62+
63+
return true;
64+
}
65+
66+
return false;
67+
}
68+
69+
public function isInput($name, $middleware = null)
70+
{
71+
$middleware = $middleware ?? $this->middleware;
72+
73+
if (!$inputs = config('firewall.middleware.' . $middleware . '.inputs')) {
74+
return true;
75+
}
76+
77+
if (!empty($inputs['only']) && !in_array((string) $name, (array) $inputs['only'])) {
78+
return false;
79+
}
80+
81+
return !in_array((string) $name, (array) $inputs['except']);
82+
}
83+
84+
public function log($middleware = null, $user_id = null, $level = 'medium')
85+
{
86+
$middleware = $middleware ?? $this->middleware;
87+
$user_id = $user_id ?? $this->user_id;
88+
89+
return Log::create([
90+
'ip' => $this->ip(),
91+
'level' => $level,
92+
'middleware' => $middleware,
93+
'user_id' => $user_id,
94+
'url' => $this->request->fullUrl(),
95+
'referrer' => $this->request->server('HTTP_REFERER') ?: 'NULL',
96+
'request' => urldecode(http_build_query($this->request->input())),
97+
]);
98+
}
99+
100+
public function ip()
101+
{
102+
if ($cf_ip = $this->request->header('CF_CONNECTING_IP')) {
103+
$ip = $cf_ip;
104+
} else {
105+
$ip = $this->request->ip();
106+
}
107+
108+
return $ip;
109+
}
110+
}

0 commit comments

Comments
 (0)