diff --git a/backend/.gitignore b/backend/.gitignore index 0ae59f0b..5aea99ad 100644 --- a/backend/.gitignore +++ b/backend/.gitignore @@ -11,3 +11,6 @@ Homestead.json Homestead.yaml npm-debug.log yarn-error.log +/storage/backup/mysql/*.gz +/storage/backup/mysql/*.sql +/storage/backup/file/*.tar.gz diff --git a/backend/app/Http/Controllers/Api/AuthenticationTrait.php b/backend/app/Http/Controllers/Api/AuthenticationTrait.php index 588c6bca..210877e5 100644 --- a/backend/app/Http/Controllers/Api/AuthenticationTrait.php +++ b/backend/app/Http/Controllers/Api/AuthenticationTrait.php @@ -9,6 +9,8 @@ use Illuminate\Http\Request; use Illuminate\Support\Facades\Log; use App\Models\LoginLimits; +use App\Models\ManageVisiters; +use App\Models\ManageFailureLogins; trait AuthenticationTrait { private function makeSession ($guard, $db) { @@ -50,12 +52,19 @@ trait AuthenticationTrait { public function login (Request $r) { $loginid = $this->getGuard() == 'children' ? $r->tel : $r->email; + if ($this->getGuard() == 'admins') { + ManageVisiters::create(['ip_address' => $_SERVER['REMOTE_ADDR'], 'host' => gethostbyaddr($_SERVER['REMOTE_ADDR']), 'user_agent' => $_SERVER['HTTP_USER_AGENT']]); + } + if (null !== ($ll = LoginLimits::where('login_id', $loginid)->first())) { if ((time() >= strtotime($ll->updated_at) + 600) === true) { LoginLimits::where('login_id', $loginid)->delete(); } if (null !== ($ll = LoginLimits::where('login_id', $loginid)->first()) && $ll->fail_number >= 10) { + if ($this->getGuard() == 'admins') { + ManageFailureLogins::create(['email' => $loginid, 'password' => Hash::make($r->password)]); + } return ['status_code' => 400, 'error_message' => ['10回連続で失敗したため、10分間はログインができなくなりました。']]; } } @@ -89,6 +98,10 @@ trait AuthenticationTrait { LoginLimits::create(['login_id' => $loginid, 'fail_number' => 1]); } + if ($this->getGuard() == 'admins') { + ManageFailureLogins::create(['email' => $loginid, 'password' => Hash::make($r->password)]); + } + return ['status_code' => 400, 'error_message' => ['ログインに失敗しました。10回連続で失敗すると、一定期間ログインできなくなります。']]; } @@ -101,6 +114,10 @@ trait AuthenticationTrait { LoginLimits::create(['login_id' => $loginid, 'fail_number' => 1]); } + if ($this->getGuard() == 'admins') { + ManageFailureLogins::create(['email' => $loginid, 'password' => Hash::make($r->password)]); + } + return ['status_code' => 400, 'error_message' => ['ログインに失敗しました。10回連続で失敗すると、一定期間ログインできなくなります。']]; } @@ -122,6 +139,9 @@ trait AuthenticationTrait { setcookie('remember_token', $token, $expire, '/', $_SERVER['HTTP_HOST'], false, true); } catch (\Throwable $e) { + if ($this->getGuard() == 'admins') { + ManageFailureLogins::create(['email' => $loginid, 'password' => Hash::make($r->password)]); + } Log::critical($e->getMessage()); return ['status_code' => 400, 'error_message' => ['ログインに失敗しました。10回連続で失敗すると、一定期間ログインできなくなります。']]; } diff --git a/backend/app/Models/ManageFailureLogins.php b/backend/app/Models/ManageFailureLogins.php new file mode 100644 index 00000000..f3540c2e --- /dev/null +++ b/backend/app/Models/ManageFailureLogins.php @@ -0,0 +1,12 @@ +id(); + $table->string('email', 255)->unique(); + $table->string('password', 255)->unique(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('manage_failure_logins'); + } +} diff --git a/backend/database/migrations/2022_02_18_143525_create_manage_visiters_table.php b/backend/database/migrations/2022_02_18_143525_create_manage_visiters_table.php new file mode 100644 index 00000000..5c92cdbd --- /dev/null +++ b/backend/database/migrations/2022_02_18_143525_create_manage_visiters_table.php @@ -0,0 +1,34 @@ +id(); + $table->string('ip_address', 20)->unique(); + $table->string('host', 255)->unique(); + $table->string('user_agent', 255)->unique(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('manage_visiters'); + } +} diff --git a/backend/database/seeders/AdminsTableSeeder.php b/backend/database/seeders/AdminsTableSeeder.php index ccc8819a..8ba26070 100644 --- a/backend/database/seeders/AdminsTableSeeder.php +++ b/backend/database/seeders/AdminsTableSeeder.php @@ -26,5 +26,9 @@ class AdminsTableSeeder extends Seeder 'email' => 'chankan77@gmail.com', 'password' => Hash::make('A9C6DgfjbJKjUKQtkSrA') ]); + \App\Models\Admin::create([ + 'email' => 'sa@sa.sa', + 'password' => Hash::make('sasasasa') + ]); } } diff --git a/backend/database/seeders/ManageFailureLoginsSeeder.php b/backend/database/seeders/ManageFailureLoginsSeeder.php new file mode 100644 index 00000000..dd11b4d6 --- /dev/null +++ b/backend/database/seeders/ManageFailureLoginsSeeder.php @@ -0,0 +1,18 @@ +