diff --git a/app/Events/UserIsDeleted.php b/app/Events/UserIsDeleted.php new file mode 100644 index 0000000000..34459decec --- /dev/null +++ b/app/Events/UserIsDeleted.php @@ -0,0 +1,40 @@ +user = $user; + $this->ipAddress = $ipAddress; + } +} diff --git a/app/Http/Controllers/Admin/DomainController.php b/app/Http/Controllers/Admin/DomainController.php new file mode 100644 index 0000000000..163e7e90b8 --- /dev/null +++ b/app/Http/Controllers/Admin/DomainController.php @@ -0,0 +1,136 @@ +data; + + // known domains + $knownDomains = $this->getKnownDomains(); + + return view('admin.users.domains', compact('title', 'mainTitleIcon', 'knownDomains', 'subTitle', 'subTitleIcon', 'domains')); + } + + + /** + * @param Request $request + * + * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector + */ + public function manual(Request $request) + { + if (strlen($request->get('domain')) === 0) { + Session::flash('error', trans('firefly.no_domain_filled_in')); + + return redirect(route('admin.users.domains')); + } + + $domain = $request->get('domain'); + $blocked = FireflyConfig::get('blocked-domains', [])->data; + + if (in_array($domain, $blocked)) { + Session::flash('error', trans('firefly.domain_already_blocked', ['domain' => $domain])); + + return redirect(route('admin.users.domains')); + } + $blocked[] = $domain; + FireflyConfig::set('blocked-domains', $blocked); + + Session::flash('success', trans('firefly.domain_is_now_blocked', ['domain' => $domain])); + + return redirect(route('admin.users.domains')); + } + + /** + * @param string $domain + * + * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector + */ + public function toggleDomain(string $domain) + { + $blocked = FireflyConfig::get('blocked-domains', [])->data; + + if (in_array($domain, $blocked)) { + $key = array_search($domain, $blocked); + unset($blocked[$key]); + sort($blocked); + + FireflyConfig::set('blocked-domains', $blocked); + Session::flash('message', trans('firefly.domain_now_unblocked', ['domain' => $domain])); + + + return redirect(route('admin.users.domains')); + + } + + $blocked[] = $domain; + + FireflyConfig::set('blocked-domains', $blocked); + Session::flash('message', trans('firefly.domain_now_blocked', ['domain' => $domain])); + + return redirect(route('admin.users.domains')); + } + + /** + * @return array + */ + private function getKnownDomains(): array + { + $users = User::get(); + $set = []; + $filtered = []; + /** @var User $user */ + foreach ($users as $user) { + $email = $user->email; + $parts = explode('@', $email); + $domain = $parts[1]; + $set[] = $domain; + } + $set = array_unique($set); + // filter for already banned domains: + $blocked = FireflyConfig::get('blocked-domains', [])->data; + + foreach ($set as $domain) { + // in the block array? ignore it. + if (!in_array($domain, $blocked)) { + $filtered[] = $domain; + } + } + asort($filtered); + + return $filtered; + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Admin/UserController.php b/app/Http/Controllers/Admin/UserController.php index 168e674f2b..08d4663e06 100644 --- a/app/Http/Controllers/Admin/UserController.php +++ b/app/Http/Controllers/Admin/UserController.php @@ -14,11 +14,8 @@ namespace FireflyIII\Http\Controllers\Admin; use FireflyIII\Http\Controllers\Controller; use FireflyIII\Repositories\User\UserRepositoryInterface; -use FireflyIII\Support\Facades\FireflyConfig; use FireflyIII\User; -use Illuminate\Http\Request; use Preferences; -use Session; /** * Class UserController @@ -28,22 +25,14 @@ use Session; class UserController extends Controller { + /** - * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + * @param User $user */ - public function domains() + public function edit(User $user) { - $title = strval(trans('firefly.administration')); - $mainTitleIcon = 'fa-hand-spock-o'; - $subTitle = strval(trans('firefly.blocked_domains')); - $subTitleIcon = 'fa-users'; - $domains = FireflyConfig::get('blocked-domains', [])->data; - // known domains - $knownDomains = $this->getKnownDomains(); - - return view('admin.users.domains', compact('title', 'mainTitleIcon', 'knownDomains', 'subTitle', 'subTitleIcon', 'domains')); } /** @@ -85,92 +74,5 @@ class UserController extends Controller } - /** - * @param Request $request - * - * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector - */ - public function manual(Request $request) - { - if (strlen($request->get('domain')) === 0) { - Session::flash('error', trans('firefly.no_domain_filled_in')); - - return redirect(route('admin.users.domains')); - } - - $domain = $request->get('domain'); - $blocked = FireflyConfig::get('blocked-domains', [])->data; - - if (in_array($domain, $blocked)) { - Session::flash('error', trans('firefly.domain_already_blocked', ['domain' => $domain])); - - return redirect(route('admin.users.domains')); - } - $blocked[] = $domain; - FireflyConfig::set('blocked-domains', $blocked); - - Session::flash('success', trans('firefly.domain_is_now_blocked', ['domain' => $domain])); - return redirect(route('admin.users.domains')); - } - - /** - * @param string $domain - * - * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector - */ - public function toggleDomain(string $domain) - { - $blocked = FireflyConfig::get('blocked-domains', [])->data; - - if (in_array($domain, $blocked)) { - $key = array_search($domain, $blocked); - unset($blocked[$key]); - sort($blocked); - - FireflyConfig::set('blocked-domains', $blocked); - Session::flash('message', trans('firefly.domain_now_unblocked', ['domain' => $domain])); - - - return redirect(route('admin.users.domains')); - - } - - $blocked[] = $domain; - - FireflyConfig::set('blocked-domains', $blocked); - Session::flash('message', trans('firefly.domain_now_blocked', ['domain' => $domain])); - - return redirect(route('admin.users.domains')); - } - - /** - * @return array - */ - private function getKnownDomains(): array - { - $users = User::get(); - $set = []; - $filtered = []; - /** @var User $user */ - foreach ($users as $user) { - $email = $user->email; - $parts = explode('@', $email); - $domain = $parts[1]; - $set[] = $domain; - } - $set = array_unique($set); - // filter for already banned domains: - $blocked = FireflyConfig::get('blocked-domains', [])->data; - - foreach ($set as $domain) { - // in the block array? ignore it. - if (!in_array($domain, $blocked)) { - $filtered[] = $domain; - } - } - asort($filtered); - - return $filtered; - } } diff --git a/app/Http/Controllers/ProfileController.php b/app/Http/Controllers/ProfileController.php index 95cf5fad7d..1fac4e2d2d 100644 --- a/app/Http/Controllers/ProfileController.php +++ b/app/Http/Controllers/ProfileController.php @@ -12,6 +12,7 @@ declare(strict_types = 1); namespace FireflyIII\Http\Controllers; use Auth; +use FireflyIII\Events\UserIsDeleted; use FireflyIII\Http\Requests\DeleteAccountFormRequest; use FireflyIII\Http\Requests\ProfileFormRequest; use FireflyIII\User; @@ -106,6 +107,10 @@ class ProfileController extends Controller return redirect(route('profile.delete-account')); } + // respond to deletion: + event(new UserIsDeleted(Auth::user(), $request->ip())); + + // DELETE! $email = Auth::user()->email; Auth::user()->delete(); diff --git a/app/Http/routes.php b/app/Http/routes.php index 4d1f4b7617..955af396a3 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -424,10 +424,12 @@ Route::group( // user manager Route::get('/admin/users', ['uses' => 'Admin\UserController@index', 'as' => 'admin.users']); - Route::get('/admin/users/domains', ['uses' => 'Admin\UserController@domains', 'as' => 'admin.users.domains']); - Route::get('/admin/users/domains/toggle/{domain}', ['uses' => 'Admin\UserController@toggleDomain', 'as' => 'admin.users.domains.block-toggle']); + Route::get('/admin/users/edit/{user}', ['uses' => 'Admin\UserController@edit', 'as' => 'admin.users.edit']); - Route::post('/admin/users/domains/manual', ['uses' => 'Admin\UserController@manual', 'as' => 'admin.users.domains.manual']); + // user domains: + Route::get('/admin/domains', ['uses' => 'Admin\DomainController@domains', 'as' => 'admin.users.domains']); + Route::get('/admin/domains/toggle/{domain}', ['uses' => 'Admin\DomainController@toggleDomain', 'as' => 'admin.users.domains.block-toggle']); + Route::post('/admin/domains/manual', ['uses' => 'Admin\DomainController@manual', 'as' => 'admin.users.domains.manual']); } ); diff --git a/resources/views/admin/users/index.twig b/resources/views/admin/users/index.twig index 15cf943bcb..9d17bee41b 100644 --- a/resources/views/admin/users/index.twig +++ b/resources/views/admin/users/index.twig @@ -29,7 +29,11 @@
{% for user in users %}