Issue 10050: Avoid creating new contacts for expired users
authorMichael <heluecht@pirati.ca>
Sat, 20 Mar 2021 09:56:35 +0000 (09:56 +0000)
committerMichael <heluecht@pirati.ca>
Sat, 20 Mar 2021 09:56:35 +0000 (09:56 +0000)
src/Model/Contact.php
src/Model/User.php

index 8b28575..b0b5fcc 100644 (file)
@@ -571,7 +571,8 @@ class Contact
                        return true;
                }
 
-               $user = DBA::selectFirst('user', ['uid', 'username', 'nickname', 'pubkey', 'prvkey'], ['uid' => $uid]);
+               $user = DBA::selectFirst('user', ['uid', 'username', 'nickname', 'pubkey', 'prvkey'],
+                       ['uid' => $uid, 'account_expired' => false]);
                if (!DBA::isResult($user)) {
                        return false;
                }
@@ -624,7 +625,7 @@ class Contact
                }
 
                $fields = ['nickname', 'page-flags', 'account-type', 'prvkey', 'pubkey'];
-               $user = DBA::selectFirst('user', $fields, ['uid' => $uid]);
+               $user = DBA::selectFirst('user', $fields, ['uid' => $uid, 'account_expired' => false]);
                if (!DBA::isResult($user)) {
                        return;
                }
index 7204fd0..278b541 100644 (file)
@@ -399,7 +399,7 @@ class User
                        return false;
                }
 
-               if (!$repairMissing) {
+               if (!$repairMissing || $owner['account_expired']) {
                        return $owner;
                }
 
@@ -1367,6 +1367,9 @@ class User
                // unique), so it cannot be re-registered in the future.
                DBA::insert('userd', ['username' => $user['nickname']]);
 
+               // Remove all personal settings, especially connector settings
+               DBA::delete('pconfig', ['uid' => $uid]);
+
                // The user and related data will be deleted in Friendica\Worker\ExpireAndRemoveUsers
                DBA::update('user', ['account_removed' => true, 'account_expires_on' => DateTimeFormat::utc('now + 7 day')], ['uid' => $uid]);
                Worker::add(PRIORITY_HIGH, 'Notifier', Delivery::REMOVAL, $uid);