added global UI properties, cookie-reading APIs to CookieControl, moved
HttpVeniceUISession initialization into a script file (session_init.js)
This commit is contained in:
		
							parent
							
								
									128c33cd9b
								
							
						
					
					
						commit
						ffc862426a
					
				@ -57,6 +57,19 @@
 | 
			
		||||
 | 
			
		||||
  </uri-paths>
 | 
			
		||||
 | 
			
		||||
  <!-- Properties which are "read-only" from the point of view of the application. -->
 | 
			
		||||
  <properties>
 | 
			
		||||
    <!-- The script which is run to initialize the Web session. -->
 | 
			
		||||
    <property name="session.init">session_init.js</property>
 | 
			
		||||
 | 
			
		||||
    <!-- The name of the persistent cookie used to automatically log users in. -->
 | 
			
		||||
    <property name="login.cookie">VeniceAuth</property>
 | 
			
		||||
 | 
			
		||||
    <!-- The maximum age of the persistent login cookie. -->
 | 
			
		||||
    <property name="login.cookie.age">31536000</property> <!-- one year -->
 | 
			
		||||
 | 
			
		||||
  </properties>
 | 
			
		||||
 | 
			
		||||
  <!-- Settings related to the outer frame. -->
 | 
			
		||||
  <frame>
 | 
			
		||||
    <!-- The name of the JSP page that implements the outer frame. -->
 | 
			
		||||
 | 
			
		||||
@ -10,7 +10,7 @@
 | 
			
		||||
// 
 | 
			
		||||
// 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.
 | 
			
		||||
// Copyright (C) 2001-2002 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
			
		||||
// 
 | 
			
		||||
// Contributor(s): 
 | 
			
		||||
 | 
			
		||||
@ -96,8 +96,9 @@ else if (op=="login")
 | 
			
		||||
    if (dlg.getValue("saveme").booleanValue())
 | 
			
		||||
    { // If the user wants a cookie, give it to them!
 | 
			
		||||
      cctl = vlib.queryCookieControl(rinput);
 | 
			
		||||
      cctl.savePersistentCookie(CookieControl.LOGIN_COOKIE,user.getAuthenticationToken(),
 | 
			
		||||
                                CookieControl.LOGIN_COOKIE_AGE);
 | 
			
		||||
      cctl.savePersistentCookie(rinput.getConfigProperty("login.cookie"),user.getAuthenticationToken(),
 | 
			
		||||
                                vlib.toInteger(rinput.getConfigProperty("login.cookie.age")));
 | 
			
		||||
 | 
			
		||||
    } // end if
 | 
			
		||||
 | 
			
		||||
    // Clear the left menus (to force recomputation) and bounce us back to whereever we were
 | 
			
		||||
 | 
			
		||||
@ -10,7 +10,7 @@
 | 
			
		||||
// 
 | 
			
		||||
// 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.
 | 
			
		||||
// Copyright (C) 2001-2002 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
			
		||||
// 
 | 
			
		||||
// Contributor(s): 
 | 
			
		||||
 | 
			
		||||
@ -31,7 +31,7 @@ if (user.isLoggedIn())
 | 
			
		||||
{ // user is logged in - we want to log out
 | 
			
		||||
  // TODO: only remove the login cookie if it was actually set!
 | 
			
		||||
  cctl = vlib.queryCookieControl(rinput);
 | 
			
		||||
  cctl.deleteCookie(CookieControl.LOGIN_COOKIE);    // remove the login cookie
 | 
			
		||||
  cctl.deleteCookie(rinput.getConfigProperty("login.cookie"));    // remove the login cookie
 | 
			
		||||
  sctl = vlib.querySessionControl(rinput);
 | 
			
		||||
  sctl.endSession();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										50
									
								
								scripts/session_init.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								scripts/session_init.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,50 @@
 | 
			
		||||
// 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): 
 | 
			
		||||
 | 
			
		||||
importPackage(Packages.com.silverwrist.venice.core);
 | 
			
		||||
importPackage(Packages.com.silverwrist.venice.except);
 | 
			
		||||
importPackage(Packages.com.silverwrist.venice.ui);
 | 
			
		||||
importPackage(Packages.com.silverwrist.venice.ui.helpers);
 | 
			
		||||
 | 
			
		||||
// Get the request and the session.
 | 
			
		||||
rinput = bsf.lookupBean("request");
 | 
			
		||||
sess = vlib.castVeniceUISession(bsf.lookupBean("session"));
 | 
			
		||||
 | 
			
		||||
// Get the login cookie name and the CookieControl service.
 | 
			
		||||
cookie_name = rinput.getConfigProperty("login.cookie");
 | 
			
		||||
cctl = vlib.queryCookieControl(rinput);
 | 
			
		||||
if (cctl.isCookiePresent(cookie_name))
 | 
			
		||||
{ // get the login cookie value and try to use it to log in
 | 
			
		||||
  logger.debug("cookie " + cookie_name + " found");
 | 
			
		||||
  logged_in = false;
 | 
			
		||||
  try
 | 
			
		||||
  { // attempt to log the user in with the cookie
 | 
			
		||||
    logged_in = sess.user.authenticateWithToken(cctl.getCookie(cookie_name));
 | 
			
		||||
 | 
			
		||||
  } // end try
 | 
			
		||||
  catch (e)
 | 
			
		||||
  { // login failed
 | 
			
		||||
    logger.error("caught " + vlib.exceptionType(e) + ": " + e.message);
 | 
			
		||||
    logged_in = false;
 | 
			
		||||
 | 
			
		||||
  } // end catch
 | 
			
		||||
 | 
			
		||||
  if (!logged_in) // not logged in - delete the cookie
 | 
			
		||||
    cctl.deleteCookie(cookie_name);
 | 
			
		||||
 | 
			
		||||
} // end if
 | 
			
		||||
else
 | 
			
		||||
  logger.debug("cookie " + cookie_name + " not found");
 | 
			
		||||
@ -360,4 +360,8 @@ public interface RequestInput extends ServiceProvider
 | 
			
		||||
 | 
			
		||||
  public abstract void registerCleanup(AutoCleanup ac);
 | 
			
		||||
 | 
			
		||||
  public abstract String getConfigProperty(String name);
 | 
			
		||||
 | 
			
		||||
  public abstract String getConfigProperty(String name, String default_val);
 | 
			
		||||
 | 
			
		||||
} // end interface RequestInput
 | 
			
		||||
 | 
			
		||||
@ -17,8 +17,9 @@
 | 
			
		||||
 */
 | 
			
		||||
package com.silverwrist.venice.ui;
 | 
			
		||||
 | 
			
		||||
import java.util.*;
 | 
			
		||||
import com.silverwrist.venice.core.*;
 | 
			
		||||
import java.util.Enumeration;
 | 
			
		||||
import javax.servlet.ServletException;
 | 
			
		||||
import com.silverwrist.venice.core.UserContext;
 | 
			
		||||
 | 
			
		||||
public interface VeniceUISession
 | 
			
		||||
{
 | 
			
		||||
@ -46,6 +47,6 @@ public interface VeniceUISession
 | 
			
		||||
 | 
			
		||||
  public abstract void setUser(UserContext user);
 | 
			
		||||
 | 
			
		||||
  public abstract void preprocess(RequestInput ri);
 | 
			
		||||
  public abstract void preprocess(RequestInput ri) throws ServletException;
 | 
			
		||||
 | 
			
		||||
} // end class VeniceUISession
 | 
			
		||||
 | 
			
		||||
@ -63,6 +63,7 @@ public class RootConfig implements LinkTypes, ColorSelectors
 | 
			
		||||
  private String external_static_path;     // the external static files path
 | 
			
		||||
  private String format_path;              // the JSP formatter path
 | 
			
		||||
  private String blank_photo_path;         // the "photo not available" path
 | 
			
		||||
  private Properties properties;           // the property list
 | 
			
		||||
  private String frame_jsp_name;           // the name of the frame JSP
 | 
			
		||||
  private String site_title;               // the title for the site
 | 
			
		||||
  private File stylesheet;                 // the stylesheet file reference
 | 
			
		||||
@ -196,6 +197,44 @@ public class RootConfig implements LinkTypes, ColorSelectors
 | 
			
		||||
    if (sect1_h.hasAttribute("fixup"))
 | 
			
		||||
      blank_photo_path = image_path + blank_photo_path;
 | 
			
		||||
 | 
			
		||||
    // Load the default properties from the resources.
 | 
			
		||||
    Properties defprops = new Properties();
 | 
			
		||||
    try
 | 
			
		||||
    { // load the properties from the resource
 | 
			
		||||
      defprops.load(getClass().getResourceAsStream("default-config.properties"));
 | 
			
		||||
 | 
			
		||||
    } // end try
 | 
			
		||||
    catch (IOException e)
 | 
			
		||||
    { // whoops!
 | 
			
		||||
      throw new ConfigException("unable to load default application properties");
 | 
			
		||||
 | 
			
		||||
    } // end catch
 | 
			
		||||
 | 
			
		||||
    properties = new Properties(defprops);  // create the actual properties
 | 
			
		||||
 | 
			
		||||
    // Get the <properties/> section.
 | 
			
		||||
    sect = loader.configGetSubSection(root_h,"properties");
 | 
			
		||||
   
 | 
			
		||||
    // Loop through the section to find <property/> tags and add them to the property list.
 | 
			
		||||
    NodeList nl;
 | 
			
		||||
    int i;
 | 
			
		||||
    if (sect!=null)
 | 
			
		||||
    { // get the child nodes
 | 
			
		||||
      nl = sect.getChildNodes();
 | 
			
		||||
      for (i=0; i<nl.getLength(); i++)
 | 
			
		||||
      { // see if the node is a property value
 | 
			
		||||
	Node n = nl.item(i);
 | 
			
		||||
	if ((n.getNodeType()==Node.ELEMENT_NODE) && n.getNodeName().equals("property"))
 | 
			
		||||
	{ // add the property value to the map
 | 
			
		||||
	  sect1 = (Element)n;
 | 
			
		||||
	  properties.setProperty(loader.configGetAttribute(sect1,"name"),loader.configGetText(sect1));
 | 
			
		||||
	  
 | 
			
		||||
	} // end if
 | 
			
		||||
 | 
			
		||||
      } // end for (all child nodes of <properties/>)
 | 
			
		||||
 | 
			
		||||
    } // end if (<properties/> section exists)
 | 
			
		||||
 | 
			
		||||
    // Get the <frame/> section.
 | 
			
		||||
    sect = loader.configGetSubSection(root_h,"frame");
 | 
			
		||||
    sect_h = new DOMElementHelper(sect);
 | 
			
		||||
@ -336,8 +375,6 @@ public class RootConfig implements LinkTypes, ColorSelectors
 | 
			
		||||
    // Load the stock font sizes.
 | 
			
		||||
    sect1 = sect_h.getSubElement("font-sizes");
 | 
			
		||||
    HashMap tmap;
 | 
			
		||||
    NodeList nl;
 | 
			
		||||
    int i;
 | 
			
		||||
    if (sect1!=null)
 | 
			
		||||
    { // scan through this subsection to find the stock font sizes
 | 
			
		||||
      tmap = new HashMap();
 | 
			
		||||
@ -774,6 +811,18 @@ public class RootConfig implements LinkTypes, ColorSelectors
 | 
			
		||||
 | 
			
		||||
  } // end getBlankPhoto
 | 
			
		||||
 | 
			
		||||
  public final String getProperty(String name)
 | 
			
		||||
  {
 | 
			
		||||
    return properties.getProperty(name);
 | 
			
		||||
 | 
			
		||||
  } // end getProperty
 | 
			
		||||
 | 
			
		||||
  public final String getProperty(String name, String default_val)
 | 
			
		||||
  {
 | 
			
		||||
    return properties.getProperty(name,default_val);
 | 
			
		||||
 | 
			
		||||
  } // end getProperty
 | 
			
		||||
 | 
			
		||||
  public final CommunityMenu getCommunityMenu(CommunityContext comm)
 | 
			
		||||
  {
 | 
			
		||||
    return comm_menu_fact.createMenu(comm);
 | 
			
		||||
@ -804,7 +853,7 @@ public class RootConfig implements LinkTypes, ColorSelectors
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  static
 | 
			
		||||
  {
 | 
			
		||||
  { // create the link types
 | 
			
		||||
    HashMap m = new HashMap();
 | 
			
		||||
    m.put("absolute",new Integer(ABSOLUTE));
 | 
			
		||||
    m.put("servlet",new Integer(SERVLET));
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,20 @@
 | 
			
		||||
# 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): 
 | 
			
		||||
# -------------------------------------------------------------------------------------
 | 
			
		||||
# Default values for the properties that are loaded from the ui-config.xml <properties/> section.
 | 
			
		||||
session.init=session_init.js
 | 
			
		||||
login.cookie=VeniceAuth
 | 
			
		||||
login.cookie.age=31536000
 | 
			
		||||
@ -17,15 +17,60 @@
 | 
			
		||||
 */
 | 
			
		||||
package com.silverwrist.venice.ui.helpers;
 | 
			
		||||
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
public interface CookieControl
 | 
			
		||||
{
 | 
			
		||||
  public static final String LOGIN_COOKIE = "VeniceAuth";
 | 
			
		||||
  public static final int LOGIN_COOKIE_AGE = 60*60*24*365;  // one year
 | 
			
		||||
  /**
 | 
			
		||||
   * Tests for the presence of a particular cookie.
 | 
			
		||||
   *
 | 
			
		||||
   * @param name Name of the cookie to test for existence.
 | 
			
		||||
   * @return <CODE>true</CODE> if a cookie by this name is present, <CODE>false</CODE> if not.
 | 
			
		||||
   */
 | 
			
		||||
  public abstract boolean isCookiePresent(String name);
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Returns the value of a particular request cookie.
 | 
			
		||||
   *
 | 
			
		||||
   * @param name Name of the cookie to retrieve the value of.
 | 
			
		||||
   * @return The value of that cookie, or <CODE>null</CODE> if the cookie is not present.
 | 
			
		||||
   */
 | 
			
		||||
  public abstract String getCookie(String name);
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Returns a set containing all the cookie names associated with this request.
 | 
			
		||||
   *
 | 
			
		||||
   * @return See above.
 | 
			
		||||
   */
 | 
			
		||||
  public abstract Set getCookieNames();
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Adds a new persistent cookie to the application.  The cookie will be stored by the
 | 
			
		||||
   * browser's persistent storage facility.<P>
 | 
			
		||||
   * Cookies should be used <EM>sparingly</EM>, to avoid possible privacy concerns.
 | 
			
		||||
   *
 | 
			
		||||
   * @param name Name of the cookie to be set.
 | 
			
		||||
   * @param value Value of the cookie to be set.
 | 
			
		||||
   * @param max_age The maximum lifespan of the persistent cookie, in seconds.
 | 
			
		||||
   */
 | 
			
		||||
  public abstract void savePersistentCookie(String name, String value, int max_age);
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Adds a new temporary cookie to the application.  The cookie will be stored in the
 | 
			
		||||
   * browser's memory only, and will disappear when the browser is closed.
 | 
			
		||||
   * Cookies should be used <EM>sparingly</EM>, to avoid possible privacy concerns.
 | 
			
		||||
   *
 | 
			
		||||
   * @param name Name of the cookie to be set.
 | 
			
		||||
   * @param value Value of the cookie to be set.
 | 
			
		||||
   */
 | 
			
		||||
  public abstract void saveTemporaryCookie(String name, String value);
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Deletes a cookie (either persistent or temporary) from the application.  The cookie
 | 
			
		||||
   * will be erased from the browser.
 | 
			
		||||
   *
 | 
			
		||||
   * @param name Name of the cookie to remove.
 | 
			
		||||
   */
 | 
			
		||||
  public abstract void deleteCookie(String name);
 | 
			
		||||
 | 
			
		||||
} // end interface CookieControl
 | 
			
		||||
 | 
			
		||||
@ -22,6 +22,7 @@ import java.util.*;
 | 
			
		||||
import org.w3c.dom.*;
 | 
			
		||||
import com.silverwrist.util.StringUtil;
 | 
			
		||||
import com.silverwrist.venice.core.*;
 | 
			
		||||
import com.silverwrist.venice.ui.VeniceUISession;
 | 
			
		||||
import com.silverwrist.venice.ui.helpers.CookieControl;
 | 
			
		||||
import com.silverwrist.venice.ui.helpers.HTMLRendering;
 | 
			
		||||
import com.silverwrist.venice.ui.helpers.SessionControl;
 | 
			
		||||
@ -128,6 +129,14 @@ public class ScriptLibrary
 | 
			
		||||
 | 
			
		||||
  } // end castUserSideBoxDescriptor
 | 
			
		||||
 | 
			
		||||
  public final VeniceUISession castVeniceUISession(Object o)
 | 
			
		||||
  {
 | 
			
		||||
    if (o instanceof VeniceUISession)
 | 
			
		||||
      return (VeniceUISession)o;
 | 
			
		||||
    throw new ClassCastException("ScriptLibrary.castVeniceUISession: invalid cast");
 | 
			
		||||
    
 | 
			
		||||
  } // end castVeniceUISession
 | 
			
		||||
 | 
			
		||||
  public final boolean[] createBooleanArray(int len)
 | 
			
		||||
  {
 | 
			
		||||
    return new boolean[len];
 | 
			
		||||
@ -184,6 +193,8 @@ public class ScriptLibrary
 | 
			
		||||
 | 
			
		||||
  public final String exceptionType(Object o) throws ScriptExit
 | 
			
		||||
  {
 | 
			
		||||
    if (o==null)
 | 
			
		||||
      return null;
 | 
			
		||||
    if (o instanceof ScriptExit)
 | 
			
		||||
      throw (ScriptExit)o;   // rethrow ScriptExit exceptions
 | 
			
		||||
    if (o instanceof Throwable)
 | 
			
		||||
@ -244,6 +255,15 @@ public class ScriptLibrary
 | 
			
		||||
 | 
			
		||||
  } // end toInteger
 | 
			
		||||
 | 
			
		||||
  public final String typeOf(Object o)
 | 
			
		||||
  {
 | 
			
		||||
    if (o==null)
 | 
			
		||||
      return null;
 | 
			
		||||
    else
 | 
			
		||||
      return o.getClass().getName();
 | 
			
		||||
 | 
			
		||||
  } // end typeOf
 | 
			
		||||
 | 
			
		||||
  public final boolean validVeniceID(String s)
 | 
			
		||||
  {
 | 
			
		||||
    return IDUtils.isValidVeniceID(s);
 | 
			
		||||
 | 
			
		||||
@ -17,6 +17,7 @@
 | 
			
		||||
 */
 | 
			
		||||
package com.silverwrist.venice.ui.servlet;
 | 
			
		||||
 | 
			
		||||
import java.io.*;
 | 
			
		||||
import java.util.*;
 | 
			
		||||
import javax.servlet.*;
 | 
			
		||||
import javax.servlet.http.*;
 | 
			
		||||
@ -24,7 +25,8 @@ import org.apache.log4j.*;
 | 
			
		||||
import com.silverwrist.venice.core.*;
 | 
			
		||||
import com.silverwrist.venice.except.*;
 | 
			
		||||
import com.silverwrist.venice.ui.*;
 | 
			
		||||
import com.silverwrist.venice.ui.helpers.CookieControl;
 | 
			
		||||
import com.silverwrist.venice.ui.helpers.*;
 | 
			
		||||
import com.silverwrist.venice.ui.script.*;
 | 
			
		||||
 | 
			
		||||
class HttpVeniceUISession implements VeniceUISession
 | 
			
		||||
{
 | 
			
		||||
@ -42,9 +44,9 @@ class HttpVeniceUISession implements VeniceUISession
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  private HttpSession session;
 | 
			
		||||
  private UserContext user;
 | 
			
		||||
  private Cookie venice_cookie = null;
 | 
			
		||||
  private HttpSession session;         // HTTP session value
 | 
			
		||||
  private UserContext user;            // user context associated with this session
 | 
			
		||||
  private boolean new_session = true;  // is this a new session?
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Constructor
 | 
			
		||||
@ -59,15 +61,6 @@ class HttpVeniceUISession implements VeniceUISession
 | 
			
		||||
    { // 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 (CookieControl.LOGIN_COOKIE.equals(cookies[i].getName()))
 | 
			
		||||
	  venice_cookie = cookies[i];
 | 
			
		||||
 | 
			
		||||
      } // end for
 | 
			
		||||
      
 | 
			
		||||
    } // end try
 | 
			
		||||
    catch (DataException e)
 | 
			
		||||
    { // context creation failed - remap the exception
 | 
			
		||||
@ -165,28 +158,47 @@ class HttpVeniceUISession implements VeniceUISession
 | 
			
		||||
 | 
			
		||||
  } // end setUser
 | 
			
		||||
 | 
			
		||||
  public void preprocess(RequestInput ri)
 | 
			
		||||
  public void preprocess(RequestInput ri) throws ServletException
 | 
			
		||||
  {
 | 
			
		||||
    if (venice_cookie!=null)
 | 
			
		||||
    { // try to log in with the cookie
 | 
			
		||||
      try
 | 
			
		||||
      { // attempt authentication
 | 
			
		||||
	if (!(user.authenticateWithToken(venice_cookie.getValue())))
 | 
			
		||||
	{ // delete bogus cookie if it didn't work
 | 
			
		||||
	  CookieControl cctl = (CookieControl)(ri.queryService(CookieControl.class));
 | 
			
		||||
	  cctl.deleteCookie(CookieControl.LOGIN_COOKIE);
 | 
			
		||||
    if (new_session)
 | 
			
		||||
    { // new session - we need to run the init script
 | 
			
		||||
      String script_name = ri.getConfigProperty("session.init");
 | 
			
		||||
      ScriptSupport ssup = (ScriptSupport)(ri.queryService(ScriptSupport.class));
 | 
			
		||||
      String script_file = ssup.getScriptName(script_name);
 | 
			
		||||
      String logger_name = ssup.getScriptLoggerName(script_name);
 | 
			
		||||
      if (logger.isDebugEnabled())
 | 
			
		||||
	logger.debug("EXECUTING " + script_file);
 | 
			
		||||
 | 
			
		||||
	} // end if
 | 
			
		||||
      // get the script manager and execute it!
 | 
			
		||||
      ScriptManager smgr = (ScriptManager)(ri.queryService(ScriptManager.class));
 | 
			
		||||
      smgr.pushContext();
 | 
			
		||||
      try
 | 
			
		||||
      { // add the session to the bound variables
 | 
			
		||||
	smgr.register("session",this);
 | 
			
		||||
	try
 | 
			
		||||
	{ // execute the script!
 | 
			
		||||
	  smgr.exec(new File(script_file),logger_name,new ScriptReturn());
 | 
			
		||||
 | 
			
		||||
	} // end try
 | 
			
		||||
	catch (ScriptingException e)
 | 
			
		||||
	{ // there's a script exception here...
 | 
			
		||||
	  logger.error("Session init failed: " + e.getMessage(),e);
 | 
			
		||||
	  throw new ServletException("Session init failed: " + e.getMessage(),e);
 | 
			
		||||
 | 
			
		||||
	} // end catch
 | 
			
		||||
	catch (ThrowableContent tc)
 | 
			
		||||
	{ // ignore this
 | 
			
		||||
	  logger.warn("session init script threw a ThrowableContent of type " + tc.getClass().getName());
 | 
			
		||||
 | 
			
		||||
	} // end catch
 | 
			
		||||
 | 
			
		||||
      } // end try
 | 
			
		||||
      catch (DataException de)
 | 
			
		||||
      { // it didn't work...
 | 
			
		||||
	CookieControl cctl = (CookieControl)(ri.queryService(CookieControl.class));
 | 
			
		||||
	cctl.deleteCookie(CookieControl.LOGIN_COOKIE);
 | 
			
		||||
      finally
 | 
			
		||||
      { // pop the context before we go
 | 
			
		||||
	smgr.popContext();
 | 
			
		||||
	new_session = false;
 | 
			
		||||
 | 
			
		||||
      } // end catch
 | 
			
		||||
 | 
			
		||||
      venice_cookie = null;
 | 
			
		||||
      } // end finally
 | 
			
		||||
 | 
			
		||||
    } // end if
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -540,43 +540,6 @@ public class RequestImpl implements RequestInput
 | 
			
		||||
 | 
			
		||||
    } // end if
 | 
			
		||||
 | 
			
		||||
    // Create the UI session.
 | 
			
		||||
    session = factory.createSession(ctxt,request,response,engine,config);
 | 
			
		||||
    session.preprocess(this);
 | 
			
		||||
 | 
			
		||||
    if (!(session instanceof NullSession))
 | 
			
		||||
    { // read the user's preferred locale
 | 
			
		||||
      try
 | 
			
		||||
      { // get the user default locale
 | 
			
		||||
	my_locale = session.getUser().getLocale();
 | 
			
		||||
 | 
			
		||||
      } // end try
 | 
			
		||||
      catch (DataException de)
 | 
			
		||||
      { // locale problems...
 | 
			
		||||
	my_locale = Locale.getDefault();
 | 
			
		||||
 | 
			
		||||
      } // end catch
 | 
			
		||||
 | 
			
		||||
      // read the user's preferred time zone
 | 
			
		||||
      try
 | 
			
		||||
      { // get the user default timezone
 | 
			
		||||
	my_timezone = session.getUser().getTimeZone();
 | 
			
		||||
 | 
			
		||||
      } // end try
 | 
			
		||||
      catch (DataException de)
 | 
			
		||||
      { // time zone problems...
 | 
			
		||||
	my_timezone = TimeZone.getDefault();
 | 
			
		||||
 | 
			
		||||
      } // end catch
 | 
			
		||||
 | 
			
		||||
    } // end if
 | 
			
		||||
    else
 | 
			
		||||
    { // just default locale/timezone
 | 
			
		||||
      my_locale = Locale.getDefault();
 | 
			
		||||
      my_timezone = TimeZone.getDefault();
 | 
			
		||||
 | 
			
		||||
    } // end else
 | 
			
		||||
 | 
			
		||||
    // Come up with a "first guess" at the location.
 | 
			
		||||
    StringBuffer loc_buf = new StringBuffer(request.getServletPath());
 | 
			
		||||
    if (loc_buf.charAt(0)=='/')
 | 
			
		||||
@ -608,6 +571,43 @@ public class RequestImpl implements RequestInput
 | 
			
		||||
 | 
			
		||||
    } // end catch
 | 
			
		||||
 | 
			
		||||
    // Default the locale and time zone temporarily while we initialize the session.
 | 
			
		||||
    my_locale = Locale.getDefault();
 | 
			
		||||
    my_timezone = TimeZone.getDefault();
 | 
			
		||||
 | 
			
		||||
    // Create the UI session.  We do this only after the script engine has been initialized
 | 
			
		||||
    // because HttpVeniceUISession now calls the script engine to launch session_init.js.
 | 
			
		||||
    session = factory.createSession(ctxt,request,response,engine,config);
 | 
			
		||||
    session.preprocess(this);
 | 
			
		||||
 | 
			
		||||
    if (!(session instanceof NullSession))
 | 
			
		||||
    { // read the user's preferred locale
 | 
			
		||||
      try
 | 
			
		||||
      { // get the user default locale
 | 
			
		||||
	my_locale = session.getUser().getLocale();
 | 
			
		||||
 | 
			
		||||
      } // end try
 | 
			
		||||
      catch (DataException de)
 | 
			
		||||
      { // locale problems...
 | 
			
		||||
	my_locale = Locale.getDefault();
 | 
			
		||||
 | 
			
		||||
      } // end catch
 | 
			
		||||
 | 
			
		||||
      // read the user's preferred time zone
 | 
			
		||||
      try
 | 
			
		||||
      { // get the user default timezone
 | 
			
		||||
	my_timezone = session.getUser().getTimeZone();
 | 
			
		||||
 | 
			
		||||
      } // end try
 | 
			
		||||
      catch (DataException de)
 | 
			
		||||
      { // time zone problems...
 | 
			
		||||
	my_timezone = TimeZone.getDefault();
 | 
			
		||||
 | 
			
		||||
      } // end catch
 | 
			
		||||
 | 
			
		||||
    } // end if
 | 
			
		||||
    // else leave the locale and time zone where they are
 | 
			
		||||
 | 
			
		||||
  } // end constructor
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
@ -788,7 +788,7 @@ public class RequestImpl implements RequestInput
 | 
			
		||||
    if (klass==CookieControl.class)
 | 
			
		||||
    { // create cookie control and return it
 | 
			
		||||
      if (cookie_control==null)
 | 
			
		||||
	cookie_control = new CookieControlImpl(this);
 | 
			
		||||
	cookie_control = new CookieControlImpl(request);
 | 
			
		||||
      return cookie_control;
 | 
			
		||||
 | 
			
		||||
    } // end if
 | 
			
		||||
@ -1472,6 +1472,18 @@ public class RequestImpl implements RequestInput
 | 
			
		||||
 | 
			
		||||
  } // end registerCleanup
 | 
			
		||||
 | 
			
		||||
  public String getConfigProperty(String name)
 | 
			
		||||
  {
 | 
			
		||||
    return config.getProperty(name);
 | 
			
		||||
 | 
			
		||||
  } // end getConfigProperty
 | 
			
		||||
 | 
			
		||||
  public String getConfigProperty(String name, String default_val)
 | 
			
		||||
  {
 | 
			
		||||
    return config.getProperty(name,default_val);
 | 
			
		||||
 | 
			
		||||
  } // end getConfigProperty
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * External static operations
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
@ -1707,22 +1719,30 @@ class SessionControlImpl implements SessionControl
 | 
			
		||||
 | 
			
		||||
class CookieControlImpl implements CookieControl
 | 
			
		||||
{
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Static data members
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  private static Category logger = Category.getInstance(CookieControlImpl.class);
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Attributes
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  private RequestImpl req;                    // request we're tied to
 | 
			
		||||
  private ArrayList new_cookies = null;       // cookies to be added to the response
 | 
			
		||||
  private HttpServletRequest httpreq;     // HTTP request object
 | 
			
		||||
  private HashMap old_cookies = null;     // cookies from the request
 | 
			
		||||
  private HashMap new_cookies = null;     // cookies to be added to the response
 | 
			
		||||
 | 
			
		||||
  /*--------------------------------------------------------------------------------
 | 
			
		||||
   * Constructor
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  CookieControlImpl(RequestImpl req)
 | 
			
		||||
  CookieControlImpl(HttpServletRequest httpreq)
 | 
			
		||||
  {
 | 
			
		||||
    this.req = req;
 | 
			
		||||
    this.httpreq = httpreq;
 | 
			
		||||
 | 
			
		||||
  } // end constructor
 | 
			
		||||
 | 
			
		||||
@ -1731,11 +1751,36 @@ class CookieControlImpl implements CookieControl
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  private final void loadCookies()
 | 
			
		||||
  {
 | 
			
		||||
    if (old_cookies==null)
 | 
			
		||||
    { // load the cookies into a HashMap
 | 
			
		||||
      old_cookies = new HashMap();
 | 
			
		||||
      Cookie[] raw_list = httpreq.getCookies();
 | 
			
		||||
      for (int i=0; i<raw_list.length; i++)
 | 
			
		||||
      { // save off the cookies
 | 
			
		||||
	Cookie tmp = raw_list[i];
 | 
			
		||||
	old_cookies.put(tmp.getName(),tmp);
 | 
			
		||||
 | 
			
		||||
      } // end for
 | 
			
		||||
 | 
			
		||||
      if (logger.isDebugEnabled())
 | 
			
		||||
	logger.debug("loadCookies(): " + old_cookies.size() + " cookie(s) loaded");
 | 
			
		||||
 | 
			
		||||
    } // end if
 | 
			
		||||
 | 
			
		||||
  } // end loadCookies
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Saves a cookie so that it will be added to the response.
 | 
			
		||||
   *
 | 
			
		||||
   * @param cookie Cookie to be added to the response later.
 | 
			
		||||
   */
 | 
			
		||||
  private final void putCookie(Cookie cookie)
 | 
			
		||||
  {
 | 
			
		||||
    if (new_cookies==null)
 | 
			
		||||
      new_cookies = new ArrayList();
 | 
			
		||||
    new_cookies.add(cookie);
 | 
			
		||||
      new_cookies = new HashMap();
 | 
			
		||||
    new_cookies.put(cookie.getName(),cookie);
 | 
			
		||||
 | 
			
		||||
  } // end putCookie
 | 
			
		||||
 | 
			
		||||
@ -1744,29 +1789,94 @@ class CookieControlImpl implements CookieControl
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Tests for the presence of a particular cookie.
 | 
			
		||||
   *
 | 
			
		||||
   * @param name Name of the cookie to test for existence.
 | 
			
		||||
   * @return <CODE>true</CODE> if a cookie by this name is present, <CODE>false</CODE> if not.
 | 
			
		||||
   */
 | 
			
		||||
  public boolean isCookiePresent(String name)
 | 
			
		||||
  {
 | 
			
		||||
    loadCookies();
 | 
			
		||||
    return old_cookies.containsKey(name);
 | 
			
		||||
 | 
			
		||||
  } // end isCookiePresent
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Returns the value of a particular request cookie.
 | 
			
		||||
   *
 | 
			
		||||
   * @param name Name of the cookie to retrieve the value of.
 | 
			
		||||
   * @return The value of that cookie, or <CODE>null</CODE> if the cookie is not present.
 | 
			
		||||
   */
 | 
			
		||||
  public String getCookie(String name)
 | 
			
		||||
  {
 | 
			
		||||
    loadCookies();
 | 
			
		||||
    Cookie tmp = (Cookie)(old_cookies.get(name));
 | 
			
		||||
    return ((tmp==null) ? null : tmp.getValue());
 | 
			
		||||
 | 
			
		||||
  } // end getCookie
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Returns a set containing all the cookie names associated with this request.
 | 
			
		||||
   *
 | 
			
		||||
   * @return See above.
 | 
			
		||||
   */
 | 
			
		||||
  public Set getCookieNames()
 | 
			
		||||
  {
 | 
			
		||||
    loadCookies();
 | 
			
		||||
    if (old_cookies.isEmpty())
 | 
			
		||||
      return Collections.EMPTY_SET;
 | 
			
		||||
    else
 | 
			
		||||
      return Collections.unmodifiableSet(old_cookies.keySet());
 | 
			
		||||
 | 
			
		||||
  } // end getCookieNames
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Adds a new persistent cookie to the application.  The cookie will be stored by the
 | 
			
		||||
   * browser's persistent storage facility.<P>
 | 
			
		||||
   * Cookies should be used <EM>sparingly</EM>, to avoid possible privacy concerns.
 | 
			
		||||
   *
 | 
			
		||||
   * @param name Name of the cookie to be set.
 | 
			
		||||
   * @param value Value of the cookie to be set.
 | 
			
		||||
   * @param max_age The maximum lifespan of the persistent cookie, in seconds.
 | 
			
		||||
   */
 | 
			
		||||
  public void savePersistentCookie(String name, String value, int max_age)
 | 
			
		||||
  {
 | 
			
		||||
    Cookie c = new Cookie(name,value);
 | 
			
		||||
    c.setMaxAge(Math.max(max_age,1));
 | 
			
		||||
    c.setPath(req.getContextPath());
 | 
			
		||||
    c.setPath(httpreq.getContextPath());
 | 
			
		||||
    putCookie(c);
 | 
			
		||||
    
 | 
			
		||||
  } // end savePersistentCookie
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Adds a new temporary cookie to the application.  The cookie will be stored in the
 | 
			
		||||
   * browser's memory only, and will disappear when the browser is closed.
 | 
			
		||||
   * Cookies should be used <EM>sparingly</EM>, to avoid possible privacy concerns.
 | 
			
		||||
   *
 | 
			
		||||
   * @param name Name of the cookie to be set.
 | 
			
		||||
   * @param value Value of the cookie to be set.
 | 
			
		||||
   */
 | 
			
		||||
  public void saveTemporaryCookie(String name, String value)
 | 
			
		||||
  {
 | 
			
		||||
    Cookie c = new Cookie(name,value);
 | 
			
		||||
    c.setMaxAge(-1);
 | 
			
		||||
    c.setPath(req.getContextPath());
 | 
			
		||||
    c.setPath(httpreq.getContextPath());
 | 
			
		||||
    putCookie(c);
 | 
			
		||||
    
 | 
			
		||||
  } // end saveTemporaryCookie
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Deletes a cookie (either persistent or temporary) from the application.  The cookie
 | 
			
		||||
   * will be erased from the browser.
 | 
			
		||||
   *
 | 
			
		||||
   * @param name Name of the cookie to remove.
 | 
			
		||||
   */
 | 
			
		||||
  public void deleteCookie(String name)
 | 
			
		||||
  {
 | 
			
		||||
    Cookie c = new Cookie(name,"");
 | 
			
		||||
    c.setMaxAge(0);
 | 
			
		||||
    c.setPath(req.getContextPath());
 | 
			
		||||
    c.setPath(httpreq.getContextPath());
 | 
			
		||||
    putCookie(c);
 | 
			
		||||
 | 
			
		||||
  } // end deleteCookie
 | 
			
		||||
@ -1776,13 +1886,22 @@ class CookieControlImpl implements CookieControl
 | 
			
		||||
   *--------------------------------------------------------------------------------
 | 
			
		||||
   */
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Takes all cookies that have been set on the current request and writes them to the
 | 
			
		||||
   * HTTP output.
 | 
			
		||||
   *
 | 
			
		||||
   * @param response HTTP response to receive all the cookies.
 | 
			
		||||
   */
 | 
			
		||||
  final void flushCookies(HttpServletResponse response)
 | 
			
		||||
  {
 | 
			
		||||
    if (new_cookies==null)
 | 
			
		||||
      return;  // no-op
 | 
			
		||||
 | 
			
		||||
    if (logger.isDebugEnabled())
 | 
			
		||||
      logger.debug("flushCookies(): " + new_cookies.size() + " cookie(s) to output");
 | 
			
		||||
 | 
			
		||||
    // loop over the cookies and add them to the response
 | 
			
		||||
    Iterator it = new_cookies.iterator();
 | 
			
		||||
    Iterator it = new_cookies.values().iterator();
 | 
			
		||||
    while (it.hasNext())
 | 
			
		||||
    { // add cookies to the response
 | 
			
		||||
      Cookie c = (Cookie)(it.next());
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user