Exemple #1
0
        public override VirtualPathData GetVirtualPath(ContentReference contentLink, string language,
                                                       VirtualPathArguments virtualPathArguments)
        {
            var virtualPathData = _defaultUrlResolver.GetVirtualPath(contentLink, language, virtualPathArguments);

            if (!ExternalReview.IsInExternalReviewContext || virtualPathData == null)
            {
                return(virtualPathData);
            }

            var content = _contentLoader.Get <IContent>(contentLink);

            if (ExternalReview.IsInProjectReviewContext)
            {
                if (content is PageData data)
                {
                    var virtualPath = GetAccessibleVirtualPath(virtualPathData, data, language);
                    virtualPathData.VirtualPath = AppendGeneratedPostfix(virtualPath);
                }
            }

            if (content is ImageData imageData)
            {
                virtualPathData.VirtualPath =
                    $"/{ImageProxyExtensions.ImageProxyRoute}?token={ExternalReview.Token}&contentLink={imageData.ContentLink}";
            }

            return(virtualPathData);
        }
 private static bool IsDefaultContextActive(VirtualPathArguments args)
 {
     // VirtualPathArguments.ContextMode can contain incorrect values, so also
     // check if RequestSegmentContext.CurrentContextMode is Default. 
     // This handles all the valid use cases in edit and preview modes.
     return (RequestSegmentContext.CurrentContextMode == ContextMode.Default) &&
            (args == null || args.ContextMode == ContextMode.Default || args.ContextMode == ContextMode.Undefined);
 }
Exemple #3
0
 private static bool IsDefaultContextActive(VirtualPathArguments args)
 {
     // VirtualPathArguments.ContextMode can contain incorrect values, so also
     // check if RequestSegmentContext.CurrentContextMode is Default.
     // This handles all the valid use cases in edit and preview modes.
     return((RequestSegmentContext.CurrentContextMode == ContextMode.Default) &&
            (args == null || args.ContextMode == ContextMode.Default || args.ContextMode == ContextMode.Undefined));
 }
        private string GetContentUrl(ContentReference contentReference, string language, bool validateTemplate = true)
        {
            var arguments = new VirtualPathArguments {
                ValidateTemplate = validateTemplate
            };

            return(UrlResolver.Service.GetVirtualPath(contentReference, language, arguments)?.VirtualPath);
        }
Exemple #5
0
        private bool IgnoreCache(ContentReference contentLink, VirtualPathArguments args)
        {
            // "DataFactoryCache.Version" key must exists in the cache. Otherwise the entries are not cached.
            // The key is removed when a remote server content is updated.
            // Version call ensures that the key is present
            var version = _cacheVersion.Version;

            // Cache only in Default context mode, i.e. only for end users, not for edit or preview mode
            return(HttpContext.Current == null || contentLink == null || !IsDefaultContextActive(args));
        }
        private static string CreateCacheKey(ContentReference contentLink, string language, VirtualPathArguments args)
        {
            // Default to PreferredCulture when explicit value is empty
            var activeLanguage = !string.IsNullOrEmpty(language) ? language : ContentLanguage.PreferredCulture.Name;
            // URLs are startpage relative
            var startPageLink = ContentReference.StartPage ?? PageReference.EmptyReference;

            var key = "Solita:CachingUrlResolver.GetVirtualPath" + $"/{activeLanguage}/{startPageLink}/{contentLink}";

            // RouteValues contain segments for partial routers. These must be included in the key
            if (args?.RouteValues != null && args.RouteValues.Any())
            {
                key += "/" + string.Join(",", args.RouteValues.Select(p => p.Key + "=" + p.Value));
            }

            return key;
        }
        public override VirtualPathData GetVirtualPath(ContentReference contentLink, string language,
                                                       VirtualPathArguments virtualPathArguments)
        {
            var virtualPathData = _defaultUrlResolver.GetVirtualPath(contentLink, language, virtualPathArguments);

            if (!ExternalReview.IsInProjectReviewContext || !ExternalReview.IsInExternalReviewContext || virtualPathData == null)
            {
                return(virtualPathData);
            }

            var content = _contentLoader.Get <IContent>(contentLink);

            if (content is PageData)
            {
                virtualPathData.VirtualPath += $"{_externalReviewOptions.Service.ContentPreviewUrl}/{ExternalReview.Token}?{PreviewGenerated}=true";
            }

            return(virtualPathData);
        }
Exemple #8
0
        public override VirtualPathData GetVirtualPath(ContentReference contentLink, string language,
                                                       VirtualPathArguments virtualPathArguments)
        {
            var virtualPathData = _defaultUrlResolver.GetVirtualPath(contentLink, language, virtualPathArguments);

            if (!ExternalReview.IsInProjectReviewContext || !ExternalReview.IsInExternalReviewContext || virtualPathData == null)
            {
                return(virtualPathData);
            }

            var content = _contentLoader.Get <IContent>(contentLink);

            if (content is PageData)
            {
                virtualPathData.VirtualPath = AppendGeneratedPostfix(virtualPathData.VirtualPath);
            }

            return(virtualPathData);
        }
        public override VirtualPathData GetVirtualPath(ContentReference contentLink, string language, VirtualPathArguments args)
        {
            if (IgnoreCache(contentLink, args))
            {
                return base.GetVirtualPath(contentLink, language, args);
            }

            var cachekey = CreateCacheKey(contentLink, language, args);
            var value = _cache.Get(cachekey) as VirtualPathData;

            if (value == null)
            {
                value = base.GetVirtualPath(contentLink, language, args);

                if (value != null)
                {
                    _cache.Insert(cachekey, value, CreateCacheEvictionPolicy());
                }
            }

            return value;
        }
Exemple #10
0
        public override string GetUrl(UrlBuilder urlBuilderWithInternalUrl, VirtualPathArguments arguments)
        {
            var url = _defaultUrlResolver.GetUrl(urlBuilderWithInternalUrl, arguments);

            if (!ExternalReview.IsInProjectReviewContext || !ExternalReview.IsInExternalReviewContext || url == null)
            {
                return(url);
            }

            var linkMap = _permanentLinkMapper.Find(urlBuilderWithInternalUrl);

            if (linkMap != null)
            {
                var content = _contentLoader.Get <IContent>(linkMap.ContentReference);
                if (content is PageData)
                {
                    return(AppendGeneratedPostfix(url));
                }
            }

            return(url);
        }
        private static string ExternalUrl(ContentReference contentLink, CultureInfo language)
        {
            // Borrowed from Henrik: http://stackoverflow.com/a/29934595/703921

            var virtualPathArguments = new VirtualPathArguments {
                ForceCanonical = true
            };
            var urlString = UrlResolver.Current.GetUrl(contentLink, language.Name, virtualPathArguments);

            if (string.IsNullOrEmpty(urlString) || HttpContext.Current == null)
            {
                return(urlString);
            }

            var uri = new Uri(urlString, UriKind.RelativeOrAbsolute);

            if (uri.IsAbsoluteUri)
            {
                return(urlString);
            }

            return(new Uri(HttpContext.Current.Request.Url, uri).ToString());
        }
Exemple #12
0
        private static string CreateCacheKey(ContentReference contentLink, string language, VirtualPathArguments args)
        {
            // Default to PreferredCulture when explicit value is empty
            var activeLanguage = !string.IsNullOrEmpty(language) ? language : ContentLanguage.PreferredCulture.Name;

            // URLs are host name relative. A single site can have multiple host names defined.
            var host = HttpContext.Current.Request.Url.Host;

            var key = "Solita:CachingUrlResolver.GetVirtualPath" + $"/{activeLanguage}/{host}/{contentLink}";

            // RouteValues contain segments for partial routers. These must be included in the key
            if (args?.RouteValues != null && args.RouteValues.Any())
            {
                key += "/" + string.Join(",", args.RouteValues.Select(p => p.Key + "=" + p.Value));
            }

            return(key);
        }
Exemple #13
0
        private static string CreateCacheKey(ContentReference contentLink, string language, VirtualPathArguments args)
        {
            // Default to PreferredCulture when explicit value is empty
            var activeLanguage = !string.IsNullOrEmpty(language) ? language : ContentLanguage.PreferredCulture.Name;
            // URLs are startpage relative
            var startPageLink = ContentReference.StartPage ?? PageReference.EmptyReference;

            var key = "Solita:CachingUrlResolver.GetVirtualPath" + $"/{activeLanguage}/{startPageLink}/{contentLink}";

            // RouteValues contain segments for partial routers. These must be included in the key
            if (args?.RouteValues != null && args.RouteValues.Any())
            {
                key += "/" + string.Join(",", args.RouteValues.Select(p => p.Key + "=" + p.Value));
            }

            return(key);
        }
Exemple #14
0
 public override VirtualPathData GetVirtualPathForNonContent(object partialRoutedObject, string language,
                                                             VirtualPathArguments virtualPathArguments)
 {
     throw new NotImplementedException();
 }
Exemple #15
0
        public override VirtualPathData GetVirtualPath(ContentReference contentLink, string language, VirtualPathArguments args)
        {
            if (IgnoreCache(contentLink, args))
            {
                return(base.GetVirtualPath(contentLink, language, args));
            }

            var cachekey = CreateCacheKey(contentLink, language, args);
            var value    = _cache.Get(cachekey) as VirtualPathData;

            if (value == null)
            {
                value = base.GetVirtualPath(contentLink, language, args);

                if (value != null)
                {
                    var masterCacheKey = CreateMasterCacheKey(contentLink);
                    _cache.Insert(cachekey, value, CreateCacheEvictionPolicy(masterCacheKey));
                }
            }

            return(value);
        }
Exemple #16
0
 public override VirtualPathData GetVirtualPathForNonContent(object partialRoutedObject, string language,
                                                             VirtualPathArguments virtualPathArguments)
 {
     return(_defaultUrlResolver.GetVirtualPathForNonContent(partialRoutedObject, language, virtualPathArguments));
 }
Exemple #17
0
 protected override VirtualPathData GetVirtualPathInternal(ContentReference contentLink, string language, VirtualPathArguments arguments)
 {
     throw new NotImplementedException();
 }
Exemple #18
0
 public override string GetUrl(UrlBuilder urlBuilderWithInternalUrl, VirtualPathArguments arguments)
 {
     return(urlBuilderWithInternalUrl.Path);
 }
 public override string GetUrl(UrlBuilder urlBuilderWithInternalUrl, VirtualPathArguments arguments)
 {
     return(_defaultUrlResolver.GetUrl(urlBuilderWithInternalUrl, arguments));
 }
 private static bool IgnoreCache(ContentReference contentLink, VirtualPathArguments args)
 {
     // Cache only in Default context mode, i.e. only for end users, not for edit or preview mode
     return HttpContext.Current == null || contentLink == null || !IsDefaultContextActive(args);
 }
Exemple #21
0
 private static bool IgnoreCache(ContentReference contentLink, VirtualPathArguments args)
 {
     // Cache only in Default context mode, i.e. only for end users, not for edit or preview mode
     return(HttpContext.Current == null || contentLink == null || !IsDefaultContextActive(args));
 }