Skip to content

Commit

Permalink
zcs
Browse files Browse the repository at this point in the history
  • Loading branch information
rendurama committed Jul 8, 2024
1 parent 5fcab7e commit ce4723f
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 42 deletions.
3 changes: 3 additions & 0 deletions common/src/java/com/zimbra/common/util/Constants.java
Original file line number Diff line number Diff line change
Expand Up @@ -51,4 +51,7 @@ public class Constants {
public static final String JWT_SALT_SEPARATOR = "|";

public static final String PRIMARY_EMAIL = "email";

public static final String TRUE_VALUE = "TRUE";

}
29 changes: 10 additions & 19 deletions store/src/java/com/zimbra/cs/account/ldap/LdapProvisioning.java
Original file line number Diff line number Diff line change
Expand Up @@ -2497,6 +2497,7 @@ private void addAliasInternal(NamedEntry entry, String alias) throws ServiceExce
zlc.createEntry(aliasDn, "zimbraAlias",
new String[] { Provisioning.A_uid, aliasName,
Provisioning.A_zimbraId, aliasUuid,
Provisioning.A_zimbraHideAliasInGal, String.valueOf(new Random().nextBoolean()).toUpperCase(),// to be modified
Provisioning.A_zimbraCreateTimestamp, LdapDateUtil.toGeneralizedTime(new Date()),
Provisioning.A_zimbraAliasTargetId, targetEntryId} );
} catch (LdapEntryAlreadyExistException e) {
Expand Down Expand Up @@ -11730,36 +11731,26 @@ public String sendMdmEmail(String status, String timeInterval) throws ServiceExc

@Override
public void excludePrivateAliases(NamedEntry entry, List<String> emailAndAliases) throws ServiceException {

LdapUsage ldapUsage = LdapUsage.GAL_SEARCH;

ZLdapContext zlc = LdapClient.getContext(LdapServerType.MASTER, ldapUsage);

for (String alias : new ArrayList<>( emailAndAliases.subList( 1, emailAndAliases.size()))) { // exclude primay email here
for (String alias : new ArrayList<>(
emailAndAliases.subList(1, emailAndAliases.size()))) { // exclude primay email here
if (null != alias) {
String parts[] = alias.split("@");
String aliasName = parts[0];
String aliasDomain = parts[1];

String targetDomainName = ((Account) entry).getDomainName();

String aliasDn = mDIT.aliasDN(((LdapEntry) entry).getDN(), targetDomainName, aliasName, aliasDomain);

ZimbraLog.mailbox.info("excludePrivateAliases alias - %s , aliasname - %s ,aliasDomain %s ,Target Domain - %s , aliasDn -%s ", alias, aliasName, aliasDomain, targetDomainName, aliasDn);

ZimbraLog.mailbox.info(
"excludePrivateAliases alias - %s , aliasname - %s ,aliasDomain %s ,Target Domain - %s , aliasDn -%s ",
alias, aliasName, aliasDomain, targetDomainName, aliasDn);
ZAttributes attrs = helper.getAttributes(zlc, aliasDn);

Alias aliasEntryLocal = makeAlias(aliasDn, attrs);

//NamedEntry targetEntry = searchAliasTarget(aliasEntryLocal, false);

// boolean isSame = (entry.getId().equals(targetEntry.getId()));

if ("TRUE".equalsIgnoreCase(aliasEntryLocal.getAttr(Provisioning.A_zimbraHideAliasInGal))) {
Alias aliasEntry = makeAlias(aliasDn, attrs);
if (Constants.TRUE_VALUE.equalsIgnoreCase(aliasEntry.getAttr(Provisioning.A_zimbraHideAliasInGal))) {
emailAndAliases.remove(alias);
}
ZimbraLog.mailbox.info("alias attribute for %s is %s and isSame %s ", alias,
aliasEntryLocal.getAttr(Provisioning.A_zimbraHideAliasInGal), true);
ZimbraLog.mailbox.info("alias attribute for %s is %s", alias,
aliasEntry.getAttr(Provisioning.A_zimbraHideAliasInGal));
}
}
}
Expand Down
54 changes: 31 additions & 23 deletions store/src/java/com/zimbra/cs/mailbox/ContactAutoComplete.java
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,7 @@
import com.zimbra.common.util.Pair;
import com.zimbra.common.util.StringUtil;
import com.zimbra.common.util.ZimbraLog;
import com.zimbra.cs.account.Account;
import com.zimbra.cs.account.GalContact;
import com.zimbra.cs.account.Provisioning;
import com.zimbra.cs.account.*;
import com.zimbra.cs.gal.GalGroup;
import com.zimbra.cs.gal.GalGroupInfoProvider;
import com.zimbra.cs.gal.GalSearchControl;
Expand Down Expand Up @@ -704,30 +702,11 @@ public void addMatchedContacts(String query, Map<String, ? extends Object> attrs
String company = getFieldAsString(attrs, ContactConstants.A_company);
String fileas = getFieldAsString(attrs, ContactConstants.A_fileAs);
String displayName = fullName;
Account account = Provisioning.getInstance().get(Key.AccountBy.name, fullName);

if (Strings.isNullOrEmpty(displayName)) {
displayName = Joiner.on(' ').skipNulls().join(first, middle, last);
}

List<String> allowedEmailsListInGalAutocomplete = new ArrayList<>();
for(String emailKey: mEmailKeys) {
if (!emailKey.equals(Constants.PRIMARY_EMAIL)) {
//check if all aliases of an account need to be bypassed
if (account.isHideAliasesInGal()) {
break;
}
}
String email = getFieldAsString(attrs, emailKey);
if(null != email) {
allowedEmailsListInGalAutocomplete.add(email);
}
}
ZimbraLog.mailbox.info("allowed list 1 is %s", allowedEmailsListInGalAutocomplete);

Provisioning.getInstance().excludePrivateAliases(account, allowedEmailsListInGalAutocomplete);

ZimbraLog.mailbox.info("allowed list 2 is %s", allowedEmailsListInGalAutocomplete);
List<String> allowedEmailsListInGalAutocomplete = extractAllowedEmailsListForAccount(attrs, fullName);

for (String email : allowedEmailsListInGalAutocomplete) {
if (email != null && (nameMatches || matchesEmail(tokens, email))) {
Expand Down Expand Up @@ -777,6 +756,35 @@ public void addMatchedContacts(String query, Map<String, ? extends Object> attrs
}
}

private List<String> extractAllowedEmailsListForAccount(Map<String, ?> attrs, String fullName) throws ServiceException {
List<String> allowedEmailsListInGalAutocomplete = new ArrayList<>();

Account account = Provisioning.getInstance().get(Key.AccountBy.name, fullName);
boolean isCosHidden = ("TRUE".equalsIgnoreCase(account.getCOS().getAttr(Provisioning.A_zimbraHideAliasesInGal)));
boolean isDomainHidden = ("TRUE".equalsIgnoreCase(account.getProvisioning().getDomain(account).getAttr(Provisioning.A_zimbraHideAliasesInGal)));

ZimbraLog.mailbox.info("Values for isCosHidden is %s and isDomain Hidden is %s", isCosHidden, isDomainHidden);

for(String emailKey: mEmailKeys) {
if (!emailKey.equals(Constants.PRIMARY_EMAIL)) {
//check if all aliases of an account need to be bypassed
if (account.isHideAliasesInGal() || isCosHidden || isDomainHidden) {
break;
}
}
String email = getFieldAsString(attrs, emailKey);
if(null != email) {
allowedEmailsListInGalAutocomplete.add(email);
}
}
ZimbraLog.mailbox.info("allowed list 1 is %s", allowedEmailsListInGalAutocomplete);

Provisioning.getInstance().excludePrivateAliases(account, allowedEmailsListInGalAutocomplete);

ZimbraLog.mailbox.info("allowed list 2 is %s", allowedEmailsListInGalAutocomplete);
return allowedEmailsListInGalAutocomplete;
}

private Pair<List<Folder>, Map<ItemId, Mountpoint>> getLocalRemoteContactFolders(Collection<Integer> folderIDs) throws ServiceException {
List<Folder> folders = new ArrayList<Folder>();
Map<ItemId, Mountpoint> mountpoints = new HashMap<ItemId, Mountpoint>();
Expand Down

0 comments on commit ce4723f

Please sign in to comment.