Example #1
0
        private async Task <RouterResult> CompileRoutes(RouteTree routeTree, RouteContext context, HtmlNode node = null, Component parent = null)
        {
            var component             = _provider.CreateComponent(routeTree.Route.Component, context: context.HttpContext);
            var _authorizationService = context.HttpContext.RequestServices.GetRequiredService <IAuthorizationService>();

            if (routeTree.Route.Handler != null)
            {
                _currentRoute.Route = routeTree.Route;
                var authResult = await _authorizationService.AuthorizeAsync(context.HttpContext.User, new object { }, "BibaScheme");

                if (!authResult.Succeeded)
                {
                    throw new UnauthorizedAccessException();
                }
            }

            if (!routeTree.Skip)
            {
                if (node == null)
                {
                    node           = new HtmlNode(HtmlNodeType.Document, new HtmlDocument(), 0);
                    node.InnerHtml = _compiler.PassValues(component);
                }
                else
                {
                    var container = node.Descendants().FirstOrDefault(x => x.Attributes.Any(a => a.Name.Equals("router-container")));
                    if (container != null)
                    {
                        container.InnerHtml = _compiler.PassValues(component);
                    }
                    else
                    {
                        throw new RouterChildContainerNotExistsException();
                    }
                }
            }

            if (routeTree.NestedRoute != null)
            {
                return(await CompileRoutes(routeTree.NestedRoute, context, node, parent));
            }

            return(new RouterResult
            {
                Html = node.OuterHtml,
                Scope = component.Scope
            });
        }
Example #2
0
        private string StartCompile(Component component)
        {
            var doc = new HtmlDocument();

            doc.LoadHtml(component.Template);

            component.HtmlElement = doc.DocumentNode;
            return(_compiler.PassValues(component));
        }