/* * RolesHandler.java * * Brazil project web application toolkit, * export version: 2.3 * Copyright (c) 1998-2006 Sun Microsystems, Inc. * * Sun Public License Notice * * The contents of this file are subject to the Sun Public License Version * 1.0 (the "License"). You may not use this file except in compliance with * the License. A copy of the License is included as the file "license.terms", * and also available at http://www.sun.com/ * * The Original Code is from: * Brazil project web application toolkit release 2.3. * The Initial Developer of the Original Code is: suhler. * Portions created by suhler are Copyright (C) Sun Microsystems, Inc. * All Rights Reserved. * * Contributor(s): cstevens, suhler. * * Version: 2.3 * Created by suhler on 98/09/30 * Last modified by suhler on 06/11/13 15:04:24 * * Version Histories: * * 2.3 06/11/13-15:04:24 (suhler) * move MatchString to package "util" from "handler" * * 2.2 03/07/15-09:11:13 (suhler) * Doc fixes for pdf version of the manual * * 2.1 02/10/01-16:36:27 (suhler) * version change * * 1.14 02/07/24-10:44:55 (suhler) * doc updates * * 1.13 01/07/20-11:31:25 (suhler) * MatchUrl -> MatchString * * 1.12 01/07/17-14:15:27 (suhler) * use MatchUrl * * 1.11 00/07/07-17:01:22 (suhler) * remove System.out.println(s) * * 1.10 00/05/19-11:48:15 (suhler) * changed default request.props names for consistency with other handlers * * 1.9 00/04/20-11:49:07 (cstevens) * copyright. * * 1.8 99/10/01-11:26:12 (cstevens) * Change logging to show prefix of Handler generating the log message. * * 1.7 99/09/15-14:39:29 (cstevens) * Rewritign http server to make it easier to proxy requests. * * 1.6 99/03/30-09:29:33 (suhler) * * 1.5 99/01/05-10:57:26 (suhler) * removed wildcarded imports * * 1.4 98/10/15-09:26:07 (suhler) * fixed syntax error * * 1.3 98/10/15-08:55:45 (suhler) * checkpoint - adding "check" flag - in progress * . * * 1.2 98/10/13-08:10:37 (suhler) * lots of stuff * * 1.2 98/09/30-09:46:04 (Codemgr) * SunPro Code Manager data about conflicts, renames, etc... * Name history : 1 0 handlers/RolesHandler.java * * 1.1 98/09/30-09:46:03 (suhler) * date and time created 98/09/30 09:46:03 by suhler * */ package sunlabs.brazil.handler; import java.io.FileInputStream; import java.io.IOException; import java.util.Enumeration; import java.util.Hashtable; import java.util.Properties; import sunlabs.brazil.util.MatchString; import sunlabs.brazil.server.Handler; import sunlabs.brazil.server.Request; import sunlabs.brazil.server.Server; /** * Handler for associating roles with an id. This is a placeholder * until the SunEconomy gets integrated in. It looks for an "id" in the * request, looks it up in a property file, then adds the value of the * id into the request. It may be used in conjunction with * {@link AclSwitchHandler} to provide role based web access. * Properties: *
*
prefix, suffix, glob, match *
Specify the URL that triggers this handler. * (See {@link MatchString}). *
SessionID *
The property to use to look up the id. Defaults to "SessionID". *
roleName *
The property to place the result of the id lookup into. * Defaults to "roleName"; *
mapFile *
The absolute path to the java properties file containing the it to role mapping. *
* * @author Stephen Uhler * @version @(#) RolesHandler.java 2.3 06/11/13 15:04:24 */ public class RolesHandler implements Handler { Properties map; // The authorization mapping table String propsPrefix; // My prefix in the global properties file String urlPrefix; // The prefix to look for to map String idKey; // The property name for the token id String roleKey; // The property name for the roles boolean check = true; // only put results in request, don't return /** * Handler configuration property SessionID. * The request property name to find the id string. * Defaults to id. */ public static final String ID_KEY = "SessionID"; // property key for token id /** * Handler configuration property roleName. * The request property name to place the roles into. * Defaults to roles. */ public static final String ROLE_KEY = "roleName"; // property key for token roles /** * Handler configuration property mapFile. * The path to the java properties file containing the id * to roles mapping. The roles are a whitespace delimited list * of ascii role names. */ public static final String MAP = "mapFile"; // properties file /** * Handler configuration property check. * If true, the results are out into the request object. * Otherwise, they are returned in a text/plain java properties * formatted document, which can be used with the * @see RemoteStsHandler. */ static final String CHECK = "check"; // how results are returned MatchString isMine; // check for matching url public boolean init(Server server, String prefix) { propsPrefix = prefix; isMine = new MatchString(prefix, server.props); String mapFile = server.props.getProperty(propsPrefix + MAP,""); map = new Properties(); try { FileInputStream in = new FileInputStream(mapFile); map.load(in); in.close(); } catch (Exception e) { server.log(Server.LOG_ERROR, prefix, propsPrefix + MAP + ": (" + mapFile + ") " + e.toString()); return false; } idKey = server.props.getProperty(propsPrefix + ID_KEY, "id"); roleKey = server.props.getProperty(propsPrefix + ROLE_KEY, "roles"); check = server.props.getProperty( propsPrefix + CHECK, "y").startsWith("y"); return true; } /** * Dispatch and handle the request. * This version looks at the request for the id, looks it up in the * table, and adds the value, if available */ public boolean respond(Request request) throws IOException { if (!isMine.match(request.url)) { return false; } String id = (String) request.props.get(idKey); // System.out.println("ids: " + map); // System.out.println("props: " + request.props); if (id != null && map.containsKey(id)) { String value = (String) map.get(id); request.log(Server.LOG_DIAGNOSTIC, "Mapping: " + id + "->" + value); request.props.put(roleKey,value); } if (!check) { StringBuffer result = new StringBuffer(""); Enumeration keys = request.props.keys(); while(keys.hasMoreElements()) { String key = (String) keys.nextElement(); result.append(key + "=" + request.props.get(key) + "\n"); } request.sendResponse(result.toString(),"text/plain"); return true; } else { return false; } } }