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-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>
|
||||||
|
|
|
@ -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)
|
||||||
|
|
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
|
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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user