File:  [Public] / java / classes / org / w3c / jigsaw / acl / BasicAuthPrincipal.java
Revision 1.2: download - view: text, annotated - select for diffs
Fri Apr 23 14:06:46 1999 UTC (25 years, 2 months ago) by bmahe
Branches: MAIN
CVS tags: HEAD
end of the week :)

// BasicAuthprincipal.java
// $Id: BasicAuthPrincipal.java,v 1.2 1999/04/23 14:06:46 bmahe Exp $
// (c) COPYRIGHT MIT, INRIA and Keio, 1999.
// Please first read the full copyright statement in file COPYRIGHT.html
 
package org.w3c.jigsaw.acl;

import org.w3c.jigsaw.http.Request;
import org.w3c.tools.codec.Base64Decoder;
import org.w3c.tools.codec.Base64FormatException;
import org.w3c.www.http.HttpCredential;

/**
 * @version $Revision: 1.2 $
 * @author  Benoît Mahé (bmahe@w3.org)
 */
public class BasicAuthPrincipal extends HTTPPrincipal {
    
    protected String      name     = null;
    protected String      password = null;
    protected String      cookie   = null;

    protected String getCookie() {
	return cookie;
    }

    public boolean equals(Object another) {
	if (another instanceof AclPrincipal) {
	    AclPrincipal aclp = (AclPrincipal) another;
	    if (aclp.matchIP(getInetAddress())) {
		if (aclp.getPassword() != null) {
		    return (name.equals(aclp.getName()) &&
			    password.equals(aclp.getPassword()));
		} else {
		    return true;
		}
	    } else {
		return (name.equals(aclp.getName()) &&
			password.equals(aclp.getPassword()));
	    }
	} else if (another instanceof BasicAuthPrincipal) {
	    return (cookie.equals(((BasicAuthPrincipal)another).getCookie()));
	} else {
	    return toString().equals(another.toString());
	}
    }

    public String toString() {
	return name+":"+password;
    }

    public int hashCode() {
	return toString().hashCode();
    }

    public String getName() {
	return name;
    }

    public BasicAuthPrincipal(Request request) 
	throws InvalidAuthException
    {
	super(request);
	HttpCredential credential = null;
	credential = (request.isProxy()
		      ? request.getProxyAuthorization()
		      : request.getAuthorization());
	if ( ! credential.getScheme().equalsIgnoreCase("Basic") ) {
	    String msg = ("Invalid authentication scheme \""
			  + credential.getScheme()
			  + " expecting \"Basic\"");
	    throw new InvalidAuthException (msg) ;
	}
	// Decode the credentials:
	String decoded = null ;
	this.cookie    = credential.getAuthParameter("cookie");
	try {
	    Base64Decoder b  = new Base64Decoder (cookie) ;
	    decoded          = b.processString() ;
	} catch (Base64FormatException e) {
	    String msg = "Invalid BASE64 encoding of credentials." ;
	    throw new InvalidAuthException (msg) ;
	}
	// Get user and password:
	int icolon = decoded.indexOf (':') ;
	if ( (icolon > 0) && (icolon+1 < decoded.length()) ) {
	    // ok, parse was find, check user:
	    this.name     = decoded.substring (0, icolon) ;
	    this.password = decoded.substring (icolon+1) ;
	} else {
	    String msg = "Invalid credentials syntax in " + decoded ;
	    throw new InvalidAuthException (msg) ;
	}
    }

}

Webmaster