diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 22fe68de2869f4866d0b7e930f9b524e42f1f65e..a5f7c4fe9de49a0e6fc2b0cc8f4081b97f8395e6 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -193,7 +193,6 @@ development: - $INCREMENTAL_ROLLOUT_ENABLED - $INCREMENTAL_ROLLOUT_MODE - production: variables: ADDITIONAL_HOSTS: "www.metager.de,metager.org,www.metager.org,metager.es,www.metager.es,klassik.metager.org" diff --git a/app/Http/Controllers/HumanVerification.php b/app/Http/Controllers/HumanVerification.php index 81f9d71ac8a4599148884ad3b8d7842ec2de45c3..fcf6e183d9d38bce7bc72426605c1efd39090bf2 100644 --- a/app/Http/Controllers/HumanVerification.php +++ b/app/Http/Controllers/HumanVerification.php @@ -105,12 +105,13 @@ class HumanVerification extends Controller private static function saveUser($user) { $userList = Cache::get(HumanVerification::PREFIX . "." . $user["id"], []); - $userList[$user["uid"]] = $user; + if ($user["whitelist"]) { $user["expiration"] = now()->addWeeks(2); } else { $user["expiration"] = now()->addHours(72); } + $userList[$user["uid"]] = $user; Cache::put(HumanVerification::PREFIX . "." . $user["id"], $userList, now()->addWeeks(2)); } @@ -208,4 +209,53 @@ class HumanVerification extends Controller return $possibleSpammer; } + + public function botOverview(Request $request){ + $id = ""; + $uid = ""; + $ip = $request->ip(); + if (\App\Http\Controllers\HumanVerification::couldBeSpammer($ip)) { + $id = hash("sha512", "999.999.999.999"); + $uid = hash("sha512", "999.999.999.999" . $ip . $_SERVER["AGENT"] . "uid"); + } else { + $id = hash("sha512", $ip); + $uid = hash("sha512", $ip . $_SERVER["AGENT"] . "uid"); + } + + $userList = Cache::get(HumanVerification::PREFIX . "." . $id); + $user = $userList[$uid]; + + return view('humanverification.botOverview') + ->with('title', "Bot Overview") + ->with('ip', $ip) + ->with('userList', $userList) + ->with('user', $user); + } + + public function botOverviewChange(Request $request) { + $id = ""; + $uid = ""; + $ip = $request->ip(); + if (\App\Http\Controllers\HumanVerification::couldBeSpammer($ip)) { + $id = hash("sha512", "999.999.999.999"); + $uid = hash("sha512", "999.999.999.999" . $ip . $_SERVER["AGENT"] . "uid"); + } else { + $id = hash("sha512", $ip); + $uid = hash("sha512", $ip . $_SERVER["AGENT"] . "uid"); + } + + $userList = Cache::get(HumanVerification::PREFIX . "." . $id); + $user = $userList[$uid]; + + if($request->filled("locked")){ + $user["locked"] = boolval($request->input('locked')); + }elseif($request->filled("whitelist")) { + $user["whitelist"] = boolval($request->input('whitelist')); + }elseif($request->filled("unusedResultPages")) { + $user["unusedResultPages"] = intval($request->input('unusedResultPages')); + } + + HumanVerification::saveUser($user); + return redirect('admin/bot'); + } } diff --git a/app/Http/Middleware/HumanVerification.php b/app/Http/Middleware/HumanVerification.php index cf2a4e7033653e465b1591657230396c1b1454d2..1ce6b38a2a8ab00f0f7d0db9e3fdbca1352f81d2 100644 --- a/app/Http/Middleware/HumanVerification.php +++ b/app/Http/Middleware/HumanVerification.php @@ -66,20 +66,21 @@ class HumanVerification } else { $user = $users[$uid]; } + # Lock out everyone in a Bot network # Find out how many requests this IP has made $sum = 0; // Defines if this is the only user using that IP Adress $alone = true; - foreach ($users as $uid => $userTmp) { + foreach ($users as $uidTmp => $userTmp) { if (!$userTmp["whitelist"]) { $sum += $userTmp["unusedResultPages"]; - if ($userTmp["uid"] != $uid) { + if ($userTmp["uid"] !== $uid) { $alone = false; } } } - + # A lot of automated requests are from websites that redirect users to our result page. # We will detect those requests and put a captcha $referer = URL::previous(); @@ -97,7 +98,7 @@ class HumanVerification if ((!$alone && $sum >= 50 && !$user["whitelist"]) || $refererLock) { $user["locked"] = true; } - + # If the user is locked we will force a Captcha validation if ($user["locked"]) { $captcha = Captcha::create("default", true); diff --git a/resources/views/humanverification/botOverview.blade.php b/resources/views/humanverification/botOverview.blade.php new file mode 100644 index 0000000000000000000000000000000000000000..32fe52c2df3d7223d89a434c525829a64b0aa3f7 --- /dev/null +++ b/resources/views/humanverification/botOverview.blade.php @@ -0,0 +1,70 @@ +@extends('layouts.subPages') + +@section('title', $title ) + +@section('content') + <style> + table form { + padding-top: 8px; + padding-bottom: 8px; + } + td:nth-child(1) { + padding-right: 8px; + } + </style> + <table> + <tbody> + <tr> + <td>IP-Adresse</td> + <td><pre>{{$ip}}</pre></td> + </tr> + <tr> + <td>ID</td> + <td><pre>{{$user["id"]}}</pre></td> + </tr> + <tr> + <td>User-ID</td> + <td><pre>{{$user["uid"]}}</pre></td> + </tr> + <tr> + <td>Unused Resultpages</td> + <td> + <form action="" method="post"> + <input onchange="this.form.submit()" type="number" name="unusedResultPages" id="unusedResultPages" value="{{$user["unusedResultPages"]}}"> + </form> + </td> + </tr> + <tr> + <td>Whitelist</td> + <td> + <form action="" method="post"> + <select name="whitelist" id="locked" onchange="this.form.submit()"> + <option value="1" @if($user["whitelist"]) selected @endif>True</option> + <option value="0" @if(!$user["whitelist"]) selected @endif>False</option> + </select> + </form> + </td> + </tr> + <tr> + <td>Locked</td> + <td> + <form action="" method="post"> + <select name="locked" id="locked" onchange="this.form.submit()"> + <option value="1" @if($user["locked"]) selected @endif>True</option> + <option value="0" @if(!$user["locked"]) selected @endif>False</option> + </select> + </form> + </td> + </tr> + <tr> + <td>Locked Key</td> + <td><pre>{{$user["lockedKey"]}}</pre></td> + </tr> + <tr> + <td>Expiration</td> + <td><pre>{{$user["expiration"]}}</pre></td> + </tr> + </tbody> + </table> + {{ dd($userList) }} +@endsection diff --git a/routes/web.php b/routes/web.php index 3c9b095cc861986066c025efe4ae534cd24ab6de..9d1825cdd0a3511c9912426cfc6de9777906c906 100644 --- a/routes/web.php +++ b/routes/web.php @@ -179,6 +179,8 @@ Route::group( Route::get('ip', function () { dd(Request::ip(), $_SERVER["AGENT"]); }); + Route::get('bot', 'HumanVerification@botOverview'); + Route::post('bot', 'HumanVerification@botOverviewChange'); }); Route::get('settings', function () { diff --git a/storage/app/public/aufnahmeantrag-de.pdf b/storage/app/public/aufnahmeantrag-de.pdf index e8f87582b79707e01e46d84d66dddda1a9988263..ff8f662179edb92ef13f82e74ff6604cb8ac71d2 100755 Binary files a/storage/app/public/aufnahmeantrag-de.pdf and b/storage/app/public/aufnahmeantrag-de.pdf differ diff --git a/storage/app/public/aufnahmeantrag-en.pdf b/storage/app/public/aufnahmeantrag-en.pdf index c35707b886402275b4a6f772ae072fb176c039df..96f174ec2ef0b5839757a98b7caf0f57459d4774 100755 Binary files a/storage/app/public/aufnahmeantrag-en.pdf and b/storage/app/public/aufnahmeantrag-en.pdf differ