示例#1
0
        /// <summary>
        /// Processes dimensions for dynamically scaled images according to configuration.
        ///
        /// </summary>
        /// <param name="request">The media request.</param><param name="media">The media.</param>
        private void ProcessImageDimensions(MediaRequest request, Sitecore.Resources.Media.Media media)
        {
            Assert.ArgumentNotNull((object)request, "request");
            Assert.ArgumentNotNull((object)media, "media");
            Item innerItem = media.MediaData.MediaItem.InnerItem;
            int  result1;

            int.TryParse(innerItem["Height"], out result1);
            int result2;

            int.TryParse(innerItem["Width"], out result2);
            bool flag      = false;
            int  maxHeight = Settings.Media.Resizing.MaxHeight;

            if (maxHeight != 0 && request.Options.Height > Math.Max(maxHeight, result1))
            {
                flag = true;
                request.Options.Height = Math.Max(maxHeight, result1);
            }
            int maxWidth = Settings.Media.Resizing.MaxWidth;

            if (maxWidth != 0 && request.Options.Width > Math.Max(maxWidth, result2))
            {
                flag = true;
                request.Options.Width = Math.Max(maxWidth, result2);
            }
            if (!flag)
            {
                return;
            }
            Log.Warn(string.Format("Requested image exceeds allowed size limits. Requested URL:{0}", (object)request.InnerRequest.RawUrl), (object)this);
        }
        protected override bool DoProcessRequest(HttpContext context)
        {
            Assert.ArgumentNotNull((object)context, "context");

            //Sitecore produces media search result icons with wrong querystring (2 question marks):
            // "?h=48&thn=1&w=48&db=master?w=80&h=60&db=master"
            // using the 1st part only "?h=48&thn=1&w=48&db=master" and redirect to the fixed url:
            FixSearchResultIconUrl(context.Request);

            MediaRequest request = MediaManager.ParseMediaRequest(context.Request);

            if (request == null)
            {
                return(false);
            }

            Sitecore.Resources.Media.Media media = MediaManager.GetMedia(request.MediaUri);

            // handle 404 of media items
            if (media == null)
            {
                using (new SecurityDisabler())
                    media = MediaManager.GetMedia(request.MediaUri);

                string str;

                if (media == null)
                {
                    str = Settings.ItemNotFoundUrl;
                }
                else
                {
                    Assert.IsNotNull(Sitecore.Context.Site, "site");
                    str = Sitecore.Context.Site.LoginPage != string.Empty ? Sitecore.Context.Site.LoginPage : Settings.NoAccessUrl;
                }
                if (Settings.RequestErrors.UseServerSideRedirect)
                {
                    HttpContext.Current.Server.TransferRequest(str);
                }
                else
                {
                    HttpContext.Current.Response.Redirect(str);
                }
                return(true);
            }

            if (!IsCdnMedia(media))
            {
                return(base.DoProcessRequest(context));
            }

            if (request.Options.Thumbnail)
            {
                request.Options.UseMediaCache = false;
                return(base.DoProcessRequest(context, request, media));
            }

            return(this.DoProcessRequest(context, media));
        }
示例#3
0
        private bool DoProcessRequest(HttpContext context, Sitecore.Resources.Media.Media media)
        {
            var    helper      = new MediaHelper(media.MediaData.MediaItem);
            string redirectUrl = helper.GetCloudBasedMediaUrl();

            context.Response.Redirect(redirectUrl, false);
            context.ApplicationInstance.CompleteRequest();
            return(true);
        }
        private bool DoProcessRequest(HttpContext context, Sitecore.Resources.Media.Media media)
        {
            //var helper = new MediaHelper(media.MediaData.MediaItem);
            //string redirectUrl = helper.GetCloudBasedMediaUrl();
            //all blob urls set to expire in 24h (1440 minutes)
            var redirectUrl = _provider.GetUrlWithSasToken(media.MediaData.MediaItem, 1440);

            context.Response.Redirect(redirectUrl, false);
            context.ApplicationInstance.CompleteRequest();
            return(true);
        }
示例#5
0
        public static long ProcessMediaItem(MediaItem mediaItem, CrunchOptions crunchOptions)
        {
            long resultantSize = 0;

            if (crunchOptions.IsEnabled)
            {
                if (mediaItem.MimeType == "image/jpeg" || mediaItem.MimeType == "image/pjpeg" ||
                    mediaItem.MimeType == "image/gif" || mediaItem.MimeType == "image/png")
                {
                    ICruncher cruncher = Cruncher.GetCruncher();
                    if (cruncher == null)
                    {
                        Log.Error("Could not find cruncher!", typeof(CrunchImage));
                        return(resultantSize);
                    }
                    if (mediaItem.Size >= cruncher.MaxImageSize)
                    {
                        return(resultantSize);
                    }
                    var mediaStream = mediaItem.GetMediaStream();
                    Job job         = Context.Job;
                    try
                    {
                        CrunchResult result = cruncher.CrunchStream(mediaStream, crunchOptions);

                        if (result == null)
                        {
                            Log.Error(string.Format("Could not shrink media file {0}", mediaItem.InnerItem.Paths.Path),
                                      typeof(CrunchImage));
                        }
                        Sitecore.Resources.Media.Media media = MediaManager.GetMedia(mediaItem);
                        using (var stream = new MemoryStream())
                        {
                            result.FileStream.CopyTo(stream);
                            stream.Position = 0;
                            resultantSize   = stream.Length;
                            media.SetStream(stream, Path.GetExtension(result.Format).TrimStart('.'));
                        }
                    }
                    catch (Exception exception)
                    {
                        if (job != null)
                        {
                            job.Status.LogError("Image could not be reduced in size");
                        }
                        Log.Error(string.Format("Image crunch failed: {0}", mediaItem.InnerItem.Paths.FullPath), exception,
                                  (typeof(CrunchImage)));
                    }
                }
            }
            return(resultantSize);
        }
示例#6
0
        protected override Tristate Modified(HttpContext context, Sitecore.Resources.Media.Media media, MediaOptions options)
        {
            string str1 = context.Request.Headers["If-None-Match"];

            if (!string.IsNullOrEmpty(str1) && str1 != media.MediaData.MediaId)
            {
                return(Tristate.True);
            }
            string str2 = context.Request.Headers["If-Modified-Since"];

            if (!string.IsNullOrEmpty(str2))
            {
                DateTime result;
                if (DateTime.TryParse(str2.Split(';')[0].Replace(" UTC", " GMT"), out result))
                {
                    return(MainUtil.GetTristate(!this.CompareDatesWithRounding(result, media.MediaData.Updated, new TimeSpan(0, 0, 1))));
                }
                Log.Warn(string.Format("Can't parse header. The wrong value  - \"If-Modified-Since: {0}\" ", (object)str2), (object)typeof(MediaRequestHandler));
            }
            return(Tristate.Undefined);
        }
示例#7
0
        protected override bool DoProcessRequest(HttpContext context)
        {
            Assert.ArgumentNotNull((object)context, "context");
            MediaRequest request = MediaManager.ParseMediaRequest(context.Request);

            if (request == null)
            {
                return(false);
            }
            Sitecore.Resources.Media.Media media = MediaManager.GetMedia(request.MediaUri);

            if (!IsCdnMedia(media))
            {
                return(base.DoProcessRequest(context));
            }

            if (request.Options.Thumbnail)
            {
                request.Options.UseMediaCache = false;
                return(base.DoProcessRequest(context, request, media));
            }

            return(this.DoProcessRequest(context, media));
        }
示例#8
0
 private bool IsCdnMedia(Sitecore.Resources.Media.Media media)
 {
     return(media != null && media.MediaData.MediaItem.FileBased);
 }
示例#9
0
        protected override bool DoProcessRequest(HttpContext context, MediaRequest request, Sitecore.Resources.Media.Media media)
        {
            Assert.ArgumentNotNull((object)context, "context");
            Assert.ArgumentNotNull((object)request, "request");
            Assert.ArgumentNotNull((object)media, "media");
            if (this.Modified(context, media, request.Options) == Tristate.False)
            {
                Event.RaiseEvent("media:request", new object[1]
                {
                    (object)request
                });
                this.SendMediaHeaders(media, context);
                context.Response.StatusCode = 304;
                return(true);
            }
            this.ProcessImageDimensions(request, media);
            MediaStream stream = media.GetStream(request.Options);

            if (stream == null)
            {
                return(false);
            }
            Event.RaiseEvent("media:request", new object[1]
            {
                (object)request
            });
            if (Settings.Media.EnableRangeRetrievalRequest && Settings.Media.CachingEnabled)
            {
                using (stream)
                {
                    this.SendMediaHeaders(media, context);
                    new RangeRetrievalResponse(RangeRetrievalRequest.BuildRequest(context, media), stream).ExecuteRequest(context);
                    return(true);
                }
            }
            else
            {
                this.SendMediaHeaders(media, context);
                this.SendStreamHeaders(stream, context);
                using (stream)
                {
                    context.Response.AddHeader("Content-Length", stream.Stream.Length.ToString());
                    WebUtil.TransmitStream(stream.Stream, context.Response, Settings.Media.StreamBufferSize);
                }
                return(true);
            }
        }
        protected override bool DoProcessRequest(HttpContext context, MediaRequest request, Sitecore.Resources.Media.Media media)
        {
            if (Context.Database.Name.ToLower() != "core")
            {
                string mediaId = media.MediaData.MediaItem.ID.ToString();

                Item disclaimerFolder = Context.Database.GetItem("/sitecore/content/Global/Settings/Disclaimers");
                if (disclaimerFolder != null)
                {
                    foreach (Item disc in disclaimerFolder.Children)
                    {
                        if (disc["Media To Protect"].IndexOf(mediaId) >= 0)
                        {
                            string disclaimerPageId = disc["Disclaimer Page"];
                            Item   item             = Context.Database.GetItem(new ID(disclaimerPageId));
                            string url = LinkManager.GetItemUrl(item);

                            ShowDisclaimer(mediaId, url);
                            break;
                        }
                    }
                }
            }
            return(base.DoProcessRequest(context, request, media));
        }
        /// <summary>
        /// Process the current request and return false if the media item was not found, so Sitecore
        /// can go ahead with processing the pipelines. Also check the <c>availableLanguages</c>
        /// from the current <see cref="Sitecore.Sites.SiteContext"/> to check for a valid language
        /// version of the media.
        /// </summary>
        /// <param name="context">Current <see cref="System.Web.HttpContext"/>.</param>
        /// <returns><c>True</c> if everything was OK, <c>false</c> if the request is invalid or the media was not found.</returns>
        protected override bool DoProcessRequest(HttpContext context)
        {
            Assert.ArgumentNotNull(context, "context");
            Assert.IsNotNull(Sitecore.Context.Site, "site");
            MediaRequest mediaRequest = MediaManager.ParseMediaRequest(context.Request);

            if (mediaRequest == null)
            {
                return(false);
            }

            bool notfound = false;
            bool noaccess = false;

            string   redirect = string.Empty;
            Language lang     = UrlUtil.ResolveLanguage();

            // get media
            Sitecore.Resources.Media.Media media = MediaManager.GetMedia(mediaRequest.MediaUri);

            // check item in language
            Item mediaItem = Sitecore.Context.Database.GetItem(mediaRequest.MediaUri.MediaPath);

            if (Sitecore.Context.GetSiteName() != "shell" &&
                (mediaItem == null ||
                 (!mediaItem.Fields["Blob"].Shared &&
                  !mediaItem.HasLanguageVersion(lang, Sitecore.Context.Site.Properties["availableLanguages"]))))
            {
                notfound = true;
            }

            // check for media
            if (media == null)
            {
                using (new SecurityDisabler())
                {
                    media = MediaManager.GetMedia(mediaRequest.MediaUri);
                }

                if (media == null)
                {
                    notfound = true;
                }
                else
                {
                    noaccess = true;
                }
            }

            // generate redirect url
            if (notfound)
            {
                redirect = Sitecore.Configuration.Settings.ItemNotFoundUrl;
            }
            else if (noaccess)
            {
                redirect = ((Sitecore.Context.Site.LoginPage != string.Empty) ? Sitecore.Context.Site.LoginPage : Sitecore.Configuration.Settings.NoAccessUrl);
            }

            // redirect if needed
            if (!string.IsNullOrEmpty(redirect))
            {
                if (Sitecore.Configuration.Settings.RequestErrors.UseServerSideRedirect)
                {
                    HttpContext.Current.Server.Transfer(redirect);
                }
                else
                {
                    HttpContext.Current.Response.Redirect(redirect);
                }

                return(false);
            }

            return(this.DoProcessRequest(context, mediaRequest, media));
        }