public static SetDisplayPictureResult SaveDisplayPicture(UserContext userContext)
        {
            SetDisplayPictureResult setDisplayPictureResult = DisplayPictureUtility.SaveToAD(userContext, false);

            if (setDisplayPictureResult.ResultCode != SetDisplayPictureResultCode.NoError)
            {
                return(setDisplayPictureResult);
            }
            string imageSmallHtml = string.Empty;
            string imageLargeHtml = string.Empty;
            string adpictureUrl   = RenderingUtilities.GetADPictureUrl(userContext.ExchangePrincipal.LegacyDn, "EX", userContext, true);

            using (StringWriter stringWriter = new StringWriter())
            {
                RenderingUtilities.RenderDisplayPictureImage(stringWriter, userContext, adpictureUrl, 64, true, ThemeFileId.DoughboyPerson);
                imageLargeHtml = stringWriter.ToString();
            }
            using (StringWriter stringWriter2 = new StringWriter())
            {
                RenderingUtilities.RenderDisplayPictureImage(stringWriter2, userContext, adpictureUrl, 32, true, ThemeFileId.DoughboyPersonSmall);
                imageSmallHtml = stringWriter2.ToString();
            }
            setDisplayPictureResult.SetSuccessResult(imageSmallHtml, imageLargeHtml);
            return(setDisplayPictureResult);
        }
 protected override void OnLoad(EventArgs e)
 {
     if (base.Request.HttpMethod == "POST")
     {
         string queryStringParameter = Utilities.GetQueryStringParameter(base.Request, "a", false);
         if (!string.IsNullOrEmpty(queryStringParameter))
         {
             if (queryStringParameter.Equals("upload") && base.Request.Files.Count > 0)
             {
                 HttpPostedFile file = base.Request.Files[0];
                 this.setDisplayPictureResult = DisplayPictureUtility.UploadDisplayPicture(file, base.UserContext);
                 this.currentState            = ChangePictureDialogState.Upload;
                 return;
             }
             if (queryStringParameter.Equals("clear"))
             {
                 this.setDisplayPictureResult = DisplayPictureUtility.ClearDisplayPicture(base.UserContext);
                 this.currentState            = ChangePictureDialogState.Save;
                 return;
             }
             if (queryStringParameter.Equals("change"))
             {
                 this.setDisplayPictureResult = DisplayPictureUtility.SaveDisplayPicture(base.UserContext);
                 this.currentState            = ChangePictureDialogState.Save;
                 return;
             }
         }
     }
     else
     {
         base.UserContext.UploadedDisplayPicture = null;
     }
 }
        private static SetDisplayPictureResult SaveToAD(UserContext userContext, bool isClearPicture)
        {
            if (userContext == null)
            {
                throw new ArgumentNullException("userContext");
            }
            SetDisplayPictureResult noError = SetDisplayPictureResult.NoError;

            byte[] array = null;
            if (!isClearPicture)
            {
                if (userContext.UploadedDisplayPicture == null)
                {
                    noError.SetErrorResult(SetDisplayPictureResultCode.SaveError, SanitizedHtmlString.GetNonEncoded(-1306631087));
                    return(noError);
                }
                array = userContext.UploadedDisplayPicture;
            }
            IRecipientSession recipientSession = Utilities.CreateADRecipientSession(false, ConsistencyMode.IgnoreInvalid, userContext);
            ADRecipient       adrecipient      = Utilities.CreateADRecipientFromProxyAddress(userContext.ExchangePrincipal.ObjectId, null, recipientSession);

            if (adrecipient == null)
            {
                noError.SetErrorResult(SetDisplayPictureResultCode.GeneralError, SanitizedHtmlString.GetNonEncoded(-1496582182));
                return(noError);
            }
            try
            {
                adrecipient.SetProperties(new PropertyDefinition[]
                {
                    ADRecipientSchema.ThumbnailPhoto
                }, new object[]
                {
                    array
                });
                recipientSession.Save(adrecipient);
            }
            catch (Exception ex)
            {
                noError.SetErrorResult(SetDisplayPictureResultCode.SaveError, SanitizedHtmlString.GetNonEncoded(-1496582182));
                ExTraceGlobals.CoreTracer.TraceDebug <string>(0L, "Failed to save display picture to AD  - {0}", ex.Message);
                return(noError);
            }
            userContext.UpdateDisplayPictureCanary();
            userContext.UploadedDisplayPicture = null;
            userContext.HasPicture             = new bool?(array != null);
            string stringHash = Utilities.GetStringHash(userContext.ExchangePrincipal.LegacyDn);

            if (isClearPicture)
            {
                DisplayPictureUtility.RecipientsNegativeCache[stringHash] = DateTime.UtcNow;
            }
            else if (DisplayPictureUtility.IsInRecipientsNegativeCache(stringHash))
            {
                DisplayPictureUtility.RecipientsNegativeCache.Remove(stringHash);
            }
            return(noError);
        }
 private static byte[] ProcessImage(Stream stream, SetDisplayPictureResult result)
 {
     byte[] result2;
     try
     {
         Image image = Image.FromStream(stream);
         if (image == null)
         {
             result.SetErrorResult(SetDisplayPictureResultCode.FailedProcessImage, SanitizedHtmlString.GetNonEncoded(1235679903));
             result2 = null;
         }
         else
         {
             Size   imageScaledSize = DisplayPictureUtility.GetImageScaledSize(image.Size);
             Bitmap bitmap          = new Bitmap(imageScaledSize.Width, imageScaledSize.Height);
             using (Graphics graphics = Graphics.FromImage(bitmap))
             {
                 graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
                 graphics.DrawImage(image, 0, 0, imageScaledSize.Width, imageScaledSize.Height);
             }
             PointF     imageCenterPosition = DisplayPictureUtility.GetImageCenterPosition((float)imageScaledSize.Width, (float)imageScaledSize.Height);
             RectangleF rect    = new RectangleF(imageCenterPosition, new SizeF((float)Math.Min(DisplayPictureUtility.maxImageSize, imageScaledSize.Width), (float)Math.Min(DisplayPictureUtility.maxImageSize, imageScaledSize.Height)));
             Bitmap     bitmap2 = bitmap.Clone(rect, bitmap.PixelFormat);
             byte[]     array   = null;
             using (Stream stream2 = new MemoryStream())
             {
                 bitmap2.Save(stream2, ImageFormat.Jpeg);
                 stream2.Position = 0L;
                 array            = DisplayPictureUtility.ReadFromStream(stream2);
             }
             result2 = array;
         }
     }
     catch (Exception ex)
     {
         result.SetErrorResult(SetDisplayPictureResultCode.FailedProcessImage, SanitizedHtmlString.GetNonEncoded(1235679903));
         ExTraceGlobals.CoreTracer.TraceDebug <string>(0L, "Failed to process image  - {0}", ex.Message);
         result2 = null;
     }
     return(result2);
 }
        public static SetDisplayPictureResult UploadDisplayPicture(HttpPostedFile file, UserContext userContext)
        {
            if (file == null)
            {
                throw new ArgumentNullException("file");
            }
            if (userContext == null)
            {
                throw new ArgumentNullException("userContext");
            }
            SetDisplayPictureResult noError = SetDisplayPictureResult.NoError;

            if (file.ContentLength == 0)
            {
                noError.SetErrorResult(SetDisplayPictureResultCode.GeneralError, SanitizedHtmlString.GetNonEncoded(-1496582182));
                return(noError);
            }
            int num  = 20;
            int num2 = num * 1048576;

            if (file.ContentLength > num2)
            {
                noError.SetErrorResult(SetDisplayPictureResultCode.FileExceedsSizeLimit, SanitizedHtmlString.Format(LocalizedStrings.GetNonEncoded(1511892651), new object[]
                {
                    num
                }));
                return(noError);
            }
            byte[] uploadedDisplayPicture = DisplayPictureUtility.ProcessImage(file.InputStream, noError);
            if (noError.ResultCode != SetDisplayPictureResultCode.NoError)
            {
                return(noError);
            }
            userContext.UploadedDisplayPicture = uploadedDisplayPicture;
            return(noError);
        }
        public static SetDisplayPictureResult ClearDisplayPicture(UserContext userContext)
        {
            SetDisplayPictureResult setDisplayPictureResult = DisplayPictureUtility.SaveToAD(userContext, true);

            if (setDisplayPictureResult.ResultCode != SetDisplayPictureResultCode.NoError)
            {
                return(setDisplayPictureResult);
            }
            string imageSmallHtml = string.Empty;
            string imageLargeHtml = string.Empty;

            using (StringWriter stringWriter = new StringWriter())
            {
                RenderingUtilities.RenderDisplayPictureImage(stringWriter, userContext, string.Empty, 64, true, ThemeFileId.DoughboyPerson);
                imageLargeHtml = stringWriter.ToString();
            }
            using (StringWriter stringWriter2 = new StringWriter())
            {
                RenderingUtilities.RenderDisplayPictureImage(stringWriter2, userContext, string.Empty, 32, true, ThemeFileId.DoughboyPersonSmall);
                imageSmallHtml = stringWriter2.ToString();
            }
            setDisplayPictureResult.SetSuccessResult(imageSmallHtml, imageLargeHtml);
            return(setDisplayPictureResult);
        }
Esempio n. 7
0
        // Token: 0x06002C63 RID: 11363 RVA: 0x000F738C File Offset: 0x000F558C
        private Stream GetADPictureStream(string email, string routingType)
        {
            IRecipientSession recipientSession = Utilities.CreateADRecipientSession(ConsistencyMode.IgnoreInvalid, base.UserContext);

            byte[] array      = null;
            bool   flag       = string.Equals(email, base.UserContext.ExchangePrincipal.LegacyDn, StringComparison.OrdinalIgnoreCase);
            string stringHash = Utilities.GetStringHash(email);
            bool   flag2      = DisplayPictureUtility.IsInRecipientsNegativeCache(stringHash);

            if (!flag2 || flag)
            {
                ProxyAddress proxyAddress = null;
                try
                {
                    if (string.Equals(routingType, "EX", StringComparison.Ordinal))
                    {
                        proxyAddress = new CustomProxyAddress((CustomProxyAddressPrefix)ProxyAddressPrefix.LegacyDN, email, true);
                    }
                    else if (string.Equals(routingType, "SMTP", StringComparison.Ordinal))
                    {
                        proxyAddress = new SmtpProxyAddress(email, true);
                    }
                    if (proxyAddress != null)
                    {
                        if (Globals.ArePerfCountersEnabled)
                        {
                            OwaSingleCounters.SenderPhotosTotalLDAPCalls.Increment();
                        }
                        ADRawEntry adrawEntry = recipientSession.FindByProxyAddress(proxyAddress, new PropertyDefinition[]
                        {
                            ADRecipientSchema.ThumbnailPhoto
                        });
                        if (adrawEntry != null)
                        {
                            array = (adrawEntry[ADRecipientSchema.ThumbnailPhoto] as byte[]);
                        }
                    }
                    goto IL_10F;
                }
                catch (NonUniqueRecipientException ex)
                {
                    ExTraceGlobals.CoreTracer.TraceDebug <string>(0L, "GetADPictureStream: NonUniqueRecipientException was thrown by FindByProxyAddress: {0}", ex.Message);
                    throw new OwaEventHandlerException("Unable to retrieve recipient data.", LocalizedStrings.GetNonEncoded(-1953304495));
                }
            }
            if (Globals.ArePerfCountersEnabled)
            {
                OwaSingleCounters.SenderPhotosDataFromNegativeCacheCount.Increment();
            }
IL_10F:
            bool flag3 = array != null && array.Length > 0;

            if (flag)
            {
                base.UserContext.HasPicture = new bool?(flag3);
            }
            if (flag3)
            {
                if (Globals.ArePerfCountersEnabled)
                {
                    OwaSingleCounters.SenderPhotosTotalLDAPCallsWithPicture.Increment();
                }
                if (flag2)
                {
                    DisplayPictureUtility.RecipientsNegativeCache.Remove(stringHash);
                }
                return(new MemoryStream(array));
            }
            if (!flag2)
            {
                int num = DisplayPictureUtility.RecipientsNegativeCache.AddAndCount(stringHash, DateTime.UtcNow);
                if (Globals.ArePerfCountersEnabled)
                {
                    OwaSingleCounters.SenderPhotosNegativeCacheCount.RawValue = (long)num;
                }
            }
            return(new MemoryStream());
        }