Skip to content

Commit

Permalink
feat: [HIG-112] delete account without store
Browse files Browse the repository at this point in the history
  • Loading branch information
sonersivri committed Jan 5, 2024
1 parent 4ef605f commit e9c3b8f
Show file tree
Hide file tree
Showing 5 changed files with 68 additions and 5 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.zimbra.cs.account;

public interface ProvisioningCache {

void removeFromCache(Entry entry);
}
6 changes: 2 additions & 4 deletions store/src/main/java/com/zimbra/cs/account/ldap/LdapProv.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import com.zimbra.common.service.ServiceException;
import com.zimbra.cs.account.Account;
import com.zimbra.cs.account.Domain;
import com.zimbra.cs.account.Entry;
import com.zimbra.cs.account.ProvisioningCache;
import com.zimbra.cs.account.Provisioning;
import com.zimbra.cs.account.auth.AuthMechanism.AuthMech;
import com.zimbra.cs.ldap.LdapClient;
Expand All @@ -24,7 +24,7 @@
/**
* @author pshao
*/
public abstract class LdapProv extends Provisioning {
public abstract class LdapProv extends Provisioning implements ProvisioningCache {

protected LdapDIT mDIT;
protected LdapHelper helper;
Expand Down Expand Up @@ -122,8 +122,6 @@ public abstract void externalLdapAuth(
public abstract void zimbraLdapAuthenticate(
Account acct, String password, Map<String, Object> authCtxt) throws ServiceException;

public abstract void removeFromCache(Entry entry);

@TODO // deprecate
public abstract void searchLdapOnMaster(
String base, String filter, String[] returnAttrs, SearchLdapOptions.SearchLdapVisitor visitor)
Expand Down
19 changes: 19 additions & 0 deletions store/src/main/java/com/zimbra/cs/mailbox/Mailbox.java
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,11 @@
import com.zimbra.cs.account.DataSource;
import com.zimbra.cs.account.Domain;
import com.zimbra.cs.account.Provisioning;
import com.zimbra.cs.account.ProvisioningCache;
import com.zimbra.cs.account.Server;
import com.zimbra.cs.account.ShareLocator;
import com.zimbra.cs.account.ldap.LdapProv;
import com.zimbra.cs.account.ldap.LdapProvisioning;
import com.zimbra.cs.datasource.DataSourceManager;
import com.zimbra.cs.db.DbDataSource;
import com.zimbra.cs.db.DbMailItem;
Expand Down Expand Up @@ -2663,6 +2666,22 @@ public void deleteMailbox(DeleteBlobs deleteBlobs) throws ServiceException {
}
}

public void markMailboxDeleted() throws ServiceException {
MailboxManager.getInstance().markMailboxDeleted(this);
try {
Provisioning provisioning = Provisioning.getInstance();
if (provisioning instanceof ProvisioningCache) {
((ProvisioningCache) provisioning).removeFromCache(this.getAccount());
}
} catch (AccountServiceException e) {
if (AccountServiceException.NO_SUCH_ACCOUNT.equals(e.getCode())) {
ZimbraLog.mailbox.warn(this.getAccountId() + " account deleted");
return;
}
throw e;
}
}

public void renameMailbox(String oldName, String newName) throws ServiceException {
renameMailbox(null, oldName, newName);
}
Expand Down
11 changes: 10 additions & 1 deletion store/src/test/java/com/zimbra/cs/account/MockProvisioning.java
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
*
* @author ysasaki
*/
public final class MockProvisioning extends Provisioning {
public final class MockProvisioning extends Provisioning implements ProvisioningCache {
public static final String DEFAULT_ACCOUNT_ID = new UUID(0L, 0L).toString();

private final Map<String, Account> id2account = Maps.newHashMap();
Expand Down Expand Up @@ -951,4 +951,13 @@ public void resetPassword(Account acct, String newPassword, boolean dryRun)
throws ServiceException {
throw ServiceException.UNSUPPORTED();
}

@Override
public void removeFromCache(Entry entry) {
if (entry instanceof Account) {
id2account.remove(((Account) entry).getId());
} else {
throw new UnsupportedOperationException();
}
}
}
31 changes: 31 additions & 0 deletions store/src/test/java/com/zimbra/cs/mailbox/MailboxTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import com.zimbra.common.mailbox.ContactConstants;
import com.zimbra.common.mime.InternetAddress;
import com.zimbra.cs.account.Account;
import com.zimbra.cs.account.AccountServiceException;
import com.zimbra.cs.account.MockProvisioning;
import com.zimbra.cs.account.Provisioning;
import com.zimbra.cs.index.BrowseTerm;
Expand All @@ -31,6 +32,7 @@
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.junit.jupiter.api.*;

/**
Expand Down Expand Up @@ -272,6 +274,35 @@ void trimTombstones() throws Exception {
mbox.getTombstones(changeId3).isEmpty(), "sync token matches last purged tombstone");
}

@Test
void test_markMailboxDeleted_deletes_account_when_account_exists() throws Exception {
Account acct = Provisioning.getInstance().getAccount("test@zimbra.com");
MailboxManager mailboxManager = MailboxManager.getInstance();
Mailbox mbox = mailboxManager.getMailboxByAccount(acct);
mbox.markMailboxDeleted();
AccountServiceException thrown = assertThrows(
AccountServiceException.class,
() -> mailboxManager.getMailboxByAccountId(acct.getId()),
"Expected doThing() to throw, but it didn't"
);
assertEquals(AccountServiceException.NO_SUCH_ACCOUNT, thrown.getCode());
}

@Test
void test_markMailboxDeleted_is_ok_when_account_does_not_exists() throws Exception {
Account acct = Provisioning.getInstance().getAccount("test@zimbra.com");
MailboxManager mailboxManager = MailboxManager.getInstance();
Mailbox mbox = mailboxManager.getMailboxByAccount(acct);
mbox.markMailboxDeleted();
mbox.markMailboxDeleted();
AccountServiceException thrown = assertThrows(
AccountServiceException.class,
() -> mailboxManager.getMailboxByAccountId(acct.getId()),
"Expected doThing() to throw, but it didn't"
);
assertEquals(AccountServiceException.NO_SUCH_ACCOUNT, thrown.getCode());
}

static class MockListener extends MailboxListener {
/**
* Information on creations/modifications and deletions seen since {@link clear} was last called
Expand Down

0 comments on commit e9c3b8f

Please sign in to comment.