Author: nettings
Date: Wed Nov 7 11:35:05 2007
New Revision: 592863
URL: http://svn.apache.org/viewvc?rev=592863&view=rev
Log:
fixes for redirects in non-root contexts and proxied environments.
added appropriate {proxy:} calls around redirect uris and added
proxyModule link rewriting to usecases redirector.
please test thoroughly. this is a potentially dangerous commit during
code freeze. you can use the jetty6 setup described in tools/proxytest
to create a non-root proxy setup without too much hassle.
Modified:
lenya/trunk/src/modules-core/usecase/usecases.js
lenya/trunk/src/pubs/default/config/publication.xml
lenya/trunk/src/pubs/default/sitemap.xmap
lenya/trunk/src/webapp/global-sitemap.xmap
lenya/trunk/src/webapp/lenya/config/sitemap/pipelines.xmap
Modified: lenya/trunk/src/modules-core/usecase/usecases.js
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/usecase/usecases.js?rev=592863&r1=592862&r2=592863&view=diff
==============================================================================
--- lenya/trunk/src/modules-core/usecase/usecases.js (original)
+++ lenya/trunk/src/modules-core/usecase/usecases.js Wed Nov 7 11:35:05 2007
@@ -18,6 +18,7 @@
/* $Id$ */
cocoon.load("resource://org/apache/cocoon/forms/flow/javascript/Form.js");
+importPackage(Packages.org.apache.lenya.cms.linking)
//placeholders for custom flow code:
var customLoopFlow = undefined;
@@ -287,15 +288,40 @@
}
/**
- * Redirect to target URL after finishing the usecase.
+ * Redirect to target URL after finishing the usecase,
+ * taking proxy settings into account.
*
- * @param the target URL
+ * @param the webapp-internal target URL
*/
function redirect(targetUrl) {
- var flowHelper = cocoon.getComponent("org.apache.lenya.cms.cocoon.flow.FlowHelper");
- var contextPath = flowHelper.getRequest(cocoon).getContextPath();
- cocoon.releaseComponent(flowHelper);
- cocoon.redirectTo(contextPath + targetUrl, true);
+ var flowHelper; // needed to obtain the current objectModel
+ var objectModel; // needed to provide context to the proxyModule
+ var inputModuleSelector; // needed to obtain a proxyModule
+ var proxyModule; // used to rewrite the targetUrl according to the publication's proxy settings
+ var proxyUrl; // the rewritten target Url
+
+ flowHelper = cocoon.getComponent("org.apache.lenya.cms.cocoon.flow.FlowHelper");
+ try {
+ objectModel = flowHelper.getObjectModel(cocoon);
+ } finally {
+ cocoon.releaseComponent(flowHelper);
+ }
+
+ inputModuleSelector = cocoon.getComponent(org.apache.cocoon.components.modules.input.InputModule.ROLE + "Selector");
+ try {
+ proxyModule = inputModuleSelector.select("proxy");
+ try {
+ proxyUrl = proxyModule.getAttribute(targetUrl, null, objectModel);
+ } finally {
+ cocoon.releaseComponent(proxyModule);
+ }
+ } finally {
+ cocoon.releaseComponent(inputModuleSelector);
+ }
+
+ log("debug", "Redirecting to {proxy:" + targetUrl + "} = " + proxyUrl + ".");
+
+ cocoon.redirectTo(proxyUrl, true);
}
@@ -407,7 +433,7 @@
}
//getTargetURL takes a boolean that is true on success:
targetUrl = usecase.getTargetURL(state == "success");
- log("debug", "Completed, redirecting to url = [context:/" + targetUrl + "]", usecaseName);
+ log("debug", "Completed, redirecting to url = [" + targetUrl + "]", usecaseName);
// jump to the appropriate URL:
redirect(targetUrl);
}
Modified: lenya/trunk/src/pubs/default/config/publication.xml
URL: http://svn.apache.org/viewvc/lenya/trunk/src/pubs/default/config/publication.xml?rev=592863&r1=592862&r2=592863&view=diff
==============================================================================
--- lenya/trunk/src/pubs/default/config/publication.xml (original)
+++ lenya/trunk/src/pubs/default/config/publication.xml Wed Nov 7 11:35:05 2007
@@ -101,14 +101,16 @@
<content-dir src="D:/tmp/default"/>
-->
- <!-- Lenya can rewrite the links to cater to special proxy setups.
+ <proxies>
+ <!--
+ Lenya can rewrite the links to cater to special proxy setups.
Make sure to update the GlobalProxies configuration in cocoon.xconf as well.
For information about these settings, read
http://lenya.apache.org/docu/docs/2_0_x/tutorials/proxy.html
This example setting simulates the following situation:
* A customer wants a company hostname and URLs without Lenya-specific
- path components.
+ path components for his live site.
* The server uses name-based virtual hosting with just one IP, i.e.
there can only be one SSL vhost, which is shared among several
customers. This implies the need for sub-directories in the proxy
@@ -116,26 +118,25 @@
* "authoring" should be ssl-protected. There is no need for a
customer hostname here, since it's not publicly visible.
* Any SSL-protected documents in "live" can be handled by the SSL
- vhost (not using the company hostname is ok in this case).
+ vhost (not using the company hostname is ok in this case, because
+ the customer does not want to pay for an additional IP address).
The desired customer hostname is customer.example.com.
- The SSL vhost is called www.example.com.
+ The SSL vhost is called https://www.example.com.
The Lenya CMS for our customer is reachable as
- https://www.example.com/lenya/customer/authoring
+ http[s]://www.example.com/lenya/customer/authoring.
The global proxy for non-publication-specific resources shall be
http://www.example.com/lenya.
-
- -->
- <proxies>
+ -->
<!--
- <proxy area="live" ssl="true"
- url="https://www.example.com/lenya/customer/live"/>
- <proxy area="live" ssl="false"
- url="http://customer.example.com"/>
- <proxy area="authoring" ssl="true"
- url="https://www.example.com/lenya/customer/authoring"/>
- <proxy area="authoring" ssl="false"
- url="http://www.example.com/lenya/customer/authoring"/>
+ <proxy area="live" ssl="true" url="https://www.example.com/lenya/customer/live"/>
+ <proxy area="live" ssl="false" url="http://customer.example.com"/>
+ <proxy area="authoring" ssl="true" url="https://www.example.com/lenya/customer/authoring"/>
+ <proxy area="authoring" ssl="false" url="http://www.example.com/lenya/customer/authoring"/>
+ <proxy area="archive" ssl="true" url="https://www.example.com/lenya/customer/archive"/>
+ <proxy area="archive" ssl="false" url="http://www.example.com/lenya/customer/archive"/>
+ <proxy area="trash" ssl="true" url="https://www.example.com/lenya/customer/trash"/>
+ <proxy area="trash" ssl="false" url="http://www.example.com/lenya/customer/trash"/>
-->
</proxies>
Modified: lenya/trunk/src/pubs/default/sitemap.xmap
URL: http://svn.apache.org/viewvc/lenya/trunk/src/pubs/default/sitemap.xmap?rev=592863&r1=592862&r2=592863&view=diff
==============================================================================
--- lenya/trunk/src/pubs/default/sitemap.xmap (original)
+++ lenya/trunk/src/pubs/default/sitemap.xmap Wed Nov 7 11:35:05 2007
@@ -96,7 +96,7 @@
a cocoon:/ URI? An apache httpd server will not send a HTTP redirect when a directory is requested, but
serve the index.html file implicitly IIRC. -->
<map:match pattern="**/">
- <map:redirect-to uri="index.html"/>
+ <map:redirect-to uri="{proxy:/{page-envelope:publication-id}/{1}/index.html}"/>
</map:match>
</map:pipeline>
@@ -271,13 +271,14 @@
This check provides the user with a dialog to import example content.
It should be removed in production systems.
-->
+
<map:select type="resource-exists">
<map:when test="lenya://lenya/pubs/{page-envelope:publication-id}/content/authoring/sitetree.xml"/>
<map:otherwise>
- <map:redirect-to uri="{request:requestUri}?lenya.usecase=export.importExampleContent"/>
+ <map:redirect-to uri="{proxy:/{page-envelope:publication-id}/{1}/{2}.html}?lenya.usecase=export.importExampleContent"/>
</map:otherwise>
</map:select>
-
+
<!-- If the requested language version of the document exists, we set a last-modified header. -->
<map:act type="language-exists">
<map:act type="set-header">
Modified: lenya/trunk/src/webapp/global-sitemap.xmap
URL: http://svn.apache.org/viewvc/lenya/trunk/src/webapp/global-sitemap.xmap?rev=592863&r1=592862&r2=592863&view=diff
==============================================================================
--- lenya/trunk/src/webapp/global-sitemap.xmap (original)
+++ lenya/trunk/src/webapp/global-sitemap.xmap Wed Nov 7 11:35:05 2007
@@ -305,7 +305,7 @@
<!-- any root-level request is directed to the welcome page -->
<map:match pattern="*">
- <map:redirect-to uri="index.html"/>
+ <map:redirect-to uri="{proxy:/index.html}"/>
</map:match>
<!-- FIXME: this is apparently WebDAV-related. Does it have to be here, and what does it do? -->
@@ -342,10 +342,10 @@
<!-- redirect publication root requests to the publication's welcome page -->
<map:match pattern="*/">
- <map:redirect-to uri="introduction.html"/>
+ <map:redirect-to uri="{proxy:/introduction.html}"/>
</map:match>
<map:match pattern="*/index.html">
- <map:redirect-to uri="introduction.html"/>
+ <map:redirect-to uri="{proxy:/introduction.html}"/>
</map:match>
<!-- generate welcome pages for each publication with an aggregation of relevant READMEs -->
Modified: lenya/trunk/src/webapp/lenya/config/sitemap/pipelines.xmap
URL: http://svn.apache.org/viewvc/lenya/trunk/src/webapp/lenya/config/sitemap/pipelines.xmap?rev=592863&r1=592862&r2=592863&view=diff
==============================================================================
--- lenya/trunk/src/webapp/lenya/config/sitemap/pipelines.xmap (original)
+++ lenya/trunk/src/webapp/lenya/config/sitemap/pipelines.xmap Wed Nov 7 11:35:05 2007
@@ -102,7 +102,7 @@
<map:act type="authorizer">
<map:mount uri-prefix="" src="global-sitemap.xmap" check-reload="true" reload-method="synchron"/>
</map:act>
- <map:redirect-to session="true" uri="{request:requestURI}?lenya.usecase=ac.login&referrerQueryString={url-encode:{request:queryString}}"/>
+ <map:redirect-to session="true" uri="{proxy:/{1}}?lenya.usecase=ac.login&referrerQueryString={url-encode:{request:queryString}}"/>
</map:match>
</map:pipeline>
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.