forked from uncloud/uncloud
66 lines
3.1 KiB
Python
66 lines
3.1 KiB
Python
import tldextract
|
|
|
|
from django import forms
|
|
from django.forms import ModelForm
|
|
from django.utils.translation import get_language, ugettext_lazy as _
|
|
from django.core.exceptions import ValidationError
|
|
from .validators import domain_name_validator
|
|
from uncloud_pay.models import BillingAddress
|
|
|
|
|
|
class DomainNameField(forms.CharField):
|
|
description = 'Domain name form field'
|
|
default_validators = [domain_name_validator, ]
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
super(DomainNameField, self).__init__(*args, **kwargs)
|
|
|
|
class MainModelForm(ModelForm):
|
|
def __init__(self, *args, **kwargs):
|
|
super(MainModelForm, self).__init__(*args, **kwargs)
|
|
for visible in self.visible_fields():
|
|
visible.field.widget.attrs['class'] = 'form-control'
|
|
|
|
class MainForm(forms.Form):
|
|
def __init__(self, *args, **kwargs):
|
|
super(MainForm, self).__init__(*args, **kwargs)
|
|
for visible in self.visible_fields():
|
|
if (isinstance(visible.field.widget, forms.TextInput)):
|
|
visible.field.widget.attrs['class'] = 'form-control'
|
|
elif (isinstance(visible.field.widget, forms.CheckboxInput)):
|
|
visible.field.widget.attrs['class'] = 'custom-control-input'
|
|
|
|
|
|
class InitialRequestForm(MainForm):
|
|
cores = forms.IntegerField(label='CPU', min_value=1, max_value=48, initial=1)
|
|
memory = forms.IntegerField(label='RAM', min_value=2, max_value=200, initial=2)
|
|
storage = forms.IntegerField(label='Storage', min_value=100, max_value=10000, initial=100)
|
|
pricing_name = forms.CharField(required=True)
|
|
|
|
class RequestHostedVMForm(InitialRequestForm):
|
|
matrix_domain = DomainNameField(required=True, widget=forms.TextInput(attrs={'placeholder': 'Matrix Domain *'}))
|
|
homeserver_domain = DomainNameField(required=True, widget=forms.TextInput(attrs={'placeholder': 'Homeserver Domain *'}))
|
|
webclient_domain = DomainNameField(required=True, widget=forms.TextInput(attrs={'placeholder': 'Webclient Domain *'}))
|
|
is_open_registration = forms.BooleanField(required=False, initial=False)
|
|
|
|
def clean(self):
|
|
homeserver_domain = self.cleaned_data.get('homeserver_domain', False)
|
|
webclient_domain = self.cleaned_data.get('webclient_domain', False)
|
|
if homeserver_domain and webclient_domain:
|
|
# Homserver-Domain and Webclient-Domain cannot be below the same second level domain (i.e. homeserver.abc.ch and webclient.def.cloud are ok,
|
|
# homeserver.abc.ch and webclient.abc.ch are not ok
|
|
homeserver_base = tldextract.extract(homeserver_domain).domain
|
|
webclient_base = tldextract.extract(webclient_domain).domain
|
|
if homeserver_base == webclient_base:
|
|
self._errors['webclient_domain'] = self.error_class([
|
|
'Homserver-Domain and Webclient-Domain cannot be below the same second level domain'])
|
|
return self.cleaned_data
|
|
|
|
|
|
class BillingAddressForm(MainModelForm):
|
|
class Meta:
|
|
model = BillingAddress
|
|
fields = ['full_name', 'street',
|
|
'city', 'postal_code', 'country', 'vat_number', 'active', 'owner']
|
|
|
|
|