Merge pull request #517 from pcoder/task/3829/handle_landing_login_fail_in_same_page
Task/3829/handle landing login fail in same page
This commit is contained in:
commit
49cb69b2a8
3 changed files with 86 additions and 40 deletions
|
@ -25,14 +25,15 @@
|
||||||
<h3>{%trans "Log in" %}</h3>
|
<h3>{%trans "Log in" %}</h3>
|
||||||
<hr class="top-hr">
|
<hr class="top-hr">
|
||||||
<p style="margin-bottom: 20px;">{% blocktrans %}Already signed up?<br>By logging in you can retrieve saved billing information.{% endblocktrans %}</p>
|
<p style="margin-bottom: 20px;">{% blocktrans %}Already signed up?<br>By logging in you can retrieve saved billing information.{% endblocktrans %}</p>
|
||||||
<form role="form" id="login-form" method="post" action="{% url 'hosting:login' %}" novalidate>
|
<form role="form" id="login-form" method="post" action="" novalidate>
|
||||||
{% for field in login_form %}
|
{% for field in login_form %}
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{% bootstrap_field field show_label=False type='fields'%}
|
{% bootstrap_field field show_label=False type='fields'%}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
<p class="text-danger">{{login_form.non_field_errors|striptags}}</p>
|
||||||
<input type='hidden' name='next' value='{{request.path}}'/>
|
<input type='hidden' name='next' value='{{request.path}}'/>
|
||||||
<div class="form-group text-right">
|
<div class="form-group text-right">
|
||||||
<button type="submit" class="btn btn-wide btn-vm-contact">{% trans "LOGIN" %}</button>
|
<button type="submit" class="btn btn-wide btn-vm-contact" name="login_form">{% trans "LOGIN" %}</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
<p>
|
<p>
|
||||||
|
@ -58,7 +59,7 @@
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
<form role="form" id="billing-form" method="post" action="" novalidate>
|
<form role="form" id="billing-form" method="post" action="" novalidate>
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{% for field in form %}
|
{% for field in billing_address_form %}
|
||||||
{% bootstrap_field field show_label=False type='fields'%}
|
{% bootstrap_field field show_label=False type='fields'%}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</form>
|
</form>
|
||||||
|
@ -153,22 +154,12 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<div id='payment_error'>
|
<div id='payment_error'>
|
||||||
{% for message in messages %}
|
{% for message in messages %}
|
||||||
{% if 'failed_payment' in message.tags or 'make_charge_error' in message.tags %}
|
{% if 'failed_payment' in message.tags or 'make_charge_error' in message.tags or 'error' in message.tags %}
|
||||||
<ul class="list-unstyled">
|
<ul class="list-unstyled">
|
||||||
<li><p class="card-warning-content card-warning-error">{{ message|safe }}</p></li>
|
<li><p class="card-warning-content card-warning-error">{{ message|safe }}</p></li>
|
||||||
</ul>
|
</ul>
|
||||||
{% elif not form.non_field_errors %}
|
|
||||||
<p class="card-warning-content">
|
|
||||||
{% trans "You are not making any payment yet. After placing your order, you will be taken to the Submit Payment Page." %}
|
|
||||||
</p>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
{% for error in form.non_field_errors %}
|
|
||||||
<p class="card-warning-content card-warning-error">
|
|
||||||
{{ error|escape }}
|
|
||||||
</p>
|
|
||||||
{% endfor %}
|
|
||||||
</div>
|
</div>
|
||||||
<div class="text-right">
|
<div class="text-right">
|
||||||
<button class="btn btn-vm-contact btn-wide" type="submit">{%trans "SUBMIT" %}</button>
|
<button class="btn btn-vm-contact btn-wide" type="submit">{%trans "SUBMIT" %}</button>
|
||||||
|
|
|
@ -345,26 +345,45 @@ class PaymentOrderView(FormView):
|
||||||
else:
|
else:
|
||||||
return BillingAddressFormSignup
|
return BillingAddressFormSignup
|
||||||
|
|
||||||
def get_form_kwargs(self):
|
|
||||||
form_kwargs = super(PaymentOrderView, self).get_form_kwargs()
|
|
||||||
# if user is signed in, get billing address
|
|
||||||
if self.request.user.is_authenticated():
|
|
||||||
form_kwargs.update({
|
|
||||||
'instance': self.request.user.billing_addresses.first()
|
|
||||||
})
|
|
||||||
if 'billing_address_data' in self.request.session:
|
|
||||||
billing_address_data = self.request.session['billing_address_data']
|
|
||||||
form_kwargs.update({
|
|
||||||
'initial': billing_address_data
|
|
||||||
})
|
|
||||||
return form_kwargs
|
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(PaymentOrderView, self).get_context_data(**kwargs)
|
context = super(PaymentOrderView, self).get_context_data(**kwargs)
|
||||||
|
if 'billing_address_data' in self.request.session:
|
||||||
|
billing_address_data = self.request.session['billing_address_data']
|
||||||
|
else:
|
||||||
|
billing_address_data = {}
|
||||||
|
|
||||||
|
if self.request.user.is_authenticated():
|
||||||
|
if billing_address_data:
|
||||||
|
billing_address_form = BillingAddressForm(
|
||||||
|
initial=billing_address_data
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
billing_address_form = BillingAddressForm(
|
||||||
|
instance=self.request.user.billing_addresses.first()
|
||||||
|
)
|
||||||
|
# Get user last order
|
||||||
|
last_hosting_order = HostingOrder.objects.filter(
|
||||||
|
customer__user=self.request.user
|
||||||
|
).last()
|
||||||
|
|
||||||
|
# If user has already an hosting order, get the credit card
|
||||||
|
# data from it
|
||||||
|
if last_hosting_order:
|
||||||
|
credit_card_data = last_hosting_order.get_cc_data()
|
||||||
|
if credit_card_data:
|
||||||
|
context['credit_card_data'] = credit_card_data
|
||||||
|
else:
|
||||||
|
context['credit_card_data'] = None
|
||||||
|
else:
|
||||||
|
billing_address_form = BillingAddressFormSignup(
|
||||||
|
initial=billing_address_data
|
||||||
|
)
|
||||||
|
|
||||||
context.update({
|
context.update({
|
||||||
'stripe_key': settings.STRIPE_API_PUBLIC_KEY,
|
'stripe_key': settings.STRIPE_API_PUBLIC_KEY,
|
||||||
'site_url': reverse('datacenterlight:index'),
|
'site_url': reverse('datacenterlight:index'),
|
||||||
'login_form': HostingUserLoginForm()
|
'login_form': HostingUserLoginForm(prefix='login_form'),
|
||||||
|
'billing_address_form': billing_address_form
|
||||||
})
|
})
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
@ -376,9 +395,32 @@ class PaymentOrderView(FormView):
|
||||||
return self.render_to_response(self.get_context_data())
|
return self.render_to_response(self.get_context_data())
|
||||||
|
|
||||||
def post(self, request, *args, **kwargs):
|
def post(self, request, *args, **kwargs):
|
||||||
form = self.get_form()
|
if 'login_form' in request.POST:
|
||||||
if form.is_valid():
|
login_form = HostingUserLoginForm(data=request.POST,
|
||||||
token = form.cleaned_data.get('token')
|
prefix='login_form')
|
||||||
|
if login_form.is_valid():
|
||||||
|
email = login_form.cleaned_data.get('email')
|
||||||
|
password = login_form.cleaned_data.get('password')
|
||||||
|
auth_user = authenticate(email=email, password=password)
|
||||||
|
if auth_user:
|
||||||
|
login(self.request, auth_user)
|
||||||
|
return HttpResponseRedirect(
|
||||||
|
reverse('datacenterlight:payment')
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
context = self.get_context_data()
|
||||||
|
context['login_form'] = login_form
|
||||||
|
return self.render_to_response(context)
|
||||||
|
if request.user.is_authenticated():
|
||||||
|
address_form = BillingAddressForm(
|
||||||
|
data=request.POST,
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
address_form = BillingAddressFormSignup(
|
||||||
|
data=request.POST,
|
||||||
|
)
|
||||||
|
if address_form.is_valid():
|
||||||
|
token = address_form.cleaned_data.get('token')
|
||||||
if request.user.is_authenticated():
|
if request.user.is_authenticated():
|
||||||
this_user = {
|
this_user = {
|
||||||
'email': request.user.email,
|
'email': request.user.email,
|
||||||
|
@ -388,8 +430,8 @@ class PaymentOrderView(FormView):
|
||||||
email=this_user.get('email'),
|
email=this_user.get('email'),
|
||||||
token=token)
|
token=token)
|
||||||
else:
|
else:
|
||||||
user_email = form.cleaned_data.get('email')
|
user_email = address_form.cleaned_data.get('email')
|
||||||
user_name = form.cleaned_data.get('name')
|
user_name = address_form.cleaned_data.get('name')
|
||||||
this_user = {
|
this_user = {
|
||||||
'email': user_email,
|
'email': user_email,
|
||||||
'name': user_name
|
'name': user_name
|
||||||
|
@ -422,13 +464,18 @@ class PaymentOrderView(FormView):
|
||||||
token=token,
|
token=token,
|
||||||
customer_name=user_name)
|
customer_name=user_name)
|
||||||
|
|
||||||
request.session['billing_address_data'] = form.cleaned_data
|
request.session['billing_address_data'] = address_form.cleaned_data
|
||||||
request.session['user'] = this_user
|
request.session['user'] = this_user
|
||||||
# Get or create stripe customer
|
# Get or create stripe customer
|
||||||
if not customer:
|
if not customer:
|
||||||
form.add_error("__all__", "Invalid credit card")
|
address_form.add_error(
|
||||||
|
"__all__", "Invalid credit card"
|
||||||
|
)
|
||||||
return self.render_to_response(
|
return self.render_to_response(
|
||||||
self.get_context_data(form=form))
|
self.get_context_data(
|
||||||
|
billing_address_form=address_form
|
||||||
|
)
|
||||||
|
)
|
||||||
request.session['token'] = token
|
request.session['token'] = token
|
||||||
if type(customer) is StripeCustomer:
|
if type(customer) is StripeCustomer:
|
||||||
request.session['customer'] = customer.stripe_id
|
request.session['customer'] = customer.stripe_id
|
||||||
|
@ -437,7 +484,9 @@ class PaymentOrderView(FormView):
|
||||||
return HttpResponseRedirect(
|
return HttpResponseRedirect(
|
||||||
reverse('datacenterlight:order_confirmation'))
|
reverse('datacenterlight:order_confirmation'))
|
||||||
else:
|
else:
|
||||||
return self.form_invalid(form)
|
context = self.get_context_data()
|
||||||
|
context['billing_address_form'] = address_form
|
||||||
|
return self.render_to_response(context)
|
||||||
|
|
||||||
|
|
||||||
class OrderConfirmationView(DetailView):
|
class OrderConfirmationView(DetailView):
|
||||||
|
@ -548,9 +597,13 @@ class OrderConfirmationView(DetailView):
|
||||||
try:
|
try:
|
||||||
custom_user = CustomUser.objects.get(
|
custom_user = CustomUser.objects.get(
|
||||||
email=user.get('email'))
|
email=user.get('email'))
|
||||||
customer = StripeCustomer.objects.filter(
|
stripe_customer = StripeCustomer.objects.filter(
|
||||||
user_id=custom_user.id).first()
|
user_id=custom_user.id).first()
|
||||||
stripe_customer_id = customer.id
|
if stripe_customer is None:
|
||||||
|
stripe_customer = StripeCustomer.objects.create(
|
||||||
|
user=custom_user, stripe_id=stripe_api_cus_id
|
||||||
|
)
|
||||||
|
stripe_customer_id = stripe_customer.id
|
||||||
except CustomUser.DoesNotExist:
|
except CustomUser.DoesNotExist:
|
||||||
logger.debug(
|
logger.debug(
|
||||||
"Customer {} does not exist.".format(user.get('email')))
|
"Customer {} does not exist.".format(user.get('email')))
|
||||||
|
|
|
@ -29,6 +29,8 @@ class HostingUserLoginForm(forms.Form):
|
||||||
def clean(self):
|
def clean(self):
|
||||||
email = self.cleaned_data.get('email')
|
email = self.cleaned_data.get('email')
|
||||||
password = self.cleaned_data.get('password')
|
password = self.cleaned_data.get('password')
|
||||||
|
if self.errors:
|
||||||
|
return self.cleaned_data
|
||||||
is_auth = authenticate(email=email, password=password)
|
is_auth = authenticate(email=email, password=password)
|
||||||
if not is_auth:
|
if not is_auth:
|
||||||
raise forms.ValidationError(
|
raise forms.ValidationError(
|
||||||
|
|
Loading…
Reference in a new issue