Skip to content

Commit

Permalink
reduced duplicate code
Browse files Browse the repository at this point in the history
  • Loading branch information
denisdulici committed Jan 30, 2020
1 parent b6a3850 commit 645e06c
Show file tree
Hide file tree
Showing 6 changed files with 125 additions and 121 deletions.
98 changes: 5 additions & 93 deletions src/Abstracts/Middleware.php
Expand Up @@ -3,16 +3,16 @@
namespace Akaunting\Firewall\Abstracts;

use Akaunting\Firewall\Events\AttackDetected;
use Akaunting\Firewall\Models\Log;
use Akaunting\Firewall\Traits\Helper;
use Closure;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\Response;
use Symfony\Component\HttpFoundation\IpUtils;

abstract class Middleware
{
use Helper;

public $request = null;
public $input = null;
public $middleware = null;
public $user_id = null;

Expand Down Expand Up @@ -40,7 +40,7 @@ public function skip($request)
{
$this->prepare($request);

if (!$this->isEnabled()) {
if ($this->isDisabled()) {
return true;
}

Expand All @@ -62,83 +62,10 @@ public function skip($request)
public function prepare($request)
{
$this->request = $request;
$this->input = $request->input();
$this->middleware = strtolower((new \ReflectionClass($this))->getShortName());
$this->user_id = auth()->id() ?: 0;
}

public function isEnabled()
{
return config('firewall.middleware.' . $this->middleware . '.enabled', config('firewall.enabled'));
}

public function isWhitelist()
{
return IpUtils::checkIp($this->ip(), config('firewall.whitelist'));
}

public function isMethod()
{
if (!$methods = config('firewall.middleware.' . $this->middleware . '.methods')) {
return false;
}

if (in_array('all', $methods)) {
return true;
}

return in_array(strtolower($this->request->method()), $methods);
}

public function isRoute()
{
if (!$routes = config('firewall.middleware.' . $this->middleware . '.routes')) {
return false;
}

foreach ($routes['except'] as $ex) {
if (!$this->request->is($ex)) {
continue;
}

return true;
}

foreach ($routes['only'] as $on) {
if ($this->request->is($on)) {
continue;
}

return true;
}

return false;
}

public function isInput($name)
{
if (!$inputs = config('firewall.middleware.' . $this->middleware . '.inputs')) {
return true;
}

if (!empty($inputs['only']) && !in_array((string) $name, (array) $inputs['only'])) {
return false;
}

return !in_array((string) $name, (array) $inputs['except']);
}

public function ip()
{
if ($cf_ip = $this->request->header('CF_CONNECTING_IP')) {
$ip = $cf_ip;
} else {
$ip = $this->request->ip();
}

return $ip;
}

public function getPatterns()
{
return config('firewall.middleware.' . $this->middleware . '.patterns', []);
Expand All @@ -149,7 +76,7 @@ public function check($patterns)
$log = null;

foreach ($patterns as $pattern) {
if (!$match = $this->match($pattern, $this->input)) {
if (!$match = $this->match($pattern, $this->request->input())) {
continue;
}

Expand Down Expand Up @@ -211,21 +138,6 @@ public function prepareInput($value)
return $value;
}

public function log()
{
$log = Log::create([
'ip' => $this->ip(),
'level' => 'medium',
'middleware' => $this->middleware,
'user_id' => $this->user_id,
'url' => $this->request->fullUrl(),
'referrer' => $this->request->server('HTTP_REFERER') ?: 'NULL',
'request' => urldecode(http_build_query($this->input)),
]);

return $log;
}

public function respond($response, $data = [])
{
if ($response['code'] == 200) {
Expand Down
35 changes: 7 additions & 28 deletions src/Listeners/CheckLogin.php
Expand Up @@ -3,11 +3,13 @@
namespace Akaunting\Firewall\Listeners;

use Akaunting\Firewall\Events\AttackDetected;
use Akaunting\Firewall\Models\Log;
use Akaunting\Firewall\Traits\Helper;
use Illuminate\Auth\Events\Failed as Event;

class CheckLogin
{
use Helper;

/**
* Handle the event.
*
Expand All @@ -20,45 +22,22 @@ public function handle(Event $event)
return;
}

$log = $this->log();
$log = $this->log('login');

event(new AttackDetected($log));
}

public function skip($event)
{
$this->request = request();
$this->user_id = 0;

if (!config('firewall.enabled') || !config('firewall.middleware.login.enabled')) {
if ($this->isDisabled('login')) {
return true;
}

if (in_array($this->ip(), config('firewall.whitelist'))) {
if ($this->isWhitelist()) {
return true;
}
}

public function log()
{
return Log::create([
'ip' => $this->ip(),
'level' => 'medium',
'middleware' => 'login',
'user_id' => '0',
'url' => $this->request->fullUrl(),
'referrer' => $this->request->server('HTTP_REFERER') ?: 'NULL',
'request' => urldecode(http_build_query($this->request->input())),
]);
}

public function ip()
{
if ($cf_ip = $this->request->header('CF_CONNECTING_IP')) {
$ip = $cf_ip;
} else {
$ip = $this->request->ip();
}

return $ip;
}
}
1 change: 1 addition & 0 deletions src/Middleware/Lfi.php
Expand Up @@ -6,4 +6,5 @@

class Lfi extends Middleware
{
// All done by parent class
}
1 change: 1 addition & 0 deletions src/Middleware/Session.php
Expand Up @@ -6,4 +6,5 @@

class Session extends Middleware
{
// All done by parent class
}
1 change: 1 addition & 0 deletions src/Middleware/Xss.php
Expand Up @@ -6,4 +6,5 @@

class Xss extends Middleware
{
// All done by parent class
}
110 changes: 110 additions & 0 deletions src/Traits/Helper.php
@@ -0,0 +1,110 @@
<?php

namespace Akaunting\Firewall\Traits;

use Akaunting\Firewall\Models\Log;
use Symfony\Component\HttpFoundation\IpUtils;

trait Helper
{
public function isEnabled($middleware = null)
{
$middleware = $middleware ?? $this->middleware;

return config('firewall.middleware.' . $middleware . '.enabled', config('firewall.enabled'));
}

public function isDisabled($middleware = null)
{
return !$this->isEnabled($middleware);
}

public function isWhitelist()
{
return IpUtils::checkIp($this->ip(), config('firewall.whitelist'));
}

public function isMethod($middleware = null)
{
$middleware = $middleware ?? $this->middleware;

if (!$methods = config('firewall.middleware.' . $middleware . '.methods')) {
return false;
}

if (in_array('all', $methods)) {
return true;
}

return in_array(strtolower($this->request->method()), $methods);
}

public function isRoute($middleware = null)
{
$middleware = $middleware ?? $this->middleware;

if (!$routes = config('firewall.middleware.' . $middleware . '.routes')) {
return false;
}

foreach ($routes['except'] as $ex) {
if (!$this->request->is($ex)) {
continue;
}

return true;
}

foreach ($routes['only'] as $on) {
if ($this->request->is($on)) {
continue;
}

return true;
}

return false;
}

public function isInput($name, $middleware = null)
{
$middleware = $middleware ?? $this->middleware;

if (!$inputs = config('firewall.middleware.' . $middleware . '.inputs')) {
return true;
}

if (!empty($inputs['only']) && !in_array((string) $name, (array) $inputs['only'])) {
return false;
}

return !in_array((string) $name, (array) $inputs['except']);
}

public function log($middleware = null, $user_id = null, $level = 'medium')
{
$middleware = $middleware ?? $this->middleware;
$user_id = $user_id ?? $this->user_id;

return Log::create([
'ip' => $this->ip(),
'level' => $level,
'middleware' => $middleware,
'user_id' => $user_id,
'url' => $this->request->fullUrl(),
'referrer' => $this->request->server('HTTP_REFERER') ?: 'NULL',
'request' => urldecode(http_build_query($this->request->input())),
]);
}

public function ip()
{
if ($cf_ip = $this->request->header('CF_CONNECTING_IP')) {
$ip = $cf_ip;
} else {
$ip = $this->request->ip();
}

return $ip;
}
}

0 comments on commit 645e06c

Please sign in to comment.