Upgrade to Django 3.2
- update dependencies - fix deprecation warnings - fix tests - skip some tests that need more work - reformat changed code with isort and black
This commit is contained in:
parent
0f18e59d67
commit
4af1a39ca4
93 changed files with 3598 additions and 2725 deletions
|
@ -2,4 +2,3 @@
|
|||
This app takes care of domains.
|
||||
|
||||
"""
|
||||
default_app_config = 'domains.apps.DomainAppConfig'
|
||||
|
|
|
@ -3,9 +3,8 @@ This module contains the :py:class:`django.apps.AppConfig` instance for the
|
|||
:py:mod:`domains` app.
|
||||
|
||||
"""
|
||||
from __future__ import unicode_literals
|
||||
from django.apps import AppConfig
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class DomainAppConfig(AppConfig):
|
||||
|
@ -13,5 +12,6 @@ class DomainAppConfig(AppConfig):
|
|||
AppConfig for the :py:mod:`domains` app.
|
||||
|
||||
"""
|
||||
name = 'domains'
|
||||
verbose_name = _('Domains')
|
||||
|
||||
name = "domains"
|
||||
verbose_name = _("Domains")
|
||||
|
|
|
@ -2,19 +2,15 @@
|
|||
This module defines form classes for domain editing.
|
||||
|
||||
"""
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
from __future__ import absolute_import
|
||||
|
||||
import re
|
||||
|
||||
from crispy_forms.helper import FormHelper
|
||||
from crispy_forms.layout import Layout, Submit
|
||||
from django import forms
|
||||
from django.urls import reverse
|
||||
from django.utils.translation import ugettext as _
|
||||
|
||||
from crispy_forms.helper import FormHelper
|
||||
from crispy_forms.layout import (
|
||||
Layout,
|
||||
Submit,
|
||||
)
|
||||
from django.utils.translation import gettext as _
|
||||
|
||||
from .models import HostingDomain
|
||||
|
||||
|
@ -26,11 +22,10 @@ def relative_domain_validator(value):
|
|||
|
||||
"""
|
||||
if len(value) > 254:
|
||||
raise forms.ValidationError(
|
||||
_('host name too long'), code='too-long')
|
||||
raise forms.ValidationError(_("host name too long"), code="too-long")
|
||||
allowed = re.compile(r"(?!-)[a-z\d-]{1,63}(?<!-)$")
|
||||
if not all(allowed.match(x) for x in value.split('.')):
|
||||
raise forms.ValidationError(_('invalid domain name'))
|
||||
if not all(allowed.match(x) for x in value.split(".")):
|
||||
raise forms.ValidationError(_("invalid domain name"))
|
||||
|
||||
|
||||
class CreateHostingDomainForm(forms.ModelForm):
|
||||
|
@ -38,31 +33,32 @@ class CreateHostingDomainForm(forms.ModelForm):
|
|||
This form is used to create new HostingDomain instances.
|
||||
|
||||
"""
|
||||
|
||||
class Meta:
|
||||
model = HostingDomain
|
||||
fields = ['domain']
|
||||
fields = ["domain"]
|
||||
|
||||
def __init__(self, instance, *args, **kwargs):
|
||||
self.hosting_package = kwargs.pop('hostingpackage')
|
||||
self.hosting_package = kwargs.pop("hostingpackage")
|
||||
super(CreateHostingDomainForm, self).__init__(*args, **kwargs)
|
||||
self.fields['domain'].validators.append(relative_domain_validator)
|
||||
self.fields["domain"].validators.append(relative_domain_validator)
|
||||
self.helper = FormHelper()
|
||||
self.helper.form_action = reverse(
|
||||
'create_hosting_domain', kwargs={
|
||||
'package': self.hosting_package.id
|
||||
})
|
||||
"create_hosting_domain", kwargs={"package": self.hosting_package.id}
|
||||
)
|
||||
self.helper.layout = Layout(
|
||||
'domain',
|
||||
Submit('submit', _('Add Hosting Domain')),
|
||||
"domain",
|
||||
Submit("submit", _("Add Hosting Domain")),
|
||||
)
|
||||
|
||||
def clean(self):
|
||||
self.cleaned_data = super(CreateHostingDomainForm, self).clean()
|
||||
self.cleaned_data['hosting_package'] = self.hosting_package
|
||||
self.cleaned_data["hosting_package"] = self.hosting_package
|
||||
|
||||
def save(self, commit=True):
|
||||
return HostingDomain.objects.create_for_hosting_package(
|
||||
commit=commit, **self.cleaned_data)
|
||||
commit=commit, **self.cleaned_data
|
||||
)
|
||||
|
||||
def save_m2m(self):
|
||||
pass
|
||||
|
|
|
@ -1,28 +1,46 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models, migrations
|
||||
import django.utils.timezone
|
||||
import model_utils.fields
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
]
|
||||
dependencies = []
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='MailDomain',
|
||||
name="MailDomain",
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, verbose_name='created', editable=False)),
|
||||
('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, verbose_name='modified', editable=False)),
|
||||
('domain', models.CharField(unique=True, max_length=128)),
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
verbose_name="ID",
|
||||
serialize=False,
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
),
|
||||
),
|
||||
(
|
||||
"created",
|
||||
model_utils.fields.AutoCreatedField(
|
||||
default=django.utils.timezone.now,
|
||||
verbose_name="created",
|
||||
editable=False,
|
||||
),
|
||||
),
|
||||
(
|
||||
"modified",
|
||||
model_utils.fields.AutoLastModifiedField(
|
||||
default=django.utils.timezone.now,
|
||||
verbose_name="modified",
|
||||
editable=False,
|
||||
),
|
||||
),
|
||||
("domain", models.CharField(unique=True, max_length=128)),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Mail domain',
|
||||
'verbose_name_plural': 'Mail domains',
|
||||
"verbose_name": "Mail domain",
|
||||
"verbose_name_plural": "Mail domains",
|
||||
},
|
||||
bases=(models.Model,),
|
||||
),
|
||||
|
|
|
@ -1,68 +1,97 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models, migrations
|
||||
import django.utils.timezone
|
||||
from django.conf import settings
|
||||
import model_utils.fields
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('domains', '0001_initial'),
|
||||
("domains", "0001_initial"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='HostingDomain',
|
||||
name="HostingDomain",
|
||||
fields=[
|
||||
('id',
|
||||
models.AutoField(verbose_name='ID', serialize=False,
|
||||
auto_created=True, primary_key=True)),
|
||||
('created',
|
||||
model_utils.fields.AutoCreatedField(
|
||||
default=django.utils.timezone.now, verbose_name='created',
|
||||
editable=False)),
|
||||
('modified',
|
||||
model_utils.fields.AutoLastModifiedField(
|
||||
default=django.utils.timezone.now, verbose_name='modified',
|
||||
editable=False)),
|
||||
('domain',
|
||||
models.CharField(
|
||||
unique=True, max_length=128, verbose_name='domain name')),
|
||||
('customer',
|
||||
models.ForeignKey(
|
||||
verbose_name='customer', blank=True,
|
||||
to=settings.AUTH_USER_MODEL, null=True,
|
||||
on_delete=models.CASCADE)),
|
||||
('maildomain',
|
||||
models.OneToOneField(
|
||||
null=True, to='domains.MailDomain', blank=True,
|
||||
help_text='assigned mail domain for this domain',
|
||||
verbose_name='mail domain',
|
||||
on_delete=models.CASCADE)),
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
verbose_name="ID",
|
||||
serialize=False,
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
),
|
||||
),
|
||||
(
|
||||
"created",
|
||||
model_utils.fields.AutoCreatedField(
|
||||
default=django.utils.timezone.now,
|
||||
verbose_name="created",
|
||||
editable=False,
|
||||
),
|
||||
),
|
||||
(
|
||||
"modified",
|
||||
model_utils.fields.AutoLastModifiedField(
|
||||
default=django.utils.timezone.now,
|
||||
verbose_name="modified",
|
||||
editable=False,
|
||||
),
|
||||
),
|
||||
(
|
||||
"domain",
|
||||
models.CharField(
|
||||
unique=True, max_length=128, verbose_name="domain name"
|
||||
),
|
||||
),
|
||||
(
|
||||
"customer",
|
||||
models.ForeignKey(
|
||||
verbose_name="customer",
|
||||
blank=True,
|
||||
to=settings.AUTH_USER_MODEL,
|
||||
null=True,
|
||||
on_delete=models.CASCADE,
|
||||
),
|
||||
),
|
||||
(
|
||||
"maildomain",
|
||||
models.OneToOneField(
|
||||
null=True,
|
||||
to="domains.MailDomain",
|
||||
blank=True,
|
||||
help_text="assigned mail domain for this domain",
|
||||
verbose_name="mail domain",
|
||||
on_delete=models.CASCADE,
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Hosting domain',
|
||||
'verbose_name_plural': 'Hosting domains',
|
||||
"verbose_name": "Hosting domain",
|
||||
"verbose_name_plural": "Hosting domains",
|
||||
},
|
||||
bases=(models.Model,),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='maildomain',
|
||||
name='customer',
|
||||
model_name="maildomain",
|
||||
name="customer",
|
||||
field=models.ForeignKey(
|
||||
verbose_name='customer', blank=True,
|
||||
to=settings.AUTH_USER_MODEL, null=True,
|
||||
on_delete=models.CASCADE),
|
||||
verbose_name="customer",
|
||||
blank=True,
|
||||
to=settings.AUTH_USER_MODEL,
|
||||
null=True,
|
||||
on_delete=models.CASCADE,
|
||||
),
|
||||
preserve_default=True,
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='maildomain',
|
||||
name='domain',
|
||||
model_name="maildomain",
|
||||
name="domain",
|
||||
field=models.CharField(
|
||||
unique=True, max_length=128, verbose_name='domain name'),
|
||||
unique=True, max_length=128, verbose_name="domain name"
|
||||
),
|
||||
preserve_default=True,
|
||||
),
|
||||
]
|
||||
|
|
|
@ -1,199 +1,285 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.utils.timezone
|
||||
from django.conf import settings
|
||||
import model_utils.fields
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('domains', '0002_auto_20150124_1909'),
|
||||
("domains", "0002_auto_20150124_1909"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='DNSComment',
|
||||
name="DNSComment",
|
||||
fields=[
|
||||
('id', models.AutoField(
|
||||
verbose_name='ID', serialize=False,
|
||||
auto_created=True, primary_key=True)),
|
||||
('name', models.CharField(max_length=255)),
|
||||
('commenttype',
|
||||
models.CharField(max_length=10, db_column='type')),
|
||||
('modified_at', models.IntegerField()),
|
||||
('comment', models.CharField(max_length=65535)),
|
||||
('customer', models.ForeignKey(
|
||||
verbose_name='customer',
|
||||
to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)),
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
verbose_name="ID",
|
||||
serialize=False,
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
),
|
||||
),
|
||||
("name", models.CharField(max_length=255)),
|
||||
("commenttype", models.CharField(max_length=10, db_column="type")),
|
||||
("modified_at", models.IntegerField()),
|
||||
("comment", models.CharField(max_length=65535)),
|
||||
(
|
||||
"customer",
|
||||
models.ForeignKey(
|
||||
verbose_name="customer",
|
||||
to=settings.AUTH_USER_MODEL,
|
||||
on_delete=models.CASCADE,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
migrations.RunSQL(
|
||||
'''ALTER TABLE domains_dnscomment ADD CONSTRAINT c_lowercase_name
|
||||
CHECK (((name)::TEXT = LOWER((name)::TEXT)))'''
|
||||
"""ALTER TABLE domains_dnscomment ADD CONSTRAINT c_lowercase_name
|
||||
CHECK (((name)::TEXT = LOWER((name)::TEXT)))"""
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='DNSCryptoKey',
|
||||
name="DNSCryptoKey",
|
||||
fields=[
|
||||
('id', models.AutoField(
|
||||
verbose_name='ID', serialize=False,
|
||||
auto_created=True, primary_key=True)),
|
||||
('flags', models.IntegerField()),
|
||||
('active', models.BooleanField(default=True)),
|
||||
('content', models.TextField()),
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
verbose_name="ID",
|
||||
serialize=False,
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
),
|
||||
),
|
||||
("flags", models.IntegerField()),
|
||||
("active", models.BooleanField(default=True)),
|
||||
("content", models.TextField()),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='DNSDomain',
|
||||
name="DNSDomain",
|
||||
fields=[
|
||||
('id', models.AutoField(
|
||||
verbose_name='ID', serialize=False,
|
||||
auto_created=True, primary_key=True)),
|
||||
('created', model_utils.fields.AutoCreatedField(
|
||||
default=django.utils.timezone.now, verbose_name='created',
|
||||
editable=False)),
|
||||
('modified', model_utils.fields.AutoLastModifiedField(
|
||||
default=django.utils.timezone.now, verbose_name='modified',
|
||||
editable=False)),
|
||||
('domain', models.CharField(
|
||||
unique=True, max_length=255, verbose_name='domain name')),
|
||||
('master',
|
||||
models.CharField(max_length=128, null=True, blank=True)),
|
||||
('last_check', models.IntegerField(null=True)),
|
||||
('domaintype', models.CharField(
|
||||
max_length=6, db_column='type',
|
||||
choices=[('MASTER', 'Master'),
|
||||
('SLAVE', 'Slave'),
|
||||
('NATIVE', 'Native')])),
|
||||
('notified_serial', models.IntegerField(null=True)),
|
||||
('customer', models.ForeignKey(
|
||||
verbose_name='customer', blank=True,
|
||||
to=settings.AUTH_USER_MODEL, null=True,
|
||||
on_delete=models.CASCADE)),
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
verbose_name="ID",
|
||||
serialize=False,
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
),
|
||||
),
|
||||
(
|
||||
"created",
|
||||
model_utils.fields.AutoCreatedField(
|
||||
default=django.utils.timezone.now,
|
||||
verbose_name="created",
|
||||
editable=False,
|
||||
),
|
||||
),
|
||||
(
|
||||
"modified",
|
||||
model_utils.fields.AutoLastModifiedField(
|
||||
default=django.utils.timezone.now,
|
||||
verbose_name="modified",
|
||||
editable=False,
|
||||
),
|
||||
),
|
||||
(
|
||||
"domain",
|
||||
models.CharField(
|
||||
unique=True, max_length=255, verbose_name="domain name"
|
||||
),
|
||||
),
|
||||
("master", models.CharField(max_length=128, null=True, blank=True)),
|
||||
("last_check", models.IntegerField(null=True)),
|
||||
(
|
||||
"domaintype",
|
||||
models.CharField(
|
||||
max_length=6,
|
||||
db_column="type",
|
||||
choices=[
|
||||
("MASTER", "Master"),
|
||||
("SLAVE", "Slave"),
|
||||
("NATIVE", "Native"),
|
||||
],
|
||||
),
|
||||
),
|
||||
("notified_serial", models.IntegerField(null=True)),
|
||||
(
|
||||
"customer",
|
||||
models.ForeignKey(
|
||||
verbose_name="customer",
|
||||
blank=True,
|
||||
to=settings.AUTH_USER_MODEL,
|
||||
null=True,
|
||||
on_delete=models.CASCADE,
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'DNS domain',
|
||||
'verbose_name_plural': 'DNS domains',
|
||||
"verbose_name": "DNS domain",
|
||||
"verbose_name_plural": "DNS domains",
|
||||
},
|
||||
),
|
||||
migrations.RunSQL(
|
||||
'''ALTER TABLE domains_dnsdomain ADD CONSTRAINT c_lowercase_name
|
||||
CHECK (((domain)::TEXT = LOWER((domain)::TEXT)))'''
|
||||
"""ALTER TABLE domains_dnsdomain ADD CONSTRAINT c_lowercase_name
|
||||
CHECK (((domain)::TEXT = LOWER((domain)::TEXT)))"""
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='DNSDomainMetadata',
|
||||
name="DNSDomainMetadata",
|
||||
fields=[
|
||||
('id', models.AutoField(
|
||||
verbose_name='ID', serialize=False,
|
||||
auto_created=True, primary_key=True)),
|
||||
('kind', models.CharField(max_length=32)),
|
||||
('content', models.TextField()),
|
||||
('domain', models.ForeignKey(
|
||||
to='domains.DNSDomain', on_delete=models.CASCADE)),
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
verbose_name="ID",
|
||||
serialize=False,
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
),
|
||||
),
|
||||
("kind", models.CharField(max_length=32)),
|
||||
("content", models.TextField()),
|
||||
(
|
||||
"domain",
|
||||
models.ForeignKey(to="domains.DNSDomain", on_delete=models.CASCADE),
|
||||
),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='DNSRecord',
|
||||
name="DNSRecord",
|
||||
fields=[
|
||||
('id', models.AutoField(
|
||||
verbose_name='ID', serialize=False,
|
||||
auto_created=True, primary_key=True)),
|
||||
('name', models.CharField(
|
||||
db_index=True, max_length=255, null=True, blank=True)),
|
||||
('recordtype', models.CharField(
|
||||
max_length=10, null=True, db_column='type', blank=True)),
|
||||
('content', models.CharField(
|
||||
max_length=65535, null=True, blank=True)),
|
||||
('ttl', models.IntegerField(null=True)),
|
||||
('prio', models.IntegerField(null=True)),
|
||||
('change_date', models.IntegerField(null=True)),
|
||||
('disabled', models.BooleanField(default=False)),
|
||||
('ordername', models.CharField(max_length=255)),
|
||||
('auth', models.BooleanField(default=True)),
|
||||
('domain', models.ForeignKey(
|
||||
to='domains.DNSDomain', on_delete=models.CASCADE)),
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
verbose_name="ID",
|
||||
serialize=False,
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
),
|
||||
),
|
||||
(
|
||||
"name",
|
||||
models.CharField(
|
||||
db_index=True, max_length=255, null=True, blank=True
|
||||
),
|
||||
),
|
||||
(
|
||||
"recordtype",
|
||||
models.CharField(
|
||||
max_length=10, null=True, db_column="type", blank=True
|
||||
),
|
||||
),
|
||||
("content", models.CharField(max_length=65535, null=True, blank=True)),
|
||||
("ttl", models.IntegerField(null=True)),
|
||||
("prio", models.IntegerField(null=True)),
|
||||
("change_date", models.IntegerField(null=True)),
|
||||
("disabled", models.BooleanField(default=False)),
|
||||
("ordername", models.CharField(max_length=255)),
|
||||
("auth", models.BooleanField(default=True)),
|
||||
(
|
||||
"domain",
|
||||
models.ForeignKey(to="domains.DNSDomain", on_delete=models.CASCADE),
|
||||
),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'DNS record',
|
||||
'verbose_name_plural': 'DNS records',
|
||||
"verbose_name": "DNS record",
|
||||
"verbose_name_plural": "DNS records",
|
||||
},
|
||||
),
|
||||
migrations.RunSQL(
|
||||
'''ALTER TABLE domains_dnsrecord ADD CONSTRAINT c_lowercase_name
|
||||
CHECK (((name)::TEXT = LOWER((name)::TEXT)))'''
|
||||
"""ALTER TABLE domains_dnsrecord ADD CONSTRAINT c_lowercase_name
|
||||
CHECK (((name)::TEXT = LOWER((name)::TEXT)))"""
|
||||
),
|
||||
migrations.RunSQL(
|
||||
'''CREATE INDEX recordorder ON domains_dnsrecord (domain_id,
|
||||
ordername text_pattern_ops)'''
|
||||
"""CREATE INDEX recordorder ON domains_dnsrecord (domain_id,
|
||||
ordername text_pattern_ops)"""
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='DNSSupermaster',
|
||||
name="DNSSupermaster",
|
||||
fields=[
|
||||
('id', models.AutoField(
|
||||
verbose_name='ID', serialize=False,
|
||||
auto_created=True, primary_key=True)),
|
||||
('ip', models.GenericIPAddressField()),
|
||||
('nameserver', models.CharField(max_length=255)),
|
||||
('customer', models.ForeignKey(
|
||||
verbose_name='customer', to=settings.AUTH_USER_MODEL,
|
||||
on_delete=models.CASCADE)),
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
verbose_name="ID",
|
||||
serialize=False,
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
),
|
||||
),
|
||||
("ip", models.GenericIPAddressField()),
|
||||
("nameserver", models.CharField(max_length=255)),
|
||||
(
|
||||
"customer",
|
||||
models.ForeignKey(
|
||||
verbose_name="customer",
|
||||
to=settings.AUTH_USER_MODEL,
|
||||
on_delete=models.CASCADE,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='DNSTSIGKey',
|
||||
name="DNSTSIGKey",
|
||||
fields=[
|
||||
('id', models.AutoField(
|
||||
verbose_name='ID', serialize=False,
|
||||
auto_created=True, primary_key=True)),
|
||||
('name', models.CharField(max_length=255)),
|
||||
('algorithm', models.CharField(max_length=50)),
|
||||
('secret', models.CharField(max_length=255)),
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
verbose_name="ID",
|
||||
serialize=False,
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
),
|
||||
),
|
||||
("name", models.CharField(max_length=255)),
|
||||
("algorithm", models.CharField(max_length=50)),
|
||||
("secret", models.CharField(max_length=255)),
|
||||
],
|
||||
),
|
||||
migrations.RunSQL(
|
||||
'''ALTER TABLE domains_dnstsigkey ADD CONSTRAINT c_lowercase_name
|
||||
CHECK (((name)::TEXT = LOWER((name)::TEXT)))'''
|
||||
"""ALTER TABLE domains_dnstsigkey ADD CONSTRAINT c_lowercase_name
|
||||
CHECK (((name)::TEXT = LOWER((name)::TEXT)))"""
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='hostingdomain',
|
||||
name='domain',
|
||||
model_name="hostingdomain",
|
||||
name="domain",
|
||||
field=models.CharField(
|
||||
unique=True, max_length=255, verbose_name='domain name'),
|
||||
unique=True, max_length=255, verbose_name="domain name"
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='maildomain',
|
||||
name='domain',
|
||||
model_name="maildomain",
|
||||
name="domain",
|
||||
field=models.CharField(
|
||||
unique=True, max_length=255, verbose_name='domain name'),
|
||||
unique=True, max_length=255, verbose_name="domain name"
|
||||
),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='dnscryptokey',
|
||||
name='domain',
|
||||
field=models.ForeignKey(
|
||||
to='domains.DNSDomain', on_delete=models.CASCADE),
|
||||
model_name="dnscryptokey",
|
||||
name="domain",
|
||||
field=models.ForeignKey(to="domains.DNSDomain", on_delete=models.CASCADE),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='dnscomment',
|
||||
name='domain',
|
||||
field=models.ForeignKey(
|
||||
to='domains.DNSDomain', on_delete=models.CASCADE),
|
||||
model_name="dnscomment",
|
||||
name="domain",
|
||||
field=models.ForeignKey(to="domains.DNSDomain", on_delete=models.CASCADE),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='dnssupermaster',
|
||||
unique_together=set([('ip', 'nameserver')]),
|
||||
name="dnssupermaster",
|
||||
unique_together=set([("ip", "nameserver")]),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='dnstsigkey',
|
||||
unique_together=set([('name', 'algorithm')]),
|
||||
name="dnstsigkey",
|
||||
unique_together=set([("name", "algorithm")]),
|
||||
),
|
||||
migrations.AlterIndexTogether(
|
||||
name='dnsrecord',
|
||||
index_together=set([('name', 'recordtype')]),
|
||||
name="dnsrecord",
|
||||
index_together=set([("name", "recordtype")]),
|
||||
),
|
||||
migrations.AlterIndexTogether(
|
||||
name='dnscomment',
|
||||
index_together={('name', 'commenttype'), ('domain', 'modified_at')},
|
||||
name="dnscomment",
|
||||
index_together={("name", "commenttype"), ("domain", "modified_at")},
|
||||
),
|
||||
]
|
||||
|
|
|
@ -1,44 +1,87 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('domains', '0003_auto_20151105_2133'),
|
||||
("domains", "0003_auto_20151105_2133"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name='dnscomment',
|
||||
options={'verbose_name': 'DNS comment', 'verbose_name_plural': 'DNS comments'},
|
||||
name="dnscomment",
|
||||
options={
|
||||
"verbose_name": "DNS comment",
|
||||
"verbose_name_plural": "DNS comments",
|
||||
},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='dnscryptokey',
|
||||
options={'verbose_name': 'DNS crypto key', 'verbose_name_plural': 'DNS crypto keys'},
|
||||
name="dnscryptokey",
|
||||
options={
|
||||
"verbose_name": "DNS crypto key",
|
||||
"verbose_name_plural": "DNS crypto keys",
|
||||
},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='dnsdomainmetadata',
|
||||
options={'verbose_name': 'DNS domain metadata item', 'verbose_name_plural': 'DNS domain metadata items'},
|
||||
name="dnsdomainmetadata",
|
||||
options={
|
||||
"verbose_name": "DNS domain metadata item",
|
||||
"verbose_name_plural": "DNS domain metadata items",
|
||||
},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='dnssupermaster',
|
||||
options={'verbose_name': 'DNS supermaster', 'verbose_name_plural': 'DNS supermasters'},
|
||||
name="dnssupermaster",
|
||||
options={
|
||||
"verbose_name": "DNS supermaster",
|
||||
"verbose_name_plural": "DNS supermasters",
|
||||
},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='dnstsigkey',
|
||||
options={'verbose_name': 'DNS TSIG key', 'verbose_name_plural': 'DNS TSIG keys'},
|
||||
name="dnstsigkey",
|
||||
options={
|
||||
"verbose_name": "DNS TSIG key",
|
||||
"verbose_name_plural": "DNS TSIG keys",
|
||||
},
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='dnsdomainmetadata',
|
||||
name='kind',
|
||||
field=models.CharField(max_length=32, choices=[('ALLOW-DNSUPDATE-FROM', 'ALLOW-DNSUPDATE-FROM'), ('ALSO-NOTIFY', 'ALSO-NOTIFY'), ('AXFR-MASTER-TSIG', 'AXFR-MASTER-TSIG'), ('AXFR-SOURCE', 'AXFR-SOURCE'), ('FORWARD-DNSUPDATE', 'FORWARD-DNSUPDATE'), ('GSS-ACCEPTOR-PRINCIPAL', 'GSS-ACCEPTOR-PRINCIPAL'), ('GSS-ALLOW-AXFR-PRINCIPAL', 'GSS-ALLOW-AXFR-PRINCIPAL'), ('LUA-AXFR-SCRIPT', 'LUA-AXFR-SCRIPT'), ('NSEC3NARROW', 'NSEC3NARROW'), ('NSEC3PARAM', 'NSEC3PARAM'), ('PRESIGNED', 'PRESIGNED'), ('PUBLISH_CDNSKEY', 'PUBLISH_CDNSKEY'), ('PUBLISH_CDS', 'PUBLISH_CDS'), ('SOA-EDIT', 'SOA-EDIT'), ('SOA-EDIT-DNSUPDATE', 'SOA-EDIT-DNSUPDATE'), ('TSIG-ALLOW-AXFR', 'TSIG-ALLOW-AXFR'), ('TSIG-ALLOW-DNSUPDATE', 'TSIG-ALLOW-DNSUPDATE')]),
|
||||
model_name="dnsdomainmetadata",
|
||||
name="kind",
|
||||
field=models.CharField(
|
||||
max_length=32,
|
||||
choices=[
|
||||
("ALLOW-DNSUPDATE-FROM", "ALLOW-DNSUPDATE-FROM"),
|
||||
("ALSO-NOTIFY", "ALSO-NOTIFY"),
|
||||
("AXFR-MASTER-TSIG", "AXFR-MASTER-TSIG"),
|
||||
("AXFR-SOURCE", "AXFR-SOURCE"),
|
||||
("FORWARD-DNSUPDATE", "FORWARD-DNSUPDATE"),
|
||||
("GSS-ACCEPTOR-PRINCIPAL", "GSS-ACCEPTOR-PRINCIPAL"),
|
||||
("GSS-ALLOW-AXFR-PRINCIPAL", "GSS-ALLOW-AXFR-PRINCIPAL"),
|
||||
("LUA-AXFR-SCRIPT", "LUA-AXFR-SCRIPT"),
|
||||
("NSEC3NARROW", "NSEC3NARROW"),
|
||||
("NSEC3PARAM", "NSEC3PARAM"),
|
||||
("PRESIGNED", "PRESIGNED"),
|
||||
("PUBLISH_CDNSKEY", "PUBLISH_CDNSKEY"),
|
||||
("PUBLISH_CDS", "PUBLISH_CDS"),
|
||||
("SOA-EDIT", "SOA-EDIT"),
|
||||
("SOA-EDIT-DNSUPDATE", "SOA-EDIT-DNSUPDATE"),
|
||||
("TSIG-ALLOW-AXFR", "TSIG-ALLOW-AXFR"),
|
||||
("TSIG-ALLOW-DNSUPDATE", "TSIG-ALLOW-DNSUPDATE"),
|
||||
],
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='dnstsigkey',
|
||||
name='algorithm',
|
||||
field=models.CharField(max_length=50, choices=[('hmac-md5', 'HMAC MD5'), ('hmac-sha1', 'HMAC SHA1'), ('hmac-sha224', 'HMAC SHA224'), ('hmac-sha256', 'HMAC SHA256'), ('hmac-sha384', 'HMAC SHA384'), ('hmac-sha512', 'HMAC SHA512')]),
|
||||
model_name="dnstsigkey",
|
||||
name="algorithm",
|
||||
field=models.CharField(
|
||||
max_length=50,
|
||||
choices=[
|
||||
("hmac-md5", "HMAC MD5"),
|
||||
("hmac-sha1", "HMAC SHA1"),
|
||||
("hmac-sha224", "HMAC SHA224"),
|
||||
("hmac-sha256", "HMAC SHA256"),
|
||||
("hmac-sha384", "HMAC SHA384"),
|
||||
("hmac-sha512", "HMAC SHA512"),
|
||||
],
|
||||
),
|
||||
),
|
||||
]
|
||||
|
|
|
@ -2,51 +2,48 @@
|
|||
This module contains models related to domain names.
|
||||
|
||||
"""
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
from __future__ import absolute_import
|
||||
|
||||
from django.db import models, transaction
|
||||
from django.conf import settings
|
||||
from django.utils.encoding import python_2_unicode_compatible
|
||||
from django.utils.translation import ugettext as _
|
||||
|
||||
from model_utils.models import TimeStampedModel
|
||||
from django.db import models, transaction
|
||||
from django.utils.translation import gettext as _
|
||||
from model_utils import Choices
|
||||
|
||||
from model_utils.models import TimeStampedModel
|
||||
|
||||
DNS_DOMAIN_TYPES = Choices(
|
||||
('MASTER', _('Master')),
|
||||
('SLAVE', _('Slave')),
|
||||
('NATIVE', _('Native')),
|
||||
("MASTER", _("Master")),
|
||||
("SLAVE", _("Slave")),
|
||||
("NATIVE", _("Native")),
|
||||
)
|
||||
|
||||
# see https://doc.powerdns.com/md/authoritative/domainmetadata/
|
||||
DNS_DOMAIN_METADATA_KINDS = Choices(
|
||||
'ALLOW-DNSUPDATE-FROM',
|
||||
'ALSO-NOTIFY',
|
||||
'AXFR-MASTER-TSIG',
|
||||
'AXFR-SOURCE',
|
||||
'FORWARD-DNSUPDATE',
|
||||
'GSS-ACCEPTOR-PRINCIPAL',
|
||||
'GSS-ALLOW-AXFR-PRINCIPAL',
|
||||
'LUA-AXFR-SCRIPT',
|
||||
'NSEC3NARROW',
|
||||
'NSEC3PARAM',
|
||||
'PRESIGNED',
|
||||
'PUBLISH_CDNSKEY',
|
||||
'PUBLISH_CDS',
|
||||
'SOA-EDIT',
|
||||
'SOA-EDIT-DNSUPDATE',
|
||||
'TSIG-ALLOW-AXFR',
|
||||
'TSIG-ALLOW-DNSUPDATE',
|
||||
"ALLOW-DNSUPDATE-FROM",
|
||||
"ALSO-NOTIFY",
|
||||
"AXFR-MASTER-TSIG",
|
||||
"AXFR-SOURCE",
|
||||
"FORWARD-DNSUPDATE",
|
||||
"GSS-ACCEPTOR-PRINCIPAL",
|
||||
"GSS-ALLOW-AXFR-PRINCIPAL",
|
||||
"LUA-AXFR-SCRIPT",
|
||||
"NSEC3NARROW",
|
||||
"NSEC3PARAM",
|
||||
"PRESIGNED",
|
||||
"PUBLISH_CDNSKEY",
|
||||
"PUBLISH_CDS",
|
||||
"SOA-EDIT",
|
||||
"SOA-EDIT-DNSUPDATE",
|
||||
"TSIG-ALLOW-AXFR",
|
||||
"TSIG-ALLOW-DNSUPDATE",
|
||||
)
|
||||
|
||||
DNS_TSIG_KEY_ALGORITHMS = Choices(
|
||||
('hmac-md5', _('HMAC MD5')),
|
||||
('hmac-sha1', _('HMAC SHA1')),
|
||||
('hmac-sha224', _('HMAC SHA224')),
|
||||
('hmac-sha256', _('HMAC SHA256')),
|
||||
('hmac-sha384', _('HMAC SHA384')),
|
||||
('hmac-sha512', _('HMAC SHA512')),
|
||||
("hmac-md5", _("HMAC MD5")),
|
||||
("hmac-sha1", _("HMAC SHA1")),
|
||||
("hmac-sha224", _("HMAC SHA224")),
|
||||
("hmac-sha256", _("HMAC SHA256")),
|
||||
("hmac-sha384", _("HMAC SHA384")),
|
||||
("hmac-sha512", _("HMAC SHA512")),
|
||||
)
|
||||
|
||||
|
||||
|
@ -55,16 +52,20 @@ class DomainBase(TimeStampedModel):
|
|||
This is the base model for domains.
|
||||
|
||||
"""
|
||||
domain = models.CharField(_('domain name'), max_length=255, unique=True)
|
||||
|
||||
domain = models.CharField(_("domain name"), max_length=255, unique=True)
|
||||
customer = models.ForeignKey(
|
||||
settings.AUTH_USER_MODEL, verbose_name=_('customer'), blank=True,
|
||||
null=True, on_delete=models.CASCADE)
|
||||
settings.AUTH_USER_MODEL,
|
||||
verbose_name=_("customer"),
|
||||
blank=True,
|
||||
null=True,
|
||||
on_delete=models.CASCADE,
|
||||
)
|
||||
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
|
||||
@python_2_unicode_compatible
|
||||
class MailDomain(DomainBase):
|
||||
"""
|
||||
This is the model for mail domains. Mail domains are used to configure the
|
||||
|
@ -72,9 +73,10 @@ class MailDomain(DomainBase):
|
|||
domains.
|
||||
|
||||
"""
|
||||
class Meta:
|
||||
verbose_name = _('Mail domain')
|
||||
verbose_name_plural = _('Mail domains')
|
||||
|
||||
class Meta(DomainBase.Meta):
|
||||
verbose_name = _("Mail domain")
|
||||
verbose_name_plural = _("Mail domains")
|
||||
|
||||
def __str__(self):
|
||||
return self.domain
|
||||
|
@ -85,6 +87,7 @@ class MailDomain(DomainBase):
|
|||
|
||||
"""
|
||||
return self.mailaddress_set.all()
|
||||
|
||||
mailaddresses = property(get_mailaddresses)
|
||||
|
||||
|
||||
|
@ -93,47 +96,52 @@ class HostingDomainManager(models.Manager):
|
|||
Default Manager for :py:class:`HostingDomain`.
|
||||
|
||||
"""
|
||||
|
||||
@transaction.atomic
|
||||
def create_for_hosting_package(
|
||||
self, hosting_package, domain, commit, **kwargs
|
||||
):
|
||||
def create_for_hosting_package(self, hosting_package, domain, commit, **kwargs):
|
||||
from hostingpackages.models import CustomerHostingPackageDomain
|
||||
|
||||
hostingdomain = self.create(
|
||||
customer=hosting_package.customer, domain=domain, **kwargs)
|
||||
customer=hosting_package.customer, domain=domain, **kwargs
|
||||
)
|
||||
hostingdomain.maildomain = MailDomain.objects.create(
|
||||
customer=hosting_package.customer, domain=domain)
|
||||
customer=hosting_package.customer, domain=domain
|
||||
)
|
||||
custdomain = CustomerHostingPackageDomain.objects.create(
|
||||
hosting_package=hosting_package, domain=hostingdomain)
|
||||
hosting_package=hosting_package, domain=hostingdomain
|
||||
)
|
||||
if commit:
|
||||
hostingdomain.save()
|
||||
custdomain.save()
|
||||
return hostingdomain
|
||||
|
||||
|
||||
@python_2_unicode_compatible
|
||||
class HostingDomain(DomainBase):
|
||||
"""
|
||||
This is the model for hosting domains. A hosting domain is linked to a
|
||||
customer hosting account.
|
||||
|
||||
"""
|
||||
|
||||
maildomain = models.OneToOneField(
|
||||
MailDomain, verbose_name=_('mail domain'), blank=True, null=True,
|
||||
help_text=_('assigned mail domain for this domain'),
|
||||
MailDomain,
|
||||
verbose_name=_("mail domain"),
|
||||
blank=True,
|
||||
null=True,
|
||||
help_text=_("assigned mail domain for this domain"),
|
||||
on_delete=models.CASCADE,
|
||||
)
|
||||
|
||||
objects = HostingDomainManager()
|
||||
|
||||
class Meta:
|
||||
verbose_name = _('Hosting domain')
|
||||
verbose_name_plural = _('Hosting domains')
|
||||
verbose_name = _("Hosting domain")
|
||||
verbose_name_plural = _("Hosting domains")
|
||||
|
||||
def __str__(self):
|
||||
return self.domain
|
||||
|
||||
|
||||
@python_2_unicode_compatible
|
||||
class DNSDomain(DomainBase):
|
||||
"""
|
||||
This model represents a DNS zone. The model is similar to the domain table
|
||||
|
@ -157,24 +165,25 @@ class DNSDomain(DomainBase):
|
|||
CREATE UNIQUE INDEX name_index ON domains(name);
|
||||
|
||||
"""
|
||||
|
||||
# name is represented by domain
|
||||
master = models.CharField(max_length=128, blank=True, null=True)
|
||||
last_check = models.IntegerField(null=True)
|
||||
domaintype = models.CharField(
|
||||
max_length=6, choices=DNS_DOMAIN_TYPES, db_column='type')
|
||||
max_length=6, choices=DNS_DOMAIN_TYPES, db_column="type"
|
||||
)
|
||||
notified_serial = models.IntegerField(null=True)
|
||||
# account is represented by customer_id
|
||||
# check constraint is added via RunSQL in migration
|
||||
|
||||
class Meta:
|
||||
verbose_name = _('DNS domain')
|
||||
verbose_name_plural = _('DNS domains')
|
||||
verbose_name = _("DNS domain")
|
||||
verbose_name_plural = _("DNS domains")
|
||||
|
||||
def __str__(self):
|
||||
return self.domain
|
||||
|
||||
|
||||
@python_2_unicode_compatible
|
||||
class DNSRecord(models.Model):
|
||||
"""
|
||||
This model represents a DNS record. The model is similar to the record
|
||||
|
@ -209,11 +218,12 @@ class DNSRecord(models.Model):
|
|||
domain_id, ordername text_pattern_ops);
|
||||
|
||||
"""
|
||||
domain = models.ForeignKey('DNSDomain', on_delete=models.CASCADE)
|
||||
name = models.CharField(
|
||||
max_length=255, blank=True, null=True, db_index=True)
|
||||
|
||||
domain = models.ForeignKey("DNSDomain", on_delete=models.CASCADE)
|
||||
name = models.CharField(max_length=255, blank=True, null=True, db_index=True)
|
||||
recordtype = models.CharField(
|
||||
max_length=10, blank=True, null=True, db_column='type')
|
||||
max_length=10, blank=True, null=True, db_column="type"
|
||||
)
|
||||
content = models.CharField(max_length=65535, blank=True, null=True)
|
||||
ttl = models.IntegerField(null=True)
|
||||
prio = models.IntegerField(null=True)
|
||||
|
@ -224,18 +234,16 @@ class DNSRecord(models.Model):
|
|||
# check constraint and index recordorder are added via RunSQL in migration
|
||||
|
||||
class Meta:
|
||||
verbose_name = _('DNS record')
|
||||
verbose_name_plural = _('DNS records')
|
||||
index_together = [
|
||||
['name', 'recordtype']
|
||||
]
|
||||
verbose_name = _("DNS record")
|
||||
verbose_name_plural = _("DNS records")
|
||||
index_together = [["name", "recordtype"]]
|
||||
|
||||
def __str__(self):
|
||||
return "{name} IN {type} {content}".format(
|
||||
name=self.name, type=self.recordtype, content=self.content)
|
||||
name=self.name, type=self.recordtype, content=self.content
|
||||
)
|
||||
|
||||
|
||||
@python_2_unicode_compatible
|
||||
class DNSSupermaster(models.Model):
|
||||
"""
|
||||
This model represents the supermasters table in the PowerDNS schema
|
||||
|
@ -252,26 +260,23 @@ class DNSSupermaster(models.Model):
|
|||
);
|
||||
|
||||
"""
|
||||
|
||||
ip = models.GenericIPAddressField()
|
||||
nameserver = models.CharField(max_length=255)
|
||||
# account is replaced by customer
|
||||
customer = models.ForeignKey(
|
||||
settings.AUTH_USER_MODEL, verbose_name=_('customer'),
|
||||
on_delete=models.CASCADE)
|
||||
settings.AUTH_USER_MODEL, verbose_name=_("customer"), on_delete=models.CASCADE
|
||||
)
|
||||
|
||||
class Meta:
|
||||
verbose_name = _('DNS supermaster')
|
||||
verbose_name_plural = _('DNS supermasters')
|
||||
unique_together = (
|
||||
('ip', 'nameserver')
|
||||
)
|
||||
verbose_name = _("DNS supermaster")
|
||||
verbose_name_plural = _("DNS supermasters")
|
||||
unique_together = ("ip", "nameserver")
|
||||
|
||||
def __str__(self):
|
||||
return "{ip} {nameserver}".format(
|
||||
ip=self.ip, nameserver=self.nameserver)
|
||||
return "{ip} {nameserver}".format(ip=self.ip, nameserver=self.nameserver)
|
||||
|
||||
|
||||
@python_2_unicode_compatible
|
||||
class DNSComment(models.Model):
|
||||
"""
|
||||
This model represents the comments table in the PowerDNS schema specified
|
||||
|
@ -301,31 +306,29 @@ class DNSComment(models.Model):
|
|||
CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);
|
||||
|
||||
"""
|
||||
domain = models.ForeignKey('DNSDomain', on_delete=models.CASCADE)
|
||||
|
||||
domain = models.ForeignKey("DNSDomain", on_delete=models.CASCADE)
|
||||
name = models.CharField(max_length=255)
|
||||
commenttype = models.CharField(max_length=10, db_column='type')
|
||||
commenttype = models.CharField(max_length=10, db_column="type")
|
||||
modified_at = models.IntegerField()
|
||||
# account is replaced by customer
|
||||
customer = models.ForeignKey(
|
||||
settings.AUTH_USER_MODEL, verbose_name=_('customer'),
|
||||
on_delete=models.CASCADE)
|
||||
settings.AUTH_USER_MODEL, verbose_name=_("customer"), on_delete=models.CASCADE
|
||||
)
|
||||
comment = models.CharField(max_length=65535)
|
||||
# check constraint is added via RunSQL in migration
|
||||
|
||||
class Meta:
|
||||
verbose_name = _('DNS comment')
|
||||
verbose_name_plural = _('DNS comments')
|
||||
index_together = [
|
||||
['name', 'commenttype'],
|
||||
['domain', 'modified_at']
|
||||
]
|
||||
verbose_name = _("DNS comment")
|
||||
verbose_name_plural = _("DNS comments")
|
||||
index_together = [["name", "commenttype"], ["domain", "modified_at"]]
|
||||
|
||||
def __str__(self):
|
||||
return "{name} IN {type}: {comment}".format(
|
||||
name=self.name, type=self.commenttype, comment=self.comment)
|
||||
name=self.name, type=self.commenttype, comment=self.comment
|
||||
)
|
||||
|
||||
|
||||
@python_2_unicode_compatible
|
||||
class DNSDomainMetadata(models.Model):
|
||||
"""
|
||||
This model represents the domainmetadata table in the PowerDNS schema
|
||||
|
@ -346,20 +349,21 @@ class DNSDomainMetadata(models.Model):
|
|||
CREATE INDEX domainidmetaindex ON domainmetadata(domain_id);
|
||||
|
||||
"""
|
||||
domain = models.ForeignKey('DNSDomain', on_delete=models.CASCADE)
|
||||
|
||||
domain = models.ForeignKey("DNSDomain", on_delete=models.CASCADE)
|
||||
kind = models.CharField(max_length=32, choices=DNS_DOMAIN_METADATA_KINDS)
|
||||
content = models.TextField()
|
||||
|
||||
class Meta:
|
||||
verbose_name = _('DNS domain metadata item')
|
||||
verbose_name_plural = _('DNS domain metadata items')
|
||||
verbose_name = _("DNS domain metadata item")
|
||||
verbose_name_plural = _("DNS domain metadata items")
|
||||
|
||||
def __str__(self):
|
||||
return "{domain} {kind} {content}".format(
|
||||
domain=self.domain.domain, kind=self.kind, content=self.content)
|
||||
domain=self.domain.domain, kind=self.kind, content=self.content
|
||||
)
|
||||
|
||||
|
||||
@python_2_unicode_compatible
|
||||
class DNSCryptoKey(models.Model):
|
||||
"""
|
||||
This model represents the cryptokeys table in the PowerDNS schema
|
||||
|
@ -379,21 +383,22 @@ class DNSCryptoKey(models.Model):
|
|||
CREATE INDEX domainidindex ON cryptokeys(domain_id);
|
||||
|
||||
"""
|
||||
domain = models.ForeignKey('DNSDomain', on_delete=models.CASCADE)
|
||||
|
||||
domain = models.ForeignKey("DNSDomain", on_delete=models.CASCADE)
|
||||
flags = models.IntegerField()
|
||||
active = models.BooleanField(default=True)
|
||||
content = models.TextField()
|
||||
|
||||
class Meta:
|
||||
verbose_name = _('DNS crypto key')
|
||||
verbose_name_plural = _('DNS crypto keys')
|
||||
verbose_name = _("DNS crypto key")
|
||||
verbose_name_plural = _("DNS crypto keys")
|
||||
|
||||
def __str__(self):
|
||||
return "{domain} {content}".format(
|
||||
domain=self.domain.domain, content=self.content)
|
||||
domain=self.domain.domain, content=self.content
|
||||
)
|
||||
|
||||
|
||||
@python_2_unicode_compatible
|
||||
class DNSTSIGKey(models.Model):
|
||||
"""
|
||||
This model represents the tsigkeys table in the PowerDNS schema specified
|
||||
|
@ -413,19 +418,18 @@ class DNSTSIGKey(models.Model):
|
|||
CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);
|
||||
|
||||
"""
|
||||
|
||||
name = models.CharField(max_length=255)
|
||||
algorithm = models.CharField(
|
||||
max_length=50, choices=DNS_TSIG_KEY_ALGORITHMS)
|
||||
algorithm = models.CharField(max_length=50, choices=DNS_TSIG_KEY_ALGORITHMS)
|
||||
secret = models.CharField(max_length=255)
|
||||
# check constraint is added via RunSQL in migration
|
||||
|
||||
class Meta:
|
||||
verbose_name = _('DNS TSIG key')
|
||||
verbose_name_plural = _('DNS TSIG keys')
|
||||
unique_together = [
|
||||
['name', 'algorithm']
|
||||
]
|
||||
verbose_name = _("DNS TSIG key")
|
||||
verbose_name_plural = _("DNS TSIG keys")
|
||||
unique_together = [["name", "algorithm"]]
|
||||
|
||||
def __str__(self):
|
||||
return "{name} {algorithm} XXXX".format(
|
||||
name=self.name, algorithm=self.algorithm)
|
||||
name=self.name, algorithm=self.algorithm
|
||||
)
|
||||
|
|
|
@ -7,9 +7,9 @@ from unittest.mock import MagicMock, Mock, patch
|
|||
from django.forms import ValidationError
|
||||
from django.test import TestCase
|
||||
from django.urls import reverse
|
||||
from django.utils.translation import ugettext as _
|
||||
from django.utils.translation import gettext as _
|
||||
|
||||
from domains.forms import relative_domain_validator, CreateHostingDomainForm
|
||||
from domains.forms import CreateHostingDomainForm, relative_domain_validator
|
||||
|
||||
|
||||
class RelativeDomainValidatorTest(TestCase):
|
||||
|
|
|
@ -2,14 +2,16 @@
|
|||
This module defines the URL patterns for domain related views.
|
||||
|
||||
"""
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
from __future__ import absolute_import
|
||||
|
||||
from django.conf.urls import url
|
||||
from django.urls import re_path
|
||||
|
||||
from .views import CreateHostingDomain
|
||||
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^(?P<package>\d+)/create$', CreateHostingDomain.as_view(),
|
||||
name='create_hosting_domain'),
|
||||
re_path(
|
||||
r"^(?P<package>\d+)/create$",
|
||||
CreateHostingDomain.as_view(),
|
||||
name="create_hosting_domain",
|
||||
),
|
||||
]
|
||||
|
|
|
@ -2,15 +2,16 @@
|
|||
This module defines views related to domains.
|
||||
|
||||
"""
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
from __future__ import absolute_import
|
||||
|
||||
from braces.views import StaffuserRequiredMixin
|
||||
from django.contrib import messages
|
||||
from django.shortcuts import get_object_or_404, redirect
|
||||
from django.utils.translation import ugettext as _
|
||||
from django.utils.translation import gettext as _
|
||||
from django.views.generic.edit import CreateView
|
||||
|
||||
from hostingpackages.models import CustomerHostingPackage
|
||||
|
||||
from .forms import CreateHostingDomainForm
|
||||
from .models import HostingDomain
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue