From 6927c3c57f305f40179e1c045a2fce300b2ff4a9 Mon Sep 17 00:00:00 2001 From: Dominik Hebeler Date: Tue, 28 May 2019 15:48:32 +0200 Subject: [PATCH] Changed auth to basic auth --- .gitlab-ci.yml | 4 + app/Http/Controllers/AdminInterface.php | 168 +++++++++++------- app/Http/Controllers/HomeController.php | 28 +++ app/Http/Middleware/RefererCheck.php | 26 --- build.sh | 4 +- .../2019_05_28_153442_create_users_table.php | 36 ++++ database/seeds/DatabaseSeeder.php | 2 +- database/seeds/UsersSeeder.php | 16 ++ .../views/admin/countGraphToday.blade.php | 41 +++++ resources/views/home.blade.php | 23 +++ routes/web.php | 7 +- 11 files changed, 263 insertions(+), 92 deletions(-) create mode 100644 app/Http/Controllers/HomeController.php delete mode 100644 app/Http/Middleware/RefererCheck.php create mode 100644 database/migrations/2019_05_28_153442_create_users_table.php create mode 100644 database/seeds/UsersSeeder.php create mode 100644 resources/views/admin/countGraphToday.blade.php create mode 100644 resources/views/home.blade.php diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 35919a69..37fa5b38 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -24,6 +24,7 @@ update(144.76.113.134): - scp -P 63824 metager@metager3.de:~/blacklistDomains.txt config/ - scp -P 63824 metager@metager3.de:~/adBlacklistUrl.txt config/ - scp -P 63824 metager@metager3.de:~/adBlacklistDomains.txt config/ + - scp -P 63824 metager@metager3.de:~/UsersSeeder.php database/seeds/ - touch storage/logs/laravel.log - touch storage/logs/worker.log - touch database/metager.sqlite @@ -33,6 +34,7 @@ update(144.76.113.134): - npm install - npm run production - php artisan migrate --force + - php artisan db:seed --force - php artisan requests:gather - if [ -f ~/MetaGer/artisan ]; then php ~/MetaGer/artisan down;fi - cd ~/ @@ -65,6 +67,7 @@ update(metager2): - scp -P 63824 metager@metager3.de:~/sumasEn.json config/ - scp -P 63824 metager@metager3.de:~/blacklistUrl.txt config/ - scp -P 63824 metager@metager3.de:~/blacklistDomains.txt config/ + - scp -P 63824 metager@metager3.de:~/UsersSeeder.php database/seeds/ - touch storage/logs/laravel.log - touch storage/logs/worker.log - touch database/metager.sqlite @@ -74,6 +77,7 @@ update(metager2): - npm install - npm run production - php artisan migrate --force + - php artisan db:seed --force - php artisan requests:gather - if [ -f ~/MetaGer/artisan ]; then php ~/MetaGer/artisan down;fi - cd ~/ diff --git a/app/Http/Controllers/AdminInterface.php b/app/Http/Controllers/AdminInterface.php index 389c5fe1..df8d3dd1 100644 --- a/app/Http/Controllers/AdminInterface.php +++ b/app/Http/Controllers/AdminInterface.php @@ -94,7 +94,107 @@ class AdminInterface extends Controller if (!is_int($days) || $days <= 0) { $days = 28; } + $logs = $this->getStats($days); + $oldLogs = []; + $rekordTag = 0; + $minCount = 0; + $rekordTagDate = ""; + $size = 0; + $count = 0; + + $now = Carbon::now()->subMinutes(Carbon::now()->minute % 5)->format('H:i'); + if ($now === "00:00") { + $now = "00:05"; + } + + foreach ($logs as $key => $stats) { + if ($key === 0) { + // Log for today + $logToday = empty($stats->insgesamt->{$interface}) ? 0 : $stats->insgesamt->{$interface}; + continue; + } + $insgesamt = empty($stats->insgesamt->{$interface}) ? 0 : $stats->insgesamt->{$interface}; + $sameTime = empty($stats->time->{$now}->{$interface}) ? 0 : $stats->time->{$now}->{$interface}; + + if ($insgesamt > $rekordTag) { + $rekordTag = $insgesamt; + $rekordTagSameTime = $sameTime; + $rekordTagDate = Carbon::now()->subDays($key)->format('d.m.Y'); + } + if ($minCount === 0 || $insgesamt < $minCount) { + $minCount = $insgesamt; + } + $oldLogs[$key]['sameTime'] = number_format(floatval($sameTime), 0, ",", "."); + $oldLogs[$key]['insgesamt'] = number_format(floatval($insgesamt), 0, ",", "."); + # Nun noch den median: + $count += $insgesamt; + $size++; + if ($size > 0) { + $oldLogs[$key]['median'] = number_format(floatval(round($count / $size)), 0, ",", "."); + } + + } + + if ($request->input('out', 'web') === "web") { + return view('admin.count') + ->with('title', 'Suchanfragen - MetaGer') + ->with('today', number_format(floatval($logToday), 0, ",", ".")) + ->with('oldLogs', $oldLogs) + ->with('minCount', $minCount) + ->with('rekordCount', number_format(floatval($rekordTag), 0, ",", ".")) + ->with('rekordTagSameTime', number_format(floatval($rekordTagSameTime), 0, ",", ".")) + ->with('rekordDate', $rekordTagDate) + ->with('days', $days); + } else { + $result = ""; + foreach ($oldLogs as $key => $value) { + $resultTmp = '"' . date("D, d M y", mktime(date("H"), date("i"), date("s"), date("m"), date("d") - $key, date("Y"))) . '",'; + $resultTmp .= '"' . $value['sameTime'] . '",'; + $resultTmp .= '"' . $value['insgesamt'] . '",'; + $resultTmp .= '"' . $value['median'] . '"' . "\r\n"; + $result = $resultTmp . $result; + } + return response($result, 200) + ->header('Content-Type', 'text/csv') + ->header('Content-Disposition', 'attachment; filename="count.csv"'); + + } + + } + + public function countGraphToday() + { + $stats = $this->getStats(0)[0]; + + $hourly = []; + $previous = 0; + $max = 0; + foreach ($stats->time as $time => $timeStats) { + $hour = intval(substr($time, 0, strpos($time, ":"))); + if (empty($hourly[$hour])) { + $hourly[$hour] = 0; + } + $hourly[$hour] += $timeStats->all - $previous; + $previous = $timeStats->all; + if ($hourly[$hour] > $max) { + $max = $hourly[$hour]; + } + } + $result = [ + "insgesamt" => $stats->insgesamt->all, + "max" => $max, + "hourly" => $hourly, + ]; + + return response() + ->view('admin.countGraphToday', ["data" => $result], 200) + ->header('Content-Type', "image/svg+xml"); + + } + + private function getStats($days) + { $maxDate = Carbon::createFromFormat('d.m.Y', "28.06.2016"); $selectedDate = Carbon::now()->subDays($days); if ($maxDate > $selectedDate) { @@ -164,78 +264,20 @@ class AdminInterface extends Controller } while ($removedOne === true); } - $oldLogs = []; - $rekordTag = 0; - $minCount = 0; - $rekordTagDate = ""; - $size = 0; - $count = 0; - - $now = Carbon::now()->subMinutes(Carbon::now()->minute % 5)->format('H:i'); - if ($now === "00:00") { - $now = "00:05"; - } + $result = []; foreach ($neededLogs as $key => $value) { $countFile = $value["countFile"]; if (file_exists($countFile)) { - $stats = json_decode(file_get_contents($countFile)); - if ($key === 0) { - // Log for today - $logToday = empty($stats->insgesamt->{$interface}) ? 0 : $stats->insgesamt->{$interface}; - if (\file_exists($today["countFile"])) { - unlink($today["countFile"]); - } - continue; - } - $insgesamt = empty($stats->insgesamt->{$interface}) ? 0 : $stats->insgesamt->{$interface}; - $sameTime = empty($stats->time->{$now}->{$interface}) ? 0 : $stats->time->{$now}->{$interface}; - - if ($insgesamt > $rekordTag) { - $rekordTag = $insgesamt; - $rekordTagSameTime = $sameTime; - $rekordTagDate = Carbon::now()->subDays($key)->format('d.m.Y'); - } - if ($minCount === 0 || $insgesamt < $minCount) { - $minCount = $insgesamt; - } - $oldLogs[$key]['sameTime'] = number_format(floatval($sameTime), 0, ",", "."); - $oldLogs[$key]['insgesamt'] = number_format(floatval($insgesamt), 0, ",", "."); - # Nun noch den median: - $count += $insgesamt; - $size++; - if ($size > 0) { - $oldLogs[$key]['median'] = number_format(floatval(round($count / $size)), 0, ",", "."); - } - + $result[$key] = json_decode(file_get_contents($countFile)); } } - if ($request->input('out', 'web') === "web") { - return view('admin.count') - ->with('title', 'Suchanfragen - MetaGer') - ->with('today', number_format(floatval($logToday), 0, ",", ".")) - ->with('oldLogs', $oldLogs) - ->with('minCount', $minCount) - ->with('rekordCount', number_format(floatval($rekordTag), 0, ",", ".")) - ->with('rekordTagSameTime', number_format(floatval($rekordTagSameTime), 0, ",", ".")) - ->with('rekordDate', $rekordTagDate) - ->with('days', $days); - } else { - $result = ""; - foreach ($oldLogs as $key => $value) { - $resultTmp = '"' . date("D, d M y", mktime(date("H"), date("i"), date("s"), date("m"), date("d") - $key, date("Y"))) . '",'; - $resultTmp .= '"' . $value['sameTime'] . '",'; - $resultTmp .= '"' . $value['insgesamt'] . '",'; - $resultTmp .= '"' . $value['median'] . '"' . "\r\n"; - $result = $resultTmp . $result; - } - return response($result, 200) - ->header('Content-Type', 'text/csv') - ->header('Content-Disposition', 'attachment; filename="count.csv"'); - + if (\file_exists($today["countFile"])) { + unlink($today["countFile"]); } + return $result; } public function check() diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php new file mode 100644 index 00000000..7cbc2c3f --- /dev/null +++ b/app/Http/Controllers/HomeController.php @@ -0,0 +1,28 @@ +middleware('auth'); + } + + /** + * Show the application dashboard. + * + * @return \Illuminate\Contracts\Support\Renderable + */ + public function index() + { + return view('home'); + } +} diff --git a/app/Http/Middleware/RefererCheck.php b/app/Http/Middleware/RefererCheck.php deleted file mode 100644 index c4c6d2b8..00000000 --- a/app/Http/Middleware/RefererCheck.php +++ /dev/null @@ -1,26 +0,0 @@ -server('HTTP_REFERER'); - if ($refererCorrect !== $referer && "https://metager.de/admin/count" !== $referer) { - abort(401, 'Unauthorized'); - } else { - return $next($request); - } - } -} diff --git a/build.sh b/build.sh index e0d0a682..68cf4adb 100644 --- a/build.sh +++ b/build.sh @@ -15,6 +15,7 @@ scp -P 63824 metager@metager3.de:~/blacklistUrl.txt config/ scp -P 63824 metager@metager3.de:~/blacklistDomains.txt config/ scp -P 63824 metager@metager3.de:~/adBlacklistUrl.txt config/ scp -P 63824 metager@metager3.de:~/adBlacklistDomains.txt config/ +scp -P 63824 metager@metager3.de:~/UsersSeeder.php database/seeds/ touch storage/logs/laravel.log touch storage/logs/worker.log touch database/metager.sqlite @@ -23,4 +24,5 @@ chmod -R 777 storage chmod -R 777 bootstrap/cache npm install npm run production -php artisan migrate --force \ No newline at end of file +php artisan migrate --force +php artisan db:seed --force \ No newline at end of file diff --git a/database/migrations/2019_05_28_153442_create_users_table.php b/database/migrations/2019_05_28_153442_create_users_table.php new file mode 100644 index 00000000..a91e1d3c --- /dev/null +++ b/database/migrations/2019_05_28_153442_create_users_table.php @@ -0,0 +1,36 @@ +bigIncrements('id'); + $table->string('name'); + $table->string('email')->unique(); + $table->timestamp('email_verified_at')->nullable(); + $table->string('password'); + $table->rememberToken(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('users'); + } +} diff --git a/database/seeds/DatabaseSeeder.php b/database/seeds/DatabaseSeeder.php index e119db62..379c3151 100644 --- a/database/seeds/DatabaseSeeder.php +++ b/database/seeds/DatabaseSeeder.php @@ -11,6 +11,6 @@ class DatabaseSeeder extends Seeder */ public function run() { - // $this->call(UsersTableSeeder::class); + $this->call(UsersSeeder::class); } } diff --git a/database/seeds/UsersSeeder.php b/database/seeds/UsersSeeder.php new file mode 100644 index 00000000..2acbf135 --- /dev/null +++ b/database/seeds/UsersSeeder.php @@ -0,0 +1,16 @@ + +@php ($width = 400) +@php ($height = 100) +@php ($padding = 3) +@php ($paddingArrow = 4) +@php ($startX = 20) +@php ($startY = $height-20) +@php ($entryCount = sizeof($data["hourly"])) +@php ($drawWidth = $width - $padding - $paddingArrow - $startX) +@php ($widthPerElement = $drawWidth / (sizeof($data["hourly"]) * 2)) +@php ($heightPerSearch = ($startY - $padding - $paddingArrow) / $data["max"]) + + + + + X(Abfragen) + + + @for($i = 0; $i < 10; $i++) + + + + @php ($value = round($data["max"] - $i * ($data["max"] / 10.0))) + @if($value >= 1000) + @php($value = round($value / 100.0) / 10.0 . "k" ) + @endif + {{ $value }} + + @endfor + @for($i = 0; $i < $entryCount; $i++) + + + {{ number_format($i, 0, ",", ".") }} + + @endfor + + + + Y(h) + + diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php new file mode 100644 index 00000000..05dfca92 --- /dev/null +++ b/resources/views/home.blade.php @@ -0,0 +1,23 @@ +@extends('layouts.app') + +@section('content') +
+
+
+
+
Dashboard
+ +
+ @if (session('status')) + + @endif + + You are logged in! +
+
+
+
+
+@endsection diff --git a/routes/web.php b/routes/web.php index 64e68bd8..8b81345f 100644 --- a/routes/web.php +++ b/routes/web.php @@ -167,9 +167,10 @@ Route::group( ->with('request', $this->input('request', 'GET')); }); - Route::group(['middleware' => ['referer.check'], 'prefix' => 'admin'], function () { + Route::group(['middleware' => ['auth.basic'], 'prefix' => 'admin'], function () { Route::get('/', 'AdminInterface@index'); Route::match(['get', 'post'], 'count', 'AdminInterface@count'); + Route::get('count/graphtoday.svg', 'AdminInterface@countGraphToday'); Route::get('check', 'AdminInterface@check'); Route::get('engines', 'AdminInterface@engines'); }); @@ -235,3 +236,7 @@ Route::group( }); }); }); + +Auth::routes(); + +Route::get('/home', 'HomeController@index')->name('home'); -- 2.22.0