mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2024-12-28 01:41:14 -06:00
Code for #456
This commit is contained in:
parent
06ff450d31
commit
3e3c48314f
38
app/Events/DeletedUser.php
Normal file
38
app/Events/DeletedUser.php
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* DeletedUser.php
|
||||||
|
* Copyright (C) 2016 thegrumpydictator@gmail.com
|
||||||
|
*
|
||||||
|
* This software may be modified and distributed under the terms of the
|
||||||
|
* Creative Commons Attribution-ShareAlike 4.0 International License.
|
||||||
|
*
|
||||||
|
* See the LICENSE file for details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare(strict_types = 1);
|
||||||
|
|
||||||
|
namespace FireflyIII\Events;
|
||||||
|
|
||||||
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class DeletedUser
|
||||||
|
*
|
||||||
|
* @package FireflyIII\Events
|
||||||
|
*/
|
||||||
|
class DeletedUser extends Event
|
||||||
|
{
|
||||||
|
use SerializesModels;
|
||||||
|
|
||||||
|
public $email;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new event instance. This event is triggered when a user deletes themselves.
|
||||||
|
*
|
||||||
|
* @param string $email
|
||||||
|
*/
|
||||||
|
public function __construct(string $email)
|
||||||
|
{
|
||||||
|
$this->email = $email;
|
||||||
|
}
|
||||||
|
}
|
@ -16,9 +16,11 @@ namespace FireflyIII\Handlers\Events;
|
|||||||
use Exception;
|
use Exception;
|
||||||
use FireflyConfig;
|
use FireflyConfig;
|
||||||
use FireflyIII\Events\ConfirmedUser;
|
use FireflyIII\Events\ConfirmedUser;
|
||||||
|
use FireflyIII\Events\DeletedUser;
|
||||||
use FireflyIII\Events\RegisteredUser;
|
use FireflyIII\Events\RegisteredUser;
|
||||||
use FireflyIII\Events\RequestedNewPassword;
|
use FireflyIII\Events\RequestedNewPassword;
|
||||||
use FireflyIII\Events\ResentConfirmation;
|
use FireflyIII\Events\ResentConfirmation;
|
||||||
|
use FireflyIII\Models\Configuration;
|
||||||
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
use Illuminate\Mail\Message;
|
use Illuminate\Mail\Message;
|
||||||
@ -75,6 +77,28 @@ class UserEventHandler
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param DeletedUser $event
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function saveEmailAddress(DeletedUser $event): bool
|
||||||
|
{
|
||||||
|
$email = hash('sha256', $event->email);
|
||||||
|
Log::debug(sprintf('Hash of email is %s', $email));
|
||||||
|
/** @var Configuration $configuration */
|
||||||
|
$configuration = FireflyConfig::get('deleted_users', []);
|
||||||
|
$content = $configuration->data;
|
||||||
|
if (!is_array($content)) {
|
||||||
|
$content = [];
|
||||||
|
}
|
||||||
|
$content[] = $email;
|
||||||
|
$configuration->data = $content;
|
||||||
|
$configuration->save();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method will send a newly registered user a confirmation message, urging him or her to activate their account.
|
* This method will send a newly registered user a confirmation message, urging him or her to activate their account.
|
||||||
*
|
*
|
||||||
@ -194,7 +218,6 @@ class UserEventHandler
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param User $user
|
* @param User $user
|
||||||
* @param string $ipAddress
|
* @param string $ipAddress
|
||||||
|
@ -15,9 +15,9 @@ namespace FireflyIII\Http\Controllers;
|
|||||||
|
|
||||||
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\Repositories\User\UserRepositoryInterface;
|
||||||
use Hash;
|
use Hash;
|
||||||
use Preferences;
|
use Log;
|
||||||
use Session;
|
use Session;
|
||||||
use View;
|
use View;
|
||||||
|
|
||||||
@ -112,12 +112,12 @@ class ProfileController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @param UserRepositoryInterface $repository
|
||||||
* @param DeleteAccountFormRequest $request
|
* @param DeleteAccountFormRequest $request
|
||||||
*
|
*
|
||||||
* @return \Illuminate\Http\RedirectResponse
|
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
|
||||||
* @throws \Exception
|
|
||||||
*/
|
*/
|
||||||
public function postDeleteAccount(DeleteAccountFormRequest $request)
|
public function postDeleteAccount(UserRepositoryInterface $repository, DeleteAccountFormRequest $request)
|
||||||
{
|
{
|
||||||
// old, new1, new2
|
// old, new1, new2
|
||||||
if (!Hash::check($request->get('password'), auth()->user()->password)) {
|
if (!Hash::check($request->get('password'), auth()->user()->password)) {
|
||||||
@ -125,34 +125,16 @@ class ProfileController extends Controller
|
|||||||
|
|
||||||
return redirect(route('profile.delete-account'));
|
return redirect(route('profile.delete-account'));
|
||||||
}
|
}
|
||||||
|
$user = auth()->user();
|
||||||
// store some stuff for the future:
|
Log::info(sprintf('User #%d has opted to delete their account', auth()->user()->id));
|
||||||
$registration = Preferences::get('registration_ip_address')->data;
|
// make repository delete user:
|
||||||
$confirmation = Preferences::get('confirmation_ip_address')->data;
|
auth()->logout();
|
||||||
|
|
||||||
// DELETE!
|
|
||||||
$email = auth()->user()->email;
|
|
||||||
auth()->user()->delete();
|
|
||||||
Session::flush();
|
Session::flush();
|
||||||
|
$repository->destroy($user);
|
||||||
|
|
||||||
Session::flash('gaEventCategory', 'user');
|
Session::flash('gaEventCategory', 'user');
|
||||||
Session::flash('gaEventAction', 'delete-account');
|
Session::flash('gaEventAction', 'delete-account');
|
||||||
|
|
||||||
// create a new user with the same email address so re-registration is blocked.
|
|
||||||
$newUser = User::create(
|
|
||||||
[
|
|
||||||
'email' => $email,
|
|
||||||
'password' => 'deleted',
|
|
||||||
'blocked' => 1,
|
|
||||||
'blocked_code' => 'deleted',
|
|
||||||
]
|
|
||||||
);
|
|
||||||
if (strlen($registration) > 0) {
|
|
||||||
Preferences::setForUser($newUser, 'registration_ip_address', $registration);
|
|
||||||
|
|
||||||
}
|
|
||||||
if (strlen($confirmation) > 0) {
|
|
||||||
Preferences::setForUser($newUser, 'confirmation_ip_address', $confirmation);
|
|
||||||
}
|
|
||||||
|
|
||||||
return redirect(route('index'));
|
return redirect(route('index'));
|
||||||
}
|
}
|
||||||
|
@ -41,6 +41,10 @@ class EventServiceProvider extends ServiceProvider
|
|||||||
[
|
[
|
||||||
'FireflyIII\Handlers\Events\UserEventHandler@storeConfirmationIpAddress',
|
'FireflyIII\Handlers\Events\UserEventHandler@storeConfirmationIpAddress',
|
||||||
],
|
],
|
||||||
|
'FireflyIII\Events\DeletedUser' => // is a User related event.
|
||||||
|
[
|
||||||
|
'FireflyIII\Handlers\Events\UserEventHandler@saveEmailAddress',
|
||||||
|
],
|
||||||
'FireflyIII\Events\RegisteredUser' => // is a User related event.
|
'FireflyIII\Events\RegisteredUser' => // is a User related event.
|
||||||
[
|
[
|
||||||
'FireflyIII\Handlers\Events\UserEventHandler@sendRegistrationMail',
|
'FireflyIII\Handlers\Events\UserEventHandler@sendRegistrationMail',
|
||||||
|
@ -15,10 +15,12 @@ namespace FireflyIII\Repositories\User;
|
|||||||
|
|
||||||
|
|
||||||
use FireflyConfig;
|
use FireflyConfig;
|
||||||
|
use FireflyIII\Events\DeletedUser;
|
||||||
use FireflyIII\Models\BudgetLimit;
|
use FireflyIII\Models\BudgetLimit;
|
||||||
use FireflyIII\Models\Role;
|
use FireflyIII\Models\Role;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
|
use Log;
|
||||||
use Preferences;
|
use Preferences;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -60,6 +62,24 @@ class UserRepository implements UserRepositoryInterface
|
|||||||
return $this->all()->count();
|
return $this->all()->count();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param User $user
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function destroy(User $user): bool
|
||||||
|
{
|
||||||
|
$email = $user->email;
|
||||||
|
Log::debug(sprintf('Calling delete() on user %d', $user->id));
|
||||||
|
$user->delete();
|
||||||
|
|
||||||
|
|
||||||
|
// trigger event:
|
||||||
|
event(new DeletedUser($email));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param int $userId
|
* @param int $userId
|
||||||
*
|
*
|
||||||
|
@ -48,6 +48,13 @@ interface UserRepositoryInterface
|
|||||||
*/
|
*/
|
||||||
public function count(): int;
|
public function count(): int;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param User $user
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function destroy(User $user): bool;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param int $userId
|
* @param int $userId
|
||||||
*
|
*
|
||||||
|
@ -45,7 +45,7 @@ class FireflyConfig
|
|||||||
* @param $name
|
* @param $name
|
||||||
* @param null $default
|
* @param null $default
|
||||||
*
|
*
|
||||||
* @return Configuration|null
|
* @return \FireflyIII\Models\Configuration|null
|
||||||
*/
|
*/
|
||||||
public function get($name, $default = null)
|
public function get($name, $default = null)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user