mirror of
https://github.com/signalapp/Signal-Server
synced 2026-04-20 17:58:03 +01:00
Add tests and metrics for parsing invalid keys
This commit is contained in:
committed by
Jon Chambers
parent
106d5e54c7
commit
29ef3f0b41
@@ -6,10 +6,16 @@ import com.fasterxml.jackson.databind.DeserializationContext;
|
||||
import com.fasterxml.jackson.databind.JsonDeserializer;
|
||||
import java.io.IOException;
|
||||
import java.util.Base64;
|
||||
import io.micrometer.core.instrument.Metrics;
|
||||
import org.signal.libsignal.protocol.InvalidKeyException;
|
||||
import org.whispersystems.textsecuregcm.metrics.MetricsUtil;
|
||||
|
||||
abstract class AbstractPublicKeyDeserializer<K> extends JsonDeserializer<K> {
|
||||
|
||||
private final String invalidKeyCounterName = MetricsUtil.name(getClass(), "invalidKey");
|
||||
|
||||
private static final String REASON_TAG_NAME = "reason";
|
||||
|
||||
@Override
|
||||
public K deserialize(final JsonParser parser, final DeserializationContext context) throws IOException {
|
||||
final byte[] publicKeyBytes;
|
||||
@@ -17,6 +23,7 @@ abstract class AbstractPublicKeyDeserializer<K> extends JsonDeserializer<K> {
|
||||
try {
|
||||
publicKeyBytes = Base64.getDecoder().decode(parser.getValueAsString());
|
||||
} catch (final IllegalArgumentException e) {
|
||||
Metrics.counter(invalidKeyCounterName, REASON_TAG_NAME, "illegal-base64").increment();
|
||||
throw new JsonParseException(parser, "Could not parse public key as a base64-encoded value", e);
|
||||
}
|
||||
|
||||
@@ -27,6 +34,7 @@ abstract class AbstractPublicKeyDeserializer<K> extends JsonDeserializer<K> {
|
||||
try {
|
||||
return deserializePublicKey(publicKeyBytes);
|
||||
} catch (final InvalidKeyException e) {
|
||||
Metrics.counter(invalidKeyCounterName, REASON_TAG_NAME, "invalid-key").increment();
|
||||
throw new JsonParseException(parser, "Could not interpret key bytes as a public key", e);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user