206 lines
5.8 KiB
Java
206 lines
5.8 KiB
Java
/*
|
|
* 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) 2002 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
*/
|
|
package com.silverwrist.venice.ui.servlet;
|
|
|
|
import java.util.*;
|
|
import javax.servlet.*;
|
|
import javax.servlet.http.*;
|
|
import org.apache.log4j.*;
|
|
import com.silverwrist.venice.core.*;
|
|
import com.silverwrist.venice.except.*;
|
|
import com.silverwrist.venice.ui.*;
|
|
|
|
class HttpVeniceUISession implements VeniceUISession
|
|
{
|
|
/*--------------------------------------------------------------------------------
|
|
* Static data members
|
|
*--------------------------------------------------------------------------------
|
|
*/
|
|
|
|
private static final String SESSION_ATTRIBUTE_STEM = "venice.vars.";
|
|
|
|
private static Category logger = Category.getInstance(HttpVeniceUISession.class);
|
|
|
|
/*--------------------------------------------------------------------------------
|
|
* Attributes
|
|
*--------------------------------------------------------------------------------
|
|
*/
|
|
|
|
private HttpSession session;
|
|
private UserContext user;
|
|
private Cookie venice_cookie = null;
|
|
|
|
/*--------------------------------------------------------------------------------
|
|
* Constructor
|
|
*--------------------------------------------------------------------------------
|
|
*/
|
|
|
|
HttpVeniceUISession(HttpServletRequest request, HttpSession session, VeniceEngine engine)
|
|
throws ServletException
|
|
{
|
|
this.session = session; // save off the session variable
|
|
try
|
|
{ // tell the engine to create us a user context
|
|
user = engine.createUserContext(request.getRemoteAddr());
|
|
|
|
// Did the user send a Venice authentication cookie? If so, try to use it.
|
|
Cookie[] cookies = request.getCookies();
|
|
for (int i=0; (venice_cookie==null) && (i<cookies.length); i++)
|
|
{ // look for a Venice authentication cookie
|
|
if (RequestInput.LOGIN_COOKIE.equals(cookies[i].getName()))
|
|
venice_cookie = cookies[i];
|
|
|
|
} // end for
|
|
|
|
} // end try
|
|
catch (DataException e)
|
|
{ // context creation failed - remap the exception
|
|
logger.error("Session creation failed: " + e.getMessage(),e);
|
|
throw new ServletException("Session creation failed: " + e.getMessage(),e);
|
|
|
|
} // end catch
|
|
|
|
} // end constructor
|
|
|
|
/*--------------------------------------------------------------------------------
|
|
* Implementations from interface VeniceUISession
|
|
*--------------------------------------------------------------------------------
|
|
*/
|
|
|
|
public long getCreationTime()
|
|
{
|
|
return session.getCreationTime();
|
|
|
|
} // end getCreationTime
|
|
|
|
public String getID()
|
|
{
|
|
return session.getId();
|
|
|
|
} // end getID
|
|
|
|
public long getLastAccessedTime()
|
|
{
|
|
return session.getLastAccessedTime();
|
|
|
|
} // end getLastAccessedTime
|
|
|
|
public void setMaxInactiveInterval(int interval)
|
|
{
|
|
session.setMaxInactiveInterval(interval);
|
|
|
|
} // end setMaxInactiveInterval
|
|
|
|
public int getMaxInactiveInterval()
|
|
{
|
|
return session.getMaxInactiveInterval();
|
|
|
|
} // end getMaxInactiveInterval
|
|
|
|
public Object getAttribute(String name)
|
|
{
|
|
return session.getAttribute(SESSION_ATTRIBUTE_STEM + name);
|
|
|
|
} // end getAttribute
|
|
|
|
public Enumeration getAttributeNames()
|
|
{
|
|
Enumeration raw = session.getAttributeNames();
|
|
ArrayList rc = new ArrayList();
|
|
while (raw.hasMoreElements())
|
|
{ // look for attributes we've added
|
|
String tmp = (String)(raw.nextElement());
|
|
if (tmp.startsWith(SESSION_ATTRIBUTE_STEM))
|
|
rc.add(tmp.substring(SESSION_ATTRIBUTE_STEM.length()));
|
|
|
|
} // end while
|
|
|
|
return Collections.enumeration(rc);
|
|
|
|
} // end getAttributeNames
|
|
|
|
public void setAttribute(String name, Object o)
|
|
{
|
|
session.setAttribute(SESSION_ATTRIBUTE_STEM + name,o);
|
|
|
|
} // end setAttribute
|
|
|
|
public void removeAttribute(String name)
|
|
{
|
|
session.removeAttribute(SESSION_ATTRIBUTE_STEM + name);
|
|
|
|
} // end removeAttribute
|
|
|
|
public void invalidate()
|
|
{
|
|
session.invalidate();
|
|
|
|
} // end invalidate
|
|
|
|
public UserContext getUser()
|
|
{
|
|
return user;
|
|
|
|
} // end getUser
|
|
|
|
public void setUser(UserContext user)
|
|
{
|
|
this.user = user;
|
|
|
|
} // end setUser
|
|
|
|
public void preprocess(RequestInput ri)
|
|
{
|
|
if (venice_cookie!=null)
|
|
{ // try to log in with the cookie
|
|
try
|
|
{ // attempt authentication
|
|
if (!(user.authenticateWithToken(venice_cookie.getValue())))
|
|
ri.deleteCookie(RequestInput.LOGIN_COOKIE); // delete bogus cookie if it didn't work
|
|
|
|
} // end try
|
|
catch (DataException de)
|
|
{ // it didn't work...
|
|
ri.deleteCookie(RequestInput.LOGIN_COOKIE);
|
|
|
|
} // end catch
|
|
|
|
venice_cookie = null;
|
|
|
|
} // end if
|
|
|
|
} // end preprocess
|
|
|
|
/*--------------------------------------------------------------------------------
|
|
* Implementations from interface HttpSessionBindingListener
|
|
*--------------------------------------------------------------------------------
|
|
*/
|
|
|
|
public void valueBound(HttpSessionBindingEvent event)
|
|
{ // do nothing
|
|
} // end valueBound
|
|
|
|
public void valueUnbound(HttpSessionBindingEvent event)
|
|
{
|
|
this.session = null;
|
|
this.user = null;
|
|
|
|
} // end valueUnbound
|
|
|
|
} // end class HttpVeniceUISession
|