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); } }
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); }
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); }
/// <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); }
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); }