/* * Copyright 2003-2006 Rick Knowles <winstone-devel at lists sourceforge net> * Distributed under the terms of either: * - the common development and distribution license (CDDL), v1.0; or * - the GNU Lesser General Public License, v2.1 or later */ package winstone.realm; import org.eclipse.jetty.security.AbstractLoginService; import org.eclipse.jetty.security.HashLoginService; import org.eclipse.jetty.security.UserStore; import org.eclipse.jetty.util.security.Credential; import winstone.Logger; import winstone.WinstoneResourceBundle; import winstone.cmdline.Option; import javax.security.auth.Subject; import java.security.Principal; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.StringTokenizer; import static org.eclipse.jetty.util.security.Credential.*; /** * Base class for authentication realms. Subclasses provide the source of * authentication roles, usernames, passwords, etc, and when asked for * validation respond with a role if valid, or null otherwise. * * @author mailto: <a href="rick_knowles@hotmail.com">Rick Knowles</a> * @author Kohsuke Kawaguchi * @version $Id: ArgumentsRealm.java,v 1.4 2007/06/01 15:55:41 rickknowles Exp $ */ public class ArgumentsRealm extends HashLoginService { private static final WinstoneResourceBundle REALM_RESOURCES = new WinstoneResourceBundle("winstone.realm.LocalStrings"); /** * Constructor - this sets up an authentication realm, using the arguments * supplied on the command line as a source of userNames/passwords/roles. */ public ArgumentsRealm(Map args) { UserStore userStore = new UserStore(); setUserStore( userStore ); int count=0; for (Object o : args.keySet()) { String key = (String) o; if (key.startsWith(Option.ARGUMENTS_REALM_PASSWORD.name)) { String userName = key.substring(Option.ARGUMENTS_REALM_PASSWORD.name.length()); String password = (String) args.get(key); String roleList = Option.stringArg(args, Option.ARGUMENTS_REALM_ROLES.name + userName, ""); String[] roleArray = new String[0]; if (roleList.equals("")) { Logger.log(Logger.WARNING, REALM_RESOURCES, "ArgumentsRealm.UndeclaredRoles", userName); } else { StringTokenizer st = new StringTokenizer(roleList, ","); List<String> rl = new ArrayList<String>(); for (; st.hasMoreTokens(); ) { String currentRole = st.nextToken(); rl.add(currentRole); } roleArray = rl.toArray(new String[rl.size()]); Arrays.sort(roleArray); } userStore.addUser(userName, getCredential(password), roleArray); count++; } } Logger.log(Logger.DEBUG, REALM_RESOURCES, "ArgumentsRealm.Initialised", "" + count); } }