You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2015/11/20 11:24:17 UTC

svn commit: r1715334 - in /directory/shared/trunk/ldap: client/api/src/main/java/org/apache/directory/ldap/client/api/ model/src/main/java/org/apache/directory/api/ldap/model/ldif/anonymizer/

Author: elecharny
Date: Fri Nov 20 10:24:16 2015
New Revision: 1715334

URL: http://svn.apache.org/viewvc?rev=1715334&view=rev
Log:
Added the TelephoneNumber anonymizer, to keep the value correct after anionymization.

Added:
    directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/api/ldap/model/ldif/anonymizer/TelephoneNumberAnonymizer.java
Modified:
    directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdifAnonymizer.java
    directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/api/ldap/model/ldif/anonymizer/DefaultAnonymizer.java
    directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/api/ldap/model/ldif/anonymizer/StringAnonymizer.java

Modified: directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdifAnonymizer.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdifAnonymizer.java?rev=1715334&r1=1715333&r2=1715334&view=diff
==============================================================================
--- directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdifAnonymizer.java (original)
+++ directory/shared/trunk/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdifAnonymizer.java Fri Nov 20 10:24:16 2015
@@ -52,6 +52,7 @@ import org.apache.directory.api.ldap.mod
 import org.apache.directory.api.ldap.model.ldif.anonymizer.BinaryAnonymizer;
 import org.apache.directory.api.ldap.model.ldif.anonymizer.IntegerAnonymizer;
 import org.apache.directory.api.ldap.model.ldif.anonymizer.StringAnonymizer;
+import org.apache.directory.api.ldap.model.ldif.anonymizer.TelephoneNumberAnonymizer;
 import org.apache.directory.api.ldap.model.name.Ava;
 import org.apache.directory.api.ldap.model.name.Dn;
 import org.apache.directory.api.ldap.model.name.Rdn;
@@ -226,7 +227,7 @@ public class LdifAnonymizer
         attributeAnonymizers.put( SchemaConstants.HOME_DIRECTORY_AT_OID,
             new StringAnonymizer() );
         attributeAnonymizers.put( SchemaConstants.HOME_PHONE_AT_OID,
-            new StringAnonymizer() );
+            new TelephoneNumberAnonymizer() );
         attributeAnonymizers.put( SchemaConstants.HOME_POSTAL_ADDRESS_AT_OID,
             new StringAnonymizer() );
         attributeAnonymizers.put( SchemaConstants.HOST_AT_OID, new StringAnonymizer() );
@@ -242,12 +243,12 @@ public class LdifAnonymizer
         attributeAnonymizers.put( SchemaConstants.MANAGER_AT_OID, new StringAnonymizer() );
         attributeAnonymizers.put( SchemaConstants.MEMBER_UID_AT_OID,
             new StringAnonymizer() );
-        attributeAnonymizers.put( SchemaConstants.MOBILE_AT_OID, new StringAnonymizer() );
+        attributeAnonymizers.put( SchemaConstants.MOBILE_AT_OID, new TelephoneNumberAnonymizer() );
         attributeAnonymizers.put( SchemaConstants.ORGANIZATION_NAME_AT_OID,
             new StringAnonymizer() );
         attributeAnonymizers.put( SchemaConstants.ORGANIZATIONAL_UNIT_NAME_AT_OID,
             new StringAnonymizer() );
-        attributeAnonymizers.put( SchemaConstants.PAGER_AT_OID, new StringAnonymizer() );
+        attributeAnonymizers.put( SchemaConstants.PAGER_AT_OID, new TelephoneNumberAnonymizer() );
         attributeAnonymizers.put( SchemaConstants.POSTAL_ADDRESS_AT_OID,
             new StringAnonymizer() );
         attributeAnonymizers.put( SchemaConstants.PHOTO_AT_OID, new StringAnonymizer() );
@@ -257,7 +258,7 @@ public class LdifAnonymizer
             .put( SchemaConstants.SEE_ALSO_AT_OID, new StringAnonymizer() );
         attributeAnonymizers.put( SchemaConstants.SN_AT_OID, new StringAnonymizer() );
         attributeAnonymizers.put( SchemaConstants.TELEPHONE_NUMBER_AT_OID,
-            new StringAnonymizer() );
+            new TelephoneNumberAnonymizer() );
         attributeAnonymizers.put( SchemaConstants.UID_AT_OID, new StringAnonymizer() );
         attributeAnonymizers.put( SchemaConstants.UID_NUMBER_AT_OID,
             new IntegerAnonymizer() );
@@ -271,6 +272,8 @@ public class LdifAnonymizer
             new BinaryAnonymizer() );
         attributeAnonymizers.put( SchemaConstants.X500_UNIQUE_IDENTIFIER_AT_OID,
             new BinaryAnonymizer() );
+        attributeAnonymizers.put( SchemaConstants.FACSIMILE_TELEPHONE_NUMBER_AT_OID,
+            new TelephoneNumberAnonymizer() );
     }
     
     

Modified: directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/api/ldap/model/ldif/anonymizer/DefaultAnonymizer.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/api/ldap/model/ldif/anonymizer/DefaultAnonymizer.java?rev=1715334&r1=1715333&r2=1715334&view=diff
==============================================================================
--- directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/api/ldap/model/ldif/anonymizer/DefaultAnonymizer.java (original)
+++ directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/api/ldap/model/ldif/anonymizer/DefaultAnonymizer.java Fri Nov 20 10:24:16 2015
@@ -32,7 +32,7 @@ import org.apache.directory.api.ldap.mod
 
 
 /**
- * A DefaultAnonymizer. It take a value and change it to a random String
+ * A DefaultAnonymizer. It takes a value and change it to a random String
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */

Modified: directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/api/ldap/model/ldif/anonymizer/StringAnonymizer.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/api/ldap/model/ldif/anonymizer/StringAnonymizer.java?rev=1715334&r1=1715333&r2=1715334&view=diff
==============================================================================
--- directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/api/ldap/model/ldif/anonymizer/StringAnonymizer.java (original)
+++ directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/api/ldap/model/ldif/anonymizer/StringAnonymizer.java Fri Nov 20 10:24:16 2015
@@ -32,7 +32,7 @@ import org.apache.directory.api.ldap.mod
 
 
 /**
- * A default anonymizer for attributes that are HR
+ * A default anonymizer for attributes that are HR. It covers DirectoryString, Ia5String, ...
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */

Added: directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/api/ldap/model/ldif/anonymizer/TelephoneNumberAnonymizer.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/api/ldap/model/ldif/anonymizer/TelephoneNumberAnonymizer.java?rev=1715334&view=auto
==============================================================================
--- directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/api/ldap/model/ldif/anonymizer/TelephoneNumberAnonymizer.java (added)
+++ directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/api/ldap/model/ldif/anonymizer/TelephoneNumberAnonymizer.java Fri Nov 20 10:24:16 2015
@@ -0,0 +1,131 @@
+/*
+ *   Licensed to the Apache Software Foundation (ASF) under one
+ *   or more contributor license agreements.  See the NOTICE file
+ *   distributed with this work for additional information
+ *   regarding copyright ownership.  The ASF licenses this file
+ *   to you under the Apache License, Version 2.0 (the
+ *   "License"); you may not use this file except in compliance
+ *   with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing,
+ *   software distributed under the License is distributed on an
+ *   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *   KIND, either express or implied.  See the License for the
+ *   specific language governing permissions and limitations
+ *   under the License.
+ *
+ */
+
+package org.apache.directory.api.ldap.model.ldif.anonymizer;
+
+
+import java.util.Map;
+import java.util.Random;
+
+import org.apache.directory.api.ldap.model.entry.Attribute;
+import org.apache.directory.api.ldap.model.entry.DefaultAttribute;
+import org.apache.directory.api.ldap.model.entry.StringValue;
+import org.apache.directory.api.ldap.model.entry.Value;
+import org.apache.directory.api.ldap.model.exception.LdapInvalidAttributeValueException;
+
+
+/**
+ * An anonymizer for the TelephoneNumber attribute. We simply replace the digits by random digits.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class TelephoneNumberAnonymizer extends AbstractAnonymizer<String>
+{
+    /** Create a random generator */
+    Random random = new Random( System.currentTimeMillis() );
+
+
+    /**
+     * Anonymize an attribute using pure random values (either chars of bytes, depending on the Attribute type)
+     */
+    public Attribute anonymize( Map<Value<String>, Value<String>> valueMap, Attribute attribute )
+    {
+        Attribute result = new DefaultAttribute( attribute.getAttributeType() );
+        random.setSeed( System.nanoTime() );
+
+        for ( Value<?> value : attribute )
+        {
+            Value<String> anonymized =  valueMap.get( value );
+            
+            if ( anonymized != null )
+            {
+                try
+                {
+                    result.add( anonymized.getString() );
+                }
+                catch ( LdapInvalidAttributeValueException e )
+                {
+                    // TODO : handle that
+                }
+            }
+            else
+            {
+                if ( value instanceof StringValue )
+                {
+                    String strValue = value.getNormValue().toString();
+                    int length = strValue.length();
+    
+                    // Same size
+                    char[] newValue = new char[length];
+    
+                    for ( int i = 0; i < length; i++ )
+                    {
+                        char c = ( strValue.charAt( i ) );
+                        
+                        if ( Character.isDigit( c ) )
+                        {
+                            newValue[i] = ( char ) ( random.nextInt( '9' - '0' ) + '0' );
+                        }
+                        else
+                        {
+                            newValue[i] = c;
+                        }
+                    }
+    
+                    try
+                    {
+                        String newValueStr = new String( newValue );
+                        result.add( newValueStr );
+                        
+                        Value<String> anonValue = new StringValue( attribute.getAttributeType(), newValueStr );
+                        valueMap.put( ( Value<String> ) value, anonValue );
+                    }
+                    catch ( LdapInvalidAttributeValueException e )
+                    {
+                        // TODO : handle that
+                    }
+                }
+                else
+                {
+                    byte[] byteValue = value.getBytes();
+    
+                    // Same size
+                    byte[] newValue = new byte[byteValue.length];
+    
+                    for ( int i = 0; i < byteValue.length; i++ )
+                    {
+                        newValue[i] = ( byte ) random.nextInt();
+                    }
+    
+                    try
+                    {
+                        result.add( newValue );
+                    }
+                    catch ( LdapInvalidAttributeValueException e )
+                    {
+                        // TODO : handle that
+                    }
+                }
+            }
+        }
+
+        return result;
+    }
+}