Exemplo n.º 1
0
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'
        ))
Exemplo n.º 2
0
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
        })