Don't crash on concurrent consent given

If a user gave consent to sharing community auth data in two parallel
sessions, one of them would crash with a unique violation. To avoid
that, use the django function for get_or_create(), and just throw away
the results if it turned out to be a get.
This commit is contained in:
Magnus Hagander
2018-06-08 12:45:52 +02:00
parent b47c801958
commit c9c4ce728e

View File

@ -543,7 +543,9 @@ def communityauth_consent(request, siteid):
if request.method == 'POST':
form = CommunityAuthConsentForm(org.orgname, data=request.POST)
if form.is_valid():
CommunityAuthConsent(user=request.user, org=org, consentgiven=datetime.now()).save()
CommunityAuthConsent.objects.get_or_create(user=request.user, org=org,
defaults={'consentgiven':datetime.now()},
)
return HttpResponseRedirect(form.cleaned_data['next'])
else:
form = CommunityAuthConsentForm(org.orgname, initial={'next': request.GET['next']})