Package winstone.realm

Source Code of winstone.realm.ArgumentsRealm

/*
* 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 java.util.ArrayList;
import java.util.Arrays;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.StringTokenizer;

import winstone.AuthenticationPrincipal;
import winstone.AuthenticationRealm;
import winstone.Logger;
import winstone.WebAppConfiguration;
import winstone.WinstoneResourceBundle;

/**
* 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>
* @version $Id: ArgumentsRealm.java,v 1.4 2007/06/01 15:55:41 rickknowles Exp $
*/
public class ArgumentsRealm implements AuthenticationRealm {
    private static final WinstoneResourceBundle REALM_RESOURCES = new WinstoneResourceBundle("winstone.realm.LocalStrings");
   
    static final String PASSWORD_PREFIX = "argumentsRealm.passwd.";
    static final String ROLES_PREFIX = "argumentsRealm.roles.";
    private Map passwords;
    private Map roles;

    /**
     * Constructor - this sets up an authentication realm, using the arguments
     * supplied on the command line as a source of userNames/passwords/roles.
     */
    public ArgumentsRealm(Set rolesAllowed, Map args) {
        this.passwords = new Hashtable();
        this.roles = new Hashtable();

        for (Iterator i = args.keySet().iterator(); i.hasNext();) {
            String key = (String) i.next();
            if (key.startsWith(PASSWORD_PREFIX)) {
                String userName = key.substring(PASSWORD_PREFIX.length());
                String password = (String) args.get(key);

                String roleList = WebAppConfiguration.stringArg(args, ROLES_PREFIX + userName, "");
                if (roleList.equals("")) {
                    Logger.log(Logger.WARNING, REALM_RESOURCES, "ArgumentsRealm.UndeclaredRoles", userName);
                } else {
                    StringTokenizer st = new StringTokenizer(roleList, ",");
                    List rl = new ArrayList();
                    for (; st.hasMoreTokens();) {
                        String currentRole = st.nextToken();
                        if (rolesAllowed.contains(currentRole))
                            rl.add(currentRole);
                    }
                    Object roleArray[] = rl.toArray();
                    Arrays.sort(roleArray);
                    this.roles.put(userName, Arrays.asList(roleArray));
                }
                this.passwords.put(userName, password);
            }
        }

        Logger.log(Logger.DEBUG, REALM_RESOURCES, "ArgumentsRealm.Initialised",
                "" + this.passwords.size());
    }

    /**
     * Authenticate the user - do we know them ? Return a principal once we know
     * them
     */
    public AuthenticationPrincipal authenticateByUsernamePassword(
            String userName, String password) {
        if ((userName == null) || (password == null))
            return null;

        String realPassword = (String) this.passwords.get(userName);
        if (realPassword == null)
            return null;
        else if (!realPassword.equals(password))
            return null;
        else
            return new AuthenticationPrincipal(userName, password,
                    (List) this.roles.get(userName));
    }

    /**
     * Retrieve an authenticated user
     */
    public AuthenticationPrincipal retrieveUser(String userName) {
        if (userName == null)
            return null;
        else
            return new AuthenticationPrincipal(userName,
                    (String) this.passwords.get(userName), (List) this.roles
                            .get(userName));
    }
}
TOP

Related Classes of winstone.realm.ArgumentsRealm

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.