diff --git a/etc/web.xml b/etc/web.xml
index 81e1226..15ce7e2 100644
--- a/etc/web.xml
+++ b/etc/web.xml
@@ -246,6 +246,14 @@
com.silverwrist.venice.servlets.CommunityLogo
+
+ gateway
+
+ Gateways access to a specific URL through the Venice login screen.
+
+ com.silverwrist.venice.servlets.Gateway
+
+
@@ -374,6 +382,11 @@
/commlogo
+
+ gateway
+ /gw
+
+
testformdata
diff --git a/src/com/silverwrist/venice/servlets/Account.java b/src/com/silverwrist/venice/servlets/Account.java
index 786256d..ce42907 100644
--- a/src/com/silverwrist/venice/servlets/Account.java
+++ b/src/com/silverwrist/venice/servlets/Account.java
@@ -38,7 +38,7 @@ public class Account extends VeniceServlet
private static final int COOKIE_LIFETIME = 60*60*24*365; // one year
- private static Category logger = Category.getInstance(Account.class.getName());
+ private static Category logger = Category.getInstance(Account.class);
/*--------------------------------------------------------------------------------
* Internal functions
@@ -140,6 +140,9 @@ public class Account extends VeniceServlet
protected String getMyLocation(HttpServletRequest request, VeniceEngine engine, UserContext user,
RenderData rdat)
{
+ String rc = super.getMyLocation(request,engine,user,rdat);
+ if (rc!=null)
+ return rc;
if (request.getAttribute(DISPLAY_LOGIN_ATTR)!=null)
return "account?cmd=" + getStandardCommandParam(request);
else
@@ -173,6 +176,7 @@ public class Account extends VeniceServlet
// this is a Login command - display the Login page
LoginDialog dlg = makeLoginDialog();
dlg.setupNew(tgt);
+ setMyLocation(request,tgt); // fake out the location so we can display the "Log In/Create Account" links
return dlg;
} // end if ("L" command)
diff --git a/src/com/silverwrist/venice/servlets/Gateway.java b/src/com/silverwrist/venice/servlets/Gateway.java
new file mode 100644
index 0000000..5e3ccf1
--- /dev/null
+++ b/src/com/silverwrist/venice/servlets/Gateway.java
@@ -0,0 +1,71 @@
+/*
+ * The contents of this file are subject to the Mozilla Public License Version 1.1
+ * (the "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at .
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
+ * WARRANTY OF ANY KIND, either express or implied. See the License for the specific
+ * language governing rights and limitations under the License.
+ *
+ * The Original Code is the Venice Web Communities System.
+ *
+ * The Initial Developer of the Original Code is Eric J. Bowersox ,
+ * for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
+ * Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
+ *
+ * Contributor(s):
+ */
+package com.silverwrist.venice.servlets;
+
+import java.io.*;
+import java.net.URLEncoder;
+import javax.servlet.*;
+import javax.servlet.http.*;
+import org.apache.log4j.*;
+import com.silverwrist.venice.core.*;
+import com.silverwrist.venice.servlets.format.*;
+
+public class Gateway extends VeniceServlet
+{
+ /*--------------------------------------------------------------------------------
+ * Static data members
+ *--------------------------------------------------------------------------------
+ */
+
+ private static Category logger = Category.getInstance(Gateway.class);
+
+ /*--------------------------------------------------------------------------------
+ * Overrides from class HttpServlet
+ *--------------------------------------------------------------------------------
+ */
+
+ public String getServletInfo()
+ {
+ String rc = "Gateway servlet - \"Gates\" a URL request based on whether or not the user is logged in\n"
+ + "Part of the Venice Web Communities System\n";
+ return rc;
+
+ } // end getServletInfo
+
+ /*--------------------------------------------------------------------------------
+ * Overrides from class VeniceServlet
+ *--------------------------------------------------------------------------------
+ */
+
+ protected VeniceContent doVeniceGet(HttpServletRequest request, VeniceEngine engine,
+ UserContext user, RenderData rdat)
+ throws ServletException, IOException, VeniceServletResult
+ {
+ String target = request.getQueryString();
+ if (target==null)
+ throw new ErrorResult(HttpServletResponse.SC_BAD_REQUEST,"no parameter specified");
+ if (logger.isDebugEnabled())
+ logger.debug("they want to redirect to: " + target);
+ if (user.isLoggedIn())
+ throw new RedirectResult(target);
+ else
+ throw new RedirectResult("account?cmd=L&tgt=" + URLEncoder.encode(target));
+
+ } // end doVeniceGet
+
+} // end class Gateway
diff --git a/src/com/silverwrist/venice/servlets/RedirectResult.java b/src/com/silverwrist/venice/servlets/RedirectResult.java
index 32b3301..b42cc41 100644
--- a/src/com/silverwrist/venice/servlets/RedirectResult.java
+++ b/src/com/silverwrist/venice/servlets/RedirectResult.java
@@ -22,6 +22,13 @@ import com.silverwrist.venice.servlets.format.RenderData;
public class RedirectResult extends ExecuteResult
{
+ /*--------------------------------------------------------------------------------
+ * Static data members
+ *--------------------------------------------------------------------------------
+ */
+
+ private static final String[] absolute_prefixes = { "http://", "ftp://" };
+
/*--------------------------------------------------------------------------------
* Attributes
*--------------------------------------------------------------------------------
@@ -48,6 +55,14 @@ public class RedirectResult extends ExecuteResult
public void execute(RenderData rdat) throws IOException
{
+ for (int i=0; i