Skip to content

Commit

Permalink
Put some validation on to profile version strings
Browse files Browse the repository at this point in the history
Co-authored-by: Jon Chambers <[email protected]>
  • Loading branch information
ravi-signal and jon-signal authored Jan 26, 2024
1 parent ca05df5 commit 36e7772
Show file tree
Hide file tree
Showing 3 changed files with 156 additions and 65 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import org.signal.libsignal.zkgroup.profiles.ProfileKeyCommitment;
import org.whispersystems.textsecuregcm.util.ByteArrayBase64WithPaddingAdapter;
import org.whispersystems.textsecuregcm.util.ExactlySize;
import org.whispersystems.textsecuregcm.util.ValidHexString;

public record CreateProfileRequest(
@JsonProperty
Expand All @@ -25,6 +26,8 @@ public record CreateProfileRequest(

@JsonProperty
@NotEmpty
@ValidHexString
@ExactlySize({64})
String version,

@JsonProperty
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
/*
* Copyright 2024 Signal Messenger, LLC
* SPDX-License-Identifier: AGPL-3.0-only
*/

package org.whispersystems.textsecuregcm.util;

import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import java.util.HexFormat;
import java.util.Objects;
import javax.validation.Constraint;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import javax.validation.Payload;

/**
* Constraint annotation that requires annotated entity is a valid hex encoded string.
*/
@Target({ FIELD, PARAMETER, METHOD })
@Retention(RUNTIME)
@Constraint(validatedBy = ValidHexString.Validator.class)
@Documented
public @interface ValidHexString {

String message() default "value is not a valid hex string";

Class<?>[] groups() default { };

Class<? extends Payload>[] payload() default { };

class Validator implements ConstraintValidator<ValidHexString, String> {

@Override
public boolean isValid(final String value, final ConstraintValidatorContext context) {
if (Objects.isNull(value)) {
return true;
}
try {
HexFormat.of().parseHex(value);
return true;
} catch (IllegalArgumentException e) {
return false;
}
}
}
}
Loading

0 comments on commit 36e7772

Please sign in to comment.