diff --git a/users/views.py b/users/views.py index 33b7cf79..7cc8fa10 100644 --- a/users/views.py +++ b/users/views.py @@ -5,6 +5,7 @@ from urllib.parse import urlencode, urlparse import requests +import sentry_sdk from django.conf import settings from django.contrib.auth.hashers import check_password from django.contrib.auth.password_validation import validate_password @@ -928,7 +929,8 @@ def report_integrity(request): request_id=request_id, device_id=device_id, ) - except DuplicateSampleRequestError: + except DuplicateSampleRequestError as e: + sentry_sdk.capture_exception(e) return JsonResponse({"result_code": None}, status=200) except HttpError: return JsonResponse({"result_code": None}, status=500) diff --git a/utils/app_integrity/google_play_integrity.py b/utils/app_integrity/google_play_integrity.py index 28426fa0..5720d383 100644 --- a/utils/app_integrity/google_play_integrity.py +++ b/utils/app_integrity/google_play_integrity.py @@ -150,14 +150,19 @@ def log_sample_request(self, request_id: str, device_id: str): and passed_account_details_check ) - return DeviceIntegritySample.objects.create( + sample, created = DeviceIntegritySample.objects.get_or_create( request_id=request_id, - device_id=device_id, - is_demo_user=self.is_demo_user, - google_verdict=raw_verdict, - passed=check_passed, - passed_request_check=passed_request_check, - passed_app_integrity_check=passed_app_integrity_check, - passed_device_integrity_check=passed_device_integrity_check, - passed_account_details_check=passed_account_details_check, + defaults={ + "device_id": device_id, + "is_demo_user": self.is_demo_user, + "google_verdict": raw_verdict, + "passed": check_passed, + "passed_request_check": passed_request_check, + "passed_app_integrity_check": passed_app_integrity_check, + "passed_device_integrity_check": passed_device_integrity_check, + "passed_account_details_check": passed_account_details_check, + }, ) + if not created: + raise DuplicateSampleRequestError("Duplicate sample request") + return sample