added a simple "gateway" servlet allowing us to redirect arbitrary URLs
through the Venice logon page
This commit is contained in:
		
							parent
							
								
									0bb2e795a4
								
							
						
					
					
						commit
						b105a43619
					
				
							
								
								
									
										13
									
								
								etc/web.xml
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								etc/web.xml
									
									
									
									
									
								
							@ -246,6 +246,14 @@
 | 
			
		||||
    <servlet-class>com.silverwrist.venice.servlets.CommunityLogo</servlet-class>
 | 
			
		||||
  </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 -->
 | 
			
		||||
 | 
			
		||||
  <servlet>
 | 
			
		||||
@ -374,6 +382,11 @@
 | 
			
		||||
    <url-pattern>/commlogo</url-pattern>
 | 
			
		||||
  </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 -->
 | 
			
		||||
  <servlet-mapping>
 | 
			
		||||
    <servlet-name>testformdata</servlet-name>
 | 
			
		||||
 | 
			
		||||
@ -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)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										71
									
								
								src/com/silverwrist/venice/servlets/Gateway.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								src/com/silverwrist/venice/servlets/Gateway.java
									
									
									
									
									
										Normal 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
 | 
			
		||||
@ -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<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);
 | 
			
		||||
 | 
			
		||||
  } // end doRedirect
 | 
			
		||||
 | 
			
		||||
@ -401,6 +401,12 @@ public class RenderData implements ColorSelectors
 | 
			
		||||
 | 
			
		||||
  } // end redirectTo
 | 
			
		||||
 | 
			
		||||
  public void redirectAbsolute(String url) throws IOException
 | 
			
		||||
  {
 | 
			
		||||
    response.sendRedirect(url);
 | 
			
		||||
 | 
			
		||||
  } // end redirectAbsolute
 | 
			
		||||
 | 
			
		||||
  public String getActivityString(Date date)
 | 
			
		||||
  {
 | 
			
		||||
    if (date==null)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user