mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-09-24 22:48:18 +00:00
New user related code.
This commit is contained in:
40
app/Events/UserIsDeleted.php
Normal file
40
app/Events/UserIsDeleted.php
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* UserIsDeleted.php
|
||||||
|
* Copyright (C) 2016 thegrumpydictator@gmail.com
|
||||||
|
*
|
||||||
|
* This software may be modified and distributed under the terms
|
||||||
|
* of the MIT license. See the LICENSE file for details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare(strict_types = 1);
|
||||||
|
|
||||||
|
namespace FireflyIII\Events;
|
||||||
|
|
||||||
|
use FireflyIII\User;
|
||||||
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class UserIsDeleted
|
||||||
|
*
|
||||||
|
* @package FireflyIII\Events
|
||||||
|
*/
|
||||||
|
class UserIsDeleted extends Event
|
||||||
|
{
|
||||||
|
use SerializesModels;
|
||||||
|
|
||||||
|
public $ipAddress;
|
||||||
|
public $user;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new event instance.
|
||||||
|
*
|
||||||
|
* @param User $user
|
||||||
|
* @param string $ipAddress
|
||||||
|
*/
|
||||||
|
public function __construct(User $user, string $ipAddress)
|
||||||
|
{
|
||||||
|
$this->user = $user;
|
||||||
|
$this->ipAddress = $ipAddress;
|
||||||
|
}
|
||||||
|
}
|
136
app/Http/Controllers/Admin/DomainController.php
Normal file
136
app/Http/Controllers/Admin/DomainController.php
Normal file
@@ -0,0 +1,136 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* DomainController.php
|
||||||
|
* Copyright (C) 2016 thegrumpydictator@gmail.com
|
||||||
|
*
|
||||||
|
* This software may be modified and distributed under the terms
|
||||||
|
* of the MIT license. See the LICENSE file for details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare(strict_types = 1);
|
||||||
|
|
||||||
|
namespace FireflyIII\Http\Controllers\Admin;
|
||||||
|
|
||||||
|
|
||||||
|
use FireflyIII\Http\Controllers\Controller;
|
||||||
|
use FireflyIII\Support\Facades\FireflyConfig;
|
||||||
|
use FireflyIII\User;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Session;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class DomainController
|
||||||
|
*
|
||||||
|
* @package FireflyIII\Http\Controllers\Admin
|
||||||
|
*/
|
||||||
|
class DomainController extends Controller
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
|
||||||
|
*/
|
||||||
|
public function domains()
|
||||||
|
{
|
||||||
|
|
||||||
|
$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'));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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;
|
||||||
|
}
|
||||||
|
}
|
@@ -14,11 +14,8 @@ namespace FireflyIII\Http\Controllers\Admin;
|
|||||||
|
|
||||||
use FireflyIII\Http\Controllers\Controller;
|
use FireflyIII\Http\Controllers\Controller;
|
||||||
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
||||||
use FireflyIII\Support\Facades\FireflyConfig;
|
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
use Illuminate\Http\Request;
|
|
||||||
use Preferences;
|
use Preferences;
|
||||||
use Session;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class UserController
|
* Class UserController
|
||||||
@@ -28,22 +25,14 @@ use Session;
|
|||||||
class UserController extends Controller
|
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -12,6 +12,7 @@ declare(strict_types = 1);
|
|||||||
namespace FireflyIII\Http\Controllers;
|
namespace FireflyIII\Http\Controllers;
|
||||||
|
|
||||||
use Auth;
|
use Auth;
|
||||||
|
use FireflyIII\Events\UserIsDeleted;
|
||||||
use FireflyIII\Http\Requests\DeleteAccountFormRequest;
|
use FireflyIII\Http\Requests\DeleteAccountFormRequest;
|
||||||
use FireflyIII\Http\Requests\ProfileFormRequest;
|
use FireflyIII\Http\Requests\ProfileFormRequest;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
@@ -106,6 +107,10 @@ class ProfileController extends Controller
|
|||||||
return redirect(route('profile.delete-account'));
|
return redirect(route('profile.delete-account'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// respond to deletion:
|
||||||
|
event(new UserIsDeleted(Auth::user(), $request->ip()));
|
||||||
|
|
||||||
|
|
||||||
// DELETE!
|
// DELETE!
|
||||||
$email = Auth::user()->email;
|
$email = Auth::user()->email;
|
||||||
Auth::user()->delete();
|
Auth::user()->delete();
|
||||||
|
@@ -424,10 +424,12 @@ Route::group(
|
|||||||
|
|
||||||
// user manager
|
// user manager
|
||||||
Route::get('/admin/users', ['uses' => 'Admin\UserController@index', 'as' => 'admin.users']);
|
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/edit/{user}', ['uses' => 'Admin\UserController@edit', 'as' => 'admin.users.edit']);
|
||||||
Route::get('/admin/users/domains/toggle/{domain}', ['uses' => 'Admin\UserController@toggleDomain', 'as' => 'admin.users.domains.block-toggle']);
|
|
||||||
|
|
||||||
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']);
|
||||||
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@@ -29,7 +29,11 @@
|
|||||||
<tbody>
|
<tbody>
|
||||||
{% for user in users %}
|
{% for user in users %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>~</td>
|
<td>
|
||||||
|
<div class="btn-group btn-group-xs">
|
||||||
|
<a class="btn btn-default" href="{{ route('admin.users.edit',user.id) }}"><i class="fa fa-pencil"></i></a>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
<td>#{{ user.id }}</td>
|
<td>#{{ user.id }}</td>
|
||||||
<td>{{ user.email }}</td>
|
<td>{{ user.email }}</td>
|
||||||
<td>
|
<td>
|
||||||
|
Reference in New Issue
Block a user