Skip to content

Commit 5980740

Browse files
authored
Allowing for using own implementation of Random in anonymization services (#282)
* Allowing for using own implementation of Random in anonymization services. * Adding random to the constructors. * Cleaning up unused imports.
1 parent 937ff43 commit 5980740

34 files changed

+502
-304
lines changed

src/main/java/ai/philterd/phileas/services/FilterPolicyLoader.java

Lines changed: 47 additions & 33 deletions
Large diffs are not rendered by default.

src/main/java/ai/philterd/phileas/services/anonymization/AbstractAnonymizationService.java

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,52 @@
1616
package ai.philterd.phileas.services.anonymization;
1717

1818
import ai.philterd.phileas.services.context.ContextService;
19+
import org.apache.commons.text.RandomStringGenerator;
20+
21+
import java.security.SecureRandom;
22+
import java.util.Random;
1923

2024
public abstract class AbstractAnonymizationService implements AnonymizationService {
2125

22-
protected final ContextService contextService;
26+
protected ContextService contextService;
27+
protected Random random;
2328

2429
public AbstractAnonymizationService(final ContextService contextService) {
2530
this.contextService = contextService;
31+
this.random = new SecureRandom();
32+
}
33+
34+
protected AbstractAnonymizationService(final ContextService contextService, final Random random) {
35+
this.contextService = contextService;
36+
this.random = random;
37+
}
38+
39+
protected int generateInteger(final int min, final int max) {
40+
return random.nextInt((max - min) + 1) + min;
41+
}
42+
43+
protected String generateNumeric(final int length) {
44+
45+
final RandomStringGenerator randomStringGenerator = new RandomStringGenerator.Builder()
46+
.withinRange('0', '0')
47+
.filteredBy(Character::isDigit)
48+
.usingRandom(random::nextInt)
49+
.get();
50+
51+
return randomStringGenerator.generate(length);
52+
53+
}
54+
55+
protected String generateAlphanumeric(final int length) {
56+
57+
final RandomStringGenerator randomStringGenerator = new RandomStringGenerator.Builder()
58+
.withinRange('0', 'z')
59+
.filteredBy(Character::isLetterOrDigit)
60+
.usingRandom(random::nextInt)
61+
.get();
62+
63+
return randomStringGenerator.generate(length);
64+
2665
}
2766

2867
}

src/main/java/ai/philterd/phileas/services/anonymization/AgeAnonymizationService.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,10 @@
2222

2323
public class AgeAnonymizationService extends AbstractAnonymizationService {
2424

25-
private final Random random;
25+
public AgeAnonymizationService(final ContextService contextService, final Random random) {
26+
super(contextService);
27+
this.random = random;
28+
}
2629

2730
public AgeAnonymizationService(final ContextService contextService) {
2831
super(contextService);

src/main/java/ai/philterd/phileas/services/anonymization/AlphanumericAnonymizationService.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,17 @@
1818
import ai.philterd.phileas.services.context.ContextService;
1919
import org.apache.commons.lang3.RandomStringUtils;
2020

21-
import java.security.SecureRandom;
2221
import java.util.Random;
2322

2423
public class AlphanumericAnonymizationService extends AbstractAnonymizationService {
2524

26-
private final Random random;
25+
public AlphanumericAnonymizationService(final ContextService contextService, final Random random) {
26+
super(contextService);
27+
this.random = random;
28+
}
2729

2830
public AlphanumericAnonymizationService(final ContextService contextService) {
2931
super(contextService);
30-
this.random = new SecureRandom();
3132
}
3233

3334
@Override

src/main/java/ai/philterd/phileas/services/anonymization/BitcoinAddressAnonymizationService.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,15 @@
1616
package ai.philterd.phileas.services.anonymization;
1717

1818
import ai.philterd.phileas.services.context.ContextService;
19-
import org.apache.commons.lang3.RandomStringUtils;
19+
20+
import java.util.Random;
2021

2122
public class BitcoinAddressAnonymizationService extends AbstractAnonymizationService {
2223

24+
public BitcoinAddressAnonymizationService(final ContextService contextService, final Random random) {
25+
super(contextService, random);
26+
}
27+
2328
public BitcoinAddressAnonymizationService(final ContextService contextService) {
2429
super(contextService);
2530
}
@@ -32,8 +37,7 @@ public ContextService getContextService() {
3237
@Override
3338
public String anonymize(String token) {
3439

35-
// See PHL-117: Just generating a random alphanumeric string.
36-
return RandomStringUtils.secure().nextAlphanumeric(32);
40+
return generateAlphanumeric(32);
3741

3842
}
3943

src/main/java/ai/philterd/phileas/services/anonymization/CityAnonymizationService.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,23 @@
1515
*/
1616
package ai.philterd.phileas.services.anonymization;
1717

18-
import ai.philterd.phileas.services.context.ContextService;
1918
import ai.philterd.phileas.services.anonymization.faker.Faker;
19+
import ai.philterd.phileas.services.context.ContextService;
20+
21+
import java.util.Random;
2022

2123
public class CityAnonymizationService extends AbstractAnonymizationService {
2224

2325
private final transient Faker faker;
2426

27+
public CityAnonymizationService(final ContextService contextService, final Random random) {
28+
super(contextService, random);
29+
this.faker = new Faker(random);
30+
}
31+
2532
public CityAnonymizationService(final ContextService contextService) {
2633
super(contextService);
27-
this.faker = new Faker();
34+
this.faker = new Faker(random);
2835
}
2936

3037
@Override
@@ -33,8 +40,10 @@ public ContextService getContextService() {
3340
}
3441

3542
@Override
36-
public String anonymize(String token) {
43+
public String anonymize(final String token) {
44+
3745
return faker.address().cityName();
46+
3847
}
3948

4049
}

0 commit comments

Comments
 (0)