mirror of
https://github.com/signalapp/Signal-Server.git
synced 2024-09-20 20:03:07 +02:00
Record account deletion reasons.
This commit is contained in:
parent
d82b3dc429
commit
23ca011ac1
@ -604,7 +604,7 @@ public class AccountController {
|
|||||||
@DELETE
|
@DELETE
|
||||||
@Path("/me")
|
@Path("/me")
|
||||||
public void deleteAccount(@Auth Account account) {
|
public void deleteAccount(@Auth Account account) {
|
||||||
accounts.delete(account);
|
accounts.delete(account, AccountsManager.DeletionReason.USER_REQUEST);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean shouldAutoBlock(String requester) {
|
private boolean shouldAutoBlock(String requester) {
|
||||||
|
@ -68,7 +68,7 @@ public class AccountCleaner extends AccountDatabaseCrawlerListener {
|
|||||||
expiredAccountsMeter.mark();
|
expiredAccountsMeter.mark();
|
||||||
|
|
||||||
if (accountUpdateCount < MAX_ACCOUNT_UPDATES_PER_CHUNK) {
|
if (accountUpdateCount < MAX_ACCOUNT_UPDATES_PER_CHUNK) {
|
||||||
accountsManager.delete(account);
|
accountsManager.delete(account, AccountsManager.DeletionReason.EXPIRED);
|
||||||
accountUpdateCount++;
|
accountUpdateCount++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -58,6 +58,7 @@ public class AccountsManager {
|
|||||||
|
|
||||||
private static final String DELETE_COUNTER_NAME = name(AccountsManager.class, "deleteCounter");
|
private static final String DELETE_COUNTER_NAME = name(AccountsManager.class, "deleteCounter");
|
||||||
private static final String COUNTRY_CODE_TAG_NAME = "country";
|
private static final String COUNTRY_CODE_TAG_NAME = "country";
|
||||||
|
private static final String DELETION_REASON_TAG_NAME = "reason";
|
||||||
|
|
||||||
|
|
||||||
private final Logger logger = LoggerFactory.getLogger(AccountsManager.class);
|
private final Logger logger = LoggerFactory.getLogger(AccountsManager.class);
|
||||||
@ -72,6 +73,18 @@ public class AccountsManager {
|
|||||||
private final ProfilesManager profilesManager;
|
private final ProfilesManager profilesManager;
|
||||||
private final ObjectMapper mapper;
|
private final ObjectMapper mapper;
|
||||||
|
|
||||||
|
public enum DeletionReason {
|
||||||
|
ADMIN_DELETED("admin"),
|
||||||
|
EXPIRED ("expired"),
|
||||||
|
USER_REQUEST ("userRequest");
|
||||||
|
|
||||||
|
private final String tagValue;
|
||||||
|
|
||||||
|
DeletionReason(final String tagValue) {
|
||||||
|
this.tagValue = tagValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public AccountsManager(Accounts accounts, DirectoryManager directory, FaultTolerantRedisCluster cacheCluster, final DirectoryQueue directoryQueue, final Keys keys, final MessagesManager messagesManager, final UsernamesManager usernamesManager, final ProfilesManager profilesManager) {
|
public AccountsManager(Accounts accounts, DirectoryManager directory, FaultTolerantRedisCluster cacheCluster, final DirectoryQueue directoryQueue, final Keys keys, final MessagesManager messagesManager, final UsernamesManager usernamesManager, final ProfilesManager profilesManager) {
|
||||||
this.accounts = accounts;
|
this.accounts = accounts;
|
||||||
this.directory = directory;
|
this.directory = directory;
|
||||||
@ -143,7 +156,7 @@ public class AccountsManager {
|
|||||||
return accounts.getAllFrom(uuid, length);
|
return accounts.getAllFrom(uuid, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void delete(final Account account) {
|
public void delete(final Account account, final DeletionReason deletionReason) {
|
||||||
try (final Timer.Context ignored = deleteTimer.time()) {
|
try (final Timer.Context ignored = deleteTimer.time()) {
|
||||||
usernamesManager.delete(account.getUuid());
|
usernamesManager.delete(account.getUuid());
|
||||||
directoryQueue.deleteAccount(account);
|
directoryQueue.deleteAccount(account);
|
||||||
@ -155,7 +168,10 @@ public class AccountsManager {
|
|||||||
databaseDelete(account);
|
databaseDelete(account);
|
||||||
}
|
}
|
||||||
|
|
||||||
Metrics.counter(DELETE_COUNTER_NAME, COUNTRY_CODE_TAG_NAME, Util.getCountryCode(account.getNumber())).increment();
|
Metrics.counter(DELETE_COUNTER_NAME,
|
||||||
|
COUNTRY_CODE_TAG_NAME, Util.getCountryCode(account.getNumber()),
|
||||||
|
DELETION_REASON_TAG_NAME, deletionReason.tagValue)
|
||||||
|
.increment();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateDirectory(Account account) {
|
private void updateDirectory(Account account) {
|
||||||
|
@ -106,7 +106,7 @@ public class DeleteUserCommand extends EnvironmentCommand<WhisperServerConfigura
|
|||||||
Optional<Account> account = accountsManager.get(user);
|
Optional<Account> account = accountsManager.get(user);
|
||||||
|
|
||||||
if (account.isPresent()) {
|
if (account.isPresent()) {
|
||||||
accountsManager.delete(account.get());
|
accountsManager.delete(account.get(), AccountsManager.DeletionReason.ADMIN_DELETED);
|
||||||
logger.warn("Removed " + account.get().getNumber());
|
logger.warn("Removed " + account.get().getNumber());
|
||||||
} else {
|
} else {
|
||||||
logger.warn("Account not found");
|
logger.warn("Account not found");
|
||||||
|
@ -1187,6 +1187,6 @@ public class AccountControllerTest {
|
|||||||
.delete();
|
.delete();
|
||||||
|
|
||||||
assertThat(response.getStatus()).isEqualTo(204);
|
assertThat(response.getStatus()).isEqualTo(204);
|
||||||
verify(accountsManager).delete(AuthHelper.VALID_ACCOUNT);
|
verify(accountsManager).delete(AuthHelper.VALID_ACCOUNT, AccountsManager.DeletionReason.USER_REQUEST);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -31,6 +31,8 @@ import java.util.Optional;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
|
import static org.mockito.ArgumentMatchers.eq;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.never;
|
import static org.mockito.Mockito.never;
|
||||||
import static org.mockito.Mockito.times;
|
import static org.mockito.Mockito.times;
|
||||||
@ -88,9 +90,9 @@ public class AccountCleanerTest {
|
|||||||
accountCleaner.timeAndProcessCrawlChunk(Optional.empty(), Arrays.asList(deletedDisabledAccount, undeletedDisabledAccount, undeletedEnabledAccount));
|
accountCleaner.timeAndProcessCrawlChunk(Optional.empty(), Arrays.asList(deletedDisabledAccount, undeletedDisabledAccount, undeletedEnabledAccount));
|
||||||
accountCleaner.onCrawlEnd(Optional.empty());
|
accountCleaner.onCrawlEnd(Optional.empty());
|
||||||
|
|
||||||
verify(accountsManager, never()).delete(deletedDisabledAccount);
|
verify(accountsManager, never()).delete(eq(deletedDisabledAccount), any());
|
||||||
verify(accountsManager).delete(undeletedDisabledAccount);
|
verify(accountsManager).delete(undeletedDisabledAccount, AccountsManager.DeletionReason.EXPIRED);
|
||||||
verify(accountsManager, never()).delete(undeletedEnabledAccount);
|
verify(accountsManager, never()).delete(eq(undeletedEnabledAccount), any());
|
||||||
|
|
||||||
verifyNoMoreInteractions(accountsManager);
|
verifyNoMoreInteractions(accountsManager);
|
||||||
}
|
}
|
||||||
@ -112,7 +114,7 @@ public class AccountCleanerTest {
|
|||||||
accountCleaner.timeAndProcessCrawlChunk(Optional.empty(), accounts);
|
accountCleaner.timeAndProcessCrawlChunk(Optional.empty(), accounts);
|
||||||
accountCleaner.onCrawlEnd(Optional.empty());
|
accountCleaner.onCrawlEnd(Optional.empty());
|
||||||
|
|
||||||
verify(accountsManager, times(AccountCleaner.MAX_ACCOUNT_UPDATES_PER_CHUNK)).delete(undeletedDisabledAccount);
|
verify(accountsManager, times(AccountCleaner.MAX_ACCOUNT_UPDATES_PER_CHUNK)).delete(undeletedDisabledAccount, AccountsManager.DeletionReason.EXPIRED);
|
||||||
verifyNoMoreInteractions(accountsManager);
|
verifyNoMoreInteractions(accountsManager);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user