mirror of
https://github.com/signalapp/Signal-Server
synced 2026-04-19 16:09:02 +01:00
Perform basic input validation on call quality survey responses
This commit is contained in:
committed by
Jon Chambers
parent
aa2f9e5a65
commit
c72458b47a
@@ -66,11 +66,15 @@ public class CallQualitySurveyController {
|
||||
try {
|
||||
submitCallQualitySurveyRequest = SubmitCallQualitySurveyRequest.parseFrom(surveyResponse);
|
||||
} catch (final InvalidProtocolBufferException e) {
|
||||
throw new WebApplicationException(422);
|
||||
throw new WebApplicationException("Invalid protobuf entity", 422);
|
||||
}
|
||||
|
||||
final String remoteAddress = (String) requestContext.getProperty(RemoteAddressFilter.REMOTE_ADDRESS_ATTRIBUTE_NAME);
|
||||
|
||||
callQualitySurveyManager.submitCallQualitySurvey(submitCallQualitySurveyRequest, remoteAddress, userAgentString);
|
||||
try {
|
||||
callQualitySurveyManager.submitCallQualitySurvey(submitCallQualitySurveyRequest, remoteAddress, userAgentString);
|
||||
} catch (final IllegalArgumentException e) {
|
||||
throw new WebApplicationException(e.getMessage(), 422);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
|
||||
package org.whispersystems.textsecuregcm.grpc;
|
||||
|
||||
import io.grpc.Status;
|
||||
import io.grpc.StatusRuntimeException;
|
||||
import org.signal.chat.calling.quality.SimpleCallQualityGrpc;
|
||||
import org.signal.chat.calling.quality.SubmitCallQualitySurveyRequest;
|
||||
import org.signal.chat.calling.quality.SubmitCallQualitySurveyResponse;
|
||||
@@ -32,9 +34,13 @@ public class CallQualitySurveyGrpcService extends SimpleCallQualityGrpc.CallQual
|
||||
|
||||
rateLimiters.getSubmitCallQualitySurveyLimiter().validate(remoteAddress);
|
||||
|
||||
callQualitySurveyManager.submitCallQualitySurvey(request,
|
||||
remoteAddress,
|
||||
RequestAttributesUtil.getUserAgent().orElse(null));
|
||||
try {
|
||||
callQualitySurveyManager.submitCallQualitySurvey(request,
|
||||
remoteAddress,
|
||||
RequestAttributesUtil.getUserAgent().orElse(null));
|
||||
} catch (final IllegalArgumentException e) {
|
||||
throw Status.INVALID_ARGUMENT.withDescription(e.getMessage()).asRuntimeException();
|
||||
}
|
||||
|
||||
return SubmitCallQualitySurveyResponse.getDefaultInstance();
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
package org.whispersystems.textsecuregcm.metrics;
|
||||
|
||||
import com.google.cloud.pubsub.v1.PublisherInterface;
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import com.google.pubsub.v1.PubsubMessage;
|
||||
import io.micrometer.core.instrument.Metrics;
|
||||
import java.time.Clock;
|
||||
@@ -147,4 +148,23 @@ public class CallQualitySurveyManager {
|
||||
.increment();
|
||||
});
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
static void validateRequest(final SubmitCallQualitySurveyRequest request) {
|
||||
if (request.getStartTimestamp() == 0) {
|
||||
throw new IllegalArgumentException("Start timestamp not specified");
|
||||
}
|
||||
|
||||
if (request.getEndTimestamp() == 0) {
|
||||
throw new IllegalArgumentException("End timestamp not specified");
|
||||
}
|
||||
|
||||
if (StringUtils.isBlank(request.getCallType())) {
|
||||
throw new IllegalArgumentException("Call type not specified");
|
||||
}
|
||||
|
||||
if (StringUtils.isBlank(request.getCallEndReason())) {
|
||||
throw new IllegalArgumentException("Call end reason not specified");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user