Commit 63ede814 authored by Brian Major's avatar Brian Major
Browse files

s1651 - Added caching to GMSClient

parent 62deb6d2
Loading
Loading
Loading
Loading
+13 −27
Original line number Diff line number Diff line
@@ -68,6 +68,17 @@
 */
package ca.nrc.cadc.ac.server.ldap;

import java.security.AccessControlException;
import java.security.Principal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.List;

import javax.security.auth.x500.X500Principal;

import org.apache.log4j.Logger;

import ca.nrc.cadc.ac.ActivatedGroup;
import ca.nrc.cadc.ac.Group;
import ca.nrc.cadc.ac.GroupAlreadyExistsException;
@@ -76,6 +87,7 @@ import ca.nrc.cadc.ac.Role;
import ca.nrc.cadc.ac.User;
import ca.nrc.cadc.ac.UserNotFoundException;
import ca.nrc.cadc.net.TransientException;

import com.unboundid.ldap.sdk.AddRequest;
import com.unboundid.ldap.sdk.Attribute;
import com.unboundid.ldap.sdk.DN;
@@ -90,15 +102,6 @@ import com.unboundid.ldap.sdk.SearchResult;
import com.unboundid.ldap.sdk.SearchResultEntry;
import com.unboundid.ldap.sdk.SearchScope;
import com.unboundid.ldap.sdk.controls.ProxiedAuthorizationV2RequestControl;
import java.security.AccessControlException;
import java.security.Principal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import javax.security.auth.x500.X500Principal;
import org.apache.log4j.Logger;

public class LdapGroupDAO<T extends Principal> extends LdapDAO
{
@@ -112,9 +115,6 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO
            "(version 3.0;acl \"Group Write\";allow " + 
            "(read,compare,search,selfwrite,write,add)" + 
            "(groupdn = \"ldap:///<ACTUAL_GROUP>\");)";
    private static final String PUB_GROUP_ACI = "(targetattr = \"*\") " + 
            "(version 3.0;acl \"Group Public\";" + 
            "allow (read,compare,search)userdn=\"ldap:///all\";)";
    
    private LdapUserDAO<T> userPersist;

@@ -185,7 +185,6 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO
                            new ActivatedGroup(modifiedGroup.getID(),
                                               modifiedGroup.getOwner());
                    activatedGroup.description = modifiedGroup.description;
                    activatedGroup.publicRead = modifiedGroup.publicRead;
                    activatedGroup.groupRead = modifiedGroup.groupRead;
                    activatedGroup.groupWrite = modifiedGroup.groupWrite;
                    activatedGroup.getProperties()
@@ -240,10 +239,6 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO

                // acis
                List<String> acis = new ArrayList<String>();
                if (group.publicRead)
                {
                    acis.add(PUB_GROUP_ACI);
                }
                if (groupWriteAci != null)
                {
                    acis.add(groupWriteAci);
@@ -428,10 +423,6 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO
                            Group groupWrite = getGroup(grWrite.trim());
                            ldapGroup.groupWrite = groupWrite;
                        }
                        else if (aci.equals(PUB_GROUP_ACI))
                        {
                            ldapGroup.publicRead = true;
                        }
                    }
                }
            }
@@ -529,10 +520,6 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO
                                             writeGrDN.toNormalizedString()));
        }

        if (newGroup.publicRead)
        {
            acis.add(PUB_GROUP_ACI);
        }
        modifs.add(new Modification(ModificationType.REPLACE, "aci", (String[]) 
                                    acis.toArray(new String[acis.size()])));

@@ -645,8 +632,7 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO
        }
        
        if (group.groupRead != null || 
            group.groupWrite != null || 
            group.publicRead)
            group.groupWrite != null)
        {
            modifs.add(new Modification(ModificationType.DELETE, "aci"));
        }
+8 −20
Original line number Diff line number Diff line
@@ -34,17 +34,24 @@

package ca.nrc.cadc.ac.server.ldap;

import ca.nrc.cadc.ac.ActivatedGroup;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;

import java.security.AccessControlException;
import java.security.PrivilegedExceptionAction;
import java.util.Collection;
import java.util.Set;

import javax.security.auth.Subject;
import javax.security.auth.x500.X500Principal;

import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.junit.BeforeClass;
import org.junit.Test;

import ca.nrc.cadc.ac.ActivatedGroup;
import ca.nrc.cadc.ac.Group;
import ca.nrc.cadc.ac.GroupAlreadyExistsException;
import ca.nrc.cadc.ac.GroupNotFoundException;
@@ -53,14 +60,6 @@ import ca.nrc.cadc.ac.Role;
import ca.nrc.cadc.ac.User;
import ca.nrc.cadc.ac.UserNotFoundException;
import ca.nrc.cadc.util.Log4jInit;
import java.security.AccessControlException;
import java.security.Principal;
import java.util.Collection;
import java.util.Set;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import static org.junit.Assert.fail;
import org.junit.BeforeClass;

public class LdapGroupDAOTest
{
@@ -177,15 +176,6 @@ public class LdapGroupDAOTest
                    actualGroup = getGroupDAO().modifyGroup(expectGroup);
                    assertGroupsEqual(expectGroup, actualGroup);

                    // publicRead
                    expectGroup.publicRead = true;
                    actualGroup = getGroupDAO().modifyGroup(expectGroup);
                    assertGroupsEqual(expectGroup, actualGroup);
                    
                    expectGroup.publicRead = false;
                    actualGroup = getGroupDAO().modifyGroup(expectGroup);
                    assertGroupsEqual(expectGroup, actualGroup);

                    // userMembers
                    expectGroup.getUserMembers().add(daoTestUser2);
                    actualGroup = getGroupDAO().modifyGroup(expectGroup);
@@ -208,7 +198,6 @@ public class LdapGroupDAOTest
                    expectGroup.description = "Happy testing";
                    expectGroup.groupRead = otherGroup;
                    expectGroup.groupWrite = otherGroup;
                    expectGroup.publicRead = true;
                    expectGroup.getUserMembers().add(daoTestUser2);
                    expectGroup.getGroupMembers().add(otherGroup);
                    
@@ -662,7 +651,6 @@ public class LdapGroupDAOTest
        {
            assertTrue(gr2.getUserMembers().contains(user));
        }
        assertEquals(gr1.publicRead, gr2.publicRead);
        assertEquals(gr1.groupRead, gr2.groupRead);
        assertEquals(gr1.groupWrite, gr2.groupWrite);
        assertEquals(gr1.groupWrite, gr2.groupWrite);
+3 −28
Original line number Diff line number Diff line
@@ -88,13 +88,14 @@
    <property name="project"    value="cadcAccessControl" />

    <property name="cadcUtil"           value="${lib}/cadcUtil.jar" />
	<property name="cadcRegistryClient" value="${lib}/cadcRegistryClient.jar" />
    
    <property name="jdom2"      value="${ext.lib}/jdom2.jar" />
    <property name="log4j"      value="${ext.lib}/log4j.jar" />
    <property name="unboundid"  value="${ext.lib}/unboundid-ldapsdk-se.jar" />


    <property name="jars" value="${cadcUtil}:${jdom2}:${log4j}:${unboundid}" />
    <property name="jars" value="${cadcUtil}:${cadcRegistryClient}:${jdom2}:${log4j}:${unboundid}" />
    
    <target name="build" depends="compile">
        <jar jarfile="${build}/lib/${project}.jar"
@@ -114,30 +115,4 @@
    
    <property name="testingJars" value="${build}/class:${jars}:${xerces}:${asm}:${cglib}:${easymock}:${junit}:${objenesis}" />

    <target name="test" depends="compile-test">
        <echo message="Running test" />

        <!-- Run the junit test suite -->
        <echo message="Running test suite..." />
        <junit printsummary="yes" haltonfailure="yes" fork="yes">
            <classpath>
                <pathelement path="${build}/class"/>
                <pathelement path="${build}/test/class"/>
                <pathelement path="${testingJars}"/>
            </classpath>
            <test name="ca.nrc.cadc.ac.GroupTest" />
            <test name="ca.nrc.cadc.ac.GroupPropertyTest" />
            <test name="ca.nrc.cadc.ac.GroupPropertyReaderWriterTest" />
            <test name="ca.nrc.cadc.ac.GroupReaderWriterTest" />
            <test name="ca.nrc.cadc.ac.IdentityReaderWriterTest" />
            <test name="ca.nrc.cadc.ac.PersonalDetailsTest" />
            <test name="ca.nrc.cadc.ac.PosixDetailsTest" />
            <test name="ca.nrc.cadc.ac.UserDetailsReaderWriterTest" />
            <test name="ca.nrc.cadc.ac.UserReaderWriterTest" />
            <test name="ca.nrc.cadc.ac.UserTest" />
            
            <formatter type="plain" usefile="false" />
        </junit>
    </target>

</project>
+1 −5
Original line number Diff line number Diff line
@@ -85,13 +85,9 @@ public class AC
    // Denotes a group readable by public
    public static final String PROPERTY_PUBLIC = "ivo://ivoa.net/gms#public";
    
    public static final String GMS_SERVICE_URI = "ivo://cadc.nrc.ca/ac";
    public static final String GMS_SERVICE_URI = "ivo://cadc.nrc.ca/gms";
    
    // Group URI attribute once the group name is appended
    public static final String GROUP_URI = "ivo://cadc.nrc.ca/gms#";
    
//    public static final String ID_TYPE_X500 = "X500";
//    public static final String ID_TYPE_OPENID = "OpenID";
//    public static final String ID_TYPE_USERNAME = "HTTP";
//    public static final String ID_TYPE_UID = "UID";
}
+0 −6
Original line number Diff line number Diff line
@@ -104,12 +104,6 @@ public class Group
     */
    public Group groupWrite;
    
    /**
     * flag that show whether the details of this group are publicly readable
     * Note: this class does not enforce any access control rules
     */
    public boolean publicRead = false;
    
    /**
     * Ctor.
     * 
Loading