Пример #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 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));
        }
Пример #3
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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        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"));
        }
Пример #6
0
        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);
        }