Commit 28a71c70 authored by Jeff Burke's avatar Jeff Burke
Browse files

s1890: added principal comparator to User identities Set

parent 64e8f3a7
Loading
Loading
Loading
Loading
+27 −22
Original line number Diff line number Diff line
@@ -72,15 +72,17 @@ import ca.nrc.cadc.auth.HttpPrincipal;
import org.json.HTTP;

import java.security.Principal;
import java.util.Comparator;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;

public class User
{
    private InternalID id;
    
    private Set<Principal> identities = new HashSet<Principal>();
    private Set<Principal> identities = new TreeSet<Principal>(new PrincipalComparator());

    public PersonalDetails personalDetails;
    public PosixDetails posixDetails;
@@ -104,13 +106,13 @@ public class User
        return identities;
    }

    public Principal getPrincipal(Class clazz)
    public <S extends Principal> S getPrincipal(Class<S> clazz)
    {
        for (Principal principal : getIdentities())
        {
            if (principal.getClass().equals(clazz))
            if (principal.getClass() == clazz)
            {
                return principal;
                return (S) principal;
            }
        }
        return null;
@@ -118,26 +120,9 @@ public class User

    public HttpPrincipal getHttpPrincipal()
    {
        Principal principal = getPrincipal(HttpPrincipal.class);
        if (principal != null)
        {
            return (HttpPrincipal) principal;
        }
        return null;
        return getPrincipal(HttpPrincipal.class);
    }

//    public <S extends Principal> S getIdentity(Class<S> clazz)
//    {
//        for (Principal principal : getIdentities())
//        {
//            if (principal.getClass() == clazz)
//            {
//                return (S) principal;
//            }
//        }
//        return null;
//    }

    /* (non-Javadoc)
     * @see java.lang.Object#hashCode()
     */
@@ -185,4 +170,24 @@ public class User
        return getClass().getSimpleName() + "[" + id + "]";
    }

    private class PrincipalComparator implements Comparator<Principal>
    {
        @Override
        public int compare(Principal o1, Principal o2)
        {
            if (o1 instanceof HttpPrincipal && o2 instanceof HttpPrincipal)
            {
                return 0;
            }
            else if (o1.getClass() == o2.getClass())
            {
                if (o1.getName().equals(o2.getName()))
                {
                    return 0;
                }
            }
            return -1;
        }
    }

}
+67 −1
Original line number Diff line number Diff line
@@ -69,14 +69,19 @@

package ca.nrc.cadc.ac;

import ca.nrc.cadc.auth.DNPrincipal;
import ca.nrc.cadc.auth.HttpPrincipal;
import ca.nrc.cadc.auth.NumericPrincipal;
import org.apache.log4j.Logger;
import org.junit.Test;

import java.lang.reflect.Field;
import javax.security.auth.x500.X500Principal;
import java.net.URI;
import java.util.UUID;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

public class UserTest
{
@@ -107,4 +112,65 @@ public class UserTest
        assertEquals(user1.hashCode(), user2.hashCode());
    }

    @Test
    public void comparatorTest() throws Exception
    {
        User user = new User();
        boolean result = false;

        // HttpPrincipal
        HttpPrincipal httpPrincipal1 = new HttpPrincipal("foo");
        HttpPrincipal httpPrincipal2 = new HttpPrincipal("bar");

        result = user.getIdentities().add(httpPrincipal1);
        assertTrue(result);
        result = user.getIdentities().add(httpPrincipal1);
        assertFalse(result);

        result = user.getIdentities().add(httpPrincipal2);
        assertFalse(result);

        // X500Principal
        X500Principal x500Principal1 = new X500Principal("cn=foo,c=bar");
        X500Principal x500Principal2 = new X500Principal("cn=bar,c=foo");

        result = user.getIdentities().add(x500Principal1);
        assertTrue(result);
        result = user.getIdentities().add(x500Principal1);
        assertFalse(result);

        result = user.getIdentities().add(x500Principal2);
        assertTrue(result);
        result = user.getIdentities().add(x500Principal2);
        assertFalse(result);

        // NumericPrincipal
        NumericPrincipal numericPrincipal1 = new NumericPrincipal(UUID.randomUUID());
        NumericPrincipal numericPrincipal2 = new NumericPrincipal(UUID.randomUUID());

        result = user.getIdentities().add(numericPrincipal1);
        assertTrue(result);
        result = user.getIdentities().add(numericPrincipal1);
        assertFalse(result);

        result = user.getIdentities().add(numericPrincipal2);
        assertTrue(result);
        result = user.getIdentities().add(numericPrincipal2);
        assertFalse(result);

        // DNPrincipal
        DNPrincipal dnPrincipal1 = new DNPrincipal("cn=foo,dc=bar");
        DNPrincipal dnPrincipal2 = new DNPrincipal("cn=bar,dc=foo");

        result = user.getIdentities().add(dnPrincipal1);
        assertTrue(result);
        result = user.getIdentities().add(dnPrincipal1);
        assertFalse(result);

        result = user.getIdentities().add(dnPrincipal2);
        assertTrue(result);
        result = user.getIdentities().add(dnPrincipal2);
        assertFalse(result);
    }

}