diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/configuration/CloudflareTurnConfiguration.java b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/CloudflareTurnConfiguration.java index f4154bac5..10809974a 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/configuration/CloudflareTurnConfiguration.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/CloudflareTurnConfiguration.java @@ -5,6 +5,7 @@ package org.whispersystems.textsecuregcm.configuration; +import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.Valid; import jakarta.validation.constraints.AssertTrue; import jakarta.validation.constraints.NotBlank; @@ -57,6 +58,7 @@ public record CloudflareTurnConfiguration(@NotNull SecretString apiToken, } @AssertTrue + @Schema(hidden = true) public boolean isClientTtlShorterThanRequestedTtl() { return clientCredentialTtl.compareTo(requestedCredentialTtl) <= 0; } diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/entities/AccountAttributes.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/AccountAttributes.java index 04bdcae83..85e3f3d96 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/entities/AccountAttributes.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/entities/AccountAttributes.java @@ -10,6 +10,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.google.common.annotations.VisibleForTesting; +import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.AssertTrue; import jakarta.validation.constraints.Size; import java.util.Optional; @@ -137,6 +138,7 @@ public class AccountAttributes { } @AssertTrue + @Schema(hidden = true) public boolean isEachRegistrationIdValid() { return validRegistrationId(registrationId) && validRegistrationId(phoneNumberIdentityRegistrationId); } diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/entities/ChangeNumberRequest.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/ChangeNumberRequest.java index 789466f28..b4e86399d 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/entities/ChangeNumberRequest.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/entities/ChangeNumberRequest.java @@ -76,6 +76,7 @@ public record ChangeNumberRequest( } @AssertTrue + @Schema(hidden = true) public boolean isEachPniRegistrationIdValid() { return pniRegistrationIds == null || pniRegistrationIds.values().stream().allMatch(RegistrationIdValidator::validRegistrationId); } diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/entities/IncomingMessage.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/IncomingMessage.java index 061dddc97..c3a0acd42 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/entities/IncomingMessage.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/entities/IncomingMessage.java @@ -8,6 +8,7 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.google.protobuf.ByteString; import com.webauthn4j.converter.jackson.deserializer.json.ByteArrayBase64Deserializer; import io.micrometer.core.instrument.Metrics; +import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.AssertTrue; import javax.annotation.Nullable; import jakarta.validation.constraints.NotNull; @@ -69,6 +70,7 @@ public record IncomingMessage(int type, } @AssertTrue + @Schema(hidden = true) public boolean isValidEnvelopeType() { if (type() == MessageProtos.Envelope.Type.SERVER_DELIVERY_RECEIPT_VALUE || MessageProtos.Envelope.Type.forNumber(type()) == null) { diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/entities/IncomingMessageList.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/IncomingMessageList.java index 7af872970..ea08bbbce 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/entities/IncomingMessageList.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/entities/IncomingMessageList.java @@ -10,6 +10,7 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; import io.micrometer.core.instrument.Counter; import io.micrometer.core.instrument.Metrics; +import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.Valid; import jakarta.validation.constraints.AssertTrue; import jakarta.validation.constraints.Max; @@ -46,6 +47,7 @@ public record IncomingMessageList(@NotNull } @AssertTrue + @Schema(hidden = true) public boolean hasNoDuplicateRecipients() { final boolean valid = messages.stream() .filter(Objects::nonNull) diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/entities/KeyTransparencySearchRequest.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/KeyTransparencySearchRequest.java index d22e54569..f767d9e68 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/entities/KeyTransparencySearchRequest.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/entities/KeyTransparencySearchRequest.java @@ -54,6 +54,7 @@ public record KeyTransparencySearchRequest( @Positive long distinguishedTreeHeadSize ) { @AssertTrue + @Schema(hidden = true) public boolean isUnidentifiedAccessKeyProvidedWithE164() { return unidentifiedAccessKey.isPresent() == e164.isPresent(); } diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/entities/LinkDeviceRequest.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/LinkDeviceRequest.java index 85c281087..a35d6eb51 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/entities/LinkDeviceRequest.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/entities/LinkDeviceRequest.java @@ -42,6 +42,7 @@ public record LinkDeviceRequest(@Schema(requiredMode = Schema.RequiredMode.REQUI } @AssertTrue + @Schema(hidden = true) public boolean hasExactlyOneMessageDeliveryChannel() { if (accountAttributes.getFetchesMessages()) { return deviceActivationRequest().apnToken().isEmpty() && deviceActivationRequest().gcmToken().isEmpty(); diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/entities/PhoneVerificationRequest.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/PhoneVerificationRequest.java index 2c53f8f4b..b005059b0 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/entities/PhoneVerificationRequest.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/entities/PhoneVerificationRequest.java @@ -7,6 +7,7 @@ package org.whispersystems.textsecuregcm.entities; import static org.apache.commons.lang3.StringUtils.isNotBlank; +import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.AssertTrue; import jakarta.ws.rs.ClientErrorException; import java.util.Base64; @@ -25,6 +26,7 @@ public interface PhoneVerificationRequest { // for the @AssertTrue to work with bean validation, method name must follow 'isSmth()'/'getSmth()' naming convention @AssertTrue + @Schema(hidden = true) default boolean isValid() { // checking that exactly one of sessionId/recoveryPassword is non-empty return isNotBlank(sessionId()) ^ (recoveryPassword() != null && recoveryPassword().length > 0); diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/entities/RegistrationRequest.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/RegistrationRequest.java index 677dfd4d2..705b125cd 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/entities/RegistrationRequest.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/entities/RegistrationRequest.java @@ -111,6 +111,7 @@ public record RegistrationRequest(@Schema(requiredMode = Schema.RequiredMode.NOT @VisibleForTesting @AssertTrue + @Schema(hidden = true) boolean hasExactlyOneMessageDeliveryChannel() { if (accountAttributes.getFetchesMessages()) { return deviceActivationRequest().apnToken().isEmpty() && deviceActivationRequest().gcmToken().isEmpty(); diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/limits/RateLimiterConfig.java b/service/src/main/java/org/whispersystems/textsecuregcm/limits/RateLimiterConfig.java index 703416df6..15e4e5919 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/limits/RateLimiterConfig.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/limits/RateLimiterConfig.java @@ -5,6 +5,7 @@ package org.whispersystems.textsecuregcm.limits; +import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.AssertTrue; import java.time.Duration; @@ -15,6 +16,7 @@ public record RateLimiterConfig(int bucketSize, Duration permitRegenerationDurat } @AssertTrue + @Schema(hidden = true) public boolean hasPositiveRegenerationRate() { try { return permitRegenerationDuration.toNanos() > 0;