Count profile data that cannot be parsed as base64
This commit is contained in:
parent
a953cb33b7
commit
58fd9ddb27
|
@ -8,9 +8,11 @@ package org.whispersystems.textsecuregcm.storage;
|
||||||
import static org.whispersystems.textsecuregcm.metrics.MetricsUtil.name;
|
import static org.whispersystems.textsecuregcm.metrics.MetricsUtil.name;
|
||||||
|
|
||||||
import com.google.common.annotations.VisibleForTesting;
|
import com.google.common.annotations.VisibleForTesting;
|
||||||
|
import io.micrometer.core.instrument.Counter;
|
||||||
import io.micrometer.core.instrument.Metrics;
|
import io.micrometer.core.instrument.Metrics;
|
||||||
import io.micrometer.core.instrument.Timer;
|
import io.micrometer.core.instrument.Timer;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Base64;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
@ -76,6 +78,12 @@ public class Profiles {
|
||||||
private static final Timer GET_PROFILE_TIMER = Metrics.timer(name(Profiles.class, "get"));
|
private static final Timer GET_PROFILE_TIMER = Metrics.timer(name(Profiles.class, "get"));
|
||||||
private static final Timer DELETE_PROFILES_TIMER = Metrics.timer(name(Profiles.class, "delete"));
|
private static final Timer DELETE_PROFILES_TIMER = Metrics.timer(name(Profiles.class, "delete"));
|
||||||
|
|
||||||
|
private static final Counter INVALID_NAME_COUNTER = Metrics.counter(name(Profiles.class, "invalidProfileData"), "field", "name");
|
||||||
|
private static final Counter INVALID_EMOJI_COUNTER = Metrics.counter(name(Profiles.class, "invalidProfileData"), "field", "emoji");
|
||||||
|
private static final Counter INVALID_ABOUT_COUNTER = Metrics.counter(name(Profiles.class, "invalidProfileData"), "field", "about");
|
||||||
|
private static final Counter INVALID_PAYMENT_ADDRESS_COUNTER = Metrics.counter(name(Profiles.class, "invalidProfileData"), "field", "paymentAddress");
|
||||||
|
|
||||||
|
|
||||||
public Profiles(final DynamoDbClient dynamoDbClient,
|
public Profiles(final DynamoDbClient dynamoDbClient,
|
||||||
final DynamoDbAsyncClient dynamoDbAsyncClient,
|
final DynamoDbAsyncClient dynamoDbAsyncClient,
|
||||||
final String tableName) {
|
final String tableName) {
|
||||||
|
@ -224,16 +232,36 @@ public class Profiles {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static VersionedProfile fromItem(final Map<String, AttributeValue> item) {
|
private static VersionedProfile fromItem(final Map<String, AttributeValue> item) {
|
||||||
|
final String name = AttributeValues.getString(item, ATTR_NAME, null);
|
||||||
|
final String emoji = AttributeValues.getString(item, ATTR_EMOJI, null);
|
||||||
|
final String about = AttributeValues.getString(item, ATTR_ABOUT, null);
|
||||||
|
final String paymentAddress = AttributeValues.getString(item, ATTR_PAYMENT_ADDRESS, null);
|
||||||
|
|
||||||
|
checkValidBase64(name, INVALID_NAME_COUNTER);
|
||||||
|
checkValidBase64(emoji, INVALID_EMOJI_COUNTER);
|
||||||
|
checkValidBase64(about, INVALID_ABOUT_COUNTER);
|
||||||
|
checkValidBase64(paymentAddress, INVALID_PAYMENT_ADDRESS_COUNTER);
|
||||||
|
|
||||||
return new VersionedProfile(
|
return new VersionedProfile(
|
||||||
AttributeValues.getString(item, ATTR_VERSION, null),
|
AttributeValues.getString(item, ATTR_VERSION, null),
|
||||||
AttributeValues.getString(item, ATTR_NAME, null),
|
name,
|
||||||
AttributeValues.getString(item, ATTR_AVATAR, null),
|
AttributeValues.getString(item, ATTR_AVATAR, null),
|
||||||
AttributeValues.getString(item, ATTR_EMOJI, null),
|
emoji,
|
||||||
AttributeValues.getString(item, ATTR_ABOUT, null),
|
about,
|
||||||
AttributeValues.getString(item, ATTR_PAYMENT_ADDRESS, null),
|
paymentAddress,
|
||||||
AttributeValues.getByteArray(item, ATTR_COMMITMENT, null));
|
AttributeValues.getByteArray(item, ATTR_COMMITMENT, null));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void checkValidBase64(final String value, final Counter counter) {
|
||||||
|
if (StringUtils.isNotBlank(value)) {
|
||||||
|
try {
|
||||||
|
Base64.getDecoder().decode(value);
|
||||||
|
} catch (final IllegalArgumentException e) {
|
||||||
|
counter.increment();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void deleteAll(final UUID uuid) {
|
public void deleteAll(final UUID uuid) {
|
||||||
DELETE_PROFILES_TIMER.record(() -> {
|
DELETE_PROFILES_TIMER.record(() -> {
|
||||||
final AttributeValue uuidAttributeValue = AttributeValues.fromUUID(uuid);
|
final AttributeValue uuidAttributeValue = AttributeValues.fromUUID(uuid);
|
||||||
|
|
Loading…
Reference in New Issue