added a simple "gateway" servlet allowing us to redirect arbitrary URLs

through the Venice logon page
This commit is contained in:
Eric J. Bowersox 2001-11-09 05:06:12 +00:00
parent 0bb2e795a4
commit b105a43619
5 changed files with 110 additions and 1 deletions

View File

@ -246,6 +246,14 @@
<servlet-class>com.silverwrist.venice.servlets.CommunityLogo</servlet-class> <servlet-class>com.silverwrist.venice.servlets.CommunityLogo</servlet-class>
</servlet> </servlet>
<servlet>
<servlet-name>gateway</servlet-name>
<description>
Gateways access to a specific URL through the Venice login screen.
</description>
<servlet-class>com.silverwrist.venice.servlets.Gateway</servlet-class>
</servlet>
<!-- the following are test servlets, they should go away --> <!-- the following are test servlets, they should go away -->
<servlet> <servlet>
@ -374,6 +382,11 @@
<url-pattern>/commlogo</url-pattern> <url-pattern>/commlogo</url-pattern>
</servlet-mapping> </servlet-mapping>
<servlet-mapping>
<servlet-name>gateway</servlet-name>
<url-pattern>/gw</url-pattern>
</servlet-mapping>
<!-- the following are test servlets, they should go away --> <!-- the following are test servlets, they should go away -->
<servlet-mapping> <servlet-mapping>
<servlet-name>testformdata</servlet-name> <servlet-name>testformdata</servlet-name>

View File

@ -38,7 +38,7 @@ public class Account extends VeniceServlet
private static final int COOKIE_LIFETIME = 60*60*24*365; // one year 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 * Internal functions
@ -140,6 +140,9 @@ public class Account extends VeniceServlet
protected String getMyLocation(HttpServletRequest request, VeniceEngine engine, UserContext user, protected String getMyLocation(HttpServletRequest request, VeniceEngine engine, UserContext user,
RenderData rdat) RenderData rdat)
{ {
String rc = super.getMyLocation(request,engine,user,rdat);
if (rc!=null)
return rc;
if (request.getAttribute(DISPLAY_LOGIN_ATTR)!=null) if (request.getAttribute(DISPLAY_LOGIN_ATTR)!=null)
return "account?cmd=" + getStandardCommandParam(request); return "account?cmd=" + getStandardCommandParam(request);
else else
@ -173,6 +176,7 @@ public class Account extends VeniceServlet
// this is a Login command - display the Login page // this is a Login command - display the Login page
LoginDialog dlg = makeLoginDialog(); LoginDialog dlg = makeLoginDialog();
dlg.setupNew(tgt); dlg.setupNew(tgt);
setMyLocation(request,tgt); // fake out the location so we can display the "Log In/Create Account" links
return dlg; return dlg;
} // end if ("L" command) } // end if ("L" command)

View File

@ -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 <http://www.mozilla.org/MPL/>.
*
* 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 <erbo@silcom.com>,
* 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

View File

@ -22,6 +22,13 @@ import com.silverwrist.venice.servlets.format.RenderData;
public class RedirectResult extends ExecuteResult public class RedirectResult extends ExecuteResult
{ {
/*--------------------------------------------------------------------------------
* Static data members
*--------------------------------------------------------------------------------
*/
private static final String[] absolute_prefixes = { "http://", "ftp://" };
/*-------------------------------------------------------------------------------- /*--------------------------------------------------------------------------------
* Attributes * Attributes
*-------------------------------------------------------------------------------- *--------------------------------------------------------------------------------
@ -48,6 +55,14 @@ public class RedirectResult extends ExecuteResult
public void execute(RenderData rdat) throws IOException public void execute(RenderData rdat) throws IOException
{ {
for (int i=0; i<absolute_prefixes.length; i++)
if (target.startsWith(absolute_prefixes[i]))
{ // this is an absolute redirection...do it!
rdat.redirectAbsolute(target);
return;
} // end if and for
rdat.redirectTo(target); rdat.redirectTo(target);
} // end doRedirect } // end doRedirect

View File

@ -401,6 +401,12 @@ public class RenderData implements ColorSelectors
} // end redirectTo } // end redirectTo
public void redirectAbsolute(String url) throws IOException
{
response.sendRedirect(url);
} // end redirectAbsolute
public String getActivityString(Date date) public String getActivityString(Date date)
{ {
if (date==null) if (date==null)