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 @@