Exemplo n.º 1
0
    def test_template_unsupported(self):
        """A lot of options are not compatible with SendBulkTemplatedEmail"""
        message = AnymailMessage(template_id="welcome_template",
                                 to=['*****@*****.**'])

        message.subject = "nope, can't change template subject"
        with self.assertRaisesMessage(AnymailUnsupportedFeature,
                                      "overriding template subject"):
            message.send()
        message.subject = None

        message.body = "nope, can't change text body"
        with self.assertRaisesMessage(AnymailUnsupportedFeature,
                                      "overriding template body content"):
            message.send()
        message.content_subtype = "html"
        with self.assertRaisesMessage(AnymailUnsupportedFeature,
                                      "overriding template body content"):
            message.send()
        message.body = None

        message.attach("attachment.txt", "this is an attachment", "text/plain")
        with self.assertRaisesMessage(AnymailUnsupportedFeature,
                                      "attachments with template"):
            message.send()
        message.attachments = []

        message.extra_headers = {"X-Custom": "header"}
        with self.assertRaisesMessage(AnymailUnsupportedFeature,
                                      "extra_headers with template"):
            message.send()
        message.extra_headers = {}

        message.metadata = {"meta": "data"}
        with self.assertRaisesMessage(AnymailUnsupportedFeature,
                                      "metadata with template"):
            message.send()
        message.metadata = None

        message.tags = ["tag 1", "tag 2"]
        with self.assertRaisesMessage(AnymailUnsupportedFeature,
                                      "tags with template"):
            message.send()
        message.tags = None
Exemplo n.º 2
0
def password_reset_prelim(request):
    if request.method == 'POST':
        _password_reset_prelim_form = PasswordResetPrelimForm(request.POST)

        if _password_reset_prelim_form.is_valid():
            _email = _password_reset_prelim_form.cleaned_data.get('email')

            _user = get_user_model()

            if _user.objects.user_exists(_email):
                _timedSigner = TimestampSigner()
                _signed_email = _timedSigner.sign(_email)

                _message = AnymailMessage(to=[_email], tags=['Account'])
                _message.template_id = 'a4753e4f-f898-4a97-8ca1-a52ef8cc7aeb'
                _message.merge_global_data = {
                    'signed_email': _signed_email,
                }
                _message.metadata = {'signed-email': _signed_email}
                _message.track_clicks = True

                _message.send()

                return redirect('accounts:password-reset-prelim-success')

            else:
                _password_reset_prelim_form.add_error(
                    None,
                    mark_safe(
                        'This email is not registered with us. Do you want to <a href="'
                        + reverse('accounts:signup-prelim') +
                        '">signup</a> instead?'))
                return render(request, 'accounts/password_reset_prelim.html', {
                    'password_reset_prelim_form':
                    _password_reset_prelim_form,
                })

        else:
            return render(
                request, 'accounts/password_reset_prelim.html', {
                    'password_reset_prelim_form': _password_reset_prelim_form,
                })

    else:
        auth.logout(request)
        _password_reset_prelim_form = PasswordResetPrelimForm()
        return render(
            request, 'accounts/password_reset_prelim.html', {
                'password_reset_prelim_form': _password_reset_prelim_form,
            })
Exemplo n.º 3
0
def signup_prelim(request):
    if request.method == 'POST':
        _signup_form = SignupPrelimForm(request.POST)

        if _signup_form.is_valid():
            _email = _signup_form.cleaned_data.get('email')

            _user = get_user_model()

            if _user.objects.user_exists(_email):
                _signup_form.add_error(
                    None,
                    mark_safe(
                        'This email you entered is already registered with us. Do you want to <a href="'
                        + reverse('accounts:login') + '">login</a> instead?'))
                return render(request, 'accounts/signup_prelim.html',
                              {'signup_form': _signup_form})

            else:
                _timedSigner = TimestampSigner()
                _signed_email = _timedSigner.sign(_email)

                _message = AnymailMessage(to=[_email], tags=['Onboarding'])
                _message.template_id = '4865e7c4-3b5a-498d-8487-c7a3ea593085'
                _message.merge_global_data = {
                    'signed_email': _signed_email,
                }
                _message.metadata = {'signed-email': _signed_email}
                _message.track_clicks = True

                _message.send()

                return redirect('accounts:signup-prelim-success')

        else:
            return render(request, 'accounts/signup_prelim.html',
                          {'signup_form': _signup_form})

    else:
        _signup_form = SignupPrelimForm()
        return render(request, 'accounts/signup_prelim.html',
                      {'signup_form': _signup_form})
Exemplo n.º 4
0
def update(request):
    if request.method == 'POST':
        _param_errors = []
        _send_success_email = False
        _send_cancel_email = False

        if 'merchant' not in request.POST or request.POST.get('merchant') != env('COINPAYMENTS_MERCHANT_ID'):
            _param_errors.append('merchant')

        if not _param_errors:
            if request.POST.get('ipn_type') == 'api':
                _txn_id = request.POST.get('txn_id')
                _status = int(request.POST.get('status'))
                _status_text = request.POST.get('status_text')
                _email = request.POST.get('email')

                try:
                    with transaction.atomic():
                        _order = TokenOrders.objects.order_from_txn(txn_id=_txn_id).get()
                        _order.payment_status = _status
                        _order.payment_status_text = _status_text

                        if _status >= 1:
                            if not _order.tokens_credited:
                                _transaction = TokenTransactions(
                                    token_transaction_external_id=token_urlsafe(32),
                                    customer_external_id=_order.customer_external_id,
                                    transaction_type='Deposit',
                                    token_value=_order.token_value,
                                )

                                _transaction.save()
                                _send_success_email = True

                            _order.payment_received = True
                            _order.tokens_credited = True

                        elif _status == -1:
                            _send_cancel_email = True

                        _order.save()

                        if _send_success_email:
                            _message = AnymailMessage(
                                to=[_email],
                                tags=['Orders']
                            )
                            _message.template_id = 'a33525c2-8c99-4f8e-b7cd-b943e874c318'
                            _message.merge_global_data = {
                                'token_value': ' '.join([str("{:,.2f}".format(float(_order.token_value))), 'XTV']),
                            }
                            _message.metadata = {'payment-address': _order.payment_address}
                            _message.track_clicks = True

                            _message.send()

                        elif _send_cancel_email:
                            _message = AnymailMessage(
                                to=[_email],
                                tags=['Orders']
                            )
                            _message.template_id = 'f39a80c3-a381-4a15-822b-32fb08debbe4'
                            _message.merge_global_data = {
                                'token_value': ' '.join([str("{:,.2f}".format(float(_order.token_value))), 'XTV']),
                                'payment_currency_value': ' '.join([str(_order.payment_currency_value), _order.payment_currency]),
                                'payment_address': _order.payment_address,
                            }
                            _message.metadata = {'payment-address': _order.payment_address}
                            _message.track_clicks = True

                            _message.send()

                        return standard_response()

                except IntegrityError:
                    # TODO: Notify us of error
                    return standard_response()

        else:
            return HttpResponse('Missing required parameters: %s' % ', '.join(_param_errors), status=400)
    else:
        return HttpResponse('Method Not Allowed', status=405)
Exemplo n.º 5
0
def buy(request):
    _user_id_external = request.user.id_external
    _user_email = request.user.email
    _user_eligibility_latest = UserEligibilityRegistry.objects.last_consent(
        external_id=_user_id_external)
    _token_cost_usd = 0.1

    if len(_user_eligibility_latest) == 0:
        return redirect('launchpad:eligibility')

    if request.method == 'POST':
        _buy_form = BuyForm(request.POST)

        if _buy_form.is_valid():
            _usd_value = _buy_form.cleaned_data.get('usd_value')
            _payment_currency = _buy_form.cleaned_data.get('payment_currency')

            _token_value = int(_usd_value) / _token_cost_usd
            _token_order_external_id = token_urlsafe(32)

            _cp_client = CryptoPayments(
                env('COINPAYMENTS_API_KEY'),
                env('COINPAYMENTS_API_SECRET'),
                env('COINPAYMENTS_IPN_URL'),
            )

            _token_order = TokenOrders(
                token_order_external_id=_token_order_external_id,
                customer_external_id=_user_id_external,
                usd_value=_usd_value,
                token_value=_token_value,
                payment_currency=_payment_currency,
            )

            _token_order.save()
            _token_order_id = _token_order.token_order_id

            _item_name = 'Centive Tokens (XTV)'
            _item_number = str(random.randint(
                10, 100)) + str(_token_order_id) + str(random.randint(10, 100))

            _cp_transaction = _cp_client.createTransaction({
                'amount':
                _usd_value,
                'currency1':
                'USD',
                'currency2':
                _payment_currency,
                'buyer_email':
                _user_email,
                'item_name':
                _item_name,
                'item_number':
                _item_number,
            })

            _token_order.payment_currency_value = _cp_transaction.amount
            _token_order.payment_address = _cp_transaction.address
            _token_order.txn_id = _cp_transaction.txn_id
            _token_order.confirms_needed = _cp_transaction.confirms_needed
            _token_order.timeout = _cp_transaction.timeout
            _token_order.status_url = _cp_transaction.status_url
            _token_order.qrcode_url = _cp_transaction.qrcode_url

            _token_order.save()

            _message = AnymailMessage(to=[_user_email], tags=['Orders'])
            _message.template_id = '9125877d-e602-4375-8ad2-74dbad9ec04d'
            _message.merge_global_data = {
                'token_value':
                ' '.join([str("{:,.2f}".format(float(_token_value))), 'XTV']),
                'confirms_needed':
                _cp_transaction.confirms_needed,
                'payment_currency_value':
                ' '.join([str(_cp_transaction.amount), _payment_currency]),
                'payment_address':
                _cp_transaction.address,
                'status_url':
                _cp_transaction.status_url,
            }
            _message.metadata = {'payment-address': _cp_transaction.address}
            _message.track_clicks = True

            _message.send()

            return redirect('launchpad:payment',
                            order_id=_token_order_external_id)

        else:
            return render(request, 'launchpad/buy.html',
                          {'buy_form': _buy_form})

    else:
        _buy_form = BuyForm()
        return render(request, 'launchpad/buy.html', {'buy_form': _buy_form})