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 ActionResult Index(string start, string dest) { ViewBag.Error = ""; var stops = db.Stops.ToList(); ViewBag.stops = stops; if (string.IsNullOrWhiteSpace(start)) { ViewBag.Error = "Select Starting Stop Correctly"; return(View()); } if (string.IsNullOrWhiteSpace(dest)) { ViewBag.Error = "Select Destination Stop Correctly"; return(View()); } FindRouteInput input = new FindRouteInput(); input.startPoint = db.Stops.Where(x => x.Name == start).FirstOrDefault(); if (input.startPoint == null) { ViewBag.Error = "Select Starting Stop Correctly"; return(View()); } input.destinationPoint = db.Stops.Where(x => x.Name == dest).FirstOrDefault(); if (input.destinationPoint == null) { ViewBag.Error = "Select Destination Stop Correctly"; return(View()); } RouteFinder finder = new RouteFinder(); List <RouteSearchResult> r = finder.find(input); return(Json(r, JsonRequestBehavior.AllowGet)); }
/// <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); }
public async Task <ActionResult <BaseParameters> > Master([FromServices] ModuleManager moduleManager, [FromServices] ResetSiteCacheCommand resetSiteCacheCommand, [FromServices] IRouteManager routeManager, [FromServices] IOptions <ApplicationConfig> options, [FromQuery] string url, [FromQuery] string port = "") { var fullRequestUrl = HttpUtility.UrlDecode(url); var fullUrl = fullRequestUrl.Split('?')[0]; if (fullUrl.Contains(":")) { fullUrl = fullUrl.Replace($":{port}", ""); } var parameters = new BaseParameters(); var simpleUrl = fullUrl.Replace("https://", "").Replace("http://", ""); var findRouteInput = new FindRouteInput(); findRouteInput.Url = simpleUrl; findRouteInput.FullUrl = fullRequestUrl; findRouteInput.IsSecure = true; findRouteInput.Port = Request.Host.Port.ToString(); var findRouteResult = await routeManager.FindRouteAsync(findRouteInput); if (!findRouteResult.IsSuccess) { return(NotFound()); } var currentRequest = new CurrentRequest(); var siteId = findRouteResult.SiteId; currentRequest.SiteId = siteId; currentRequest.DomainId = findRouteResult.DomainId; currentRequest.DomainDatas = new Dictionary <string, string>(); currentRequest.IsSecure = true; currentRequest.Port = findRouteInput.Port; if (findRouteResult.DomainDatas != null) { foreach (var domainData in findRouteResult.DomainDatas) { currentRequest.DomainDatas.Add(domainData); } } dynamic master; try { master = await moduleManager.GetMasterAsync(currentRequest); } catch (Exception exception) { _logger.LogError(exception, "This catch should be remove"); master = await Business.InvokeAsync <ResetSiteCacheCommand, ResetSiteCacheInput, CommandResult <dynamic> >( resetSiteCacheCommand, new ResetSiteCacheInput { Site = currentRequest }); } var value = options.Value; var baseUrlJs = value.MainDomainUrl; parameters.Master = JsonConvert.SerializeObject(master, new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() }); parameters.Version = value.Version; parameters.MainDomainUrl = @UrlHelper.Concat(baseUrlJs); parameters.IsDebug = value.IsDebug; parameters.BaseUrlJs = baseUrlJs; parameters.Header = HomeController.GetHeader(findRouteResult, master, Request, fullRequestUrl); parameters.BaseUrlSite = parameters.Header.BaseUrlSite; return(parameters); }
private async Task <ActionResult> NormalView(string fullUrl, string fullRequestUrl, bool isSecure) { var findRouteInput = new FindRouteInput(); findRouteInput.Url = fullUrl.Replace("https://", "").Replace("http://", ""); findRouteInput.FullUrl = fullRequestUrl; findRouteInput.IsSecure = isSecure; findRouteInput.Port = Request.Host.Port.ToString(); var findRouteResult = await _routeManager.FindRouteAsync(findRouteInput); if (!findRouteResult.IsSuccess) { if (findRouteResult.HttpCode == "301") { return(RedirectPermanent(findRouteResult.RedirectionUrl)); } Response.StatusCode = 404; return(View("404")); } var currentRequest = new CurrentRequest(); var siteId = findRouteResult.SiteId; currentRequest.SiteId = siteId; currentRequest.DomainId = findRouteResult.DomainId; currentRequest.DomainDatas = new Dictionary <string, string>(); currentRequest.IsSecure = isSecure; currentRequest.Port = findRouteInput.Port; if (findRouteResult.DomainDatas != null) { foreach (var domainData in findRouteResult.DomainDatas) { currentRequest.DomainDatas.Add(domainData); } } // ICurrentRequest if (findRouteResult.Datas["controller"] == "Seo") { if (findRouteResult.Datas["action"] == "Sitemap") { var sitemap = await _moduleManager.GetSitemapAsync(currentRequest); var elements = SiteMapElements(fullRequestUrl, findRouteResult, sitemap); Response.ContentType = "text/xml"; return(View("SiteMap", elements)); } var userInput = new UserInput <GetSeoInput> { UserId = string.Empty, Data = new GetSeoInput { SiteId = siteId, IsVerifyAuthorisation = false } }; var seoResult = await Business.InvokeAsync <GetSeoCommand, UserInput <GetSeoInput>, CommandResult <SeoBusinessModel> >( _getSeoCommand, userInput); if (findRouteResult.Datas["action"] == "Robots") { Response.ContentType = "text/txt"; ViewBag.Disallows = seoResult.Data.Disallows; return(View("Robots")); } if (findRouteResult.Datas["action"] == "BingSiteAuth") { var meta = seoResult.Data.Metas.FirstOrDefault(m => m.Engine == SeoEngine.Bing); if (meta != null && !string.IsNullOrEmpty(meta.Code)) { ViewBag.Code = meta.Code; return(View("BingSiteAuth")); } } if (findRouteResult.Datas["action"] == "GoogleAuth") { var meta = seoResult.Data.Metas.FirstOrDefault(m => m.Engine == SeoEngine.Google); if (meta != null && !string.IsNullOrEmpty(meta.Code)) { ViewBag.Code = meta.Code; return(View("GoogleAuth")); } } return(View("404")); } dynamic master; try { master = await _moduleManager.GetMasterAsync(currentRequest); } catch (Exception exception) { _logger.LogError(exception, "This catch should be remove"); master = await Business.InvokeAsync <ResetSiteCacheCommand, ResetSiteCacheInput, CommandResult <dynamic> >( _resetSiteCacheCommand, new ResetSiteCacheInput { Site = currentRequest }); } var jsonSerializerSettings = new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() }; dynamic masterJson = null; if (_applicationConfig.MinifyHtml) { masterJson = JsonConvert.SerializeObject(master, Formatting.None, jsonSerializerSettings); } else { masterJson = JsonConvert.SerializeObject(master, Formatting.Indented, jsonSerializerSettings); } ViewBag.MasterJson = masterJson; if (Request.Query["display_menu"].Count > 0) { ViewBag.IsDisplayMenu = false; } else { ViewBag.IsDisplayMenu = true; } if (Request.Query["font_size"].Count > 0) { ViewBag.FontSize = Request.Query["font_size"].FirstOrDefault(); } else { ViewBag.FontSize = null; } ViewBag.Header = GetHeader(findRouteResult, master, Request, fullRequestUrl); ViewBag.Hash = _applicationConfig.Hash; string[] filePaths = Directory.GetFiles(Path.Combine(Directory.GetCurrentDirectory(), "ClientApp", "build", "static", "js"), "main.*", SearchOption.TopDirectoryOnly); ViewBag.Script = "/static/js/" + Path.GetFileName(filePaths[0]); return(View("Index")); }
public async Task <ActionResult <BaseParameters> > Master([FromServices] ModuleManager moduleManager, [FromServices] ResetSiteCacheCommand resetSiteCacheCommand, [FromServices] IRouteManager routeManager, [FromServices] IOptions <ApplicationConfig> options, [FromQuery] string url, [FromQuery] string port = "") { /*var requestedDomain = $"{Request.Scheme}://{Request.Host.Host}"; * string applicationPath = Request.PathBase; * string requestedPath = path; * var fullRequestUrl = @UrlHelper.Concat(requestedDomain, Request.PathBase, requestedPath); * * var fullUrl = UrlHelper.Concat(requestedDomain, applicationPath, requestedPath);*/ var fullRequestUrl = url; var fullUrl = fullRequestUrl.Split('?')[0]; if (fullUrl.Contains(":")) { fullUrl = fullUrl.Replace($":{port}", ""); } var parameters = new BaseParameters(); var simpleUrl = fullUrl.Replace("https://", "").Replace("http://", ""); var findRouteInput = new FindRouteInput(); findRouteInput.Url = simpleUrl; findRouteInput.FullUrl = fullRequestUrl; findRouteInput.IsSecure = true; findRouteInput.Port = Request.Host.Port.ToString(); var findRouteResult = await routeManager.FindRouteAsync(findRouteInput); if (!findRouteResult.IsSuccess) { return(NotFound()); } var currentRequest = new CurrentRequest(); var siteId = findRouteResult.SiteId; currentRequest.SiteId = siteId; currentRequest.DomainId = findRouteResult.DomainId; currentRequest.DomainDatas = new Dictionary <string, string>(); currentRequest.IsSecure = true; currentRequest.Port = findRouteInput.Port; if (findRouteResult.DomainDatas != null) { foreach (var domainData in findRouteResult.DomainDatas) { currentRequest.DomainDatas.Add(domainData); } } dynamic master; try { master = await moduleManager.GetMasterAsync(currentRequest); } catch (Exception exception) { _logger.LogError(exception, "This catch should be remove"); master = await Business.InvokeAsync <ResetSiteCacheCommand, ResetSiteCacheInput, CommandResult <dynamic> >( resetSiteCacheCommand, new ResetSiteCacheInput { Site = currentRequest }); } var value = options.Value; parameters.Master = master; parameters.Version = value.Version; parameters.MainDomainUrl = @UrlHelper.Concat(value.MainDomainUrl); parameters.IsDebug = value.IsDebug; //var baseUrl = UriHelper.BuildAbsolute(Request.Scheme, Request.Host).TrimEnd('/'); // parameters.BaseUrl = baseUrl; var baseUrlJs = ""; baseUrlJs = value.MainDomainUrl; parameters.BaseUrlJs = baseUrlJs; // var masterJson = JsonConvert.SerializeObject(master); parameters.Header = HomeController.GetHeader(findRouteResult, master, Request, fullRequestUrl); parameters.BaseUrlSite = parameters.Header.BaseUrlSite; return(parameters); }