Пример #1
0
 private void ComputeRedirection(FindRouteInput input, FindRouteResult result)
 {
     result.IsSuccess = false;
     result.HttpCode  = "301";
     if (input.FullUrl.StartsWith(_routeProvider.ProtocolDefault))
     {
         result.RedirectionUrl = input.FullUrl.Replace(_routeProvider.ProtocolDefault,
                                                       _routeProvider.ProtocolSecure);
     }
 }
Пример #2
0
        public static Header GetHeader(FindRouteResult findRouteResult, dynamic master, HttpRequest request,
                                       string fullRequestUrl)
        {
            var masterModel = master.Master;
            var header      = new Header();

            header.FacebookAppId = masterModel.FacebookAuthenticationAppId;
            header.SiteName      = masterModel.Title;

            header.Style = masterModel.StyleTemplate;

            var baseUrl = UriHelper.BuildAbsolute(request.Scheme, request.Host).TrimEnd('/');

            header.BaseUrl = baseUrl;

            var siteId = master.Site.SiteId;

            header.FullUrl = fullRequestUrl;
            header.LogoUrl =
                $@"{baseUrl}/api/file/get/{siteId}/{masterModel.ImageLogoId}/{"ImageThumb"}/{
                        UrlHelper.NormalizeTextForUrl(masterModel.ImageLogoFileName)
                    }";
            header.IconeUrl =
                $@"{baseUrl}/api/file/get/{siteId}/{masterModel.ImageIconeId}/{"ImageThumb"}/{
                        UrlHelper.NormalizeTextForUrl(masterModel.ImageIconeFileName)
                    }";
            var baseUrlSite = fullRequestUrl.Replace(baseUrl, "");

            if (!string.IsNullOrEmpty(findRouteResult.Path))
            {
                baseUrlSite = baseUrlSite.Replace(findRouteResult.Path, "");
            }
            if (request.QueryString.HasValue)
            {
                baseUrlSite = baseUrlSite.Replace(request.QueryString.Value, "");
            }
            if (string.IsNullOrEmpty(baseUrlSite))
            {
                baseUrlSite = "/";
            }
            if (!baseUrlSite.StartsWith("/"))
            {
                baseUrlSite = string.Concat("/", baseUrlSite);
            }
            if (!baseUrlSite.EndsWith("/"))
            {
                baseUrlSite = string.Concat(baseUrlSite, "/");
            }
            header.BaseUrlSite = baseUrlSite;

            var masterDictionnary = (IDictionary <string, object>)master;

            InitHeader(findRouteResult, master, masterDictionnary, header, baseUrl);
            return(header);
        }
Пример #3
0
        private static List <SiteMapElement> SiteMapElements(string fullRequestUrl, FindRouteResult result,
                                                             dynamic master)
        {
            var websiteUrl = fullRequestUrl.Replace(result.Path, string.Empty);
            var elements   = new List <SiteMapElement>();

            var masterDictionnary = (IDictionary <string, object>)master;

            InitSitemap(masterDictionnary, websiteUrl, elements);
            return(elements);
        }
Пример #4
0
        /// <summary>
        ///     Récupère la première route qui match avec les parmètres
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task <FindRouteResult> FindRouteAsync(FindRouteInput input)
        {
            var result = new FindRouteResult();

            result.IsSuccess = true;

            if (_routeProvider.Domains == null)
            {
                result.IsSuccess = false;
                result.HttpCode  = "404";
                return(result);
            }
            var url = input.Url;

            if (string.IsNullOrEmpty(url))
            {
                result.IsSuccess = false;
                result.HttpCode  = "404";
                return(result);
            }

            var datas       = new Dictionary <string, string>();
            var domainDatas = new Dictionary <string, string>();

            var cacheResult = await _cacheRepository.GetValueAsync <FindRouteResult>(input, CacheRepository.CacheUrlRoutageKey);

            if (cacheResult != null)
            {
                return(cacheResult);
            }

            #region 1: on récupère le domaine et la culture

            var loadDomainResult = await LoadDomainAsync(url, domainDatas, _routeProvider, _logger);

            // On récupère le nom de domaine
            var domain = loadDomainResult.Domain;
            var siteId = loadDomainResult.SiteId;

            // On éjecte les domaines non sécurisé
            if (domain == null)
            {
                result.IsSuccess = false;
                result.HttpCode  = "404";
                return(result);
            }

            if (domain.SecureMode == SecureMode.Secure && !input.IsSecure)
            {
                ComputeRedirection(input, result);
                return(result);
            }

            #endregion

            #region 3: Route

            // On récupère la route associé
            var routePath = GetRoutePath(url, domain, domainDatas);

            var route = await LoadRouteAsync(routePath, datas, _routeProvider, domainDatas, siteId, _logger);

            if (route == null)
            {
                result.IsSuccess = false;
                result.HttpCode  = "404";
                return(result);
            }

            // on ajoute les valeurs par défaut de la route
            if (route.DefaultValues != null)
            {
                foreach (var defaultValue in route.DefaultValues)
                {
                    if (!datas.ContainsKey(defaultValue.Key))
                    {
                        datas.Add(defaultValue.Key, defaultValue.Value);
                    }
                }
            }

            #endregion

            if (!string.IsNullOrEmpty(route.Controller))
            {
                SetValue(datas, "controller", route.Controller);
            }

            if (!string.IsNullOrEmpty(route.Action))
            {
                SetValue(datas, "action", route.Action);
            }

            if (!string.IsNullOrEmpty(route.Namespace))
            {
                SetValue(datas, "namespace", route.Namespace);
            }

            // Gestion de la redirection de domain à domain
            if (!string.IsNullOrEmpty(domain.RedirecToDomainId))
            {
                if (!route.CancelRedirect)
                {
                    var findPathInput = new FindPathInput();
                    findPathInput.DomainDatas = domainDatas;
                    findPathInput.DomainId    = domain.RedirecToDomainId;
                    findPathInput.IsSecure    = null;
                    findPathInput.Port        = input.Port;
                    findPathInput.Datas       = datas;

                    var resultFindDomainPath = await FindDomainPathAsync(findPathInput);

                    result.IsSuccess = false;
                    result.HttpCode  = "301";
                    if (input.FullUrl.StartsWith(_routeProvider.ProtocolDefault))
                    {
                        result.RedirectionUrl = resultFindDomainPath.FullUrl;
                    }
                }
            }
            if (!string.IsNullOrEmpty(route.RedirectPath))
            {
                result.IsSuccess = false;
                result.HttpCode  = "301";
                if (input.FullUrl.StartsWith(_routeProvider.ProtocolDefault))
                {
                    result.RedirectionUrl = route.RedirectPath; //UrlHelper.Concat(domain.Path, route.RedirectPath);
                }
            }

            result.Datas       = datas;
            result.DomainDatas = domainDatas;
            result.RouteId     = route.Identity;
            result.SiteId      = siteId;
            result.DomainId    = domain.Id;

            result.Path        = routePath;
            result.RewritePath = (new Rewriter()).Map(routePath, route, datas);
            result.Domain      = domain.Path;

            await _cacheRepository.SaveAsync(new Data.Model.Cache.CacheItem()
            {
                Key        = JsonConvert.SerializeObject(input),
                Type       = CacheRepository.CacheUrlRoutageKey,
                SiteId     = siteId,
                Value      = JsonConvert.SerializeObject(result),
                CreateDate = DateTime.Now
            });

            return(result);
        }
Пример #5
0
        private static Header InitHeader(FindRouteResult findRouteResult, dynamic master,
                                         IDictionary <string, object> masterDictionnary,
                                         Header header, string baseUrl)
        {
            foreach (var key in masterDictionnary.Keys)
            {
                if (key.ToLower().EndsWith("menuitems"))
                {
                    dynamic menuItems = masterDictionnary[key] as ArrayList;

                    if (menuItems == null)
                    {
                        menuItems = masterDictionnary[key] as List <object>;
                    }

                    if (menuItems != null)
                    {
                        foreach (var menuItem in menuItems)
                        {
                            var menuItemExpendo = CacheProvider.ToExpando(menuItem);
                            var dico            = (IDictionary <string, object>)menuItemExpendo;
                            var resultHeader    = InitHeader(findRouteResult, master, dico, header, baseUrl);
                            if (resultHeader != null)
                            {
                                return(resultHeader);
                            }

                            var moduleId = string.Empty;
                            if (findRouteResult.Datas.ContainsKey("moduleId"))
                            {
                                moduleId = findRouteResult.Datas["moduleId"];
                            }

                            if (findRouteResult.Datas.ContainsKey("moduleid"))
                            {
                                moduleId = findRouteResult.Datas["moduleid"];
                            }
                            if (moduleId == menuItem.ModuleId)
                            {
                                header.Title = string.Concat(master.Master.Title, " ", menuItem.Title);
                                var seo = CacheProvider.ToExpando(menuItem.Seo) as IDictionary <string, object>;
                                if (seo != null)
                                {
                                    if (seo.ContainsKey("MetaDescription") &&
                                        !string.IsNullOrEmpty(menuItem.Seo.MetaDescription))
                                    {
                                        header.MetaDescription = menuItem.Seo.MetaDescription;
                                    }

                                    if (seo.ContainsKey("MetaKeywords") &&
                                        !string.IsNullOrEmpty(menuItem.Seo.MetaKeywords))
                                    {
                                        header.MetaKeywords = menuItem.Seo.MetaKeywords;
                                    }

                                    if (seo.ContainsKey("SocialImageUrl") &&
                                        !string.IsNullOrEmpty(menuItem.Seo.SocialImageUrl))
                                    {
                                        header.LogoUrl = UrlHelper.Concat(baseUrl, menuItem.Seo.SocialImageUrl);
                                    }
                                }

                                return(header);
                            }
                        }
                    }
                }
            }


            return(null);
        }