def validate_master_vault_url(value): master_vault_id = Deck.get_id_from_master_vault_url(value) try: master_vault_id = uuid.UUID(master_vault_id) except ValueError: raise(ValidationError( _('Master vault link is invalid'), code='invalid' ))
def add(request): error_messages = [] # Must have all info filled out before registering a field user_can_register_decks = request.user.profile.is_complete() # Can't register too many decks max_uploads_in_day = settings.MAX_UPLOADS_PER_DAY twenty_four_hours_ago = datetime.datetime.now() - datetime.timedelta( hours=24) my_uploads_today = DeckRegistration.objects.filter( user=request.user, created_on__gte=twenty_four_hours_ago) user_hit_register_rate_limit = len( my_uploads_today) > max_uploads_in_day - 1 if request.method == 'POST': form = RegiseterNewDeckForm(request.POST, request.FILES) signed_nonce = SignedNonce.from_post(request.POST) if not signed_nonce.is_valid(): error_messages.append( 'This registration code has expired. Please use submit a new registration using the code below.' ) elif form.is_valid(): # Process the form... master_vault_url = form.cleaned_data['master_vault_link'] master_vault_id = Deck.get_id_from_master_vault_url( master_vault_url) deck, created = Deck.objects.get_or_create(id=master_vault_id) if created: r = get(deck.get_master_vault_api_url()) deck.name = r.json()['data']['name'] deck.save() else: # Only allow the user to have one pending registartion per deck old_registrations = DeckRegistration.objects.filter( user=request.user, deck=deck, status=DeckRegistration.Status.PENDING).update( is_archived=True) registration = DeckRegistration() registration.user = request.user registration.deck = deck registration.verification_code = signed_nonce.nonce try: registration.verification_photo_url = save_verification_photo( request, form, deck) registration.save() email = NewDeckRegistrationSubmittedEmail(registration) email.send() return HttpResponseRedirect( reverse('register-detail', kwargs={'pk': registration.id})) except ClientError: error_messages.append("Oops! Let's try that again") else: form = RegiseterNewDeckForm() return render( request, 'register/page-new.html', { 'form': form, 'signed_nonce': SignedNonce.create(), 'user_can_register_decks': user_can_register_decks, 'user_hit_register_rate_limit': user_hit_register_rate_limit, 'error_messages': error_messages })