diff --git a/common/src/java/com/zimbra/common/account/ZAttrProvisioning.java b/common/src/java/com/zimbra/common/account/ZAttrProvisioning.java
index 677608c6bd1..2d988419204 100644
--- a/common/src/java/com/zimbra/common/account/ZAttrProvisioning.java
+++ b/common/src/java/com/zimbra/common/account/ZAttrProvisioning.java
@@ -12192,14 +12192,6 @@ public static TwoFactorAuthSecretEncoding fromString(String s) throws ServiceExc
@ZAttr(id=307)
public static final String A_zimbraPreAuthKey = "zimbraPreAuthKey";
- /**
- * Account profile image
- *
- * @since ZCS 8.8.6
- */
- @ZAttr(id=3021)
- public static final String A_zimbraPrefAccountProfileImage = "zimbraPrefAccountProfileImage";
-
/**
* whether or not account tree is expanded
*
diff --git a/store/conf/attrs/zimbra-attrs.xml b/store/conf/attrs/zimbra-attrs.xml
index 1d38435577d..efc8ee8e53f 100755
--- a/store/conf/attrs/zimbra-attrs.xml
+++ b/store/conf/attrs/zimbra-attrs.xml
@@ -9623,8 +9623,4 @@ TODO: delete them permanently from here
for all unconfigured host names. See also related attributes 'zimbraVirtualHostname' and 'zimbraVirtualIPAddress'.
-
-
- Account profile image
-
diff --git a/store/src/java-test/com/zimbra/cs/service/ModifyPrefsTest.java b/store/src/java-test/com/zimbra/cs/service/ModifyPrefsTest.java
index 54f3e4ce548..b6f1656ca69 100644
--- a/store/src/java-test/com/zimbra/cs/service/ModifyPrefsTest.java
+++ b/store/src/java-test/com/zimbra/cs/service/ModifyPrefsTest.java
@@ -166,25 +166,4 @@ public void testZCS2670() throws Exception {
Assert.assertEquals("test1@somedomain.com", acct1.getPrefMailForwardingAddress());
Assert.assertEquals(FeatureAddressVerificationStatus.pending, acct1.getFeatureAddressVerificationStatus());
}
-
- @Test
- public void testZCS3545() throws Exception {
- Account acct1 = Provisioning.getInstance().get(Key.AccountBy.name, "test@zimbra.com");
- Mailbox mbox = MailboxManager.getInstance().getMailboxByAccount(acct1);
- Assert.assertNull(acct1.getPrefAccountProfileImageAsString());
- InputStream is = getClass().getResourceAsStream("img.jpg");
- is = getClass().getResourceAsStream("img.jpg");
- FileUploadServlet.Upload up = FileUploadServlet.saveUpload(is, "img.jpg", "image/jpeg",
- acct1.getId());
- PowerMockito.stub(PowerMockito.method(MimeDetect.class, "detect", InputStream.class))
- .toReturn("image/jpeg");
- ModifyPrefsRequest request = new ModifyPrefsRequest();
- Pref pref = new Pref(Provisioning.A_zimbraPrefAccountProfileImage, up.getId());
- request.addPref(pref);
- Element req = JaxbUtil.jaxbToElement(request);
- new ModifyPrefs().handle(req, ServiceTestUtil.getRequestContext(mbox.getAccount()));
- Assert.assertEquals(
- "/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBwgHBgkIBwgKCgkLDRYPDQwMDRsUFRAWIB0iIiAdHx8kKDQsJCYxJx8fLT0tMTU3Ojo6Iys/RD84QzQ5OjcBCgoKDQwNGg8PGjclHyU3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N//AABEIAHQAuQMBEQACEQEDEQH/xAAbAAACAwEBAQAAAAAAAAAAAAACAwEEBQAGB//EADIQAAICAQMCBAUCBgMBAAAAAAECAAMRBBIhBTETQVFhBhQicYGRoSMyQmLR4TNSwRb/xAAaAQADAQEBAQAAAAAAAAAAAAAAAQIDBAUG/8QAKBEAAgICAgEDBAIDAAAAAAAAAAECEQMSBCExE0FRBSJhsTJxQpHw/9oADAMBAAIRAxEAPwDGAn1p8cSBEAQEADAiFYYWSFhgQEEFiETiIDoATiADK1ksZe0/Ewl2Uui9XbiYSRqmXKbMzGUTaMjQoM55I6IstoRiZM2TGBpJdkF4JBYmx5aRDkVLHmqRk2Id5aRNimeVQWAWjBM7dEVZ4fE908sJRAAwIhBgRMQQEkQeIASIgJgB0AJAiAfXxM2A4PiTQ7GLZJcSky3RbgiYziaRkalF3acsonVGRcrtyJi0bKQ3xJNF2C1kaQbCLLJcYkNlWyyaJGbYlnlpE2LLyqCyC0KHZG6FBZ5ACeweeEBFYWGBEyQwIgCEACxEBIiA7EAJAgASiJgGDiICd0VAGpiYF7R03X2Cumtnc9lUZM58koxVydG2OMpuoqzVfQ6zS1pZfQyBm2gHvmcqy45uouzrlhyY0nJUPSrUBQTRaAexKGZuUfkpQmvKf+jvE47iLUexBs95WoOQm23iXGJDkU3tOZqomTkDvjoLI3R0FnZiopM7MB2eXAnqNnCGBEIICIAgICCEQBYiA6AEiAEwAkSWAUACqre19lSM7f8AVRkyZNJW2NJt0lbPcdJ+D6K9Ol/ULGtdsN4aEqoHofM/tPEz/UpuWuNUj3eP9LioqWV3+PY9FpdDptEp+VorrVuW2Liebkyzyfydnp48OPF/CNFlwAuSO3aRZqLJPmfwIdCB+VoUYFNXuAgl7y+SfTh8HkutaS3S6q51oddPnIfH04nq8fJGcVb7PE5OKWObaXRj2W5nYonG5FZn5miRnYSNmJopBGIogGA0TmAzzoE9E4gwIgJAgIICIAsRASBCxEiICYDOgB0QGl0LpVvWNcNPW2xQN1jnnav+Zz8nkLj492dHF48uRk0R9B0mi02gpFOjrWtfPHc/c9zPncuWeWVzdn02HBjwx1xqjQDlqNvmvP3Ew9zo9hS3c7c8GJ0BYY7z9PYRIZyJyCe8LANto7mACzk5449DKJfZ4P4r0iaDqH8EBEuXeEHZT5j/AN/M9zg5Hkx9+UfPc/EsWXrwzBLEmd9HBY6rMiRcRuJBoRGNExDMICegcRIWKxBARAEBACYhEwA7EQE4gB0AJVSzBVGSeAIm0lbGk26R7r4X0TdMQ21I1r2gB32nH2Ht7zwebneZ0+kj6ThcVYFflvyejGmFg8RtyFvLuJ521dHo17keA4IFdgP4kvsaPOdRt6rQtiWJStyjcjhxhxn0+2f0/Xkc2nUmd0ceOTuJqfCOuXXdMW1HOAB9DDlSf9y8Vxbi/YjlQcWn8m0Qe83OQFQzMSf5Rz9zB0gCbGMQGzznxZ0FdXpn1mmrxq0GWCj/AJAPL74no8HlvHJY5P7f0eXz+GskXkgvu/Z4StdxnuN0eAi2iYEybNUiSIimLZsRhYO+OgMoCdhyDAIgJxFYHYhYjsQsROIATiICIATiAF7o6UHqOn+bIWkNlie3Y4z+cTn5MpLFLXydPDjGWeKl4PpGmuqXTitLEc/2nIx7GfNSTuz6yPii2HZqsAZAmfVl+wxLN+FCgGJjRg/Ful01+nrbUaiyhqCWV0x6Y5B+8znGPlnRgzSg+jL+Bfp+espvFtAs2I4XaGOMwjjqVj5OberPWpexOGUr9/OUm35RzsabPSVQrOLQCwHtIqsYAvtGQo7njsJSjbomUqTZ8texbNTbYibFexmC+gJ7T6hJqKs+Rck5Nr5Y5TINEyG7QQMrWnmaIkDmV0IpAToZzhgSWxHYiETADoAdiAE4gBOIgJAgBd6ega5QfxOXkt6dHofTtfV78nsunbV0+7jvzPEyds+igbuivqGmG5gCM5zOWSdmyYA1KJuYMuDyADmGorM/U2UdR30arSu6N25wDDVPplW14MkfM6W/TVaCmmjQUplaETbye5OPP/cJXfQ147PSaTWB6wLUxj3hqT0gxqai2MEffzhTFY1cP/LEM5sJ+Y12J9Hyq586q44wDYxwD25M+pjH7V/R8fJ/e6+X+xi2SWhpkl8wSKsUcGMERtEYyv4YE12OZnFYCIIjERiAHQA6AEiAicQAmIY6htrAgkTPIk0zXDJrIjf6e5fGGPbnmeNkR9VFl8l37sce5mFGqZo6MIaUAIxiZyQ0yxla8OQODxIodhtphZWliDOFwcRfgLBrrz9I4jFdkp/EJXGRnGIeAFuoYtQ7uMcKyNhl+xlxddoicVJas8512/rfSRtbX2XaW4FFZ1XI47Hjv7z0+LDjZ/8AGpI8bmT5XH63uL/o8qDjtPVo8gIOYqKsk2H1hQ7A8Uw1KTO8b3hoPYbjMRkziIxAlYWI7ZCxHbY7AHEBEgYgB0AOxAYaSWCZo6K01uCGIM4ORjike5weRkyNqXhGvUzOv1NOCSPVQ+m16GBRiPsZDVlF6q02LuJyZm0FhnUPWoFblTnyMWqfkdjadRcSru27aRkeoicUFltQEs8Vf+N/P0kPtUNdMyvntNqtVqAmoSp6Ww4tO0HyyDOr0JwinV38HJHk45ykrpr5PP8AxT1b5016Oq5bqqTuNijgt6D1x6z0uDxvTTnJds8n6hylmahHtL3MDbPQPNBbiMADGME9oxoGMo2qqc+U45SGok2UAeUFITiV2XBlpmbQEoVkERokDEYHYgB2IASBABioTJbopIuaes5GZz5akjq485YpbI0qgyjex47ADynDKFHt4+RvKl4GG36tvnMdTp2Dqu2cqxETiOyylwccnnMlxCy5RauwjODj9ZDi7KtFbW659LWWpfa/kB2m2HCskqfg5eTyHig3Hz7HldUtuqve6473Y5Zj5z2INQjrHwfO5Npy2l2xXgEeUrdE6snwsDkQ2HqKsrlKQqEGvmXYqJWndE5UXFB/LReoVqbNSYE45M0SDavMSkDiV7NPxNFMzcCu1GJopmbiAaY9idQWrxKUhNAFY7JI2wsBtdeSBJci1GzQ02k3eU555KOiGKzRp0gGOJzSynVDEXVpUrtYAj0mLkdMY0KGkprLnk7sDk9h7QuzR5WVbqUX+Swj95ahYnymvYQUP9DmX6ZmuZK+0WqK7MdzIaiglmnNproxKLLf/otVodS5LMu+vcfLuMfv+kcZayfwGWDyY035Rsp0/wBRLeYwWAmzQgCCzA8BnaijYTN4Ts55wopvWZsmZaiWrwZdk0HWAveSy4jNwioouJcvrMXFgpoaLVi1ZWyBaxcQ1YnJCHdTNEmZNiyfaUkSxbDMZLFspHlLTJaBAgFFnT43CZzNIG1pFXbOLI2ehiSLRcKJilZs5JCn1YA4MtYzN5Spbqye02jjMZ5RKF7W85bpGa2kzR0un9ZzTmdePHZo1VKB2nNKTO2MEeY+M9ONDr+mdbr+nwbPCtP9pyRn9x+ZcJNxf4LUVdfJ6es1vWrpgqw3A+0h3ZOqQF23EqNmc6MfWbdxnbjujgyVZRcLjymysw6KtmM8TVEMRY2BxLSJFbz6yqQWOVmxJpGY1Hb1ktIabGfV7yeiiQhMLFVjUozIci1Eaulk+oV6YL6X2gsgnjEPpsTRTM3AitCjwk7Qors1dK+FnLNHbjlRN9hxFGI5yKbNkzdI57JrTMTZUUXaVCzCTbOiKSL1LgTCSOmEqLAtxM3E2Uyh1/TjqXRtXpf6nrOw+jDkfuJWNVIbyGV8H9VbVdApFh+un+Gc+nl+0v0+yc89WaN2r47zWOM45ZTJ1WoyTzOrHA5ZztlFrzN1Ax2YBt9ZWorE22S4oLE+KPWXqBpIoxOYvVDkUSWwocAJDKodWokNlpIs1qMTJtmqihwUSbKpAsB6RoTFOi+kpMlxQgoN3aXZnqrGpwOJLNIi7ScRxJkV8zQxHVGRI0iWNxk0aodUx9ZlJGsWO3GRRdsg2MOxhQbM8d8Nk09U6xp6+K1uJA9PqP8AmdDX3v8A72Lzu8MWbVjH1miRwMpXHkzaJjIqvNUZijLARcSBKiNFTcfWaUXR/9k=",
- acct1.getPrefAccountProfileImageAsString());
- }
}
\ No newline at end of file
diff --git a/store/src/java-test/com/zimbra/cs/service/img.jpg b/store/src/java-test/com/zimbra/cs/service/img.jpg
deleted file mode 100644
index 82eb84e0007..00000000000
Binary files a/store/src/java-test/com/zimbra/cs/service/img.jpg and /dev/null differ
diff --git a/store/src/java/com/zimbra/cs/account/ZAttrAccount.java b/store/src/java/com/zimbra/cs/account/ZAttrAccount.java
index 258a0ed2819..b4e62ed58c3 100644
--- a/store/src/java/com/zimbra/cs/account/ZAttrAccount.java
+++ b/store/src/java/com/zimbra/cs/account/ZAttrAccount.java
@@ -36180,90 +36180,6 @@ public Map unsetPortalName(Map attrs) {
return attrs;
}
- /**
- * Account profile image
- *
- * @return zimbraPrefAccountProfileImage, or null if unset
- *
- * @since ZCS 8.8.6
- */
- @ZAttr(id=3021)
- public byte[] getPrefAccountProfileImage() {
- return getBinaryAttr(Provisioning.A_zimbraPrefAccountProfileImage, true);
- }
-
- /**
- * Account profile image
- *
- * @return zimbraPrefAccountProfileImage, or null if unset
- *
- * @since ZCS 8.8.6
- */
- @ZAttr(id=3021)
- public String getPrefAccountProfileImageAsString() {
- return getAttr(Provisioning.A_zimbraPrefAccountProfileImage, null, true);
- }
-
- /**
- * Account profile image
- *
- * @param zimbraPrefAccountProfileImage new value
- * @throws com.zimbra.common.service.ServiceException if error during update
- *
- * @since ZCS 8.8.6
- */
- @ZAttr(id=3021)
- public void setPrefAccountProfileImage(byte[] zimbraPrefAccountProfileImage) throws com.zimbra.common.service.ServiceException {
- HashMap attrs = new HashMap();
- attrs.put(Provisioning.A_zimbraPrefAccountProfileImage, zimbraPrefAccountProfileImage==null ? "" : ByteUtil.encodeLDAPBase64(zimbraPrefAccountProfileImage));
- getProvisioning().modifyAttrs(this, attrs);
- }
-
- /**
- * Account profile image
- *
- * @param zimbraPrefAccountProfileImage new value
- * @param attrs existing map to populate, or null to create a new map
- * @return populated map to pass into Provisioning.modifyAttrs
- *
- * @since ZCS 8.8.6
- */
- @ZAttr(id=3021)
- public Map setPrefAccountProfileImage(byte[] zimbraPrefAccountProfileImage, Map attrs) {
- if (attrs == null) attrs = new HashMap();
- attrs.put(Provisioning.A_zimbraPrefAccountProfileImage, zimbraPrefAccountProfileImage==null ? "" : ByteUtil.encodeLDAPBase64(zimbraPrefAccountProfileImage));
- return attrs;
- }
-
- /**
- * Account profile image
- *
- * @throws com.zimbra.common.service.ServiceException if error during update
- *
- * @since ZCS 8.8.6
- */
- @ZAttr(id=3021)
- public void unsetPrefAccountProfileImage() throws com.zimbra.common.service.ServiceException {
- HashMap attrs = new HashMap();
- attrs.put(Provisioning.A_zimbraPrefAccountProfileImage, "");
- getProvisioning().modifyAttrs(this, attrs);
- }
-
- /**
- * Account profile image
- *
- * @param attrs existing map to populate, or null to create a new map
- * @return populated map to pass into Provisioning.modifyAttrs
- *
- * @since ZCS 8.8.6
- */
- @ZAttr(id=3021)
- public Map unsetPrefAccountProfileImage(Map attrs) {
- if (attrs == null) attrs = new HashMap();
- attrs.put(Provisioning.A_zimbraPrefAccountProfileImage, "");
- return attrs;
- }
-
/**
* whether or not account tree is expanded
*
diff --git a/store/src/java/com/zimbra/cs/service/account/ModifyPrefs.java b/store/src/java/com/zimbra/cs/service/account/ModifyPrefs.java
index 468b1801130..ccdbfb893a7 100644
--- a/store/src/java/com/zimbra/cs/service/account/ModifyPrefs.java
+++ b/store/src/java/com/zimbra/cs/service/account/ModifyPrefs.java
@@ -35,7 +35,6 @@
import javax.mail.internet.MimeMultipart;
import org.apache.commons.codec.binary.Hex;
-import org.apache.commons.lang.StringUtils;
import com.google.common.base.Strings;
import com.zimbra.common.account.ZAttrProvisioning.FeatureAddressVerificationStatus;
@@ -56,7 +55,6 @@
import com.zimbra.cs.mailbox.Mailbox;
import com.zimbra.cs.mailbox.MailboxManager;
import com.zimbra.cs.mailbox.OperationContext;
-import com.zimbra.cs.service.util.FileUploadServletUtil;
import com.zimbra.cs.util.AccountUtil;
import com.zimbra.soap.ZimbraSoapContext;
@@ -87,10 +85,6 @@ public Element handle(Element request, Map context) throws Servi
throw ServiceException.INVALID_REQUEST("pref name must start with " + PREF_PREFIX,
null);
- if (Provisioning.A_zimbraPrefAccountProfileImage.equals(name) && !StringUtils.isBlank(value)) {
- value = FileUploadServletUtil.getImageBase64(zsc, value);
- }
-
AttributeInfo attrInfo = AttributeManager.getInstance()
.getAttributeInfo(name.substring(offset));
if (attrInfo == null) {
diff --git a/store/src/java/com/zimbra/cs/service/util/FileUploadServletUtil.java b/store/src/java/com/zimbra/cs/service/util/FileUploadServletUtil.java
deleted file mode 100644
index 108a385b807..00000000000
--- a/store/src/java/com/zimbra/cs/service/util/FileUploadServletUtil.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package com.zimbra.cs.service.util;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-import org.apache.commons.io.IOUtils;
-
-import com.zimbra.common.mime.MimeConstants;
-import com.zimbra.common.mime.MimeDetect;
-import com.zimbra.common.service.ServiceException;
-import com.zimbra.common.util.ByteUtil;
-import com.zimbra.common.util.ZimbraLog;
-import com.zimbra.cs.mailbox.MailServiceException;
-import com.zimbra.cs.service.FileUploadServlet;
-import com.zimbra.cs.service.FileUploadServlet.Upload;
-import com.zimbra.soap.ZimbraSoapContext;
-
-public class FileUploadServletUtil {
-
- public static String getImageBase64(ZimbraSoapContext zsc, String attachId)
- throws ServiceException {
- Upload up = FileUploadServlet.fetchUpload(zsc.getAuthtokenAccountId(), attachId,
- zsc.getAuthToken());
- String contentType;
- try {
- contentType = MimeDetect.getMimeDetect().detect(up.getInputStream());
- } catch (IOException ioe) {
- throw MailServiceException.MESSAGE_PARSE_ERROR(ioe);
- }
- if (contentType == null || !contentType.matches(MimeConstants.CT_IMAGE_WILD)) {
- throw MailServiceException.INVALID_IMAGE("Uploaded image is not a valid image file");
- }
- if (up.getSize() > 3145728l) {
- throw ServiceException.FORBIDDEN("Uploaded image is larger than 3 MB");
- }
- InputStream in = null;
- String result = null;
- try {
- in = up.getInputStream();
- byte[] imageBytes = IOUtils.toByteArray(in);
- result = ByteUtil.encodeLDAPBase64(imageBytes);
- } catch (IOException e) {
- ZimbraLog.account.error(
- "Exception in adding user account profile image with aid=%s for account %s",
- attachId, zsc.getRequestedAccountId());
- throw ServiceException.INVALID_REQUEST("Exception in adding account profile image", e);
- } finally {
- if (in != null) {
- try {
- in.close();
- } catch (IOException e) {
- ZimbraLog.account.error("Exception in closing inputstream for upload", e);
- }
- }
- }
- return result;
- }
-}