Issue 5260: Ensure that user data is really deleted (#5666)
* Issue 5260: Ensure that user data is really deleted * Missing files
This commit is contained in:
parent
3b50e94a1a
commit
49dad00570
3 changed files with 35 additions and 1 deletions
|
@ -730,13 +730,16 @@ class User
|
||||||
DBA::insert('userd', ['username' => $user['nickname']]);
|
DBA::insert('userd', ['username' => $user['nickname']]);
|
||||||
|
|
||||||
// The user and related data will be deleted in "cron_expire_and_remove_users" (cronjobs.php)
|
// The user and related data will be deleted in "cron_expire_and_remove_users" (cronjobs.php)
|
||||||
DBA::update('user', ['account_removed' => true, 'account_expires_on' => DateTimeFormat::utcNow()], ['uid' => $uid]);
|
DBA::update('user', ['account_removed' => true, 'account_expires_on' => DateTimeFormat::utc($t . " + 7 day")], ['uid' => $uid]);
|
||||||
Worker::add(PRIORITY_HIGH, "Notifier", "removeme", $uid);
|
Worker::add(PRIORITY_HIGH, "Notifier", "removeme", $uid);
|
||||||
|
|
||||||
// Send an update to the directory
|
// Send an update to the directory
|
||||||
$self = DBA::selectFirst('contact', ['url'], ['uid' => $uid, 'self' => true]);
|
$self = DBA::selectFirst('contact', ['url'], ['uid' => $uid, 'self' => true]);
|
||||||
Worker::add(PRIORITY_LOW, "Directory", $self['url']);
|
Worker::add(PRIORITY_LOW, "Directory", $self['url']);
|
||||||
|
|
||||||
|
// Remove the user relevant data
|
||||||
|
Worker::add(PRIORITY_LOW, "RemoveUser", $uid);
|
||||||
|
|
||||||
if ($uid == local_user()) {
|
if ($uid == local_user()) {
|
||||||
unset($_SESSION['authenticated']);
|
unset($_SESSION['authenticated']);
|
||||||
unset($_SESSION['uid']);
|
unset($_SESSION['uid']);
|
||||||
|
|
|
@ -120,6 +120,12 @@ class CronJobs
|
||||||
// delete user records for recently removed accounts
|
// delete user records for recently removed accounts
|
||||||
$users = DBA::select('user', ['uid'], ["`account_removed` AND `account_expires_on` < UTC_TIMESTAMP() - INTERVAL 3 DAY"]);
|
$users = DBA::select('user', ['uid'], ["`account_removed` AND `account_expires_on` < UTC_TIMESTAMP() - INTERVAL 3 DAY"]);
|
||||||
while ($user = DBA::fetch($users)) {
|
while ($user = DBA::fetch($users)) {
|
||||||
|
// Delete the contacts of this user
|
||||||
|
$self = DBA::selectFirst('contact', ['nurl'], ['self' => true, 'uid' => $user['uid']]);
|
||||||
|
if (DBA::isResult($self)) {
|
||||||
|
DBA::delete('contact', ['nurl' => $self['nurl'], 'self' => false]);
|
||||||
|
}
|
||||||
|
|
||||||
DBA::delete('user', ['uid' => $user['uid']]);
|
DBA::delete('user', ['uid' => $user['uid']]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
25
src/Worker/RemoveUser.php
Normal file
25
src/Worker/RemoveUser.php
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @file src/Worker/RemoveUser.php
|
||||||
|
* @brief Removes orphaned data from deleted users
|
||||||
|
*/
|
||||||
|
namespace Friendica\Worker;
|
||||||
|
|
||||||
|
use Friendica\Database\DBA;
|
||||||
|
use Friendica\Model\Item;
|
||||||
|
|
||||||
|
require_once 'include/dba.php';
|
||||||
|
|
||||||
|
class RemoveUser {
|
||||||
|
public static function execute($uid)
|
||||||
|
{
|
||||||
|
// Only delete if the user is archived
|
||||||
|
$condition = ['account_removed' => true, 'uid' => $uid];
|
||||||
|
if (!DBA::exists('user', $condition)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Now we delete all user items
|
||||||
|
Item::delete(['uid' => $uid], PRIORITY_LOW);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue