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( - "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", - 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; - } -}