/*
 * @(#)ClientFactory.java	1.8 00/10/05
 *
 * Copyright 1999-2000 Sun Microsystems, Inc. All Rights Reserved.
 * 
 * This software is the proprietary information of Sun Microsystems, Inc.  
 * Use is subject to license terms.
 */

package com.sun.security.sasl; 

import com.sun.security.sasl.preview.*;
import com.sun.security.sasl.util.Policy;

import java.util.Hashtable;
import javax.security.auth.callback.*;

/**
  * Client factory for EXTERNAL.
  *
  * @author Rosanna Lee
  */
public class ClientFactory implements SaslClientFactory {
    private static final String myMechs[] = {
	"EXTERNAL", //
    };

    private static final int mechPolicies[] = {
	Policy.NOPLAINTEXT|Policy.NOACTIVE|Policy.NODICTIONARY
	|Policy.FORWARD_SECRECY, 		    //EXTERNAL
    };

    private static final int EXTERNAL = 0;

    public ClientFactory() {
    }

    public SaslClient createSaslClient(String[] mechs,
	String authorizationId,
	String protocol,
	String serverName,
	Hashtable props,
	CallbackHandler cbh) throws SaslException {

	    for (int i = 0; i < mechs.length; i++) {
		if (mechs[i].equals(myMechs[EXTERNAL]) 
		    && Policy.checkPolicy(mechPolicies[EXTERNAL], props)) {
		    return new External(authorizationId);
		} 
	    }
	    return null;
    };

    public String[] getMechanismNames(Hashtable props) {
	return Policy.filterMechs(myMechs, mechPolicies, props);
    }
}
