From b105a436194af543ba4117673ba85e5333dddde5 Mon Sep 17 00:00:00 2001 From: "Eric J. Bowersox" Date: Fri, 9 Nov 2001 05:06:12 +0000 Subject: [PATCH] added a simple "gateway" servlet allowing us to redirect arbitrary URLs through the Venice logon page --- etc/web.xml | 13 ++++ .../silverwrist/venice/servlets/Account.java | 6 +- .../silverwrist/venice/servlets/Gateway.java | 71 +++++++++++++++++++ .../venice/servlets/RedirectResult.java | 15 ++++ .../venice/servlets/format/RenderData.java | 6 ++ 5 files changed, 110 insertions(+), 1 deletion(-) create mode 100644 src/com/silverwrist/venice/servlets/Gateway.java 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