diff --git a/datacenterlight/cms_plugins.py b/datacenterlight/cms_plugins.py index 52b4f19f..ffecbf0b 100644 --- a/datacenterlight/cms_plugins.py +++ b/datacenterlight/cms_plugins.py @@ -1,6 +1,7 @@ from cms.plugin_base import CMSPluginBase from cms.plugin_pool import plugin_pool from django.conf import settings +from django.utils.translation import ugettext_lazy as _ from .cms_models import ( DCLBannerItemPluginModel, DCLBannerListPluginModel, DCLContactPluginModel, @@ -10,7 +11,9 @@ from .cms_models import ( DCLSectionPromoPluginModel, DCLCalculatorPluginModel ) from .models import VMTemplate -from datacenterlight.utils import clear_all_session_vars +from datacenterlight.utils import clear_all_session_vars, get_ip_address + +import ipaddress @plugin_pool.register_plugin @@ -170,6 +173,25 @@ class DCLContactPlugin(CMSPluginBase): render_template = "datacenterlight/cms/contact.html" cache = False + def render(self, context, instance, placeholder): + context = super(DCLContactPlugin, self).render( + context, instance, placeholder + ) + request_ip_address = get_ip_address(context['request']) + request_v4v6 = '' + if (type(ipaddress.ip_address(request_ip_address)) == + ipaddress.IPv4Address): + request_v4v6 = 'IPv4' + elif (type(ipaddress.ip_address(request_ip_address)) == + ipaddress.IPv6Address): + request_v4v6 = 'IPv6' + context['ip_address_label_title'] = _( + "You are requesting this website from " + "{ip_address}.".format(ip_address=request_ip_address)) + context['ip_address_label'] = _( + "Enter '{v4v6}':".format(v4v6=request_v4v6)) + return context + @plugin_pool.register_plugin class DCLFooterPlugin(CMSPluginBase): diff --git a/datacenterlight/forms.py b/datacenterlight/forms.py index b697f694..d5b6f814 100644 --- a/datacenterlight/forms.py +++ b/datacenterlight/forms.py @@ -1,9 +1,42 @@ from django import forms +from django.utils.translation import ugettext_lazy as _ +from datacenterlight.utils import get_ip_address + +import logging from .models import ContactUs +import ipaddress +logger = logging.getLogger(__name__) + class ContactForm(forms.ModelForm): class Meta: - fields = ['name', 'email', 'message'] + fields = ['name', 'email', 'message', 'ip_address'] model = ContactUs + labels = { + "ip_address": _("You are requesting this website from " + "{{ip_address}}. Enter 'IPv{{v4v6}}':".format( + ip_address='test', v4v6='4' + )) + } + + def __init__(self, *args, **kwargs): + self.request = kwargs.pop('request', None) + super(ContactForm, self).__init__(*args, **kwargs) + self.fields['ip_address'] = forms.CharField(required=True) + + def clean_ip_address(self): + input_ip_address_text = self.cleaned_data.get('ip_address') + request_ip_address = get_ip_address(self.request) + ip_address_type_text = 'ipv4' + if (type(ipaddress.ip_address(request_ip_address)) + == ipaddress.IPv4Address): + ip_address_type_text = 'ipv4' + elif (type(ipaddress.ip_address(request_ip_address)) + == ipaddress.IPv6Address): + ip_address_type_text = 'ipv6' + if input_ip_address_text.strip().lower() == ip_address_type_text: + return request_ip_address + else: + raise forms.ValidationError(_("Input correct IP address type")) diff --git a/datacenterlight/migrations/0032_contactus_ip_address.py b/datacenterlight/migrations/0032_contactus_ip_address.py new file mode 100644 index 00000000..836fcc10 --- /dev/null +++ b/datacenterlight/migrations/0032_contactus_ip_address.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.4 on 2021-02-11 10:12 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('datacenterlight', '0031_vmpricing_stripe_coupon_id'), + ] + + operations = [ + migrations.AddField( + model_name='contactus', + name='ip_address', + field=models.TextField(default='', null=True), + ), + ] diff --git a/datacenterlight/models.py b/datacenterlight/models.py index 64d785a2..a075fd66 100644 --- a/datacenterlight/models.py +++ b/datacenterlight/models.py @@ -118,6 +118,7 @@ class ContactUs(models.Model): name = models.CharField(max_length=250) email = models.CharField(max_length=250) message = models.TextField() + ip_address = models.TextField(default='', null=True) field = models.DateTimeField(auto_now_add=True) def __str__(self): diff --git a/datacenterlight/templates/datacenterlight/contact_form.html b/datacenterlight/templates/datacenterlight/contact_form.html index 87848ff2..afaf7144 100644 --- a/datacenterlight/templates/datacenterlight/contact_form.html +++ b/datacenterlight/templates/datacenterlight/contact_form.html @@ -26,7 +26,7 @@
- +
{{contact_form.name.errors}}
@@ -34,7 +34,7 @@
- +
{{contact_form.email.errors}}
@@ -42,11 +42,19 @@
- +
{{contact_form.message.errors}}
+
 
{{ ip_address_label_title }}{{contact_form.message.errors}}
+
+ +
+ +
{{contact_form.ip_address.errors}}
+
+
{% trans "Sorry, there was an unexpected error. Kindly retry." %}
diff --git a/datacenterlight/utils.py b/datacenterlight/utils.py index 6a0e45ca..435de23c 100644 --- a/datacenterlight/utils.py +++ b/datacenterlight/utils.py @@ -303,3 +303,12 @@ def create_tax_id(stripe_customer_id, billing_address_id, type, billing_address.vat_validation_status = tax_id_obj.verification.status billing_address.save() return tax_id_obj + + +def get_ip_address(request): + x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR') + if x_forwarded_for: + ip = x_forwarded_for.split(',')[-1].strip() + else: + ip = request.META.get('REMOTE_ADDR') + return ip \ No newline at end of file diff --git a/datacenterlight/views.py b/datacenterlight/views.py index e149bfc4..ed2437ad 100644 --- a/datacenterlight/views.py +++ b/datacenterlight/views.py @@ -49,11 +49,30 @@ class ContactUsView(FormView): template_name = "datacenterlight/contact_form.html" form_class = ContactForm + def get_form_kwargs(self): + kw = super(ContactUsView, self).get_form_kwargs() + kw['request'] = self.request + return kw + def get(self, request, *args, **kwargs): return HttpResponseRedirect(reverse('datacenterlight:index')) def form_invalid(self, form): if self.request.is_ajax(): + logger.debug(form) + # request_ip_address = get_ip_address(self.request) + # request_v4v6 = '' + # if (type(ipaddress.ip_address(request_ip_address)) == + # ipaddress.IPv4Address): + # request_v4v6 = 'IPv4' + # elif (type(ipaddress.ip_address(request_ip_address)) == + # ipaddress.IPv6Address): + # request_v4v6 = 'IPv6' + # context['ip_address_label_title'] = _( + # "You are requesting this website from " + # "{ip_address}.".format(ip_address=request_ip_address)) + # context['ip_address_label'] = _( + # "Enter '{v4v6}':".format(v4v6=request_v4v6)) return self.render_to_response( self.get_context_data(contact_form=form)) else: