예제 #1
0
        protected void ProcessHtmlUrlTag(HtmlTagContextAttribute filterAttribute, HtmlWriter writer)
        {
            string         value          = filterAttribute.Value;
            AttachmentLink attachmentLink = this.IsInlineReference(value);

            if (attachmentLink != null)
            {
                this.OutputInlineReference(filterAttribute, attachmentLink, writer);
                return;
            }
            SafeHtmlCallback.TypeOfUrl typeOfUrl = SafeHtmlCallback.GetTypeOfUrl(filterAttribute.Value, filterAttribute.Id);
            if (typeOfUrl == SafeHtmlCallback.TypeOfUrl.Redirection)
            {
                filterAttribute.Write();
                this.hasFoundRedirUrlInCurrentPass = true;
                return;
            }
            if (typeOfUrl == SafeHtmlCallback.TypeOfUrl.Trusted || typeOfUrl == SafeHtmlCallback.TypeOfUrl.Local)
            {
                filterAttribute.Write();
                return;
            }
            if (typeOfUrl == SafeHtmlCallback.TypeOfUrl.Unknown)
            {
                writer.WriteAttribute(filterAttribute.Id, "  ");
            }
        }
 public override void ProcessTag(HtmlTagContext context, HtmlWriter writer)
 {
     if (context == null)
     {
         throw new ArgumentNullException("context");
     }
     if (writer == null)
     {
         throw new ArgumentNullException("writer");
     }
     if (OwaSafeHtmlWebReadyCallbacks.IsStyleSheetLinkTag(context))
     {
         context.WriteTag();
         using (HtmlTagContext.AttributeCollection.Enumerator enumerator = context.Attributes.GetEnumerator())
         {
             while (enumerator.MoveNext())
             {
                 HtmlTagContextAttribute htmlTagContextAttribute = enumerator.Current;
                 if (htmlTagContextAttribute.Id == HtmlAttributeId.Href)
                 {
                     writer.WriteAttribute(htmlTagContextAttribute.Id, this.urlPrefix + htmlTagContextAttribute.Value);
                 }
                 else
                 {
                     htmlTagContextAttribute.Write();
                 }
             }
             return;
         }
     }
     base.ProcessTag(context, writer);
 }
 protected override void ProcessUseMapAttribute(HtmlTagContextAttribute filterAttribute, HtmlTagContext context, HtmlWriter writer)
 {
     if (context.TagId == HtmlTagId.Img)
     {
         filterAttribute.Write();
         return;
     }
     base.ProcessTag(context, writer);
 }
        // Token: 0x060010C4 RID: 4292 RVA: 0x00066E38 File Offset: 0x00065038
        protected override void ProcessImageTag(HtmlTagContextAttribute filterAttribute, HtmlTagContext context, HtmlWriter writer)
        {
            AttachmentLink attachmentLink = base.IsInlineImage(filterAttribute);

            if (attachmentLink != null)
            {
                base.OutputInlineReference(filterAttribute, context, attachmentLink, writer);
                return;
            }
            if (base.IsSafeUrl(filterAttribute.Value, filterAttribute.Id))
            {
                filterAttribute.Write();
            }
        }
예제 #5
0
        private static void RestoreUrl(HtmlTagContextAttribute filterAttribute, HtmlWriter writer)
        {
            string value = filterAttribute.Value;

            if (!string.IsNullOrEmpty(value))
            {
                int    num  = value.IndexOf("redir.aspx?", StringComparison.Ordinal);
                string text = null;
                if (num != -1)
                {
                    string text2 = value.Substring(num + "redir.aspx?".Length);
                    if (text2.StartsWith("URL=", StringComparison.Ordinal))
                    {
                        text = text2.Substring("URL=".Length);
                    }
                    else
                    {
                        bool   legacyFormat = true;
                        string text3        = null;
                        if (text2.StartsWith("SURL", StringComparison.Ordinal))
                        {
                            text3 = text2.Substring("SURL".Length);
                        }
                        else if (text2.StartsWith("REF", StringComparison.Ordinal))
                        {
                            text3        = text2.Substring("REF".Length);
                            legacyFormat = false;
                        }
                        if (text3 != null)
                        {
                            text = CryptoMessage.ExtractUrl(text3, legacyFormat);
                        }
                    }
                }
                else
                {
                    num = OwaSafeHtmlCallbackBase.JSLocalLink.Length + OwaSafeHtmlCallbackBase.JSMethodPrefix.Length;
                    if (value.StartsWith(OwaSafeHtmlCallbackBase.JSLocalLink + OwaSafeHtmlCallbackBase.JSMethodPrefix, StringComparison.Ordinal) && value.EndsWith(OwaSafeHtmlCallbackBase.JSMethodSuffix, StringComparison.Ordinal))
                    {
                        text = OwaSafeHtmlCallbackBase.LocalUrlPrefix + value.Substring(num, value.Length - OwaSafeHtmlCallbackBase.JSMethodSuffix.Length - num);
                    }
                }
                if (text != null)
                {
                    writer.WriteAttribute(filterAttribute.Id, HttpUtility.UrlDecode(text));
                    return;
                }
                filterAttribute.Write();
            }
        }
예제 #6
0
        protected void ProcessImageTag(HtmlTagContextAttribute filterAttribute, HtmlTagContext context, HtmlWriter writer)
        {
            AirSyncDiagnostics.Assert(context != null);
            string         value          = filterAttribute.Value;
            AttachmentLink attachmentLink = this.IsInlineReference(value);

            if (attachmentLink != null)
            {
                this.OutputInlineReference(filterAttribute, attachmentLink, writer);
                return;
            }
            if (SafeHtmlCallback.IsSafeUrl(filterAttribute.Value, filterAttribute.Id))
            {
                filterAttribute.Write();
            }
        }
예제 #7
0
        private void RestoreInlineAttachment(HtmlTagContextAttribute filterAttribute, HtmlTagContext context, HtmlWriter writer)
        {
            string text  = filterAttribute.Value;
            string value = filterAttribute.Value;

            text = HttpUtility.UrlDecode(text);
            if (!string.IsNullOrEmpty(text))
            {
                int num = value.IndexOf(OwaSafeHtmlCallbackBase.AttachmentBaseUrl, StringComparison.Ordinal);
                if (num != -1 && this.Item != null && this.Item.Id != null)
                {
                    if (AttachmentUtility.VerifyInlineAttachmentUrlValidity(value, this.item))
                    {
                        int            contentIdIndex;
                        string         contentId          = AttachmentUtility.ParseInlineAttachmentContentId(text, out contentIdIndex);
                        string         attachmentIdString = AttachmentUtility.ParseInlineAttachmentIdString(text, contentIdIndex);
                        AttachmentLink attachmentLink     = AttachmentUtility.GetAttachmentLink(attachmentIdString, contentId, this.item, this);
                        if (attachmentLink != null)
                        {
                            filterAttribute.WriteName();
                            writer.WriteAttributeValue(this.inlineHTMLAttachmentScheme + AttachmentUtility.GetOrGenerateAttachContentId(attachmentLink));
                            return;
                        }
                    }
                }
                else
                {
                    if (text.IndexOf(OwaSafeHtmlCallbackBase.blankImageFileName, StringComparison.Ordinal) != -1)
                    {
                        filterAttribute.WriteName();
                        writer.WriteAttributeValue(OwaSafeHtmlCallbackBase.DoubleBlank);
                        return;
                    }
                    filterAttribute.Write();
                }
            }
        }
        protected void ProcessHtmlUrlTag(HtmlTagContextAttribute filterAttribute, HtmlTagContext context, HtmlWriter writer)
        {
            OwaSafeHtmlOutboundCallbacks.TypeOfUrl typeOfUrl = this.GetTypeOfUrl(filterAttribute.Value, filterAttribute.Id);
            string text;

            if (typeOfUrl == OwaSafeHtmlOutboundCallbacks.TypeOfUrl.Unknown || typeOfUrl == OwaSafeHtmlOutboundCallbacks.TypeOfUrl.Local)
            {
                if (this.baseRef == null && this.isConversationsOrUnknownType && !this.triedLoadingBaseHref)
                {
                    OwaLightweightHtmlCallback owaLightweightHtmlCallback = new OwaLightweightHtmlCallback();
                    using (Item item = Utilities.GetItem <Item>(this.owaContext.UserContext, this.itemId, new PropertyDefinition[0]))
                    {
                        BodyReadConfiguration bodyReadConfiguration = new BodyReadConfiguration(BodyFormat.TextHtml, "utf-8");
                        bodyReadConfiguration.SetHtmlOptions(HtmlStreamingFlags.FilterHtml, owaLightweightHtmlCallback);
                        Body body = item.Body;
                        if (this.owaContext.UserContext.IsIrmEnabled)
                        {
                            Utilities.IrmDecryptIfRestricted(item, this.owaContext.UserContext, true);
                            if (Utilities.IsIrmRestrictedAndDecrypted(item))
                            {
                                body = ((RightsManagedMessageItem)item).ProtectedBody;
                            }
                        }
                        using (TextReader textReader = body.OpenTextReader(bodyReadConfiguration))
                        {
                            int    num    = 5000;
                            char[] buffer = new char[num];
                            textReader.Read(buffer, 0, num);
                        }
                    }
                    this.baseRef = owaLightweightHtmlCallback.BaseRef;
                    this.triedLoadingBaseHref = true;
                }
                text      = this.GetAbsoluteUrl(filterAttribute.Value, filterAttribute.Id);
                typeOfUrl = this.GetTypeOfUrl(text, filterAttribute.Id);
            }
            else
            {
                text = filterAttribute.Value;
            }
            switch (typeOfUrl)
            {
            case OwaSafeHtmlOutboundCallbacks.TypeOfUrl.Local:
                if (this.owaContext.UserContext.BrowserType != BrowserType.Safari && !this.owaContext.UserContext.IsBasicExperience && !this.isConversations)
                {
                    writer.WriteAttribute(filterAttribute.Id, OwaSafeHtmlCallbackBase.JSLocalLink + OwaSafeHtmlCallbackBase.JSMethodPrefix + filterAttribute.Value.Substring(1) + OwaSafeHtmlCallbackBase.JSMethodSuffix);
                    return;
                }
                filterAttribute.Write();
                return;

            case OwaSafeHtmlOutboundCallbacks.TypeOfUrl.Trusted:
                filterAttribute.Write();
                this.hasFoundNonLocalUrlInCurrentPass = true;
                return;

            case OwaSafeHtmlOutboundCallbacks.TypeOfUrl.Redirection:
                filterAttribute.WriteName();
                writer.WriteAttributeValue(Redir.BuildRedirUrl(this.owaContext.UserContext, text));
                this.hasFoundNonLocalUrlInCurrentPass = true;
                return;

            case OwaSafeHtmlOutboundCallbacks.TypeOfUrl.Unknown:
                writer.WriteAttribute(filterAttribute.Id, OwaSafeHtmlOutboundCallbacks.BlockedUrlPageValue);
                this.hasFoundNonLocalUrlInCurrentPass = true;
                return;

            default:
                return;
            }
        }