예제 #1
0
        private static IHttpAction GetIIS5SVCRequestAction(IHttpActionFactory factory, PortalContext portalContext, NodeHead contextNode)
        {
            // Rewrite path (create PathInfo) if service called on IIS5
            var       httpContext             = portalContext.OwnerHttpContext;
            const int XP_MAJOR_VERSION_NUMBER = 5;

            if (httpContext.Request.Path.Contains(".svc") && Environment.OSVersion.Version.Major == XP_MAJOR_VERSION_NUMBER)
            {
                string filePath, pathInfo, queryString;
                string originalPath = httpContext.Request.Path;

                string[] uriElements = System.Text.RegularExpressions.Regex.Split(originalPath, @".svc/");

                filePath = uriElements[0];
                if (!filePath.EndsWith(".svc", StringComparison.InvariantCultureIgnoreCase))
                {
                    filePath = string.Concat(filePath, ".svc");
                }

                pathInfo = uriElements.Length > 1 ? uriElements[1] : String.Empty;
                string qs = httpContext.Request.Url.Query;
                queryString = string.IsNullOrEmpty(qs) ? string.Empty : qs.Substring(1);

                httpContext.RewritePath(filePath, pathInfo, queryString);

                return(factory.CreateRewriteAction(portalContext, contextNode, null, filePath, pathInfo, queryString));
            }
            return(null);
        }
예제 #2
0
        private static IHttpAction GetFirstRunAction(IHttpActionFactory factory, PortalContext portalContext, NodeHead contextNode)
        {
            //TODO: this is for WebPI first time execution, not really side by side friendly reconsideration needed.
            if (portalContext.Site == null)
            {
                Uri    uri         = portalContext.OwnerHttpContext.Request.Url;
                string uriPath     = uri.GetComponents(UriComponents.Path, UriFormat.Unescaped);
                string installTest = Path.Combine(uri.Authority, "/install/").ToLower();
                string lowerUrl    = uri.ToString().ToLower();

                if (!lowerUrl.EndsWith("/default.aspx") &&
                    !lowerUrl.EndsWith("/config.aspx") &&
                    lowerUrl.IndexOf(installTest) < 0 &&
                    !uriPath.EndsWith(".axd"))
                {
                    var appName = HttpRuntime.AppDomainAppVirtualPath;
                    if (!appName.EndsWith("/"))
                    {
                        appName = appName + "/";
                    }

                    return(factory.CreateRedirectAction(portalContext, contextNode, null,
                                                        appName + "IISConfig/Config.aspx", false, false));
                }
            }
            return(null);
        }
예제 #3
0
        private static IHttpAction GetSiteStartPageAction(IHttpActionFactory factory, PortalContext portalContext, NodeHead contextNode)
        {
            if (contextNode == null)
            {
                return(null);
            }
            if (!contextNode.GetNodeType().IsInstaceOfOrDerivedFrom("Site"))
            {
                return(null);
            }
            //var startPage = portalContext.Site.StartPage;
            Page startPage = null;

            using (new SystemAccount())
            {
                var contextSite = Node.Load <Site>(contextNode.Id);
                if (contextSite != null && (portalContext.ActionName == null || portalContext.ActionName.ToLower() == "browse"))
                {
                    startPage = contextSite.StartPage;
                }
                if (startPage == null)
                {
                    return(null);
                }
            }

            var relPath = startPage.Path.Replace(portalContext.Site.Path, "");

            return(factory.CreateRedirectAction(portalContext, contextNode, null, relPath, false, true));
        }
예제 #4
0
 private static IHttpAction GetODataAction(IHttpActionFactory factory, PortalContext portalContext, NodeHead contextNode)
 {
     if (!portalContext.IsOdataRequest)
     {
         return(null);
     }
     return(GetIHttpHandlerAction(factory, portalContext, contextNode, typeof(SenseNet.Portal.OData.ODataHandler)));
 }
예제 #5
0
 private static IHttpAction GetExternalResourceAction(IHttpActionFactory factory, PortalContext portalContext, NodeHead contextNode)
 {
     if (contextNode == null)
     {
         return(factory.CreateDefaultAction(portalContext, contextNode, null));
     }
     return(null);
 }
예제 #6
0
 private static IHttpAction GetExternalResourceAction(IHttpActionFactory factory, PortalContext portalContext, NodeHead contextNode)
 {
     if (contextNode == null)
     {
         return(factory.CreateDefaultAction(portalContext, contextNode, null));
         //return CreateApplication(actionContext, contextNode, null, new RewriteApp { TargetPath = actionContext.RequestedUrl });
     }
     return(null);
 }
예제 #7
0
        private static IHttpAction GetWebdavAction(IHttpActionFactory factory, PortalContext portalContext, NodeHead contextNode)
        {
            if (!portalContext.IsWebdavRequest)
            {
                return(null);
            }

            return(GetIHttpHandlerAction(factory, portalContext, contextNode, typeof(SenseNet.Services.WebDav.WebDavHandler)));
        }
예제 #8
0
        private static IHttpAction GetSmartUrlAction(IHttpActionFactory factory, PortalContext portalContext, NodeHead contextNode)
        {
            string smartUrl = GetSmartUrl(portalContext);

            if (smartUrl != null)
            {
                return(factory.CreateRedirectAction(portalContext, contextNode, null, smartUrl, false, true));
            }
            return(null);
        }
예제 #9
0
        private static IHttpAction GetODataAction(IHttpActionFactory factory, PortalContext portalContext, NodeHead contextNode)
        {
            var uri = portalContext.RequestedUri;

            if (!uri.PathAndQuery.StartsWith("/odata.svc", StringComparison.OrdinalIgnoreCase))
            {
                return(null);
            }
            return(GetIHttpHandlerAction(factory, portalContext, contextNode, typeof(Portal.OData.ODataHandler)));
        }
예제 #10
0
        private static IHttpAction GetIHttpHandlerAction(IHttpActionFactory factory, PortalContext portalContext, NodeHead contextNode, NodeHead handlerNode)
        {
            var  nodeType = handlerNode.GetNodeType();
            Type appType  = TypeHandler.GetType(nodeType.ClassName);

            if (typeof(IHttpHandler).IsAssignableFrom(appType))
            {
                return(factory.CreateRemapAction(portalContext, contextNode, null, handlerNode));
            }
            return(null);
        }
예제 #11
0
 private static IHttpAction GetDefaultContextAction(IHttpActionFactory factory, PortalContext portalContext, NodeHead contextNode, string actionName, string appNodePath)
 {
     if (String.IsNullOrEmpty(actionName) && String.IsNullOrEmpty(appNodePath))
     {
         if (!String.IsNullOrEmpty(portalContext.QueryStringNodePropertyName))
         {
             return(factory.CreateDownloadAction(portalContext, contextNode, null, GetRewritePath(contextNode, portalContext), portalContext.QueryStringNodePropertyName));
         }
         var nodeType = contextNode.GetNodeType();
         if (nodeType.IsInstaceOfOrDerivedFrom("Page"))
         {
             return(factory.CreateRewriteAction(portalContext, contextNode, null, GetRewritePath(contextNode, portalContext)));
         }
         if (nodeType.IsInstaceOfOrDerivedFrom("File"))
         {
             return(factory.CreateDownloadAction(portalContext, contextNode, null, GetRewritePath(contextNode, portalContext), PortalContext.DefaultNodePropertyName));
         }
     }
     return(null);
 }
예제 #12
0
        private static IHttpAction GetExternalPageAction(IHttpActionFactory factory, PortalContext portalContext, NodeHead contextNode, string actionName, string appNodePath)
        {
            if (contextNode == null)
            {
                return(null);
            }
            if (actionName != null)
            {
                return(null);
            }
            if (appNodePath != null)
            {
                return(null);
            }

            string outerUrl = null;

            AccessProvider.ChangeToSystemAccount();
            try
            {
                Page page = Node.LoadNode(contextNode.Id) as Page;
                if (page != null)
                {
                    if (Convert.ToBoolean((page["IsExternal"])))
                    {
                        outerUrl = page.GetProperty <string>("OuterUrl");
                    }
                }
            }
            finally
            {
                AccessProvider.RestoreOriginalUser();
            }
            if (outerUrl != null)
            {
                return(factory.CreateRedirectAction(portalContext, contextNode, null, outerUrl, false, true));
            }
            return(null);
        }
예제 #13
0
        private static IHttpAction CreateActionPrivate(IHttpActionContext actionContext, IHttpActionFactory actionFactory, NodeHead requestedNode, string requestedActionName, string requestedApplicationNodePath, string requestedDevice)
        {
            IHttpAction action = null;

            var factory       = actionFactory ?? actionContext.GetActionFactory();
            var contextNode   = requestedNode ?? actionContext.GetRequestedNode();
            var actionName    = requestedActionName ?? actionContext.RequestedActionName;
            var appNodePath   = requestedApplicationNodePath ?? actionContext.RequestedApplicationNodePath;
            var portalContext = (PortalContext)actionContext;

            // ================================================= #1: preconditions

            action = GetODataAction(factory, portalContext, contextNode);
            if (action != null)
            {
                return(action);
            }

            // webdav request?
            action = GetWebdavAction(factory, portalContext, contextNode);
            if (action != null)
            {
                return(action);
            }

            // ----------------------------------------------- forward to start page if context is a Site

            action = GetSiteStartPageAction(factory, portalContext, contextNode);
            if (action != null)
            {
                return(action);
            }

            // ----------------------------------------------- smart url

            action = GetSmartUrlAction(factory, portalContext, contextNode);
            if (action != null)
            {
                return(action);
            }

            // ----------------------------------------------- outer resource

            action = GetExternalResourceAction(factory, portalContext, contextNode);
            if (action != null)
            {
                return(action);
            }

            // ----------------------------------------------- context is external page

            action = GetExternalPageAction(factory, portalContext, contextNode, actionName, appNodePath);
            if (action != null)
            {
                return(action);
            }

            // ----------------------------------------------- context is IHttpHandlerNode

            if (string.IsNullOrEmpty(actionName))
            {
                action = GetIHttpHandlerAction(factory, portalContext, contextNode, contextNode);
                if (action != null)
                {
                    return(action);
                }
            }

            // ----------------------------------------------- default context action

            action = GetDefaultContextAction(factory, portalContext, contextNode, actionName, appNodePath);
            if (action != null)
            {
                return(action);
            }

            // ================================================= #2: FindApplication(node, action);

            var appNode = FindApplication(contextNode, actionName, appNodePath, actionContext.DeviceName);

            if (appNode == null)
            {
                return(factory.CreateRewriteAction(actionContext, contextNode, null, GetRewritePath(contextNode, portalContext)));
            }

            // ----------------------------------------------- AppNode is IHttpHandlerNode

            action = GetIHttpHandlerAction(factory, portalContext, contextNode, appNode);
            if (action != null)
            {
                return(action);
            }

            // ----------------------------------------------- page and site

            return(factory.CreateRewriteAction(actionContext, contextNode, appNode, GetRewritePath(appNode, portalContext)));
        }
예제 #14
0
        private static IHttpAction CreateActionPrivate(IHttpActionContext actionContext, IHttpActionFactory actionFactory, NodeHead requestedNode, string requestedActionName, string requestedApplicationNodePath, string requestedDevice)
        {
            IHttpAction action = null;

            var factory       = actionFactory ?? actionContext.GetActionFactory();
            var contextNode   = requestedNode ?? actionContext.GetRequestedNode();
            var actionName    = requestedActionName ?? actionContext.RequestedActionName;
            var appNodePath   = requestedApplicationNodePath ?? actionContext.RequestedApplicationNodePath;
            var portalContext = (PortalContext)actionContext;

            //================================================= #1: preconditions

            action = GetFirstRunAction(factory, portalContext, contextNode);
            if (action != null)
            {
                return(action);
            }

            // webdav request?
            action = GetWebdavAction(factory, portalContext, contextNode);
            if (action != null)
            {
                return(action);
            }

            /*
             * //---- Uncomment and recompile to support *.SVC on IIS5.1
             * action = (GetIIS5SVCRequestAction(portalContext, httpContext));
             * if (action != null)
             *  return action;
             */

            //----------------------------------------------- forward to start page if context is a Site

            action = GetSiteStartPageAction(factory, portalContext, contextNode);
            if (action != null)
            {
                return(action);
            }

            //----------------------------------------------- smart url

            action = GetSmartUrlAction(factory, portalContext, contextNode);
            if (action != null)
            {
                return(action);
            }

            //----------------------------------------------- outer resource

            action = GetExternalResourceAction(factory, portalContext, contextNode);
            if (action != null)
            {
                return(action);
            }

            //----------------------------------------------- context is external page

            action = GetExternalPageAction(factory, portalContext, contextNode, actionName, appNodePath);
            if (action != null)
            {
                return(action);
            }

            //----------------------------------------------- context is IHttpHandlerNode

            if (string.IsNullOrEmpty(actionName))
            {
                action = GetIHttpHandlerAction(factory, portalContext, contextNode, contextNode);
                if (action != null)
                {
                    return(action);
                }
            }

            //----------------------------------------------- default context action

            action = GetDefaultContextAction(factory, portalContext, contextNode, actionName, appNodePath);
            if (action != null)
            {
                return(action);
            }

            //================================================= #2: FindApplication(node, action);

            var appNode = FindApplication(contextNode, actionName, appNodePath, actionContext.DeviceName);

            if (appNode == null)
            {
                return(factory.CreateRewriteAction(actionContext, contextNode, null, GetRewritePath(contextNode, portalContext)));
            }

            portalContext.BackwardCompatibility_SetPageRepositoryPath(appNode.Path);

            //-----------------------------------------------

            //TODO: appNode external page check?

            //----------------------------------------------- AppNode is IHttpHandlerNode

            action = GetIHttpHandlerAction(factory, portalContext, contextNode, appNode);
            if (action != null)
            {
                return(action);
            }

            //----------------------------------------------- page and site

            return(factory.CreateRewriteAction(actionContext, contextNode, appNode, GetRewritePath(appNode, portalContext)));
        }
예제 #15
0
        private static IHttpAction GetIIS5SVCRequestAction(IHttpActionFactory factory, PortalContext portalContext, NodeHead contextNode)
        {
            // Rewrite path (create PathInfo) if service called on IIS5
            var httpContext = portalContext.OwnerHttpContext;
            const int XP_MAJOR_VERSION_NUMBER = 5;
            if (httpContext.Request.Path.Contains(".svc") && Environment.OSVersion.Version.Major == XP_MAJOR_VERSION_NUMBER)
            {
                string filePath, pathInfo, queryString;
                string originalPath = httpContext.Request.Path;

                string[] uriElements = System.Text.RegularExpressions.Regex.Split(originalPath, @".svc/");

                filePath = uriElements[0];
                if (!filePath.EndsWith(".svc", StringComparison.InvariantCultureIgnoreCase))
                    filePath = string.Concat(filePath, ".svc");

                pathInfo = uriElements.Length > 1 ? uriElements[1] : String.Empty;
                string qs = httpContext.Request.Url.Query;
                queryString = string.IsNullOrEmpty(qs) ? string.Empty : qs.Substring(1);

                httpContext.RewritePath(filePath, pathInfo, queryString);

                return factory.CreateRewriteAction(portalContext, contextNode, null, filePath, pathInfo, queryString);
            }
            return null;
        }
예제 #16
0
 private static IHttpAction GetIHttpHandlerAction(IHttpActionFactory factory, PortalContext portalContext, NodeHead contextNode, Type httpHandlerType)
 {
     return(factory.CreateRemapAction(portalContext, contextNode, null, httpHandlerType));
 }
예제 #17
0
        private static IHttpAction GetSiteStartPageAction(IHttpActionFactory factory, PortalContext portalContext, NodeHead contextNode)
        {
            if (contextNode == null)
                return null;
            if (!contextNode.GetNodeType().IsInstaceOfOrDerivedFrom("Site"))
                return null;
            //var startPage = portalContext.Site.StartPage;
            Page startPage = null;

            using (new SystemAccount())
            {
                var contextSite = Node.Load<Site>(contextNode.Id);
                if (contextSite != null && (portalContext.ActionName == null || portalContext.ActionName.ToLower() == "browse"))
                    startPage = contextSite.StartPage;
                if (startPage == null)
                    return null;
            }

            var relPath = startPage.Path.Replace(portalContext.Site.Path, "");
            return factory.CreateRedirectAction(portalContext, contextNode, null, relPath, false, true);
        }
예제 #18
0
 private static IHttpAction GetExternalResourceAction(IHttpActionFactory factory, PortalContext portalContext, NodeHead contextNode)
 {
     if (contextNode == null)
     {
         return factory.CreateDefaultAction(portalContext, contextNode, null);
         //return CreateApplication(actionContext, contextNode, null, new RewriteApp { TargetPath = actionContext.RequestedUrl });
     }
     return null;
 }
예제 #19
0
 private static IHttpAction GetSmartUrlAction(IHttpActionFactory factory, PortalContext portalContext, NodeHead contextNode)
 {
     string smartUrl = GetSmartUrl(portalContext);
     if (smartUrl != null)
         return factory.CreateRedirectAction(portalContext, contextNode, null, smartUrl, false, true);
     return null;
 }
예제 #20
0
        private static IHttpAction GetWebdavAction(IHttpActionFactory factory, PortalContext portalContext, NodeHead contextNode)
        {
            if (!portalContext.IsWebdavRequest)
                return null;

            return GetIHttpHandlerAction(factory, portalContext, contextNode, typeof(SenseNet.Services.WebDav.WebDavHandler));
        }
예제 #21
0
        private static IHttpAction GetExternalPageAction(IHttpActionFactory factory, PortalContext portalContext, NodeHead contextNode, string actionName, string appNodePath)
        {
            if (contextNode == null)
                return null;
            if (actionName != null)
                return null;
            if (appNodePath != null)
                return null;

            string outerUrl = null;
            AccessProvider.ChangeToSystemAccount();
            try
            {
                Page page = Node.LoadNode(contextNode.Id) as Page;
                if (page != null)
                    if (Convert.ToBoolean((page["IsExternal"])))
                        outerUrl = page.GetProperty<string>("OuterUrl");
            }
            finally
            {
                AccessProvider.RestoreOriginalUser();
            }
            if (outerUrl != null)
                return factory.CreateRedirectAction(portalContext, contextNode, null, outerUrl, false, true);
            return null;
        }
예제 #22
0
 private static IHttpAction GetIHttpHandlerAction(IHttpActionFactory factory, PortalContext portalContext, NodeHead contextNode, Type httpHandlerType)
 {
     return factory.CreateRemapAction(portalContext, contextNode, null, httpHandlerType);
 }
예제 #23
0
 private static IHttpAction GetIHttpHandlerAction(IHttpActionFactory factory, PortalContext portalContext, NodeHead contextNode, NodeHead handlerNode)
 {
     var nodeType = handlerNode.GetNodeType();
     Type appType = TypeHandler.GetType(nodeType.ClassName);
     if (typeof(IHttpHandler).IsAssignableFrom(appType))
         return factory.CreateRemapAction(portalContext, contextNode, null, handlerNode);
     return null;
 }
예제 #24
0
        private static IHttpAction GetFirstRunAction(IHttpActionFactory factory, PortalContext portalContext, NodeHead contextNode)
        {
            //TODO: this is for WebPI first time execution, not really side by side friendly reconsideration needed.
            if (portalContext.Site == null)
            {
                Uri uri = portalContext.OwnerHttpContext.Request.Url;
                string uriPath = uri.GetComponents(UriComponents.Path, UriFormat.Unescaped);
                string installTest = Path.Combine(uri.Authority, "/install/").ToLower();
                string lowerUrl = uri.ToString().ToLower();

                if (!lowerUrl.EndsWith("/default.aspx") &&
                    !lowerUrl.EndsWith("/config.aspx") &&
                    lowerUrl.IndexOf(installTest) < 0 &&
                    !uriPath.EndsWith(".axd"))
                {
                    var appName = HttpRuntime.AppDomainAppVirtualPath;
                    if (!appName.EndsWith("/"))
                        appName = appName + "/";

                    return factory.CreateRedirectAction(portalContext, contextNode, null, 
                        appName + "IISConfig/Config.aspx", false, false);
                }
            }
            return null;
        }
예제 #25
0
 private static IHttpAction GetDefaultContextAction(IHttpActionFactory factory, PortalContext portalContext, NodeHead contextNode, string actionName, string appNodePath)
 {
     if (String.IsNullOrEmpty(actionName) && String.IsNullOrEmpty(appNodePath))
     {
         if(!String.IsNullOrEmpty(portalContext.QueryStringNodePropertyName))
             return factory.CreateDownloadAction(portalContext, contextNode, null, GetRewritePath(contextNode, portalContext), portalContext.QueryStringNodePropertyName);
         var nodeType = contextNode.GetNodeType();
         if (nodeType.IsInstaceOfOrDerivedFrom("Page"))
             return factory.CreateRewriteAction(portalContext, contextNode, null, GetRewritePath(contextNode, portalContext));
         if (nodeType.IsInstaceOfOrDerivedFrom("File"))
             return factory.CreateDownloadAction(portalContext, contextNode, null, GetRewritePath(contextNode, portalContext), PortalContext.DefaultNodePropertyName);
     }
     return null;
 }
예제 #26
0
        private static IHttpAction CreateActionPrivate(IHttpActionContext actionContext, IHttpActionFactory actionFactory, NodeHead requestedNode, string requestedActionName, string requestedApplicationNodePath, string requestedDevice)
        {
            IHttpAction action = null;

            var factory = actionFactory ?? actionContext.GetActionFactory();
            var contextNode = requestedNode ?? actionContext.GetRequestedNode();
            var actionName = requestedActionName ?? actionContext.RequestedActionName;
            var appNodePath = requestedApplicationNodePath ?? actionContext.RequestedApplicationNodePath;
            var portalContext = (PortalContext)actionContext;

            //================================================= #1: preconditions

            action = GetFirstRunAction(factory, portalContext, contextNode);
            if (action != null)
                return action;

            // webdav request?
            action = GetWebdavAction(factory, portalContext, contextNode);
            if (action != null)
                return action;

            /*
            //---- Uncomment and recompile to support *.SVC on IIS5.1
            action = (GetIIS5SVCRequestAction(portalContext, httpContext));
            if (action != null)
                return action;
            */

            //----------------------------------------------- forward to start page if context is a Site

            action = GetSiteStartPageAction(factory, portalContext, contextNode);
            if (action != null)
                return action;

            //----------------------------------------------- smart url

            action = GetSmartUrlAction(factory, portalContext, contextNode);
            if (action != null)
                return action;

            //----------------------------------------------- outer resource

            action = GetExternalResourceAction(factory, portalContext, contextNode);
            if (action != null)
                return action;

            //----------------------------------------------- context is external page

            action = GetExternalPageAction(factory, portalContext, contextNode, actionName, appNodePath);
            if (action != null)
                return action;

            //----------------------------------------------- context is IHttpHandlerNode

            if (string.IsNullOrEmpty(actionName))
            {
                action = GetIHttpHandlerAction(factory, portalContext, contextNode, contextNode);
                if (action != null)
                    return action;
            }

            //----------------------------------------------- default context action

            action = GetDefaultContextAction(factory, portalContext, contextNode, actionName, appNodePath);
            if (action != null)
                return action;

            //================================================= #2: FindApplication(node, action);

            var appNode = FindApplication(contextNode, actionName, appNodePath, actionContext.DeviceName);
            if (appNode == null)
                return factory.CreateRewriteAction(actionContext, contextNode, null, GetRewritePath(contextNode, portalContext));

            portalContext.BackwardCompatibility_SetPageRepositoryPath(appNode.Path);

            //-----------------------------------------------

            //TODO: appNode external page check?

            //----------------------------------------------- AppNode is IHttpHandlerNode 

            action = GetIHttpHandlerAction(factory, portalContext, contextNode, appNode);
            if (action != null)
                return action;

            //----------------------------------------------- page and site

            return factory.CreateRewriteAction(actionContext, contextNode, appNode, GetRewritePath(appNode, portalContext));
        }