Add metrics for recaptcha reasons
This commit is contained in:
		
							parent
							
								
									c14621a09f
								
							
						
					
					
						commit
						a4a666bb80
					
				| 
						 | 
					@ -14,6 +14,7 @@ import com.google.cloud.recaptchaenterprise.v1.RecaptchaEnterpriseServiceSetting
 | 
				
			||||||
import com.google.common.annotations.VisibleForTesting;
 | 
					import com.google.common.annotations.VisibleForTesting;
 | 
				
			||||||
import com.google.recaptchaenterprise.v1.Assessment;
 | 
					import com.google.recaptchaenterprise.v1.Assessment;
 | 
				
			||||||
import com.google.recaptchaenterprise.v1.Event;
 | 
					import com.google.recaptchaenterprise.v1.Event;
 | 
				
			||||||
 | 
					import com.google.recaptchaenterprise.v1.RiskAnalysis;
 | 
				
			||||||
import io.micrometer.core.instrument.Metrics;
 | 
					import io.micrometer.core.instrument.Metrics;
 | 
				
			||||||
import java.io.ByteArrayInputStream;
 | 
					import java.io.ByteArrayInputStream;
 | 
				
			||||||
import java.io.IOException;
 | 
					import java.io.IOException;
 | 
				
			||||||
| 
						 | 
					@ -33,6 +34,9 @@ public class RecaptchaClient {
 | 
				
			||||||
  static final String V2_PREFIX = "signal-recaptcha-v2" + RecaptchaClient.SEPARATOR;
 | 
					  static final String V2_PREFIX = "signal-recaptcha-v2" + RecaptchaClient.SEPARATOR;
 | 
				
			||||||
  private static final String ASSESSMENTS_COUNTER_NAME = name(RecaptchaClient.class, "assessments");
 | 
					  private static final String ASSESSMENTS_COUNTER_NAME = name(RecaptchaClient.class, "assessments");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private static final String INVALID_REASON_COUNTER_NAME = name(RecaptchaClient.class, "invalidReason");
 | 
				
			||||||
 | 
					  private static final String ASSESSMENT_REASON_COUNTER_NAME = name(RecaptchaClient.class, "assessmentReason");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private final String projectPath;
 | 
					  private final String projectPath;
 | 
				
			||||||
  private final RecaptchaEnterpriseServiceClient client;
 | 
					  private final RecaptchaEnterpriseServiceClient client;
 | 
				
			||||||
  private final DynamicConfigurationManager<DynamicConfiguration> dynamicConfigurationManager;
 | 
					  private final DynamicConfigurationManager<DynamicConfiguration> dynamicConfigurationManager;
 | 
				
			||||||
| 
						 | 
					@ -89,6 +93,14 @@ public class RecaptchaClient {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /*
 | 
				
			||||||
 | 
					   * recaptcha enterprise scores are from [0.0, 1.0] in increments of .1
 | 
				
			||||||
 | 
					   * map to [0, 100] for easier interpretation
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  private static String scoreString(final float score) {
 | 
				
			||||||
 | 
					    return Integer.toString((int) score * 100);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  public AssessmentResult verify(final String input, final String ip) {
 | 
					  public AssessmentResult verify(final String input, final String ip) {
 | 
				
			||||||
    final String[] parts = parseInputToken(input);
 | 
					    final String[] parts = parseInputToken(input);
 | 
				
			||||||
| 
						 | 
					@ -114,13 +126,23 @@ public class RecaptchaClient {
 | 
				
			||||||
            "valid", String.valueOf(assessment.getTokenProperties().getValid()))
 | 
					            "valid", String.valueOf(assessment.getTokenProperties().getValid()))
 | 
				
			||||||
        .increment();
 | 
					        .increment();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (assessment.getTokenProperties().getValid()) {
 | 
					    if (assessment.getTokenProperties().getValid()) {
 | 
				
			||||||
 | 
					      for (RiskAnalysis.ClassificationReason reason : assessment.getRiskAnalysis().getReasonsList()) {
 | 
				
			||||||
 | 
					        Metrics.counter(ASSESSMENT_REASON_COUNTER_NAME,
 | 
				
			||||||
 | 
					            "action", String.valueOf(expectedAction),
 | 
				
			||||||
 | 
					            "score", scoreString(assessment.getRiskAnalysis().getScore()),
 | 
				
			||||||
 | 
					            "reason", reason.name());
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
      final float score = assessment.getRiskAnalysis().getScore();
 | 
					      final float score = assessment.getRiskAnalysis().getScore();
 | 
				
			||||||
      return new AssessmentResult(
 | 
					      return new AssessmentResult(
 | 
				
			||||||
          score >=
 | 
					          score >=
 | 
				
			||||||
              dynamicConfigurationManager.getConfiguration().getCaptchaConfiguration().getScoreFloor().floatValue(),
 | 
					              dynamicConfigurationManager.getConfiguration().getCaptchaConfiguration().getScoreFloor().floatValue(),
 | 
				
			||||||
          Integer.toString((int) score));
 | 
					          scoreString(score));
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
 | 
					      Metrics.counter(INVALID_REASON_COUNTER_NAME,
 | 
				
			||||||
 | 
					          "action", String.valueOf(expectedAction),
 | 
				
			||||||
 | 
					          "reason", assessment.getTokenProperties().getInvalidReason().name());
 | 
				
			||||||
      return AssessmentResult.invalid();
 | 
					      return AssessmentResult.invalid();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue