View Javadoc

1   package no.feide.mellon.jaas.principals;
2   
3   import java.util.Iterator;
4   
5   import javax.security.auth.Subject;
6   
7   import com.sun.security.auth.PrincipalComparator;
8   
9   
10  /***
11   * A special principal for the eduPersonScopedAffiliation attribute in FEIDE
12   * <br><br>
13   * Note that no subject will have any ScopedAffiliationPrincipals, only MoriaPrincipals.
14   * An ScopedAffiliationPrincipal implies a MoriaPrincipal with <code>attributeName</code> "eduPersonScopedAffiliation"
15   * and the sufficient attribute value. See the <code>implies</code> method.
16   * 
17   * ScopedAffiliationPrincipals are only used in the policy file. In the policy file it cannot
18   * be replaced by the corresponding MoriaPrincipal if you want to make use of wildcards. 
19   * 
20   * @author Rikke Amilde Løvlid
21   */
22  public class ScopedAffiliationPrincipal extends MoriaPrincipal implements PrincipalComparator{
23  
24  	/***
25  	 * @param name	the attribute value of the eduPersonScopedAffiliation attribute in FEIDE.
26  	 * 				It is on the form x@y where x may be replaced by a wildcard.
27  	 */
28  	public ScopedAffiliationPrincipal(String name){
29  		super("eduPersonScopedAffiliation", name);
30  	}
31  	
32  	/***
33  	 * ScopedAffiliationPrincipal implies the Subject subject if the subject has a MoriaPrincipal
34  	 * with attributeName "eduPersonScopedAffiliation" (this.attributeName is "eduPersonScopedAffiliation") 
35  	 * and an attributeValue which is implied by the attributeValue belonging to this ScopedAffiliationPrincipal.
36  	 */
37  	public boolean implies(Subject subject){
38  		Iterator it = subject.getPrincipals(MoriaPrincipal.class).iterator();
39  		while(it.hasNext()){
40  			MoriaPrincipal mp = (MoriaPrincipal)it.next();
41  			if(mp.getAttributeName().equals(this.attributeName) && implies(this.attributeValue, mp.getAttributeValue())){
42  				return true;
43  			}	
44  		}
45  		return false;
46  	}
47  	
48  	/***
49  	 * @param string1	this objects attribute value. It is on the form a@b
50  	 * @param string2	the attribute value we vant to know wether is implied by string1 or not. It is on the form c@d
51  	 * 
52  	 * The "a" in string1 may be a wildcard, "*". 
53  	 * string1 implies string2 if they are equal or "a" is a wildcard and b and d are equal.
54  	 * 
55  	 * @return whether string1 implies string2
56  	 */
57  	public boolean implies(String string1, String string2){
58  		if(string1.indexOf("*")!=0){
59  			return string1.equals(string2);
60  		}
61  		if(string1.indexOf("@")==1 && 
62  				string1.substring(2).equals(string2.substring(string2.indexOf("@")+1))){
63  			return true;
64  		}
65  		return false;
66  		
67  	}
68  }