Started port to Django 2.1, Python 3, Docker
This commit is a rough port to Django 2.1, Python 3 and a Docker based local development setup. Tests fail/error but migrations and the web frontend are already runnable. Task queue functionality is untested and translations seem to have trouble.
This commit is contained in:
parent
adc57657dd
commit
6cebd80c89
48 changed files with 1081 additions and 576 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -48,3 +48,5 @@ _build/
|
||||||
gnuviechadmin/assets/
|
gnuviechadmin/assets/
|
||||||
coverage-report/
|
coverage-report/
|
||||||
.idea/
|
.idea/
|
||||||
|
|
||||||
|
.env
|
31
Dockerfile
Normal file
31
Dockerfile
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
FROM debian:stretch
|
||||||
|
LABEL maintainer "Jan Dittberner <jan@dittberner.info>"
|
||||||
|
|
||||||
|
RUN apt-get update \
|
||||||
|
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
|
||||||
|
dumb-init \
|
||||||
|
gettext \
|
||||||
|
git \
|
||||||
|
libpq-dev \
|
||||||
|
python3-dev \
|
||||||
|
python3-pip \
|
||||||
|
&& apt-get clean \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*.*
|
||||||
|
|
||||||
|
VOLUME /srv/gnuviechadmin/media /srv/gnuviechadmin/static
|
||||||
|
WORKDIR /srv/gnuviechadmin
|
||||||
|
|
||||||
|
ENV LC_ALL=C.UTF-8
|
||||||
|
ENV LANG=C.UTF-8
|
||||||
|
|
||||||
|
RUN python3 -m pip install -U pip && pip3 install pipenv
|
||||||
|
|
||||||
|
COPY gnuviechadmin.sh /srv/
|
||||||
|
COPY Pipfile Pipfile.lock /srv/gnuviechadmin/
|
||||||
|
|
||||||
|
RUN pipenv install --system --deploy --ignore-pipfile --dev
|
||||||
|
|
||||||
|
EXPOSE 8000
|
||||||
|
VOLUME /srv/gnuviechadmin
|
||||||
|
|
||||||
|
ENTRYPOINT ["dumb-init", "/srv/gnuviechadmin.sh"]
|
4
Pipfile
4
Pipfile
|
@ -13,6 +13,8 @@ redis = "*"
|
||||||
gvacommon = {ref = "0.4.0", git = "https://git.dittberner.info/gnuviech/gvacommon.git"}
|
gvacommon = {ref = "0.4.0", git = "https://git.dittberner.info/gnuviech/gvacommon.git"}
|
||||||
requests-oauthlib = "*"
|
requests-oauthlib = "*"
|
||||||
django-allauth = "*"
|
django-allauth = "*"
|
||||||
|
django-crispy-forms = "*"
|
||||||
|
django-braces = "*"
|
||||||
|
|
||||||
[dev-packages]
|
[dev-packages]
|
||||||
coverage = "*"
|
coverage = "*"
|
||||||
|
@ -23,4 +25,4 @@ sphinxcontrib-blockdiag = "*"
|
||||||
pylama = "*"
|
pylama = "*"
|
||||||
|
|
||||||
[requires]
|
[requires]
|
||||||
python_version = "3.6"
|
python_version = "3.5"
|
||||||
|
|
20
Pipfile.lock
generated
20
Pipfile.lock
generated
|
@ -1,11 +1,11 @@
|
||||||
{
|
{
|
||||||
"_meta": {
|
"_meta": {
|
||||||
"hash": {
|
"hash": {
|
||||||
"sha256": "ed0a23d288cc817ebfbf92a4acd140eee9e083d6331eaa5f06bdbc0d37c4767f"
|
"sha256": "3b941559bcaf1c164285aef53553496fbf1414f362da1433b705ac7c796e33e6"
|
||||||
},
|
},
|
||||||
"pipfile-spec": 6,
|
"pipfile-spec": 6,
|
||||||
"requires": {
|
"requires": {
|
||||||
"python_version": "3.6"
|
"python_version": "3.5"
|
||||||
},
|
},
|
||||||
"sources": [
|
"sources": [
|
||||||
{
|
{
|
||||||
|
@ -73,6 +73,22 @@
|
||||||
"index": "pypi",
|
"index": "pypi",
|
||||||
"version": "==0.38.0"
|
"version": "==0.38.0"
|
||||||
},
|
},
|
||||||
|
"django-braces": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:a457d74ea29478123c0c4652272681b3cea0bf1232187fd9f9b6f1d97d32a890",
|
||||||
|
"sha256:ba68e98b817c6f01d71d10849f359979617b3fe4cefb7f289adefddced092ddc"
|
||||||
|
],
|
||||||
|
"index": "pypi",
|
||||||
|
"version": "==1.13.0"
|
||||||
|
},
|
||||||
|
"django-crispy-forms": {
|
||||||
|
"hashes": [
|
||||||
|
"sha256:5952bab971110d0b86c278132dae0aa095beee8f723e625c3d3fa28888f1675f",
|
||||||
|
"sha256:705ededc554ad8736157c666681165fe22ead2dec0d5446d65fc9dd976a5a876"
|
||||||
|
],
|
||||||
|
"index": "pypi",
|
||||||
|
"version": "==1.7.2"
|
||||||
|
},
|
||||||
"django-model-utils": {
|
"django-model-utils": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:2c057f3bf0859aba27f04389f0cedd2d48f8c9b3848acb86fd9970794e58f477",
|
"sha256:2c057f3bf0859aba27f04389f0cedd2d48f8c9b3848acb86fd9970794e58f477",
|
||||||
|
|
26
Vagrantfile
vendored
26
Vagrantfile
vendored
|
@ -1,26 +0,0 @@
|
||||||
# -*- mode: ruby -*-
|
|
||||||
# vi: set ft=ruby :
|
|
||||||
|
|
||||||
Vagrant.configure(2) do |config|
|
|
||||||
config.vm.box = "debian/stretch64"
|
|
||||||
|
|
||||||
config.vm.hostname = "gva.local"
|
|
||||||
config.vm.network "private_network", ip: "172.16.3.2", lxc__bridge_name: 'vlxcbr1'
|
|
||||||
|
|
||||||
config.vm.network "forwarded_port", guest: 443, host: 8443
|
|
||||||
config.vm.network "forwarded_port", guest: 8000, host: 8000
|
|
||||||
config.vm.network "forwarded_port", guest: 15672, host: 15672
|
|
||||||
|
|
||||||
config.vm.synced_folder "../gvasalt/states/", "/srv/salt/"
|
|
||||||
config.vm.synced_folder "../gvasalt/pillar/", "/srv/pillar/"
|
|
||||||
|
|
||||||
config.vm.provision :salt do |salt|
|
|
||||||
salt.bootstrap_script = "salt/bootstrap.sh"
|
|
||||||
salt.minion_id = "gva.local"
|
|
||||||
salt.masterless = true
|
|
||||||
salt.run_highstate = true
|
|
||||||
salt.verbose = true
|
|
||||||
salt.colorize = true
|
|
||||||
salt.log_level = "warning"
|
|
||||||
end
|
|
||||||
end
|
|
43
docker-compose.yml
Normal file
43
docker-compose.yml
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
version: "3"
|
||||||
|
services:
|
||||||
|
db:
|
||||||
|
image: gnuviech/pgsql:stretch
|
||||||
|
ports:
|
||||||
|
- "15432:5432"
|
||||||
|
env_file: .env
|
||||||
|
volumes:
|
||||||
|
- "pg_data:/var/lib/postgresql/9.6/main"
|
||||||
|
mq:
|
||||||
|
image: gnuviech/mq:stretch
|
||||||
|
env_file: .env
|
||||||
|
volumes:
|
||||||
|
- "mq_data:/var/lib/rabbitmq/mnesia"
|
||||||
|
redis:
|
||||||
|
image: gnuviech/redis:stretch
|
||||||
|
env_file: .env
|
||||||
|
volumes:
|
||||||
|
- "redis_data:/var/lib/redis"
|
||||||
|
gva:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
ports:
|
||||||
|
- "8000:8000"
|
||||||
|
depends_on:
|
||||||
|
- db
|
||||||
|
- mq
|
||||||
|
- redis
|
||||||
|
env_file: .env
|
||||||
|
environment:
|
||||||
|
DJANGO_SETTINGS_MODULE: gnuviechadmin.settings
|
||||||
|
GVA_DOMAIN_NAME: localhost
|
||||||
|
GVA_SITE_NAME: localhost
|
||||||
|
volumes:
|
||||||
|
- "django_media:/srv/gnuviechadmin/media"
|
||||||
|
- "django_static:/srv/gnuviechadmin/static"
|
||||||
|
- "./gnuviechadmin:/srv/gnuviechadmin"
|
||||||
|
volumes:
|
||||||
|
django_media:
|
||||||
|
django_static:
|
||||||
|
pg_data:
|
||||||
|
redis_data:
|
||||||
|
mq_data:
|
8
gnuviechadmin.sh
Executable file
8
gnuviechadmin.sh
Executable file
|
@ -0,0 +1,8 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
python3 manage.py compilemessages
|
||||||
|
python3 manage.py collectstatic --noinput
|
||||||
|
python3 manage.py migrate --noinput
|
||||||
|
python3 manage.py runserver 0.0.0.0:8000
|
|
@ -7,9 +7,9 @@ from __future__ import absolute_import, unicode_literals
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.mail import send_mail
|
from django.core.mail import send_mail
|
||||||
from django.core.urlresolvers import reverse
|
|
||||||
from django.template import RequestContext
|
from django.template import RequestContext
|
||||||
from django.template import loader
|
from django.template import loader
|
||||||
|
from django.urls import reverse
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from django.contrib.sites.models import Site
|
from django.contrib.sites.models import Site
|
||||||
|
|
|
@ -5,7 +5,7 @@ This module defines the views of the contact_form app.
|
||||||
from __future__ import absolute_import, unicode_literals
|
from __future__ import absolute_import, unicode_literals
|
||||||
|
|
||||||
from django.shortcuts import redirect
|
from django.shortcuts import redirect
|
||||||
from django.core.urlresolvers import reverse_lazy
|
from django.urls import reverse_lazy
|
||||||
from django.views.generic import (
|
from django.views.generic import (
|
||||||
FormView,
|
FormView,
|
||||||
TemplateView,
|
TemplateView,
|
||||||
|
@ -31,7 +31,7 @@ class ContactFormView(FormView):
|
||||||
def get_initial(self):
|
def get_initial(self):
|
||||||
initial = super(ContactFormView, self).get_initial()
|
initial = super(ContactFormView, self).get_initial()
|
||||||
currentuser = self.request.user
|
currentuser = self.request.user
|
||||||
if currentuser.is_authenticated():
|
if currentuser.is_authenticated:
|
||||||
initial['name'] = (
|
initial['name'] = (
|
||||||
currentuser.get_full_name() or currentuser.username)
|
currentuser.get_full_name() or currentuser.username)
|
||||||
initial['email'] = currentuser.email
|
initial['email'] = currentuser.email
|
||||||
|
|
|
@ -7,7 +7,7 @@ from __future__ import absolute_import, unicode_literals
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.core.urlresolvers import reverse
|
from django.urls import reverse
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
|
|
||||||
from crispy_forms.helper import FormHelper
|
from crispy_forms.helper import FormHelper
|
||||||
|
|
|
@ -8,7 +8,6 @@ import model_utils.fields
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||||
('domains', '0001_initial'),
|
('domains', '0001_initial'),
|
||||||
|
@ -18,12 +17,31 @@ class Migration(migrations.Migration):
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='HostingDomain',
|
name='HostingDomain',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
('id',
|
||||||
('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, verbose_name='created', editable=False)),
|
models.AutoField(verbose_name='ID', serialize=False,
|
||||||
('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, verbose_name='modified', editable=False)),
|
auto_created=True, primary_key=True)),
|
||||||
('domain', models.CharField(unique=True, max_length=128, verbose_name='domain name')),
|
('created',
|
||||||
('customer', models.ForeignKey(verbose_name='customer', blank=True, to=settings.AUTH_USER_MODEL, null=True)),
|
model_utils.fields.AutoCreatedField(
|
||||||
('maildomain', models.OneToOneField(null=True, to='domains.MailDomain', blank=True, help_text='assigned mail domain for this domain', verbose_name='mail domain')),
|
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={
|
options={
|
||||||
'verbose_name': 'Hosting domain',
|
'verbose_name': 'Hosting domain',
|
||||||
|
@ -34,13 +52,17 @@ class Migration(migrations.Migration):
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='maildomain',
|
model_name='maildomain',
|
||||||
name='customer',
|
name='customer',
|
||||||
field=models.ForeignKey(verbose_name='customer', blank=True, to=settings.AUTH_USER_MODEL, null=True),
|
field=models.ForeignKey(
|
||||||
|
verbose_name='customer', blank=True,
|
||||||
|
to=settings.AUTH_USER_MODEL, null=True,
|
||||||
|
on_delete=models.CASCADE),
|
||||||
preserve_default=True,
|
preserve_default=True,
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='maildomain',
|
model_name='maildomain',
|
||||||
name='domain',
|
name='domain',
|
||||||
field=models.CharField(unique=True, max_length=128, verbose_name='domain name'),
|
field=models.CharField(
|
||||||
|
unique=True, max_length=128, verbose_name='domain name'),
|
||||||
preserve_default=True,
|
preserve_default=True,
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
|
@ -8,7 +8,6 @@ import model_utils.fields
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||||
('domains', '0002_auto_20150124_1909'),
|
('domains', '0002_auto_20150124_1909'),
|
||||||
|
@ -18,12 +17,17 @@ class Migration(migrations.Migration):
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='DNSComment',
|
name='DNSComment',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
('id', models.AutoField(
|
||||||
|
verbose_name='ID', serialize=False,
|
||||||
|
auto_created=True, primary_key=True)),
|
||||||
('name', models.CharField(max_length=255)),
|
('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()),
|
('modified_at', models.IntegerField()),
|
||||||
('comment', models.CharField(max_length=65535)),
|
('comment', models.CharField(max_length=65535)),
|
||||||
('customer', models.ForeignKey(verbose_name='customer', to=settings.AUTH_USER_MODEL)),
|
('customer', models.ForeignKey(
|
||||||
|
verbose_name='customer',
|
||||||
|
to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
migrations.RunSQL(
|
migrations.RunSQL(
|
||||||
|
@ -33,7 +37,9 @@ class Migration(migrations.Migration):
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='DNSCryptoKey',
|
name='DNSCryptoKey',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
('id', models.AutoField(
|
||||||
|
verbose_name='ID', serialize=False,
|
||||||
|
auto_created=True, primary_key=True)),
|
||||||
('flags', models.IntegerField()),
|
('flags', models.IntegerField()),
|
||||||
('active', models.BooleanField(default=True)),
|
('active', models.BooleanField(default=True)),
|
||||||
('content', models.TextField()),
|
('content', models.TextField()),
|
||||||
|
@ -42,15 +48,30 @@ class Migration(migrations.Migration):
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='DNSDomain',
|
name='DNSDomain',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
('id', models.AutoField(
|
||||||
('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, verbose_name='created', editable=False)),
|
verbose_name='ID', serialize=False,
|
||||||
('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, verbose_name='modified', editable=False)),
|
auto_created=True, primary_key=True)),
|
||||||
('domain', models.CharField(unique=True, max_length=255, verbose_name='domain name')),
|
('created', model_utils.fields.AutoCreatedField(
|
||||||
('master', models.CharField(max_length=128, null=True, blank=True)),
|
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)),
|
('last_check', models.IntegerField(null=True)),
|
||||||
('domaintype', models.CharField(max_length=6, db_column='type', choices=[('MASTER', 'Master'), ('SLAVE', 'Slave'), ('NATIVE', 'Native')])),
|
('domaintype', models.CharField(
|
||||||
|
max_length=6, db_column='type',
|
||||||
|
choices=[('MASTER', 'Master'),
|
||||||
|
('SLAVE', 'Slave'),
|
||||||
|
('NATIVE', 'Native')])),
|
||||||
('notified_serial', models.IntegerField(null=True)),
|
('notified_serial', models.IntegerField(null=True)),
|
||||||
('customer', models.ForeignKey(verbose_name='customer', blank=True, to=settings.AUTH_USER_MODEL, null=True)),
|
('customer', models.ForeignKey(
|
||||||
|
verbose_name='customer', blank=True,
|
||||||
|
to=settings.AUTH_USER_MODEL, null=True,
|
||||||
|
on_delete=models.CASCADE)),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'verbose_name': 'DNS domain',
|
'verbose_name': 'DNS domain',
|
||||||
|
@ -64,26 +85,35 @@ class Migration(migrations.Migration):
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='DNSDomainMetadata',
|
name='DNSDomainMetadata',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
('id', models.AutoField(
|
||||||
|
verbose_name='ID', serialize=False,
|
||||||
|
auto_created=True, primary_key=True)),
|
||||||
('kind', models.CharField(max_length=32)),
|
('kind', models.CharField(max_length=32)),
|
||||||
('content', models.TextField()),
|
('content', models.TextField()),
|
||||||
('domain', models.ForeignKey(to='domains.DNSDomain')),
|
('domain', models.ForeignKey(
|
||||||
|
to='domains.DNSDomain', on_delete=models.CASCADE)),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='DNSRecord',
|
name='DNSRecord',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
('id', models.AutoField(
|
||||||
('name', models.CharField(db_index=True, max_length=255, null=True, blank=True)),
|
verbose_name='ID', serialize=False,
|
||||||
('recordtype', models.CharField(max_length=10, null=True, db_column='type', blank=True)),
|
auto_created=True, primary_key=True)),
|
||||||
('content', models.CharField(max_length=65535, null=True, blank=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)),
|
('ttl', models.IntegerField(null=True)),
|
||||||
('prio', models.IntegerField(null=True)),
|
('prio', models.IntegerField(null=True)),
|
||||||
('change_date', models.IntegerField(null=True)),
|
('change_date', models.IntegerField(null=True)),
|
||||||
('disabled', models.BooleanField(default=False)),
|
('disabled', models.BooleanField(default=False)),
|
||||||
('ordername', models.CharField(max_length=255)),
|
('ordername', models.CharField(max_length=255)),
|
||||||
('auth', models.BooleanField(default=True)),
|
('auth', models.BooleanField(default=True)),
|
||||||
('domain', models.ForeignKey(to='domains.DNSDomain')),
|
('domain', models.ForeignKey(
|
||||||
|
to='domains.DNSDomain', on_delete=models.CASCADE)),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'verbose_name': 'DNS record',
|
'verbose_name': 'DNS record',
|
||||||
|
@ -101,16 +131,22 @@ class Migration(migrations.Migration):
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='DNSSupermaster',
|
name='DNSSupermaster',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
('id', models.AutoField(
|
||||||
|
verbose_name='ID', serialize=False,
|
||||||
|
auto_created=True, primary_key=True)),
|
||||||
('ip', models.GenericIPAddressField()),
|
('ip', models.GenericIPAddressField()),
|
||||||
('nameserver', models.CharField(max_length=255)),
|
('nameserver', models.CharField(max_length=255)),
|
||||||
('customer', models.ForeignKey(verbose_name='customer', to=settings.AUTH_USER_MODEL)),
|
('customer', models.ForeignKey(
|
||||||
|
verbose_name='customer', to=settings.AUTH_USER_MODEL,
|
||||||
|
on_delete=models.CASCADE)),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='DNSTSIGKey',
|
name='DNSTSIGKey',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
('id', models.AutoField(
|
||||||
|
verbose_name='ID', serialize=False,
|
||||||
|
auto_created=True, primary_key=True)),
|
||||||
('name', models.CharField(max_length=255)),
|
('name', models.CharField(max_length=255)),
|
||||||
('algorithm', models.CharField(max_length=50)),
|
('algorithm', models.CharField(max_length=50)),
|
||||||
('secret', models.CharField(max_length=255)),
|
('secret', models.CharField(max_length=255)),
|
||||||
|
@ -123,22 +159,26 @@ class Migration(migrations.Migration):
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='hostingdomain',
|
model_name='hostingdomain',
|
||||||
name='domain',
|
name='domain',
|
||||||
field=models.CharField(unique=True, max_length=255, verbose_name='domain name'),
|
field=models.CharField(
|
||||||
|
unique=True, max_length=255, verbose_name='domain name'),
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='maildomain',
|
model_name='maildomain',
|
||||||
name='domain',
|
name='domain',
|
||||||
field=models.CharField(unique=True, max_length=255, verbose_name='domain name'),
|
field=models.CharField(
|
||||||
|
unique=True, max_length=255, verbose_name='domain name'),
|
||||||
),
|
),
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='dnscryptokey',
|
model_name='dnscryptokey',
|
||||||
name='domain',
|
name='domain',
|
||||||
field=models.ForeignKey(to='domains.DNSDomain'),
|
field=models.ForeignKey(
|
||||||
|
to='domains.DNSDomain', on_delete=models.CASCADE),
|
||||||
),
|
),
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='dnscomment',
|
model_name='dnscomment',
|
||||||
name='domain',
|
name='domain',
|
||||||
field=models.ForeignKey(to='domains.DNSDomain'),
|
field=models.ForeignKey(
|
||||||
|
to='domains.DNSDomain', on_delete=models.CASCADE),
|
||||||
),
|
),
|
||||||
migrations.AlterUniqueTogether(
|
migrations.AlterUniqueTogether(
|
||||||
name='dnssupermaster',
|
name='dnssupermaster',
|
||||||
|
@ -154,6 +194,6 @@ class Migration(migrations.Migration):
|
||||||
),
|
),
|
||||||
migrations.AlterIndexTogether(
|
migrations.AlterIndexTogether(
|
||||||
name='dnscomment',
|
name='dnscomment',
|
||||||
index_together=set([('name', 'commenttype'), ('domain', 'modified_at')]),
|
index_together={('name', 'commenttype'), ('domain', 'modified_at')},
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
|
@ -58,7 +58,7 @@ class DomainBase(TimeStampedModel):
|
||||||
domain = models.CharField(_('domain name'), max_length=255, unique=True)
|
domain = models.CharField(_('domain name'), max_length=255, unique=True)
|
||||||
customer = models.ForeignKey(
|
customer = models.ForeignKey(
|
||||||
settings.AUTH_USER_MODEL, verbose_name=_('customer'), blank=True,
|
settings.AUTH_USER_MODEL, verbose_name=_('customer'), blank=True,
|
||||||
null=True)
|
null=True, on_delete=models.CASCADE)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
abstract = True
|
abstract = True
|
||||||
|
@ -119,7 +119,8 @@ class HostingDomain(DomainBase):
|
||||||
"""
|
"""
|
||||||
maildomain = models.OneToOneField(
|
maildomain = models.OneToOneField(
|
||||||
MailDomain, verbose_name=_('mail domain'), blank=True, null=True,
|
MailDomain, verbose_name=_('mail domain'), blank=True, null=True,
|
||||||
help_text=_('assigned mail domain for this domain')
|
help_text=_('assigned mail domain for this domain'),
|
||||||
|
on_delete=models.CASCADE,
|
||||||
)
|
)
|
||||||
|
|
||||||
objects = HostingDomainManager()
|
objects = HostingDomainManager()
|
||||||
|
@ -208,7 +209,7 @@ class DNSRecord(models.Model):
|
||||||
domain_id, ordername text_pattern_ops);
|
domain_id, ordername text_pattern_ops);
|
||||||
|
|
||||||
"""
|
"""
|
||||||
domain = models.ForeignKey('DNSDomain')
|
domain = models.ForeignKey('DNSDomain', on_delete=models.CASCADE)
|
||||||
name = models.CharField(
|
name = models.CharField(
|
||||||
max_length=255, blank=True, null=True, db_index=True)
|
max_length=255, blank=True, null=True, db_index=True)
|
||||||
recordtype = models.CharField(
|
recordtype = models.CharField(
|
||||||
|
@ -255,7 +256,8 @@ class DNSSupermaster(models.Model):
|
||||||
nameserver = models.CharField(max_length=255)
|
nameserver = models.CharField(max_length=255)
|
||||||
# account is replaced by customer
|
# account is replaced by customer
|
||||||
customer = models.ForeignKey(
|
customer = models.ForeignKey(
|
||||||
settings.AUTH_USER_MODEL, verbose_name=_('customer'))
|
settings.AUTH_USER_MODEL, verbose_name=_('customer'),
|
||||||
|
on_delete=models.CASCADE)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = _('DNS supermaster')
|
verbose_name = _('DNS supermaster')
|
||||||
|
@ -299,13 +301,14 @@ class DNSComment(models.Model):
|
||||||
CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);
|
CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);
|
||||||
|
|
||||||
"""
|
"""
|
||||||
domain = models.ForeignKey('DNSDomain')
|
domain = models.ForeignKey('DNSDomain', on_delete=models.CASCADE)
|
||||||
name = models.CharField(max_length=255)
|
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()
|
modified_at = models.IntegerField()
|
||||||
# account is replaced by customer
|
# account is replaced by customer
|
||||||
customer = models.ForeignKey(
|
customer = models.ForeignKey(
|
||||||
settings.AUTH_USER_MODEL, verbose_name=_('customer'))
|
settings.AUTH_USER_MODEL, verbose_name=_('customer'),
|
||||||
|
on_delete=models.CASCADE)
|
||||||
comment = models.CharField(max_length=65535)
|
comment = models.CharField(max_length=65535)
|
||||||
# check constraint is added via RunSQL in migration
|
# check constraint is added via RunSQL in migration
|
||||||
|
|
||||||
|
@ -343,7 +346,7 @@ class DNSDomainMetadata(models.Model):
|
||||||
CREATE INDEX domainidmetaindex ON domainmetadata(domain_id);
|
CREATE INDEX domainidmetaindex ON domainmetadata(domain_id);
|
||||||
|
|
||||||
"""
|
"""
|
||||||
domain = models.ForeignKey('DNSDomain')
|
domain = models.ForeignKey('DNSDomain', on_delete=models.CASCADE)
|
||||||
kind = models.CharField(max_length=32, choices=DNS_DOMAIN_METADATA_KINDS)
|
kind = models.CharField(max_length=32, choices=DNS_DOMAIN_METADATA_KINDS)
|
||||||
content = models.TextField()
|
content = models.TextField()
|
||||||
|
|
||||||
|
@ -376,7 +379,7 @@ class DNSCryptoKey(models.Model):
|
||||||
CREATE INDEX domainidindex ON cryptokeys(domain_id);
|
CREATE INDEX domainidindex ON cryptokeys(domain_id);
|
||||||
|
|
||||||
"""
|
"""
|
||||||
domain = models.ForeignKey('DNSDomain')
|
domain = models.ForeignKey('DNSDomain', on_delete=models.CASCADE)
|
||||||
flags = models.IntegerField()
|
flags = models.IntegerField()
|
||||||
active = models.BooleanField(default=True)
|
active = models.BooleanField(default=True)
|
||||||
content = models.TextField()
|
content = models.TextField()
|
||||||
|
|
|
@ -4,16 +4,13 @@ This module defines views related to domains.
|
||||||
"""
|
"""
|
||||||
from __future__ import absolute_import, unicode_literals
|
from __future__ import absolute_import, unicode_literals
|
||||||
|
|
||||||
|
from braces.views import StaffuserRequiredMixin
|
||||||
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||||
from django.shortcuts import redirect, get_object_or_404
|
from django.shortcuts import redirect, get_object_or_404
|
||||||
from django.views.generic.edit import CreateView
|
from django.views.generic.edit import CreateView
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
|
|
||||||
from braces.views import (
|
|
||||||
LoginRequiredMixin,
|
|
||||||
StaffuserRequiredMixin,
|
|
||||||
)
|
|
||||||
|
|
||||||
from hostingpackages.models import CustomerHostingPackage
|
from hostingpackages.models import CustomerHostingPackage
|
||||||
|
|
||||||
from .forms import CreateHostingDomainForm
|
from .forms import CreateHostingDomainForm
|
||||||
|
|
|
@ -38,7 +38,8 @@ DEBUG = False
|
||||||
# ######### MANAGER CONFIGURATION
|
# ######### MANAGER CONFIGURATION
|
||||||
# See: https://docs.djangoproject.com/en/dev/ref/settings/#admins
|
# See: https://docs.djangoproject.com/en/dev/ref/settings/#admins
|
||||||
ADMINS = (
|
ADMINS = (
|
||||||
(get_env_variable('GVA_ADMIN_NAME'), get_env_variable('GVA_ADMIN_EMAIL')),
|
(get_env_variable('GVA_ADMIN_NAME', default='Admin'),
|
||||||
|
get_env_variable('GVA_ADMIN_EMAIL', default='admin@example.org')),
|
||||||
)
|
)
|
||||||
|
|
||||||
# See: https://docs.djangoproject.com/en/dev/ref/settings/#managers
|
# See: https://docs.djangoproject.com/en/dev/ref/settings/#managers
|
||||||
|
@ -50,12 +51,12 @@ MANAGERS = ADMINS
|
||||||
# See: https://docs.djangoproject.com/en/dev/ref/settings/#databases
|
# See: https://docs.djangoproject.com/en/dev/ref/settings/#databases
|
||||||
DATABASES = {
|
DATABASES = {
|
||||||
'default': {
|
'default': {
|
||||||
'ENGINE': 'django.db.backends.postgresql_psycopg2',
|
'ENGINE': 'django.db.backends.postgresql',
|
||||||
'NAME': get_env_variable('GVA_PGSQL_DATABASE'),
|
'NAME': get_env_variable('GVA_PGSQL_DATABASE', default='gnuviechadmin'),
|
||||||
'USER': get_env_variable('GVA_PGSQL_USER'),
|
'USER': get_env_variable('GVA_PGSQL_USER', default='gnuviechadmin'),
|
||||||
'PASSWORD': get_env_variable('GVA_PGSQL_PASSWORD'),
|
'PASSWORD': get_env_variable('GVA_PGSQL_PASSWORD'),
|
||||||
'HOST': get_env_variable('GVA_PGSQL_HOSTNAME'),
|
'HOST': get_env_variable('GVA_PGSQL_HOSTNAME', default='db'),
|
||||||
'PORT': get_env_variable('GVA_PGSQL_PORT'),
|
'PORT': get_env_variable('GVA_PGSQL_PORT', int, default=5432),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
# ######### END DATABASE CONFIGURATION
|
# ######### END DATABASE CONFIGURATION
|
||||||
|
@ -98,16 +99,13 @@ MEDIA_URL = '/media/'
|
||||||
# ######### END MEDIA CONFIGURATION
|
# ######### END MEDIA CONFIGURATION
|
||||||
|
|
||||||
|
|
||||||
# ######### STATIC FILE CONFIGURATION
|
|
||||||
# See: https://docs.djangoproject.com/en/dev/ref/settings/#static-root
|
|
||||||
STATIC_ROOT = normpath(join(SITE_ROOT, 'assets'))
|
|
||||||
|
|
||||||
# See: https://docs.djangoproject.com/en/dev/ref/settings/#static-url
|
# See: https://docs.djangoproject.com/en/dev/ref/settings/#static-url
|
||||||
STATIC_URL = '/static/'
|
STATIC_URL = '/static/'
|
||||||
|
|
||||||
# See: https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#std:setting-STATICFILES_DIRS # noqa
|
# See: https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#std:setting-STATICFILES_DIRS # noqa
|
||||||
STATICFILES_DIRS = (
|
STATICFILES_DIRS = (
|
||||||
normpath(join(SITE_ROOT, 'static')),
|
normpath(join(SITE_ROOT, 'gnuviechadmin', 'assets')),
|
||||||
)
|
)
|
||||||
|
|
||||||
# See: https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#staticfiles-finders # noqa
|
# See: https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#staticfiles-finders # noqa
|
||||||
|
@ -146,7 +144,7 @@ TEMPLATES = [
|
||||||
{
|
{
|
||||||
'BACKEND': 'django.template.backends.django.DjangoTemplates',
|
'BACKEND': 'django.template.backends.django.DjangoTemplates',
|
||||||
'DIRS': [
|
'DIRS': [
|
||||||
normpath(join(SITE_ROOT, 'templates')),
|
normpath(join(DJANGO_ROOT, 'templates')),
|
||||||
],
|
],
|
||||||
'APP_DIRS': True,
|
'APP_DIRS': True,
|
||||||
'OPTIONS': {
|
'OPTIONS': {
|
||||||
|
@ -171,7 +169,7 @@ TEMPLATES = [
|
||||||
|
|
||||||
# ######### MIDDLEWARE CONFIGURATION
|
# ######### MIDDLEWARE CONFIGURATION
|
||||||
# See: https://docs.djangoproject.com/en/dev/ref/settings/#middleware-classes
|
# See: https://docs.djangoproject.com/en/dev/ref/settings/#middleware-classes
|
||||||
MIDDLEWARE_CLASSES = (
|
MIDDLEWARE = [
|
||||||
# Default Django middleware.
|
# Default Django middleware.
|
||||||
'django.middleware.common.CommonMiddleware',
|
'django.middleware.common.CommonMiddleware',
|
||||||
'django.contrib.sessions.middleware.SessionMiddleware',
|
'django.contrib.sessions.middleware.SessionMiddleware',
|
||||||
|
@ -181,7 +179,7 @@ MIDDLEWARE_CLASSES = (
|
||||||
# uncomment next line to enable translation to browser locale
|
# uncomment next line to enable translation to browser locale
|
||||||
'django.middleware.locale.LocaleMiddleware',
|
'django.middleware.locale.LocaleMiddleware',
|
||||||
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
||||||
)
|
]
|
||||||
# ######### END MIDDLEWARE CONFIGURATION
|
# ######### END MIDDLEWARE CONFIGURATION
|
||||||
|
|
||||||
|
|
||||||
|
@ -330,8 +328,12 @@ WSGI_APPLICATION = '%s.wsgi.application' % SITE_NAME
|
||||||
|
|
||||||
|
|
||||||
# ######### CELERY CONFIGURATION
|
# ######### CELERY CONFIGURATION
|
||||||
BROKER_URL = get_env_variable('GVA_BROKER_URL')
|
BROKER_URL = get_env_variable(
|
||||||
CELERY_RESULT_BACKEND = get_env_variable('GVA_RESULTS_REDIS_URL')
|
'GVA_BROKER_URL',
|
||||||
|
default='amqp://gnuviechadmin:gnuviechadmin@mq/gnuviechadmin')
|
||||||
|
CELERY_RESULT_BACKEND = get_env_variable(
|
||||||
|
'GVA_RESULTS_REDIS_URL',
|
||||||
|
default='redis://:gnuviechadmin@redis:6379/0')
|
||||||
CELERY_TASK_RESULT_EXPIRES = None
|
CELERY_TASK_RESULT_EXPIRES = None
|
||||||
CELERY_ROUTES = (
|
CELERY_ROUTES = (
|
||||||
'gvacommon.celeryrouters.GvaRouter',
|
'gvacommon.celeryrouters.GvaRouter',
|
||||||
|
@ -345,17 +347,134 @@ CELERY_RESULT_SERIALIZER = 'json'
|
||||||
|
|
||||||
|
|
||||||
# ######### CUSTOM APP CONFIGURATION
|
# ######### CUSTOM APP CONFIGURATION
|
||||||
OSUSER_MINUID = int(get_env_variable('GVA_MIN_OS_UID'))
|
OSUSER_MINUID = get_env_variable('GVA_MIN_OS_UID', int, default=10000)
|
||||||
OSUSER_MINGID = int(get_env_variable('GVA_MIN_OS_GID'))
|
OSUSER_MINGID = get_env_variable('GVA_MIN_OS_GID', int, default=10000)
|
||||||
OSUSER_USERNAME_PREFIX = get_env_variable('GVA_OSUSER_PREFIX')
|
OSUSER_USERNAME_PREFIX = get_env_variable('GVA_OSUSER_PREFIX', default='usr')
|
||||||
OSUSER_HOME_BASEPATH = get_env_variable('GVA_OSUSER_HOME_BASEPATH')
|
OSUSER_HOME_BASEPATH = get_env_variable(
|
||||||
OSUSER_DEFAULT_SHELL = get_env_variable('GVA_OSUSER_DEFAULT_SHELL')
|
'GVA_OSUSER_HOME_BASEPATH', default='/home')
|
||||||
|
OSUSER_DEFAULT_SHELL = get_env_variable(
|
||||||
|
'GVA_OSUSER_DEFAULT_SHELL', default='/usr/bin/rssh')
|
||||||
OSUSER_SFTP_GROUP = 'sftponly'
|
OSUSER_SFTP_GROUP = 'sftponly'
|
||||||
OSUSER_SSH_GROUP = 'sshusers'
|
OSUSER_SSH_GROUP = 'sshusers'
|
||||||
OSUSER_DEFAULT_GROUPS = [OSUSER_SFTP_GROUP]
|
OSUSER_DEFAULT_GROUPS = [OSUSER_SFTP_GROUP]
|
||||||
OSUSER_UPLOAD_SERVER = get_env_variable('GVA_OSUSER_UPLOADSERVER')
|
OSUSER_UPLOAD_SERVER = get_env_variable(
|
||||||
|
'GVA_OSUSER_UPLOADSERVER', default='file')
|
||||||
|
|
||||||
GVA_LINK_WEBMAIL = get_env_variable('GVA_WEBMAIL_URL')
|
GVA_LINK_WEBMAIL = get_env_variable(
|
||||||
GVA_LINK_PHPMYADMIN = get_env_variable('GVA_PHPMYADMIN_URL')
|
'GVA_WEBMAIL_URL', default='https://webmail.example.org/')
|
||||||
GVA_LINK_PHPPGADMIN = get_env_variable('GVA_PHPPGADMIN_URL')
|
GVA_LINK_PHPMYADMIN = get_env_variable(
|
||||||
|
'GVA_PHPMYADMIN_URL', default='https://phpmyadmin.example.org/')
|
||||||
|
GVA_LINK_PHPPGADMIN = get_env_variable(
|
||||||
|
'GVA_PHPPGADMIN_URL', default='https://phppgadmin.example.org/')
|
||||||
# ######### END CUSTOM APP CONFIGURATION
|
# ######### END CUSTOM APP CONFIGURATION
|
||||||
|
|
||||||
|
GVA_ENVIRONMENT = get_env_variable('GVA_ENVIRONMENT', default='prod')
|
||||||
|
|
||||||
|
# ######### STATIC FILE CONFIGURATION
|
||||||
|
# See: https://docs.djangoproject.com/en/dev/ref/settings/#static-root
|
||||||
|
STATIC_ROOT = '/srv/gnuviechadmin/static/'
|
||||||
|
|
||||||
|
if GVA_ENVIRONMENT == 'local':
|
||||||
|
# ######### DEBUG CONFIGURATION
|
||||||
|
# See: https://docs.djangoproject.com/en/dev/ref/settings/#debug
|
||||||
|
DEBUG = True
|
||||||
|
|
||||||
|
# See: https://docs.djangoproject.com/en/dev/ref/settings/#template-debug
|
||||||
|
TEMPLATES[0]['OPTIONS']['debug'] = DEBUG
|
||||||
|
# ######### END DEBUG CONFIGURATION
|
||||||
|
|
||||||
|
# ######### EMAIL CONFIGURATION
|
||||||
|
# See: https://docs.djangoproject.com/en/dev/ref/settings/#email-backend
|
||||||
|
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
|
||||||
|
# ######### END EMAIL CONFIGURATION
|
||||||
|
|
||||||
|
# ######### CACHE CONFIGURATION
|
||||||
|
# See: https://docs.djangoproject.com/en/dev/ref/settings/#caches
|
||||||
|
CACHES = {
|
||||||
|
'default': {
|
||||||
|
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# ######### END CACHE CONFIGURATION
|
||||||
|
|
||||||
|
# ######### TOOLBAR CONFIGURATION
|
||||||
|
# See: http://django-debug-toolbar.readthedocs.org/en/latest/installation.html#explicit-setup # noqa
|
||||||
|
INSTALLED_APPS += (
|
||||||
|
'debug_toolbar',
|
||||||
|
)
|
||||||
|
|
||||||
|
MIDDLEWARE += [
|
||||||
|
'debug_toolbar.middleware.DebugToolbarMiddleware',
|
||||||
|
]
|
||||||
|
|
||||||
|
LOGGING['handlers'].update({
|
||||||
|
'console': {
|
||||||
|
'level': 'DEBUG',
|
||||||
|
'class': 'logging.StreamHandler',
|
||||||
|
'formatter': 'simple',
|
||||||
|
}
|
||||||
|
})
|
||||||
|
LOGGING['loggers'].update(dict(
|
||||||
|
[(key, {'handlers': ['console'], 'level': 'DEBUG', 'propagate': True, })
|
||||||
|
for key in [
|
||||||
|
'dashboard', 'domains', 'fileservertasks', 'gvacommon',
|
||||||
|
'gvawebcore', 'hostingpackages', 'ldaptasks', 'managemails',
|
||||||
|
'mysqltasks', 'osusers', 'pgsqltasks', 'taskresults',
|
||||||
|
'userdbs', 'websites']]))
|
||||||
|
|
||||||
|
DEBUG_TOOLBAR_PATCH_SETTINGS = False
|
||||||
|
|
||||||
|
# http://django-debug-toolbar.readthedocs.org/en/latest/installation.html
|
||||||
|
INTERNAL_IPS = ('127.0.0.1', '10.0.2.2')
|
||||||
|
# ######### END TOOLBAR CONFIGURATION
|
||||||
|
elif GVA_ENVIRONMENT == 'test':
|
||||||
|
PASSWORD_HASHERS = (
|
||||||
|
'django.contrib.auth.hashers.MD5PasswordHasher',
|
||||||
|
)
|
||||||
|
LOGGING['handlers'].update({
|
||||||
|
'console': {
|
||||||
|
'level': 'ERROR',
|
||||||
|
'class': 'logging.StreamHandler',
|
||||||
|
'formatter': 'simple',
|
||||||
|
}
|
||||||
|
})
|
||||||
|
LOGGING['loggers'].update(dict(
|
||||||
|
[(key, {'handlers': ['console'], 'level': 'ERROR', 'propagate': True, })
|
||||||
|
for key in [
|
||||||
|
'dashboard', 'domains', 'fileservertasks', 'gvacommon',
|
||||||
|
'gvawebcore', 'hostingpackages', 'ldaptasks', 'managemails',
|
||||||
|
'mysqltasks', 'osusers', 'pgsqltasks', 'taskresults',
|
||||||
|
'userdbs', 'websites']]))
|
||||||
|
BROKER_URL = BROKER_URL + '_test'
|
||||||
|
CELERY_RESULT_PERSISTENT = False
|
||||||
|
else:
|
||||||
|
# ######### HOST CONFIGURATION
|
||||||
|
# See: https://docs.djangoproject.com/en/1.5/releases/1.5/#allowed-hosts-required-in-production # noqa
|
||||||
|
ALLOWED_HOSTS = [SITES_DOMAIN_NAME]
|
||||||
|
# ######### END HOST CONFIGURATION
|
||||||
|
|
||||||
|
# ######### EMAIL CONFIGURATION
|
||||||
|
# See: https://docs.djangoproject.com/en/dev/ref/settings/#email-backend
|
||||||
|
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
|
||||||
|
|
||||||
|
# See: https://docs.djangoproject.com/en/dev/ref/settings/#email-subject-prefix
|
||||||
|
EMAIL_SUBJECT_PREFIX = '[%s] ' % SITE_NAME
|
||||||
|
|
||||||
|
# See: https://docs.djangoproject.com/en/dev/ref/settings/#default-from-email
|
||||||
|
DEFAULT_FROM_EMAIL = get_env_variable(
|
||||||
|
'GVA_SITE_ADMINMAIL', default='admin@example.org')
|
||||||
|
|
||||||
|
# See: https://docs.djangoproject.com/en/dev/ref/settings/#server-email
|
||||||
|
SERVER_EMAIL = get_env_variable(
|
||||||
|
'GVA_SITE_ADMINMAIL', default='admin@example.org')
|
||||||
|
# ######### END EMAIL CONFIGURATION
|
||||||
|
|
||||||
|
# ######### CACHE CONFIGURATION
|
||||||
|
# See: https://docs.djangoproject.com/en/dev/ref/settings/#caches
|
||||||
|
# CACHES = {}
|
||||||
|
# ######### END CACHE CONFIGURATION
|
||||||
|
|
||||||
|
# ######### ALLAUTH PRODUCTION CONFIGURATION
|
||||||
|
ACCOUNT_EMAIL_SUBJECT_PREFIX = '[Jan Dittberner IT-Consulting & -Solutions] '
|
||||||
|
ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https'
|
||||||
|
# ######### END ALLAUTH PRODUCTION CONFIGURATION
|
|
@ -1,3 +0,0 @@
|
||||||
"""
|
|
||||||
This module contains settings for various environments.
|
|
||||||
"""
|
|
|
@ -1,68 +0,0 @@
|
||||||
# -*- python -*-
|
|
||||||
# pymode:lint_ignore=W0401,E501
|
|
||||||
"""
|
|
||||||
Development settings and globals based on :py:mod:`gvaldap.settings.base`.
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
from __future__ import absolute_import
|
|
||||||
|
|
||||||
# use import * to import all settings from base
|
|
||||||
from .base import * # NOQA
|
|
||||||
|
|
||||||
|
|
||||||
# ######### DEBUG CONFIGURATION
|
|
||||||
# See: https://docs.djangoproject.com/en/dev/ref/settings/#debug
|
|
||||||
DEBUG = True
|
|
||||||
|
|
||||||
# See: https://docs.djangoproject.com/en/dev/ref/settings/#template-debug
|
|
||||||
TEMPLATES[0]['OPTIONS']['debug'] = DEBUG
|
|
||||||
# ######### END DEBUG CONFIGURATION
|
|
||||||
|
|
||||||
|
|
||||||
# ######### EMAIL CONFIGURATION
|
|
||||||
# See: https://docs.djangoproject.com/en/dev/ref/settings/#email-backend
|
|
||||||
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
|
|
||||||
# ######### END EMAIL CONFIGURATION
|
|
||||||
|
|
||||||
|
|
||||||
# ######### CACHE CONFIGURATION
|
|
||||||
# See: https://docs.djangoproject.com/en/dev/ref/settings/#caches
|
|
||||||
CACHES = {
|
|
||||||
'default': {
|
|
||||||
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
|
|
||||||
}
|
|
||||||
}
|
|
||||||
# ######### END CACHE CONFIGURATION
|
|
||||||
|
|
||||||
|
|
||||||
# ######### TOOLBAR CONFIGURATION
|
|
||||||
# See: http://django-debug-toolbar.readthedocs.org/en/latest/installation.html#explicit-setup # noqa
|
|
||||||
INSTALLED_APPS += (
|
|
||||||
'debug_toolbar',
|
|
||||||
)
|
|
||||||
|
|
||||||
MIDDLEWARE_CLASSES += (
|
|
||||||
'debug_toolbar.middleware.DebugToolbarMiddleware',
|
|
||||||
)
|
|
||||||
|
|
||||||
LOGGING['handlers'].update({
|
|
||||||
'console': {
|
|
||||||
'level': 'DEBUG',
|
|
||||||
'class': 'logging.StreamHandler',
|
|
||||||
'formatter': 'simple',
|
|
||||||
}
|
|
||||||
})
|
|
||||||
LOGGING['loggers'].update(dict(
|
|
||||||
[(key, {'handlers': ['console'], 'level': 'DEBUG', 'propagate': True, })
|
|
||||||
for key in [
|
|
||||||
'dashboard', 'domains', 'fileservertasks', 'gvacommon',
|
|
||||||
'gvawebcore', 'hostingpackages', 'ldaptasks', 'managemails',
|
|
||||||
'mysqltasks', 'osusers', 'pgsqltasks', 'taskresults',
|
|
||||||
'userdbs', 'websites']]))
|
|
||||||
|
|
||||||
DEBUG_TOOLBAR_PATCH_SETTINGS = False
|
|
||||||
|
|
||||||
# http://django-debug-toolbar.readthedocs.org/en/latest/installation.html
|
|
||||||
INTERNAL_IPS = ('127.0.0.1', '10.0.2.2')
|
|
||||||
# ######### END TOOLBAR CONFIGURATION
|
|
|
@ -1,40 +0,0 @@
|
||||||
# -*- python -*-
|
|
||||||
# pymode:lint_ignore=W0401,E501
|
|
||||||
"""
|
|
||||||
Production settings and globals based on :py:mod:`gvaldap.settings.base`.
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
from __future__ import absolute_import
|
|
||||||
|
|
||||||
# use import * to import all settings from base
|
|
||||||
from .base import * # NOQA
|
|
||||||
|
|
||||||
# ######### HOST CONFIGURATION
|
|
||||||
# See: https://docs.djangoproject.com/en/1.5/releases/1.5/#allowed-hosts-required-in-production # noqa
|
|
||||||
ALLOWED_HOSTS = [SITES_DOMAIN_NAME]
|
|
||||||
# ######### END HOST CONFIGURATION
|
|
||||||
|
|
||||||
# ######### EMAIL CONFIGURATION
|
|
||||||
# See: https://docs.djangoproject.com/en/dev/ref/settings/#email-backend
|
|
||||||
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
|
|
||||||
|
|
||||||
# See: https://docs.djangoproject.com/en/dev/ref/settings/#email-subject-prefix
|
|
||||||
EMAIL_SUBJECT_PREFIX = '[%s] ' % SITE_NAME
|
|
||||||
|
|
||||||
# See: https://docs.djangoproject.com/en/dev/ref/settings/#default-from-email
|
|
||||||
DEFAULT_FROM_EMAIL = get_env_variable('GVA_SITE_ADMINMAIL')
|
|
||||||
|
|
||||||
# See: https://docs.djangoproject.com/en/dev/ref/settings/#server-email
|
|
||||||
SERVER_EMAIL = get_env_variable('GVA_SITE_ADMINMAIL')
|
|
||||||
# ######### END EMAIL CONFIGURATION
|
|
||||||
|
|
||||||
# ######### CACHE CONFIGURATION
|
|
||||||
# See: https://docs.djangoproject.com/en/dev/ref/settings/#caches
|
|
||||||
# CACHES = {}
|
|
||||||
# ######### END CACHE CONFIGURATION
|
|
||||||
|
|
||||||
# ######### ALLAUTH PRODUCTION CONFIGURATION
|
|
||||||
ACCOUNT_EMAIL_SUBJECT_PREFIX = '[Jan Dittberner IT-Consulting & -Solutions] '
|
|
||||||
ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https'
|
|
||||||
# ######### END ALLAUTH PRODUCTION CONFIGURATION
|
|
|
@ -1,29 +0,0 @@
|
||||||
# pymode:lint_ignore=W0401
|
|
||||||
"""
|
|
||||||
Test settings based on :py:mod:`gvaldap.settings.base`.
|
|
||||||
|
|
||||||
"""
|
|
||||||
from __future__ import absolute_import
|
|
||||||
|
|
||||||
# use import * to import all settings from base
|
|
||||||
from .base import * # NOQA
|
|
||||||
|
|
||||||
PASSWORD_HASHERS = (
|
|
||||||
'django.contrib.auth.hashers.MD5PasswordHasher',
|
|
||||||
)
|
|
||||||
LOGGING['handlers'].update({
|
|
||||||
'console': {
|
|
||||||
'level': 'ERROR',
|
|
||||||
'class': 'logging.StreamHandler',
|
|
||||||
'formatter': 'simple',
|
|
||||||
}
|
|
||||||
})
|
|
||||||
LOGGING['loggers'].update(dict(
|
|
||||||
[(key, {'handlers': ['console'], 'level': 'ERROR', 'propagate': True, })
|
|
||||||
for key in [
|
|
||||||
'dashboard', 'domains', 'fileservertasks', 'gvacommon',
|
|
||||||
'gvawebcore', 'hostingpackages', 'ldaptasks', 'managemails',
|
|
||||||
'mysqltasks', 'osusers', 'pgsqltasks', 'taskresults',
|
|
||||||
'userdbs', 'websites']]))
|
|
||||||
BROKER_URL = BROKER_URL + '_test'
|
|
||||||
CELERY_RESULT_PERSISTENT = False
|
|
|
@ -5,6 +5,8 @@ from django.conf import settings
|
||||||
|
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django.contrib.flatpages import views
|
from django.contrib.flatpages import views
|
||||||
|
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
|
||||||
|
|
||||||
admin.autodiscover()
|
admin.autodiscover()
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
|
@ -28,6 +30,7 @@ urlpatterns = [
|
||||||
|
|
||||||
if settings.DEBUG: # pragma: no cover
|
if settings.DEBUG: # pragma: no cover
|
||||||
import debug_toolbar
|
import debug_toolbar
|
||||||
urlpatterns += [
|
|
||||||
url(r'^__debug__/', debug_toolbar.urls),
|
urlpatterns = [
|
||||||
]
|
url(r'^__debug__/', include(debug_toolbar.urls)),
|
||||||
|
] + staticfiles_urlpatterns() + urlpatterns
|
||||||
|
|
|
@ -5,7 +5,7 @@ This module contains the form classes related to hosting packages.
|
||||||
from __future__ import absolute_import, unicode_literals
|
from __future__ import absolute_import, unicode_literals
|
||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.core.urlresolvers import reverse
|
from django.urls import reverse
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
|
|
||||||
from crispy_forms.helper import FormHelper
|
from crispy_forms.helper import FormHelper
|
||||||
|
|
|
@ -1,14 +1,13 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.db import models, migrations
|
|
||||||
import django.utils.timezone
|
import django.utils.timezone
|
||||||
from django.conf import settings
|
|
||||||
import model_utils.fields
|
import model_utils.fields
|
||||||
|
from django.conf import settings
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||||
]
|
]
|
||||||
|
@ -17,15 +16,30 @@ class Migration(migrations.Migration):
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='CustomerHostingPackage',
|
name='CustomerHostingPackage',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
('id', models.AutoField(
|
||||||
('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, verbose_name='created', editable=False)),
|
verbose_name='ID', serialize=False, auto_created=True,
|
||||||
('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, verbose_name='modified', editable=False)),
|
primary_key=True)),
|
||||||
('name', models.CharField(unique=True, max_length=128, verbose_name='name')),
|
('created', model_utils.fields.AutoCreatedField(
|
||||||
('description', models.TextField(verbose_name='description', blank=True)),
|
default=django.utils.timezone.now, verbose_name='created',
|
||||||
('mailboxcount', models.PositiveIntegerField(verbose_name='mailbox count')),
|
editable=False)),
|
||||||
('diskspace', models.PositiveIntegerField(help_text='disk space for the hosting package', verbose_name='disk space')),
|
('modified', model_utils.fields.AutoLastModifiedField(
|
||||||
('diskspace_unit', models.PositiveSmallIntegerField(verbose_name='unit of disk space', choices=[(0, 'MiB'), (1, 'GiB'), (2, 'TiB')])),
|
default=django.utils.timezone.now, verbose_name='modified',
|
||||||
('customer', models.ForeignKey(verbose_name='customer', to=settings.AUTH_USER_MODEL)),
|
editable=False)),
|
||||||
|
('name', models.CharField(
|
||||||
|
unique=True, max_length=128, verbose_name='name')),
|
||||||
|
('description', models.TextField(
|
||||||
|
verbose_name='description', blank=True)),
|
||||||
|
('mailboxcount', models.PositiveIntegerField(
|
||||||
|
verbose_name='mailbox count')),
|
||||||
|
('diskspace', models.PositiveIntegerField(
|
||||||
|
help_text='disk space for the hosting package',
|
||||||
|
verbose_name='disk space')),
|
||||||
|
('diskspace_unit', models.PositiveSmallIntegerField(
|
||||||
|
verbose_name='unit of disk space',
|
||||||
|
choices=[(0, 'MiB'), (1, 'GiB'), (2, 'TiB')])),
|
||||||
|
('customer', models.ForeignKey(
|
||||||
|
verbose_name='customer', to=settings.AUTH_USER_MODEL,
|
||||||
|
on_delete=models.CASCADE)),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'verbose_name': 'customer hosting package',
|
'verbose_name': 'customer hosting package',
|
||||||
|
@ -36,9 +50,15 @@ class Migration(migrations.Migration):
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='CustomerHostingPackageOption',
|
name='CustomerHostingPackageOption',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
('id', models.AutoField(
|
||||||
('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, verbose_name='created', editable=False)),
|
verbose_name='ID', serialize=False, auto_created=True,
|
||||||
('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, verbose_name='modified', editable=False)),
|
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)),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'verbose_name': 'customer hosting option',
|
'verbose_name': 'customer hosting option',
|
||||||
|
@ -49,9 +69,16 @@ class Migration(migrations.Migration):
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='CustomerDiskSpaceOption',
|
name='CustomerDiskSpaceOption',
|
||||||
fields=[
|
fields=[
|
||||||
('customerhostingpackageoption_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='hostingpackages.CustomerHostingPackageOption')),
|
('customerhostingpackageoption_ptr', models.OneToOneField(
|
||||||
('diskspace', models.PositiveIntegerField(verbose_name='disk space')),
|
parent_link=True, auto_created=True, primary_key=True,
|
||||||
('diskspace_unit', models.PositiveSmallIntegerField(verbose_name='unit of disk space', choices=[(0, 'MiB'), (1, 'GiB'), (2, 'TiB')])),
|
serialize=False,
|
||||||
|
to='hostingpackages.CustomerHostingPackageOption',
|
||||||
|
on_delete=models.CASCADE)),
|
||||||
|
('diskspace', models.PositiveIntegerField(
|
||||||
|
verbose_name='disk space')),
|
||||||
|
('diskspace_unit', models.PositiveSmallIntegerField(
|
||||||
|
verbose_name='unit of disk space',
|
||||||
|
choices=[(0, 'MiB'), (1, 'GiB'), (2, 'TiB')])),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'ordering': ['diskspace_unit', 'diskspace'],
|
'ordering': ['diskspace_unit', 'diskspace'],
|
||||||
|
@ -59,13 +86,19 @@ class Migration(migrations.Migration):
|
||||||
'verbose_name': 'Disk space option',
|
'verbose_name': 'Disk space option',
|
||||||
'verbose_name_plural': 'Disk space options',
|
'verbose_name_plural': 'Disk space options',
|
||||||
},
|
},
|
||||||
bases=('hostingpackages.customerhostingpackageoption', models.Model),
|
bases=(
|
||||||
|
'hostingpackages.customerhostingpackageoption', models.Model),
|
||||||
),
|
),
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='CustomerMailboxOption',
|
name='CustomerMailboxOption',
|
||||||
fields=[
|
fields=[
|
||||||
('customerhostingpackageoption_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='hostingpackages.CustomerHostingPackageOption')),
|
('customerhostingpackageoption_ptr', models.OneToOneField(
|
||||||
('number', models.PositiveIntegerField(unique=True, verbose_name='number of mailboxes')),
|
parent_link=True, auto_created=True, primary_key=True,
|
||||||
|
serialize=False,
|
||||||
|
to='hostingpackages.CustomerHostingPackageOption',
|
||||||
|
on_delete=models.CASCADE)),
|
||||||
|
('number', models.PositiveIntegerField(
|
||||||
|
unique=True, verbose_name='number of mailboxes')),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'ordering': ['number'],
|
'ordering': ['number'],
|
||||||
|
@ -73,14 +106,22 @@ class Migration(migrations.Migration):
|
||||||
'verbose_name': 'Mailbox option',
|
'verbose_name': 'Mailbox option',
|
||||||
'verbose_name_plural': 'Mailbox options',
|
'verbose_name_plural': 'Mailbox options',
|
||||||
},
|
},
|
||||||
bases=('hostingpackages.customerhostingpackageoption', models.Model),
|
bases=(
|
||||||
|
'hostingpackages.customerhostingpackageoption', models.Model),
|
||||||
),
|
),
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='CustomerUserDatabaseOption',
|
name='CustomerUserDatabaseOption',
|
||||||
fields=[
|
fields=[
|
||||||
('customerhostingpackageoption_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='hostingpackages.CustomerHostingPackageOption')),
|
('customerhostingpackageoption_ptr', models.OneToOneField(
|
||||||
('number', models.PositiveIntegerField(default=1, verbose_name='number of databases')),
|
parent_link=True, auto_created=True, primary_key=True,
|
||||||
('db_type', models.PositiveSmallIntegerField(verbose_name='database type', choices=[(0, 'PostgreSQL'), (1, 'MySQL')])),
|
serialize=False,
|
||||||
|
to='hostingpackages.CustomerHostingPackageOption',
|
||||||
|
on_delete=models.CASCADE)),
|
||||||
|
('number', models.PositiveIntegerField(
|
||||||
|
default=1, verbose_name='number of databases')),
|
||||||
|
('db_type', models.PositiveSmallIntegerField(
|
||||||
|
verbose_name='database type',
|
||||||
|
choices=[(0, 'PostgreSQL'), (1, 'MySQL')])),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'ordering': ['db_type', 'number'],
|
'ordering': ['db_type', 'number'],
|
||||||
|
@ -88,14 +129,21 @@ class Migration(migrations.Migration):
|
||||||
'verbose_name': 'Database option',
|
'verbose_name': 'Database option',
|
||||||
'verbose_name_plural': 'Database options',
|
'verbose_name_plural': 'Database options',
|
||||||
},
|
},
|
||||||
bases=('hostingpackages.customerhostingpackageoption', models.Model),
|
bases=(
|
||||||
|
'hostingpackages.customerhostingpackageoption', models.Model),
|
||||||
),
|
),
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='HostingOption',
|
name='HostingOption',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
('id', models.AutoField(
|
||||||
('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, verbose_name='created', editable=False)),
|
verbose_name='ID', serialize=False, auto_created=True,
|
||||||
('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, verbose_name='modified', editable=False)),
|
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)),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'verbose_name': 'Hosting option',
|
'verbose_name': 'Hosting option',
|
||||||
|
@ -106,9 +154,15 @@ class Migration(migrations.Migration):
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='DiskSpaceOption',
|
name='DiskSpaceOption',
|
||||||
fields=[
|
fields=[
|
||||||
('hostingoption_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='hostingpackages.HostingOption')),
|
('hostingoption_ptr', models.OneToOneField(
|
||||||
('diskspace', models.PositiveIntegerField(verbose_name='disk space')),
|
parent_link=True, auto_created=True, primary_key=True,
|
||||||
('diskspace_unit', models.PositiveSmallIntegerField(verbose_name='unit of disk space', choices=[(0, 'MiB'), (1, 'GiB'), (2, 'TiB')])),
|
serialize=False, to='hostingpackages.HostingOption',
|
||||||
|
on_delete=models.CASCADE)),
|
||||||
|
('diskspace', models.PositiveIntegerField(
|
||||||
|
verbose_name='disk space')),
|
||||||
|
('diskspace_unit', models.PositiveSmallIntegerField(
|
||||||
|
verbose_name='unit of disk space',
|
||||||
|
choices=[(0, 'MiB'), (1, 'GiB'), (2, 'TiB')])),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'ordering': ['diskspace_unit', 'diskspace'],
|
'ordering': ['diskspace_unit', 'diskspace'],
|
||||||
|
@ -121,14 +175,27 @@ class Migration(migrations.Migration):
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='HostingPackageTemplate',
|
name='HostingPackageTemplate',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
('id', models.AutoField(
|
||||||
('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, verbose_name='created', editable=False)),
|
verbose_name='ID', serialize=False, auto_created=True,
|
||||||
('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, verbose_name='modified', editable=False)),
|
primary_key=True)),
|
||||||
('name', models.CharField(unique=True, max_length=128, verbose_name='name')),
|
('created', model_utils.fields.AutoCreatedField(
|
||||||
('description', models.TextField(verbose_name='description', blank=True)),
|
default=django.utils.timezone.now, verbose_name='created',
|
||||||
('mailboxcount', models.PositiveIntegerField(verbose_name='mailbox count')),
|
editable=False)),
|
||||||
('diskspace', models.PositiveIntegerField(help_text='disk space for the hosting package', verbose_name='disk space')),
|
('modified', model_utils.fields.AutoLastModifiedField(
|
||||||
('diskspace_unit', models.PositiveSmallIntegerField(verbose_name='unit of disk space', choices=[(0, 'MiB'), (1, 'GiB'), (2, 'TiB')])),
|
default=django.utils.timezone.now, verbose_name='modified',
|
||||||
|
editable=False)),
|
||||||
|
('name', models.CharField(
|
||||||
|
unique=True, max_length=128, verbose_name='name')),
|
||||||
|
('description', models.TextField(
|
||||||
|
verbose_name='description', blank=True)),
|
||||||
|
('mailboxcount', models.PositiveIntegerField(
|
||||||
|
verbose_name='mailbox count')),
|
||||||
|
('diskspace', models.PositiveIntegerField(
|
||||||
|
help_text='disk space for the hosting package',
|
||||||
|
verbose_name='disk space')),
|
||||||
|
('diskspace_unit', models.PositiveSmallIntegerField(
|
||||||
|
verbose_name='unit of disk space',
|
||||||
|
choices=[(0, 'MiB'), (1, 'GiB'), (2, 'TiB')])),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'verbose_name': 'Hosting package',
|
'verbose_name': 'Hosting package',
|
||||||
|
@ -139,8 +206,12 @@ class Migration(migrations.Migration):
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='MailboxOption',
|
name='MailboxOption',
|
||||||
fields=[
|
fields=[
|
||||||
('hostingoption_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='hostingpackages.HostingOption')),
|
('hostingoption_ptr', models.OneToOneField(
|
||||||
('number', models.PositiveIntegerField(unique=True, verbose_name='number of mailboxes')),
|
parent_link=True, auto_created=True, primary_key=True,
|
||||||
|
serialize=False, to='hostingpackages.HostingOption',
|
||||||
|
on_delete=models.CASCADE)),
|
||||||
|
('number', models.PositiveIntegerField(
|
||||||
|
unique=True, verbose_name='number of mailboxes')),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'ordering': ['number'],
|
'ordering': ['number'],
|
||||||
|
@ -153,9 +224,15 @@ class Migration(migrations.Migration):
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='UserDatabaseOption',
|
name='UserDatabaseOption',
|
||||||
fields=[
|
fields=[
|
||||||
('hostingoption_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='hostingpackages.HostingOption')),
|
('hostingoption_ptr', models.OneToOneField(
|
||||||
('number', models.PositiveIntegerField(default=1, verbose_name='number of databases')),
|
parent_link=True, auto_created=True, primary_key=True,
|
||||||
('db_type', models.PositiveSmallIntegerField(verbose_name='database type', choices=[(0, 'PostgreSQL'), (1, 'MySQL')])),
|
serialize=False, to='hostingpackages.HostingOption',
|
||||||
|
on_delete=models.CASCADE)),
|
||||||
|
('number', models.PositiveIntegerField(
|
||||||
|
default=1, verbose_name='number of databases')),
|
||||||
|
('db_type', models.PositiveSmallIntegerField(
|
||||||
|
verbose_name='database type',
|
||||||
|
choices=[(0, 'PostgreSQL'), (1, 'MySQL')])),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'ordering': ['db_type', 'number'],
|
'ordering': ['db_type', 'number'],
|
||||||
|
@ -167,48 +244,71 @@ class Migration(migrations.Migration):
|
||||||
),
|
),
|
||||||
migrations.AlterUniqueTogether(
|
migrations.AlterUniqueTogether(
|
||||||
name='userdatabaseoption',
|
name='userdatabaseoption',
|
||||||
unique_together=set([('number', 'db_type')]),
|
unique_together={('number', 'db_type')},
|
||||||
),
|
),
|
||||||
migrations.AlterUniqueTogether(
|
migrations.AlterUniqueTogether(
|
||||||
name='diskspaceoption',
|
name='diskspaceoption',
|
||||||
unique_together=set([('diskspace', 'diskspace_unit')]),
|
unique_together={('diskspace', 'diskspace_unit')},
|
||||||
),
|
),
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='customeruserdatabaseoption',
|
model_name='customeruserdatabaseoption',
|
||||||
name='template',
|
name='template',
|
||||||
field=models.ForeignKey(verbose_name='user database option template', to='hostingpackages.UserDatabaseOption', help_text='The user database option template that this hosting option is based on'),
|
field=models.ForeignKey(
|
||||||
|
verbose_name='user database option template',
|
||||||
|
to='hostingpackages.UserDatabaseOption',
|
||||||
|
help_text='The user database option template that this '
|
||||||
|
'hosting option is based on',
|
||||||
|
on_delete=models.CASCADE),
|
||||||
preserve_default=True,
|
preserve_default=True,
|
||||||
),
|
),
|
||||||
migrations.AlterUniqueTogether(
|
migrations.AlterUniqueTogether(
|
||||||
name='customeruserdatabaseoption',
|
name='customeruserdatabaseoption',
|
||||||
unique_together=set([('number', 'db_type')]),
|
unique_together={('number', 'db_type')},
|
||||||
),
|
),
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='customermailboxoption',
|
model_name='customermailboxoption',
|
||||||
name='template',
|
name='template',
|
||||||
field=models.ForeignKey(verbose_name='mailbox option template', to='hostingpackages.UserDatabaseOption', help_text='The mailbox option template that this hosting option is based on'),
|
field=models.ForeignKey(
|
||||||
|
verbose_name='mailbox option template',
|
||||||
|
to='hostingpackages.UserDatabaseOption',
|
||||||
|
help_text='The mailbox option template that this hosting '
|
||||||
|
'option is based on',
|
||||||
|
on_delete=models.CASCADE),
|
||||||
preserve_default=True,
|
preserve_default=True,
|
||||||
),
|
),
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='customerhostingpackageoption',
|
model_name='customerhostingpackageoption',
|
||||||
name='hosting_package',
|
name='hosting_package',
|
||||||
field=models.ForeignKey(verbose_name='hosting package', to='hostingpackages.CustomerHostingPackage'),
|
field=models.ForeignKey(
|
||||||
|
verbose_name='hosting package',
|
||||||
|
to='hostingpackages.CustomerHostingPackage',
|
||||||
|
on_delete=models.CASCADE),
|
||||||
preserve_default=True,
|
preserve_default=True,
|
||||||
),
|
),
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='customerhostingpackage',
|
model_name='customerhostingpackage',
|
||||||
name='template',
|
name='template',
|
||||||
field=models.ForeignKey(verbose_name='hosting package template', to='hostingpackages.HostingPackageTemplate', help_text='The hosting package template that this hosting package is based on.'),
|
field=models.ForeignKey(
|
||||||
|
verbose_name='hosting package template',
|
||||||
|
to='hostingpackages.HostingPackageTemplate',
|
||||||
|
help_text='The hosting package template that this hosting '
|
||||||
|
'package is based on.',
|
||||||
|
on_delete=models.CASCADE),
|
||||||
preserve_default=True,
|
preserve_default=True,
|
||||||
),
|
),
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='customerdiskspaceoption',
|
model_name='customerdiskspaceoption',
|
||||||
name='template',
|
name='template',
|
||||||
field=models.ForeignKey(verbose_name='disk space option template', to='hostingpackages.DiskSpaceOption', help_text='The disk space option template that this hosting option is based on'),
|
field=models.ForeignKey(
|
||||||
|
verbose_name='disk space option template',
|
||||||
|
to='hostingpackages.DiskSpaceOption',
|
||||||
|
help_text='The disk space option template that this hosting '
|
||||||
|
'option is based on',
|
||||||
|
on_delete=models.CASCADE),
|
||||||
preserve_default=True,
|
preserve_default=True,
|
||||||
),
|
),
|
||||||
migrations.AlterUniqueTogether(
|
migrations.AlterUniqueTogether(
|
||||||
name='customerdiskspaceoption',
|
name='customerdiskspaceoption',
|
||||||
unique_together=set([('diskspace', 'diskspace_unit')]),
|
unique_together={('diskspace', 'diskspace_unit')},
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,15 +1,18 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.db import models, migrations
|
|
||||||
import django.utils.timezone
|
import django.utils.timezone
|
||||||
from django.conf import settings
|
|
||||||
import model_utils.fields
|
import model_utils.fields
|
||||||
|
from django.conf import settings
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
replaces = [('hostingpackages', '0001_initial'),
|
||||||
replaces = [('hostingpackages', '0001_initial'), ('hostingpackages', '0002_auto_20150118_1149'), ('hostingpackages', '0003_auto_20150118_1221'), ('hostingpackages', '0004_customerhostingpackage_osuser'), ('hostingpackages', '0005_auto_20150118_1303')]
|
('hostingpackages', '0002_auto_20150118_1149'),
|
||||||
|
('hostingpackages', '0003_auto_20150118_1221'),
|
||||||
|
('hostingpackages', '0004_customerhostingpackage_osuser'),
|
||||||
|
('hostingpackages', '0005_auto_20150118_1303')]
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||||
|
@ -20,15 +23,30 @@ class Migration(migrations.Migration):
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='CustomerHostingPackage',
|
name='CustomerHostingPackage',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
('id', models.AutoField(
|
||||||
('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, verbose_name='created', editable=False)),
|
verbose_name='ID', serialize=False, auto_created=True,
|
||||||
('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, verbose_name='modified', editable=False)),
|
primary_key=True)),
|
||||||
('name', models.CharField(unique=True, max_length=128, verbose_name='name')),
|
('created', model_utils.fields.AutoCreatedField(
|
||||||
('description', models.TextField(verbose_name='description', blank=True)),
|
default=django.utils.timezone.now, verbose_name='created',
|
||||||
('mailboxcount', models.PositiveIntegerField(verbose_name='mailbox count')),
|
editable=False)),
|
||||||
('diskspace', models.PositiveIntegerField(help_text='disk space for the hosting package', verbose_name='disk space')),
|
('modified', model_utils.fields.AutoLastModifiedField(
|
||||||
('diskspace_unit', models.PositiveSmallIntegerField(verbose_name='unit of disk space', choices=[(0, 'MiB'), (1, 'GiB'), (2, 'TiB')])),
|
default=django.utils.timezone.now, verbose_name='modified',
|
||||||
('customer', models.ForeignKey(verbose_name='customer', to=settings.AUTH_USER_MODEL)),
|
editable=False)),
|
||||||
|
('name', models.CharField(
|
||||||
|
unique=True, max_length=128, verbose_name='name')),
|
||||||
|
('description', models.TextField(
|
||||||
|
verbose_name='description', blank=True)),
|
||||||
|
('mailboxcount', models.PositiveIntegerField(
|
||||||
|
verbose_name='mailbox count')),
|
||||||
|
('diskspace', models.PositiveIntegerField(
|
||||||
|
help_text='disk space for the hosting package',
|
||||||
|
verbose_name='disk space')),
|
||||||
|
('diskspace_unit', models.PositiveSmallIntegerField(
|
||||||
|
verbose_name='unit of disk space',
|
||||||
|
choices=[(0, 'MiB'), (1, 'GiB'), (2, 'TiB')])),
|
||||||
|
('customer', models.ForeignKey(
|
||||||
|
verbose_name='customer',
|
||||||
|
to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'verbose_name': 'customer hosting package',
|
'verbose_name': 'customer hosting package',
|
||||||
|
@ -39,9 +57,15 @@ class Migration(migrations.Migration):
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='CustomerHostingPackageOption',
|
name='CustomerHostingPackageOption',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
('id', models.AutoField(
|
||||||
('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, verbose_name='created', editable=False)),
|
verbose_name='ID', serialize=False, auto_created=True,
|
||||||
('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, verbose_name='modified', editable=False)),
|
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)),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'verbose_name': 'customer hosting option',
|
'verbose_name': 'customer hosting option',
|
||||||
|
@ -52,9 +76,17 @@ class Migration(migrations.Migration):
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='CustomerDiskSpaceOption',
|
name='CustomerDiskSpaceOption',
|
||||||
fields=[
|
fields=[
|
||||||
('customerhostingpackageoption_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='hostingpackages.CustomerHostingPackageOption')),
|
('customerhostingpackageoption_ptr',
|
||||||
('diskspace', models.PositiveIntegerField(verbose_name='disk space')),
|
models.OneToOneField(
|
||||||
('diskspace_unit', models.PositiveSmallIntegerField(verbose_name='unit of disk space', choices=[(0, 'MiB'), (1, 'GiB'), (2, 'TiB')])),
|
parent_link=True, auto_created=True, primary_key=True,
|
||||||
|
serialize=False,
|
||||||
|
to='hostingpackages.CustomerHostingPackageOption',
|
||||||
|
on_delete=models.CASCADE)),
|
||||||
|
('diskspace', models.PositiveIntegerField(
|
||||||
|
verbose_name='disk space')),
|
||||||
|
('diskspace_unit', models.PositiveSmallIntegerField(
|
||||||
|
verbose_name='unit of disk space',
|
||||||
|
choices=[(0, 'MiB'), (1, 'GiB'), (2, 'TiB')])),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'ordering': ['diskspace_unit', 'diskspace'],
|
'ordering': ['diskspace_unit', 'diskspace'],
|
||||||
|
@ -62,13 +94,20 @@ class Migration(migrations.Migration):
|
||||||
'verbose_name': 'Disk space option',
|
'verbose_name': 'Disk space option',
|
||||||
'verbose_name_plural': 'Disk space options',
|
'verbose_name_plural': 'Disk space options',
|
||||||
},
|
},
|
||||||
bases=('hostingpackages.customerhostingpackageoption', models.Model),
|
bases=(
|
||||||
|
'hostingpackages.customerhostingpackageoption', models.Model),
|
||||||
),
|
),
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='CustomerMailboxOption',
|
name='CustomerMailboxOption',
|
||||||
fields=[
|
fields=[
|
||||||
('customerhostingpackageoption_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='hostingpackages.CustomerHostingPackageOption')),
|
('customerhostingpackageoption_ptr',
|
||||||
('number', models.PositiveIntegerField(unique=True, verbose_name='number of mailboxes')),
|
models.OneToOneField(
|
||||||
|
parent_link=True, auto_created=True, primary_key=True,
|
||||||
|
serialize=False,
|
||||||
|
to='hostingpackages.CustomerHostingPackageOption',
|
||||||
|
on_delete=models.CASCADE)),
|
||||||
|
('number', models.PositiveIntegerField(
|
||||||
|
unique=True, verbose_name='number of mailboxes')),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'ordering': ['number'],
|
'ordering': ['number'],
|
||||||
|
@ -76,14 +115,23 @@ class Migration(migrations.Migration):
|
||||||
'verbose_name': 'Mailbox option',
|
'verbose_name': 'Mailbox option',
|
||||||
'verbose_name_plural': 'Mailbox options',
|
'verbose_name_plural': 'Mailbox options',
|
||||||
},
|
},
|
||||||
bases=('hostingpackages.customerhostingpackageoption', models.Model),
|
bases=(
|
||||||
|
'hostingpackages.customerhostingpackageoption', models.Model),
|
||||||
),
|
),
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='CustomerUserDatabaseOption',
|
name='CustomerUserDatabaseOption',
|
||||||
fields=[
|
fields=[
|
||||||
('customerhostingpackageoption_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='hostingpackages.CustomerHostingPackageOption')),
|
('customerhostingpackageoption_ptr',
|
||||||
('number', models.PositiveIntegerField(default=1, verbose_name='number of databases')),
|
models.OneToOneField(
|
||||||
('db_type', models.PositiveSmallIntegerField(verbose_name='database type', choices=[(0, 'PostgreSQL'), (1, 'MySQL')])),
|
parent_link=True, auto_created=True, primary_key=True,
|
||||||
|
serialize=False,
|
||||||
|
to='hostingpackages.CustomerHostingPackageOption',
|
||||||
|
on_delete=models.CASCADE)),
|
||||||
|
('number', models.PositiveIntegerField(
|
||||||
|
default=1, verbose_name='number of databases')),
|
||||||
|
('db_type', models.PositiveSmallIntegerField(
|
||||||
|
verbose_name='database type',
|
||||||
|
choices=[(0, 'PostgreSQL'), (1, 'MySQL')])),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'ordering': ['db_type', 'number'],
|
'ordering': ['db_type', 'number'],
|
||||||
|
@ -91,14 +139,21 @@ class Migration(migrations.Migration):
|
||||||
'verbose_name': 'Database option',
|
'verbose_name': 'Database option',
|
||||||
'verbose_name_plural': 'Database options',
|
'verbose_name_plural': 'Database options',
|
||||||
},
|
},
|
||||||
bases=('hostingpackages.customerhostingpackageoption', models.Model),
|
bases=(
|
||||||
|
'hostingpackages.customerhostingpackageoption', models.Model),
|
||||||
),
|
),
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='HostingOption',
|
name='HostingOption',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
('id', models.AutoField(
|
||||||
('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, verbose_name='created', editable=False)),
|
verbose_name='ID', serialize=False, auto_created=True,
|
||||||
('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, verbose_name='modified', editable=False)),
|
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)),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'verbose_name': 'Hosting option',
|
'verbose_name': 'Hosting option',
|
||||||
|
@ -109,9 +164,16 @@ class Migration(migrations.Migration):
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='DiskSpaceOption',
|
name='DiskSpaceOption',
|
||||||
fields=[
|
fields=[
|
||||||
('hostingoption_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='hostingpackages.HostingOption')),
|
('hostingoption_ptr',
|
||||||
('diskspace', models.PositiveIntegerField(verbose_name='disk space')),
|
models.OneToOneField(
|
||||||
('diskspace_unit', models.PositiveSmallIntegerField(verbose_name='unit of disk space', choices=[(0, 'MiB'), (1, 'GiB'), (2, 'TiB')])),
|
parent_link=True, auto_created=True, primary_key=True,
|
||||||
|
serialize=False, to='hostingpackages.HostingOption',
|
||||||
|
on_delete=models.CASCADE)),
|
||||||
|
('diskspace', models.PositiveIntegerField(
|
||||||
|
verbose_name='disk space')),
|
||||||
|
('diskspace_unit', models.PositiveSmallIntegerField(
|
||||||
|
verbose_name='unit of disk space',
|
||||||
|
choices=[(0, 'MiB'), (1, 'GiB'), (2, 'TiB')])),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'ordering': ['diskspace_unit', 'diskspace'],
|
'ordering': ['diskspace_unit', 'diskspace'],
|
||||||
|
@ -124,14 +186,27 @@ class Migration(migrations.Migration):
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='HostingPackageTemplate',
|
name='HostingPackageTemplate',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
('id', models.AutoField(
|
||||||
('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, verbose_name='created', editable=False)),
|
verbose_name='ID', serialize=False, auto_created=True,
|
||||||
('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, verbose_name='modified', editable=False)),
|
primary_key=True)),
|
||||||
('name', models.CharField(unique=True, max_length=128, verbose_name='name')),
|
('created', model_utils.fields.AutoCreatedField(
|
||||||
('description', models.TextField(verbose_name='description', blank=True)),
|
default=django.utils.timezone.now, verbose_name='created',
|
||||||
('mailboxcount', models.PositiveIntegerField(verbose_name='mailbox count')),
|
editable=False)),
|
||||||
('diskspace', models.PositiveIntegerField(help_text='disk space for the hosting package', verbose_name='disk space')),
|
('modified', model_utils.fields.AutoLastModifiedField(
|
||||||
('diskspace_unit', models.PositiveSmallIntegerField(verbose_name='unit of disk space', choices=[(0, 'MiB'), (1, 'GiB'), (2, 'TiB')])),
|
default=django.utils.timezone.now, verbose_name='modified',
|
||||||
|
editable=False)),
|
||||||
|
('name', models.CharField(
|
||||||
|
unique=True, max_length=128, verbose_name='name')),
|
||||||
|
('description', models.TextField(
|
||||||
|
verbose_name='description', blank=True)),
|
||||||
|
('mailboxcount', models.PositiveIntegerField(
|
||||||
|
verbose_name='mailbox count')),
|
||||||
|
('diskspace', models.PositiveIntegerField(
|
||||||
|
help_text='disk space for the hosting package',
|
||||||
|
verbose_name='disk space')),
|
||||||
|
('diskspace_unit', models.PositiveSmallIntegerField(
|
||||||
|
verbose_name='unit of disk space',
|
||||||
|
choices=[(0, 'MiB'), (1, 'GiB'), (2, 'TiB')])),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'verbose_name': 'Hosting package',
|
'verbose_name': 'Hosting package',
|
||||||
|
@ -142,8 +217,13 @@ class Migration(migrations.Migration):
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='MailboxOption',
|
name='MailboxOption',
|
||||||
fields=[
|
fields=[
|
||||||
('hostingoption_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='hostingpackages.HostingOption')),
|
('hostingoption_ptr',
|
||||||
('number', models.PositiveIntegerField(unique=True, verbose_name='number of mailboxes')),
|
models.OneToOneField(
|
||||||
|
parent_link=True, auto_created=True, primary_key=True,
|
||||||
|
serialize=False, to='hostingpackages.HostingOption',
|
||||||
|
on_delete=models.CASCADE)),
|
||||||
|
('number', models.PositiveIntegerField(
|
||||||
|
unique=True, verbose_name='number of mailboxes')),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'ordering': ['number'],
|
'ordering': ['number'],
|
||||||
|
@ -156,9 +236,17 @@ class Migration(migrations.Migration):
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='UserDatabaseOption',
|
name='UserDatabaseOption',
|
||||||
fields=[
|
fields=[
|
||||||
('hostingoption_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='hostingpackages.HostingOption')),
|
('hostingoption_ptr',
|
||||||
('number', models.PositiveIntegerField(default=1, verbose_name='number of databases')),
|
models.OneToOneField(
|
||||||
('db_type', models.PositiveSmallIntegerField(verbose_name='database type', choices=[(0, 'PostgreSQL'), (1, 'MySQL')])),
|
parent_link=True, auto_created=True, primary_key=True,
|
||||||
|
serialize=False, to='hostingpackages.HostingOption',
|
||||||
|
on_delete=models.CASCADE)),
|
||||||
|
('number', models.PositiveIntegerField(
|
||||||
|
default=1, verbose_name='number of databases')),
|
||||||
|
('db_type',
|
||||||
|
models.PositiveSmallIntegerField(
|
||||||
|
verbose_name='database type',
|
||||||
|
choices=[(0, 'PostgreSQL'), (1, 'MySQL')])),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'ordering': ['db_type', 'number'],
|
'ordering': ['db_type', 'number'],
|
||||||
|
@ -170,60 +258,93 @@ class Migration(migrations.Migration):
|
||||||
),
|
),
|
||||||
migrations.AlterUniqueTogether(
|
migrations.AlterUniqueTogether(
|
||||||
name='userdatabaseoption',
|
name='userdatabaseoption',
|
||||||
unique_together=set([('number', 'db_type')]),
|
unique_together={('number', 'db_type')},
|
||||||
),
|
),
|
||||||
migrations.AlterUniqueTogether(
|
migrations.AlterUniqueTogether(
|
||||||
name='diskspaceoption',
|
name='diskspaceoption',
|
||||||
unique_together=set([('diskspace', 'diskspace_unit')]),
|
unique_together={('diskspace', 'diskspace_unit')},
|
||||||
),
|
),
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='customeruserdatabaseoption',
|
model_name='customeruserdatabaseoption',
|
||||||
name='template',
|
name='template',
|
||||||
field=models.ForeignKey(verbose_name='user database option template', to='hostingpackages.UserDatabaseOption', help_text='The user database option template that this hosting option is based on'),
|
field=models.ForeignKey(
|
||||||
|
verbose_name='user database option template',
|
||||||
|
to='hostingpackages.UserDatabaseOption',
|
||||||
|
help_text='The user database option template that this '
|
||||||
|
'hosting option is based on',
|
||||||
|
on_delete=models.CASCADE),
|
||||||
preserve_default=True,
|
preserve_default=True,
|
||||||
),
|
),
|
||||||
migrations.AlterUniqueTogether(
|
migrations.AlterUniqueTogether(
|
||||||
name='customeruserdatabaseoption',
|
name='customeruserdatabaseoption',
|
||||||
unique_together=set([('number', 'db_type')]),
|
unique_together={('number', 'db_type')},
|
||||||
),
|
),
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='customermailboxoption',
|
model_name='customermailboxoption',
|
||||||
name='template',
|
name='template',
|
||||||
field=models.ForeignKey(verbose_name='mailbox option template', to='hostingpackages.UserDatabaseOption', help_text='The mailbox option template that this mailbox option is based on'),
|
field=models.ForeignKey(
|
||||||
|
verbose_name='mailbox option template',
|
||||||
|
to='hostingpackages.UserDatabaseOption',
|
||||||
|
help_text='The mailbox option template that this mailbox '
|
||||||
|
'option is based on',
|
||||||
|
on_delete=models.CASCADE),
|
||||||
preserve_default=True,
|
preserve_default=True,
|
||||||
),
|
),
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='customerhostingpackageoption',
|
model_name='customerhostingpackageoption',
|
||||||
name='hosting_package',
|
name='hosting_package',
|
||||||
field=models.ForeignKey(verbose_name='hosting package', to='hostingpackages.CustomerHostingPackage'),
|
field=models.ForeignKey(
|
||||||
|
verbose_name='hosting package',
|
||||||
|
to='hostingpackages.CustomerHostingPackage',
|
||||||
|
on_delete=models.CASCADE),
|
||||||
preserve_default=True,
|
preserve_default=True,
|
||||||
),
|
),
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='customerhostingpackage',
|
model_name='customerhostingpackage',
|
||||||
name='template',
|
name='template',
|
||||||
field=models.ForeignKey(verbose_name='hosting package template', to='hostingpackages.HostingPackageTemplate', help_text='The hosting package template that this hosting package is based on'),
|
field=models.ForeignKey(
|
||||||
|
verbose_name='hosting package template',
|
||||||
|
to='hostingpackages.HostingPackageTemplate',
|
||||||
|
help_text='The hosting package template that this hosting '
|
||||||
|
'package is based on',
|
||||||
|
on_delete=models.CASCADE),
|
||||||
preserve_default=True,
|
preserve_default=True,
|
||||||
),
|
),
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='customerdiskspaceoption',
|
model_name='customerdiskspaceoption',
|
||||||
name='template',
|
name='template',
|
||||||
field=models.ForeignKey(verbose_name='disk space option template', to='hostingpackages.DiskSpaceOption', help_text='The disk space option template that this hosting option is based on'),
|
field=models.ForeignKey(
|
||||||
|
verbose_name='disk space option template',
|
||||||
|
to='hostingpackages.DiskSpaceOption',
|
||||||
|
help_text='The disk space option template that this hosting '
|
||||||
|
'option is based on',
|
||||||
|
on_delete=models.CASCADE),
|
||||||
preserve_default=True,
|
preserve_default=True,
|
||||||
),
|
),
|
||||||
migrations.AlterUniqueTogether(
|
migrations.AlterUniqueTogether(
|
||||||
name='customerdiskspaceoption',
|
name='customerdiskspaceoption',
|
||||||
unique_together=set([('diskspace', 'diskspace_unit')]),
|
unique_together={('diskspace', 'diskspace_unit')},
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='customerdiskspaceoption',
|
model_name='customerdiskspaceoption',
|
||||||
name='template',
|
name='template',
|
||||||
field=models.ForeignKey(verbose_name='disk space option template', to='hostingpackages.DiskSpaceOption', help_text='The disk space option template that this disk space option is based on'),
|
field=models.ForeignKey(
|
||||||
|
verbose_name='disk space option template',
|
||||||
|
to='hostingpackages.DiskSpaceOption',
|
||||||
|
help_text='The disk space option template that this disk '
|
||||||
|
'space option is based on',
|
||||||
|
on_delete=models.CASCADE),
|
||||||
preserve_default=True,
|
preserve_default=True,
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='customeruserdatabaseoption',
|
model_name='customeruserdatabaseoption',
|
||||||
name='template',
|
name='template',
|
||||||
field=models.ForeignKey(verbose_name='user database option template', to='hostingpackages.UserDatabaseOption', help_text='The user database option template that this database option is based on'),
|
field=models.ForeignKey(
|
||||||
|
verbose_name='user database option template',
|
||||||
|
to='hostingpackages.UserDatabaseOption',
|
||||||
|
help_text='The user database option template that this '
|
||||||
|
'database option is based on',
|
||||||
|
on_delete=models.CASCADE),
|
||||||
preserve_default=True,
|
preserve_default=True,
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
|
@ -234,12 +355,14 @@ class Migration(migrations.Migration):
|
||||||
),
|
),
|
||||||
migrations.AlterUniqueTogether(
|
migrations.AlterUniqueTogether(
|
||||||
name='customerhostingpackage',
|
name='customerhostingpackage',
|
||||||
unique_together=set([('customer', 'name')]),
|
unique_together={('customer', 'name')},
|
||||||
),
|
),
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='customerhostingpackage',
|
model_name='customerhostingpackage',
|
||||||
name='osuser',
|
name='osuser',
|
||||||
field=models.OneToOneField(null=True, blank=True, to='osusers.User', verbose_name='Operating system user'),
|
field=models.OneToOneField(
|
||||||
|
null=True, blank=True, to='osusers.User',
|
||||||
|
verbose_name='Operating system user', on_delete=models.CASCADE),
|
||||||
preserve_default=True,
|
preserve_default=True,
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.db import models, migrations
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('hostingpackages', '0001_initial'),
|
('hostingpackages', '0001_initial'),
|
||||||
]
|
]
|
||||||
|
@ -14,25 +13,45 @@ class Migration(migrations.Migration):
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='customerdiskspaceoption',
|
model_name='customerdiskspaceoption',
|
||||||
name='template',
|
name='template',
|
||||||
field=models.ForeignKey(verbose_name='disk space option template', to='hostingpackages.DiskSpaceOption', help_text='The disk space option template that this disk space option is based on'),
|
field=models.ForeignKey(
|
||||||
|
verbose_name='disk space option template',
|
||||||
|
to='hostingpackages.DiskSpaceOption',
|
||||||
|
help_text='The disk space option template that this disk '
|
||||||
|
'space option is based on',
|
||||||
|
on_delete=models.CASCADE),
|
||||||
preserve_default=True,
|
preserve_default=True,
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='customerhostingpackage',
|
model_name='customerhostingpackage',
|
||||||
name='template',
|
name='template',
|
||||||
field=models.ForeignKey(verbose_name='hosting package template', to='hostingpackages.HostingPackageTemplate', help_text='The hosting package template that this hosting package is based on'),
|
field=models.ForeignKey(
|
||||||
|
verbose_name='hosting package template',
|
||||||
|
to='hostingpackages.HostingPackageTemplate',
|
||||||
|
help_text='The hosting package template that this hosting '
|
||||||
|
'package is based on',
|
||||||
|
on_delete=models.CASCADE),
|
||||||
preserve_default=True,
|
preserve_default=True,
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='customermailboxoption',
|
model_name='customermailboxoption',
|
||||||
name='template',
|
name='template',
|
||||||
field=models.ForeignKey(verbose_name='mailbox option template', to='hostingpackages.UserDatabaseOption', help_text='The mailbox option template that this mailbox option is based on'),
|
field=models.ForeignKey(
|
||||||
|
verbose_name='mailbox option template',
|
||||||
|
to='hostingpackages.UserDatabaseOption',
|
||||||
|
help_text='The mailbox option template that this mailbox '
|
||||||
|
'option is based on',
|
||||||
|
on_delete=models.CASCADE),
|
||||||
preserve_default=True,
|
preserve_default=True,
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='customeruserdatabaseoption',
|
model_name='customeruserdatabaseoption',
|
||||||
name='template',
|
name='template',
|
||||||
field=models.ForeignKey(verbose_name='user database option template', to='hostingpackages.UserDatabaseOption', help_text='The user database option template that this database option is based on'),
|
field=models.ForeignKey(
|
||||||
|
verbose_name='user database option template',
|
||||||
|
to='hostingpackages.UserDatabaseOption',
|
||||||
|
help_text='The user database option template that this '
|
||||||
|
'database option is based on',
|
||||||
|
on_delete=models.CASCADE),
|
||||||
preserve_default=True,
|
preserve_default=True,
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.db import models, migrations
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('hostingpackages', '0002_auto_20150118_1319'),
|
('hostingpackages', '0002_auto_20150118_1319'),
|
||||||
]
|
]
|
||||||
|
@ -14,7 +13,12 @@ class Migration(migrations.Migration):
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='customermailboxoption',
|
model_name='customermailboxoption',
|
||||||
name='template',
|
name='template',
|
||||||
field=models.ForeignKey(verbose_name='mailbox option template', to='hostingpackages.MailboxOption', help_text='The mailbox option template that this mailbox option is based on'),
|
field=models.ForeignKey(
|
||||||
|
verbose_name='mailbox option template',
|
||||||
|
to='hostingpackages.MailboxOption',
|
||||||
|
help_text='The mailbox option template that this mailbox '
|
||||||
|
'option is based on',
|
||||||
|
on_delete=models.CASCADE),
|
||||||
preserve_default=True,
|
preserve_default=True,
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.db import models, migrations
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('osusers', '0004_auto_20150104_1751'),
|
('osusers', '0004_auto_20150104_1751'),
|
||||||
('hostingpackages', '0003_auto_20150118_1221'),
|
('hostingpackages', '0003_auto_20150118_1221'),
|
||||||
|
@ -15,7 +14,9 @@ class Migration(migrations.Migration):
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='customerhostingpackage',
|
model_name='customerhostingpackage',
|
||||||
name='osuser',
|
name='osuser',
|
||||||
field=models.ForeignKey(verbose_name='Operating system user', blank=True, to='osusers.User', null=True),
|
field=models.ForeignKey(
|
||||||
|
verbose_name='Operating system user', blank=True,
|
||||||
|
to='osusers.User', null=True, on_delete=models.CASCADE),
|
||||||
preserve_default=True,
|
preserve_default=True,
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,13 +1,12 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.db import models, migrations
|
|
||||||
import django.utils.timezone
|
import django.utils.timezone
|
||||||
import model_utils.fields
|
import model_utils.fields
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('domains', '0002_auto_20150124_1909'),
|
('domains', '0002_auto_20150124_1909'),
|
||||||
('hostingpackages', '0003_auto_20150118_1407'),
|
('hostingpackages', '0003_auto_20150118_1407'),
|
||||||
|
@ -17,11 +16,22 @@ class Migration(migrations.Migration):
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='CustomerHostingPackageDomain',
|
name='CustomerHostingPackageDomain',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
('id', models.AutoField(
|
||||||
('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, verbose_name='created', editable=False)),
|
verbose_name='ID', serialize=False, auto_created=True,
|
||||||
('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, verbose_name='modified', editable=False)),
|
primary_key=True)),
|
||||||
('domain', models.OneToOneField(verbose_name='hosting domain', to='domains.HostingDomain')),
|
('created', model_utils.fields.AutoCreatedField(
|
||||||
('hosting_package', models.ForeignKey(related_name='domains', verbose_name='hosting package', to='hostingpackages.CustomerHostingPackage')),
|
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.OneToOneField(
|
||||||
|
verbose_name='hosting domain', to='domains.HostingDomain',
|
||||||
|
on_delete=models.CASCADE)),
|
||||||
|
('hosting_package', models.ForeignKey(
|
||||||
|
related_name='domains', verbose_name='hosting package',
|
||||||
|
to='hostingpackages.CustomerHostingPackage',
|
||||||
|
on_delete=models.CASCADE)),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'abstract': False,
|
'abstract': False,
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.db import models, migrations
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('hostingpackages', '0004_customerhostingpackage_osuser'),
|
('hostingpackages', '0004_customerhostingpackage_osuser'),
|
||||||
]
|
]
|
||||||
|
@ -14,7 +13,9 @@ class Migration(migrations.Migration):
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='customerhostingpackage',
|
model_name='customerhostingpackage',
|
||||||
name='osuser',
|
name='osuser',
|
||||||
field=models.OneToOneField(null=True, blank=True, to='osusers.User', verbose_name='Operating system user'),
|
field=models.OneToOneField(
|
||||||
|
null=True, blank=True, to='osusers.User',
|
||||||
|
verbose_name='Operating system user', on_delete=models.CASCADE),
|
||||||
preserve_default=True,
|
preserve_default=True,
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
|
@ -5,9 +5,9 @@ This module contains the hosting package models.
|
||||||
from __future__ import absolute_import, unicode_literals
|
from __future__ import absolute_import, unicode_literals
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.urlresolvers import reverse
|
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
from django.urls import reverse
|
||||||
from django.utils.encoding import python_2_unicode_compatible
|
from django.utils.encoding import python_2_unicode_compatible
|
||||||
from django.utils.translation import ugettext_lazy as _, ungettext
|
from django.utils.translation import ugettext_lazy as _, ungettext
|
||||||
|
|
||||||
|
@ -26,7 +26,6 @@ from userdbs.models import (
|
||||||
UserDatabase,
|
UserDatabase,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
DISK_SPACE_UNITS = Choices(
|
DISK_SPACE_UNITS = Choices(
|
||||||
(0, 'M', _('MiB')),
|
(0, 'M', _('MiB')),
|
||||||
(1, 'G', _('GiB')),
|
(1, 'G', _('GiB')),
|
||||||
|
@ -94,6 +93,7 @@ class DiskSpaceOption(DiskSpaceOptionBase, HostingOption):
|
||||||
existing hosting packages.
|
existing hosting packages.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
unique_together = ['diskspace', 'diskspace_unit']
|
unique_together = ['diskspace', 'diskspace_unit']
|
||||||
|
|
||||||
|
@ -127,6 +127,7 @@ class UserDatabaseOption(UserDatabaseOptionBase, HostingOption):
|
||||||
hosting packages.
|
hosting packages.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
unique_together = ['number', 'db_type']
|
unique_together = ['number', 'db_type']
|
||||||
|
|
||||||
|
@ -203,17 +204,19 @@ class CustomerHostingPackage(HostingPackageBase):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
customer = models.ForeignKey(
|
customer = models.ForeignKey(
|
||||||
settings.AUTH_USER_MODEL, verbose_name=_('customer'))
|
settings.AUTH_USER_MODEL, verbose_name=_('customer'),
|
||||||
|
on_delete=models.CASCADE)
|
||||||
template = models.ForeignKey(
|
template = models.ForeignKey(
|
||||||
HostingPackageTemplate, verbose_name=_('hosting package template'),
|
HostingPackageTemplate, verbose_name=_('hosting package template'),
|
||||||
help_text=_(
|
help_text=_(
|
||||||
'The hosting package template that this hosting package is based'
|
'The hosting package template that this hosting package is based'
|
||||||
' on'
|
' on'
|
||||||
))
|
),
|
||||||
|
on_delete=models.CASCADE)
|
||||||
name = models.CharField(_('name'), max_length=128)
|
name = models.CharField(_('name'), max_length=128)
|
||||||
osuser = models.OneToOneField(
|
osuser = models.OneToOneField(
|
||||||
OsUser, verbose_name=_('Operating system user'),
|
OsUser, verbose_name=_('Operating system user'),
|
||||||
blank=True, null=True)
|
blank=True, null=True, on_delete=models.CASCADE)
|
||||||
|
|
||||||
objects = CustomerHostingPackageManager()
|
objects = CustomerHostingPackageManager()
|
||||||
|
|
||||||
|
@ -250,6 +253,7 @@ class CustomerHostingPackage(HostingPackageBase):
|
||||||
]:
|
]:
|
||||||
opts.extend(opt_type.objects.filter(hosting_package=self))
|
opts.extend(opt_type.objects.filter(hosting_package=self))
|
||||||
return opts
|
return opts
|
||||||
|
|
||||||
hostingoptions = property(get_hostingoptions)
|
hostingoptions = property(get_hostingoptions)
|
||||||
|
|
||||||
def get_disk_space(self, unit=None):
|
def get_disk_space(self, unit=None):
|
||||||
|
@ -276,7 +280,8 @@ class CustomerHostingPackage(HostingPackageBase):
|
||||||
option.diskspace)
|
option.diskspace)
|
||||||
else:
|
else:
|
||||||
diskspace = (
|
diskspace = (
|
||||||
DISK_SPACE_FACTORS[min_unit][option.diskspace_unit] *
|
DISK_SPACE_FACTORS[min_unit][
|
||||||
|
option.diskspace_unit] *
|
||||||
diskspace) + option.diskspace
|
diskspace) + option.diskspace
|
||||||
min_unit = option.diskspace_unit
|
min_unit = option.diskspace_unit
|
||||||
if unit is None:
|
if unit is None:
|
||||||
|
@ -312,6 +317,7 @@ class CustomerHostingPackage(HostingPackageBase):
|
||||||
def get_mailboxes(self):
|
def get_mailboxes(self):
|
||||||
if self.osuser:
|
if self.osuser:
|
||||||
return Mailbox.objects.filter(osuser=self.osuser).all()
|
return Mailbox.objects.filter(osuser=self.osuser).all()
|
||||||
|
|
||||||
mailboxes = property(get_mailboxes)
|
mailboxes = property(get_mailboxes)
|
||||||
|
|
||||||
def get_used_mailbox_count(self):
|
def get_used_mailbox_count(self):
|
||||||
|
@ -322,6 +328,7 @@ class CustomerHostingPackage(HostingPackageBase):
|
||||||
if self.osuser:
|
if self.osuser:
|
||||||
return Mailbox.objects.filter(osuser=self.osuser).count()
|
return Mailbox.objects.filter(osuser=self.osuser).count()
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
used_mailbox_count = property(get_used_mailbox_count)
|
used_mailbox_count = property(get_used_mailbox_count)
|
||||||
|
|
||||||
def get_mailbox_count(self):
|
def get_mailbox_count(self):
|
||||||
|
@ -336,6 +343,7 @@ class CustomerHostingPackage(HostingPackageBase):
|
||||||
mailbox_sum=models.Sum('number')
|
mailbox_sum=models.Sum('number')
|
||||||
)
|
)
|
||||||
return self.mailboxcount + (result['mailbox_sum'] or 0)
|
return self.mailboxcount + (result['mailbox_sum'] or 0)
|
||||||
|
|
||||||
mailbox_count = property(get_mailbox_count)
|
mailbox_count = property(get_mailbox_count)
|
||||||
|
|
||||||
def may_add_mailbox(self):
|
def may_add_mailbox(self):
|
||||||
|
@ -357,6 +365,7 @@ class CustomerHostingPackage(HostingPackageBase):
|
||||||
if self.osuser:
|
if self.osuser:
|
||||||
return UserDatabase.objects.filter(
|
return UserDatabase.objects.filter(
|
||||||
db_user__osuser=self.osuser).all()
|
db_user__osuser=self.osuser).all()
|
||||||
|
|
||||||
databases = property(get_databases_flat)
|
databases = property(get_databases_flat)
|
||||||
|
|
||||||
def may_add_database(self):
|
def may_add_database(self):
|
||||||
|
@ -402,9 +411,10 @@ class CustomerHostingPackageDomain(TimeStampedModel):
|
||||||
"""
|
"""
|
||||||
hosting_package = models.ForeignKey(
|
hosting_package = models.ForeignKey(
|
||||||
CustomerHostingPackage, verbose_name=_('hosting package'),
|
CustomerHostingPackage, verbose_name=_('hosting package'),
|
||||||
related_name='domains')
|
related_name='domains', on_delete=models.CASCADE)
|
||||||
domain = models.OneToOneField(
|
domain = models.OneToOneField(
|
||||||
HostingDomain, verbose_name=_('hosting domain'))
|
HostingDomain, verbose_name=_('hosting domain'),
|
||||||
|
on_delete=models.CASCADE)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.domain.domain
|
return self.domain.domain
|
||||||
|
@ -423,7 +433,8 @@ class CustomerHostingPackageOption(TimeStampedModel):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
hosting_package = models.ForeignKey(
|
hosting_package = models.ForeignKey(
|
||||||
CustomerHostingPackage, verbose_name=_('hosting package'))
|
CustomerHostingPackage, verbose_name=_('hosting package'),
|
||||||
|
on_delete=models.CASCADE)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = _('customer hosting option')
|
verbose_name = _('customer hosting option')
|
||||||
|
@ -443,7 +454,8 @@ class CustomerDiskSpaceOption(DiskSpaceOptionBase,
|
||||||
help_text=_(
|
help_text=_(
|
||||||
'The disk space option template that this disk space option is'
|
'The disk space option template that this disk space option is'
|
||||||
' based on'
|
' based on'
|
||||||
))
|
),
|
||||||
|
on_delete=models.CASCADE)
|
||||||
|
|
||||||
|
|
||||||
class CustomerUserDatabaseOption(UserDatabaseOptionBase,
|
class CustomerUserDatabaseOption(UserDatabaseOptionBase,
|
||||||
|
@ -459,7 +471,8 @@ class CustomerUserDatabaseOption(UserDatabaseOptionBase,
|
||||||
help_text=_(
|
help_text=_(
|
||||||
'The user database option template that this database option is'
|
'The user database option template that this database option is'
|
||||||
' based on'
|
' based on'
|
||||||
))
|
),
|
||||||
|
on_delete=models.CASCADE)
|
||||||
|
|
||||||
|
|
||||||
class CustomerMailboxOption(MailboxOptionBase,
|
class CustomerMailboxOption(MailboxOptionBase,
|
||||||
|
@ -474,4 +487,5 @@ class CustomerMailboxOption(MailboxOptionBase,
|
||||||
verbose_name=_('mailbox option template'),
|
verbose_name=_('mailbox option template'),
|
||||||
help_text=_(
|
help_text=_(
|
||||||
'The mailbox option template that this mailbox option is based on'
|
'The mailbox option template that this mailbox option is based on'
|
||||||
))
|
),
|
||||||
|
on_delete=models.CASCADE)
|
||||||
|
|
|
@ -5,8 +5,8 @@ This module defines form classes for mailbox and mail address editing.
|
||||||
from __future__ import absolute_import, unicode_literals
|
from __future__ import absolute_import, unicode_literals
|
||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.core.urlresolvers import reverse
|
|
||||||
from django.core.validators import validate_email
|
from django.core.validators import validate_email
|
||||||
|
from django.urls import reverse
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from crispy_forms.helper import FormHelper
|
from crispy_forms.helper import FormHelper
|
||||||
|
|
|
@ -1,13 +1,12 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.db import models, migrations
|
|
||||||
import django.utils.timezone
|
import django.utils.timezone
|
||||||
import model_utils.fields
|
import model_utils.fields
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('domains', '0001_initial'),
|
('domains', '0001_initial'),
|
||||||
('osusers', '0001_initial'),
|
('osusers', '0001_initial'),
|
||||||
|
@ -17,9 +16,15 @@ class Migration(migrations.Migration):
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='MailAddress',
|
name='MailAddress',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
('id', models.AutoField(
|
||||||
('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, verbose_name='created', editable=False)),
|
verbose_name='ID', serialize=False, auto_created=True,
|
||||||
('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, verbose_name='modified', editable=False)),
|
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)),
|
||||||
('active', models.BooleanField(default=True)),
|
('active', models.BooleanField(default=True)),
|
||||||
('localpart', models.CharField(max_length=128)),
|
('localpart', models.CharField(max_length=128)),
|
||||||
],
|
],
|
||||||
|
@ -32,9 +37,15 @@ class Migration(migrations.Migration):
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='MailAddressForward',
|
name='MailAddressForward',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
('id', models.AutoField(
|
||||||
('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, verbose_name='created', editable=False)),
|
verbose_name='ID', serialize=False, auto_created=True,
|
||||||
('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, verbose_name='modified', editable=False)),
|
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)),
|
||||||
('target', models.EmailField(max_length=254)),
|
('target', models.EmailField(max_length=254)),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
|
@ -44,9 +55,15 @@ class Migration(migrations.Migration):
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='MailAddressMailbox',
|
name='MailAddressMailbox',
|
||||||
fields=[
|
fields=[
|
||||||
('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, verbose_name='created', editable=False)),
|
('created', model_utils.fields.AutoCreatedField(
|
||||||
('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, verbose_name='modified', editable=False)),
|
default=django.utils.timezone.now, verbose_name='created',
|
||||||
('mailaddress', models.OneToOneField(primary_key=True, serialize=False, to='managemails.MailAddress')),
|
editable=False)),
|
||||||
|
('modified', model_utils.fields.AutoLastModifiedField(
|
||||||
|
default=django.utils.timezone.now, verbose_name='modified',
|
||||||
|
editable=False)),
|
||||||
|
('mailaddress', models.OneToOneField(
|
||||||
|
primary_key=True, serialize=False,
|
||||||
|
to='managemails.MailAddress', on_delete=models.CASCADE)),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
},
|
},
|
||||||
|
@ -55,13 +72,20 @@ class Migration(migrations.Migration):
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='Mailbox',
|
name='Mailbox',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
('id', models.AutoField(
|
||||||
('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, verbose_name='created', editable=False)),
|
verbose_name='ID', serialize=False, auto_created=True,
|
||||||
('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, verbose_name='modified', editable=False)),
|
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)),
|
||||||
('active', models.BooleanField(default=True)),
|
('active', models.BooleanField(default=True)),
|
||||||
('username', models.CharField(unique=True, max_length=128)),
|
('username', models.CharField(unique=True, max_length=128)),
|
||||||
('password', models.CharField(max_length=255)),
|
('password', models.CharField(max_length=255)),
|
||||||
('osuser', models.ForeignKey(to='osusers.User')),
|
('osuser', models.ForeignKey(
|
||||||
|
to='osusers.User', on_delete=models.CASCADE)),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'verbose_name': 'Mailbox',
|
'verbose_name': 'Mailbox',
|
||||||
|
@ -72,31 +96,34 @@ class Migration(migrations.Migration):
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='mailaddressmailbox',
|
model_name='mailaddressmailbox',
|
||||||
name='mailbox',
|
name='mailbox',
|
||||||
field=models.ForeignKey(to='managemails.Mailbox'),
|
field=models.ForeignKey(
|
||||||
|
to='managemails.Mailbox', on_delete=models.CASCADE),
|
||||||
preserve_default=True,
|
preserve_default=True,
|
||||||
),
|
),
|
||||||
migrations.AlterUniqueTogether(
|
migrations.AlterUniqueTogether(
|
||||||
name='mailaddressmailbox',
|
name='mailaddressmailbox',
|
||||||
unique_together=set([('mailaddress', 'mailbox')]),
|
unique_together={('mailaddress', 'mailbox')},
|
||||||
),
|
),
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='mailaddressforward',
|
model_name='mailaddressforward',
|
||||||
name='mailaddress',
|
name='mailaddress',
|
||||||
field=models.ForeignKey(to='managemails.MailAddress'),
|
field=models.ForeignKey(
|
||||||
|
to='managemails.MailAddress', on_delete=models.CASCADE),
|
||||||
preserve_default=True,
|
preserve_default=True,
|
||||||
),
|
),
|
||||||
migrations.AlterUniqueTogether(
|
migrations.AlterUniqueTogether(
|
||||||
name='mailaddressforward',
|
name='mailaddressforward',
|
||||||
unique_together=set([('mailaddress', 'target')]),
|
unique_together={('mailaddress', 'target')},
|
||||||
),
|
),
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='mailaddress',
|
model_name='mailaddress',
|
||||||
name='domain',
|
name='domain',
|
||||||
field=models.ForeignKey(to='domains.MailDomain'),
|
field=models.ForeignKey(
|
||||||
|
to='domains.MailDomain', on_delete=models.CASCADE),
|
||||||
preserve_default=True,
|
preserve_default=True,
|
||||||
),
|
),
|
||||||
migrations.AlterUniqueTogether(
|
migrations.AlterUniqueTogether(
|
||||||
name='mailaddress',
|
name='mailaddress',
|
||||||
unique_together=set([('localpart', 'domain')]),
|
unique_together={('localpart', 'domain')},
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.db import models, migrations
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('managemails', '0002_auto_20150117_1238'),
|
('managemails', '0002_auto_20150117_1238'),
|
||||||
]
|
]
|
||||||
|
@ -14,13 +13,17 @@ class Migration(migrations.Migration):
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='mailaddressmailbox',
|
model_name='mailaddressmailbox',
|
||||||
name='mailaddress',
|
name='mailaddress',
|
||||||
field=models.OneToOneField(primary_key=True, serialize=False, to='managemails.MailAddress', verbose_name='mailaddress'),
|
field=models.OneToOneField(
|
||||||
|
primary_key=True, serialize=False, to='managemails.MailAddress',
|
||||||
|
verbose_name='mailaddress', on_delete=models.CASCADE),
|
||||||
preserve_default=True,
|
preserve_default=True,
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='mailaddressmailbox',
|
model_name='mailaddressmailbox',
|
||||||
name='mailbox',
|
name='mailbox',
|
||||||
field=models.ForeignKey(verbose_name='mailbox', to='managemails.Mailbox'),
|
field=models.ForeignKey(
|
||||||
|
verbose_name='mailbox', to='managemails.Mailbox',
|
||||||
|
on_delete=models.CASCADE),
|
||||||
preserve_default=True,
|
preserve_default=True,
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.db import models, migrations
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('managemails', '0003_auto_20150124_2029'),
|
('managemails', '0003_auto_20150124_2029'),
|
||||||
]
|
]
|
||||||
|
@ -14,7 +13,9 @@ class Migration(migrations.Migration):
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='mailaddress',
|
model_name='mailaddress',
|
||||||
name='domain',
|
name='domain',
|
||||||
field=models.ForeignKey(verbose_name='domain', to='domains.MailDomain'),
|
field=models.ForeignKey(
|
||||||
|
verbose_name='domain', to='domains.MailDomain',
|
||||||
|
on_delete=models.CASCADE),
|
||||||
preserve_default=True,
|
preserve_default=True,
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
|
|
|
@ -109,7 +109,7 @@ class Mailbox(ActivateAbleMixin, TimeStampedModel):
|
||||||
This is the model class for a mailbox.
|
This is the model class for a mailbox.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
osuser = models.ForeignKey(OsUser)
|
osuser = models.ForeignKey(OsUser, on_delete=models.CASCADE)
|
||||||
username = models.CharField(max_length=128, unique=True)
|
username = models.CharField(max_length=128, unique=True)
|
||||||
password = models.CharField(max_length=255)
|
password = models.CharField(max_length=255)
|
||||||
|
|
||||||
|
@ -162,7 +162,8 @@ class MailAddress(ActivateAbleMixin, TimeStampedModel, models.Model):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
localpart = models.CharField(_('local part'), max_length=128)
|
localpart = models.CharField(_('local part'), max_length=128)
|
||||||
domain = models.ForeignKey(MailDomain, verbose_name=_('domain'))
|
domain = models.ForeignKey(
|
||||||
|
MailDomain, verbose_name=_('domain'), on_delete=models.CASCADE)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
ordering = ['domain', 'localpart']
|
ordering = ['domain', 'localpart']
|
||||||
|
@ -250,8 +251,10 @@ class MailAddressMailbox(TimeStampedModel, models.Model):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
mailaddress = models.OneToOneField(
|
mailaddress = models.OneToOneField(
|
||||||
MailAddress, verbose_name=_('mailaddress'), primary_key=True)
|
MailAddress, verbose_name=_('mailaddress'), primary_key=True,
|
||||||
mailbox = models.ForeignKey(Mailbox, verbose_name=_('mailbox'))
|
on_delete=models.CASCADE)
|
||||||
|
mailbox = models.ForeignKey(
|
||||||
|
Mailbox, verbose_name=_('mailbox'), on_delete=models.CASCADE)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
unique_together = ('mailaddress', 'mailbox')
|
unique_together = ('mailaddress', 'mailbox')
|
||||||
|
@ -265,7 +268,7 @@ class MailAddressForward(TimeStampedModel, models.Model):
|
||||||
This is a model class to map mail addresses to forwarding addresses.
|
This is a model class to map mail addresses to forwarding addresses.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
mailaddress = models.ForeignKey(MailAddress)
|
mailaddress = models.ForeignKey(MailAddress, on_delete=models.CASCADE)
|
||||||
target = models.EmailField(max_length=254)
|
target = models.EmailField(max_length=254)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
|
@ -5,7 +5,7 @@ This module defines operating system user related forms.
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.core.urlresolvers import reverse
|
from django.urls import reverse
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from crispy_forms.helper import FormHelper
|
from crispy_forms.helper import FormHelper
|
||||||
|
@ -79,7 +79,7 @@ class AddSshPublicKeyForm(forms.ModelForm):
|
||||||
keytext = self.cleaned_data.get('publickeytext')
|
keytext = self.cleaned_data.get('publickeytext')
|
||||||
try:
|
try:
|
||||||
SshPublicKey.objects.parse_keytext(keytext)
|
SshPublicKey.objects.parse_keytext(keytext)
|
||||||
except:
|
except ValueError:
|
||||||
raise forms.ValidationError(INVALID_SSH_PUBLIC_KEY)
|
raise forms.ValidationError(INVALID_SSH_PUBLIC_KEY)
|
||||||
return keytext
|
return keytext
|
||||||
|
|
||||||
|
|
|
@ -1,13 +1,12 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.db import models, migrations
|
|
||||||
import django.utils.timezone
|
import django.utils.timezone
|
||||||
import model_utils.fields
|
import model_utils.fields
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -15,9 +14,15 @@ class Migration(migrations.Migration):
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='AdditionalGroup',
|
name='AdditionalGroup',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
('id', models.AutoField(
|
||||||
('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, verbose_name='created', editable=False)),
|
verbose_name='ID', serialize=False, auto_created=True,
|
||||||
('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, verbose_name='modified', editable=False)),
|
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)),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'verbose_name': 'Additional group',
|
'verbose_name': 'Additional group',
|
||||||
|
@ -28,9 +33,14 @@ class Migration(migrations.Migration):
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='DeleteTaskResult',
|
name='DeleteTaskResult',
|
||||||
fields=[
|
fields=[
|
||||||
('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, verbose_name='created', editable=False)),
|
('created', model_utils.fields.AutoCreatedField(
|
||||||
('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, verbose_name='modified', editable=False)),
|
default=django.utils.timezone.now, verbose_name='created',
|
||||||
('task_uuid', models.CharField(max_length=64, serialize=False, primary_key=True)),
|
editable=False)),
|
||||||
|
('modified', model_utils.fields.AutoLastModifiedField(
|
||||||
|
default=django.utils.timezone.now, verbose_name='modified',
|
||||||
|
editable=False)),
|
||||||
|
('task_uuid', models.CharField(
|
||||||
|
max_length=64, serialize=False, primary_key=True)),
|
||||||
('task_name', models.CharField(max_length=255, db_index=True)),
|
('task_name', models.CharField(max_length=255, db_index=True)),
|
||||||
('is_finished', models.BooleanField(default=False)),
|
('is_finished', models.BooleanField(default=False)),
|
||||||
('is_success', models.BooleanField(default=False)),
|
('is_success', models.BooleanField(default=False)),
|
||||||
|
@ -47,12 +57,21 @@ class Migration(migrations.Migration):
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='Group',
|
name='Group',
|
||||||
fields=[
|
fields=[
|
||||||
('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, verbose_name='created', editable=False)),
|
('created', model_utils.fields.AutoCreatedField(
|
||||||
('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, verbose_name='modified', editable=False)),
|
default=django.utils.timezone.now, verbose_name='created',
|
||||||
('groupname', models.CharField(unique=True, max_length=16, verbose_name='Group name')),
|
editable=False)),
|
||||||
('gid', models.PositiveSmallIntegerField(unique=True, serialize=False, verbose_name='Group ID', primary_key=True)),
|
('modified', model_utils.fields.AutoLastModifiedField(
|
||||||
('descr', models.TextField(verbose_name='Description', blank=True)),
|
default=django.utils.timezone.now, verbose_name='modified',
|
||||||
('passwd', models.CharField(max_length=128, verbose_name='Group password', blank=True)),
|
editable=False)),
|
||||||
|
('groupname', models.CharField(
|
||||||
|
unique=True, max_length=16, verbose_name='Group name')),
|
||||||
|
('gid', models.PositiveSmallIntegerField(
|
||||||
|
unique=True, serialize=False, verbose_name='Group ID',
|
||||||
|
primary_key=True)),
|
||||||
|
('descr', models.TextField(
|
||||||
|
verbose_name='Description', blank=True)),
|
||||||
|
('passwd', models.CharField(
|
||||||
|
max_length=128, verbose_name='Group password', blank=True)),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'verbose_name': 'Group',
|
'verbose_name': 'Group',
|
||||||
|
@ -63,15 +82,21 @@ class Migration(migrations.Migration):
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='GroupTaskResult',
|
name='GroupTaskResult',
|
||||||
fields=[
|
fields=[
|
||||||
('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, verbose_name='created', editable=False)),
|
('created', model_utils.fields.AutoCreatedField(
|
||||||
('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, verbose_name='modified', editable=False)),
|
default=django.utils.timezone.now, verbose_name='created',
|
||||||
('task_uuid', models.CharField(max_length=64, serialize=False, primary_key=True)),
|
editable=False)),
|
||||||
|
('modified', model_utils.fields.AutoLastModifiedField(
|
||||||
|
default=django.utils.timezone.now, verbose_name='modified',
|
||||||
|
editable=False)),
|
||||||
|
('task_uuid', models.CharField(
|
||||||
|
max_length=64, serialize=False, primary_key=True)),
|
||||||
('task_name', models.CharField(max_length=255, db_index=True)),
|
('task_name', models.CharField(max_length=255, db_index=True)),
|
||||||
('is_finished', models.BooleanField(default=False)),
|
('is_finished', models.BooleanField(default=False)),
|
||||||
('is_success', models.BooleanField(default=False)),
|
('is_success', models.BooleanField(default=False)),
|
||||||
('state', models.CharField(max_length=10)),
|
('state', models.CharField(max_length=10)),
|
||||||
('result_body', models.TextField(blank=True)),
|
('result_body', models.TextField(blank=True)),
|
||||||
('group', models.ForeignKey(to='osusers.Group')),
|
('group', models.ForeignKey(
|
||||||
|
to='osusers.Group', on_delete=models.CASCADE)),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'abstract': False,
|
'abstract': False,
|
||||||
|
@ -81,13 +106,23 @@ class Migration(migrations.Migration):
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='User',
|
name='User',
|
||||||
fields=[
|
fields=[
|
||||||
('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, verbose_name='created', editable=False)),
|
('created', model_utils.fields.AutoCreatedField(
|
||||||
('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, verbose_name='modified', editable=False)),
|
default=django.utils.timezone.now, verbose_name='created',
|
||||||
('username', models.CharField(unique=True, max_length=64, verbose_name='User name')),
|
editable=False)),
|
||||||
('uid', models.PositiveSmallIntegerField(unique=True, serialize=False, verbose_name='User ID', primary_key=True)),
|
('modified', model_utils.fields.AutoLastModifiedField(
|
||||||
('gecos', models.CharField(max_length=128, verbose_name='Gecos field', blank=True)),
|
default=django.utils.timezone.now, verbose_name='modified',
|
||||||
('homedir', models.CharField(max_length=256, verbose_name='Home directory')),
|
editable=False)),
|
||||||
('shell', models.CharField(max_length=64, verbose_name='Login shell')),
|
('username', models.CharField(
|
||||||
|
unique=True, max_length=64, verbose_name='User name')),
|
||||||
|
('uid', models.PositiveSmallIntegerField(
|
||||||
|
unique=True, serialize=False, verbose_name='User ID',
|
||||||
|
primary_key=True)),
|
||||||
|
('gecos', models.CharField(
|
||||||
|
max_length=128, verbose_name='Gecos field', blank=True)),
|
||||||
|
('homedir', models.CharField(
|
||||||
|
max_length=256, verbose_name='Home directory')),
|
||||||
|
('shell', models.CharField(
|
||||||
|
max_length=64, verbose_name='Login shell')),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'verbose_name': 'Benutzer',
|
'verbose_name': 'Benutzer',
|
||||||
|
@ -98,16 +133,43 @@ class Migration(migrations.Migration):
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='Shadow',
|
name='Shadow',
|
||||||
fields=[
|
fields=[
|
||||||
('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, verbose_name='created', editable=False)),
|
('created', model_utils.fields.AutoCreatedField(
|
||||||
('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, verbose_name='modified', editable=False)),
|
default=django.utils.timezone.now, verbose_name='created',
|
||||||
('user', models.OneToOneField(primary_key=True, serialize=False, to='osusers.User', verbose_name='Benutzer')),
|
editable=False)),
|
||||||
('passwd', models.CharField(max_length=128, verbose_name='Encrypted password')),
|
('modified', model_utils.fields.AutoLastModifiedField(
|
||||||
('changedays', models.PositiveSmallIntegerField(help_text='This is expressed in days since Jan 1, 1970', null=True, verbose_name='Date of last change', blank=True)),
|
default=django.utils.timezone.now, verbose_name='modified',
|
||||||
('minage', models.PositiveSmallIntegerField(help_text='Minimum number of days before the password can be changed', null=True, verbose_name='Minimum age', blank=True)),
|
editable=False)),
|
||||||
('maxage', models.PositiveSmallIntegerField(help_text='Maximum number of days after which the password has to be changed', null=True, verbose_name='Maximum age', blank=True)),
|
('user', models.OneToOneField(
|
||||||
('gracedays', models.PositiveSmallIntegerField(help_text='The number of days before the password is going to expire', null=True, verbose_name='Grace period', blank=True)),
|
primary_key=True, serialize=False, to='osusers.User',
|
||||||
('inactdays', models.PositiveSmallIntegerField(help_text='The number of days after the password has expired during which the password should still be accepted', null=True, verbose_name='Inactivity period', blank=True)),
|
verbose_name='Benutzer', on_delete=models.CASCADE)),
|
||||||
('expiredays', models.PositiveSmallIntegerField(default=None, help_text='The date of expiration of the account, expressed as number of days since Jan 1, 1970', null=True, verbose_name='Account expiration date', blank=True)),
|
('passwd', models.CharField(
|
||||||
|
max_length=128, verbose_name='Encrypted password')),
|
||||||
|
('changedays', models.PositiveSmallIntegerField(
|
||||||
|
help_text='This is expressed in days since Jan 1, 1970',
|
||||||
|
null=True, verbose_name='Date of last change', blank=True)),
|
||||||
|
('minage', models.PositiveSmallIntegerField(
|
||||||
|
help_text='Minimum number of days before the password can '
|
||||||
|
'be changed',
|
||||||
|
null=True, verbose_name='Minimum age', blank=True)),
|
||||||
|
('maxage', models.PositiveSmallIntegerField(
|
||||||
|
help_text='Maximum number of days after which the '
|
||||||
|
'password has to be changed',
|
||||||
|
null=True, verbose_name='Maximum age', blank=True)),
|
||||||
|
('gracedays', models.PositiveSmallIntegerField(
|
||||||
|
help_text='The number of days before the password is '
|
||||||
|
'going to expire',
|
||||||
|
null=True, verbose_name='Grace period', blank=True)),
|
||||||
|
('inactdays', models.PositiveSmallIntegerField(
|
||||||
|
help_text='The number of days after the password has '
|
||||||
|
'expired during which the password should still '
|
||||||
|
'be accepted',
|
||||||
|
null=True, verbose_name='Inactivity period', blank=True)),
|
||||||
|
('expiredays', models.PositiveSmallIntegerField(
|
||||||
|
default=None,
|
||||||
|
help_text='The date of expiration of the account, '
|
||||||
|
'expressed as number of days since Jan 1, 1970',
|
||||||
|
null=True, verbose_name='Account expiration date',
|
||||||
|
blank=True)),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'verbose_name': 'Shadow password',
|
'verbose_name': 'Shadow password',
|
||||||
|
@ -118,15 +180,21 @@ class Migration(migrations.Migration):
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='UserTaskResult',
|
name='UserTaskResult',
|
||||||
fields=[
|
fields=[
|
||||||
('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, verbose_name='created', editable=False)),
|
('created', model_utils.fields.AutoCreatedField(
|
||||||
('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, verbose_name='modified', editable=False)),
|
default=django.utils.timezone.now, verbose_name='created',
|
||||||
('task_uuid', models.CharField(max_length=64, serialize=False, primary_key=True)),
|
editable=False)),
|
||||||
|
('modified', model_utils.fields.AutoLastModifiedField(
|
||||||
|
default=django.utils.timezone.now, verbose_name='modified',
|
||||||
|
editable=False)),
|
||||||
|
('task_uuid', models.CharField(
|
||||||
|
max_length=64, serialize=False, primary_key=True)),
|
||||||
('task_name', models.CharField(max_length=255, db_index=True)),
|
('task_name', models.CharField(max_length=255, db_index=True)),
|
||||||
('is_finished', models.BooleanField(default=False)),
|
('is_finished', models.BooleanField(default=False)),
|
||||||
('is_success', models.BooleanField(default=False)),
|
('is_success', models.BooleanField(default=False)),
|
||||||
('state', models.CharField(max_length=10)),
|
('state', models.CharField(max_length=10)),
|
||||||
('result_body', models.TextField(blank=True)),
|
('result_body', models.TextField(blank=True)),
|
||||||
('user', models.ForeignKey(to='osusers.User')),
|
('user', models.ForeignKey(
|
||||||
|
to='osusers.User', on_delete=models.CASCADE)),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'abstract': False,
|
'abstract': False,
|
||||||
|
@ -136,23 +204,27 @@ class Migration(migrations.Migration):
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='user',
|
model_name='user',
|
||||||
name='group',
|
name='group',
|
||||||
field=models.ForeignKey(verbose_name='Group', to='osusers.Group'),
|
field=models.ForeignKey(
|
||||||
|
verbose_name='Group', to='osusers.Group',
|
||||||
|
on_delete=models.CASCADE),
|
||||||
preserve_default=True,
|
preserve_default=True,
|
||||||
),
|
),
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='additionalgroup',
|
model_name='additionalgroup',
|
||||||
name='group',
|
name='group',
|
||||||
field=models.ForeignKey(to='osusers.Group'),
|
field=models.ForeignKey(
|
||||||
|
to='osusers.Group', on_delete=models.CASCADE),
|
||||||
preserve_default=True,
|
preserve_default=True,
|
||||||
),
|
),
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='additionalgroup',
|
model_name='additionalgroup',
|
||||||
name='user',
|
name='user',
|
||||||
field=models.ForeignKey(to='osusers.User'),
|
field=models.ForeignKey(
|
||||||
|
to='osusers.User', on_delete=models.CASCADE),
|
||||||
preserve_default=True,
|
preserve_default=True,
|
||||||
),
|
),
|
||||||
migrations.AlterUniqueTogether(
|
migrations.AlterUniqueTogether(
|
||||||
name='additionalgroup',
|
name='additionalgroup',
|
||||||
unique_together=set([('user', 'group')]),
|
unique_together={('user', 'group')},
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
|
@ -6,7 +6,6 @@ from django.conf import settings
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||||
('osusers', '0002_auto_20141226_1456'),
|
('osusers', '0002_auto_20141226_1456'),
|
||||||
|
@ -16,7 +15,9 @@ class Migration(migrations.Migration):
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
model_name='user',
|
model_name='user',
|
||||||
name='customer',
|
name='customer',
|
||||||
field=models.ForeignKey(default=1, to=settings.AUTH_USER_MODEL),
|
field=models.ForeignKey(
|
||||||
|
default=1, to=settings.AUTH_USER_MODEL,
|
||||||
|
on_delete=models.CASCADE),
|
||||||
preserve_default=False,
|
preserve_default=False,
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.db import models, migrations
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('osusers', '0003_user_customer'),
|
('osusers', '0003_user_customer'),
|
||||||
]
|
]
|
||||||
|
@ -18,7 +17,9 @@ class Migration(migrations.Migration):
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='shadow',
|
model_name='shadow',
|
||||||
name='user',
|
name='user',
|
||||||
field=models.OneToOneField(primary_key=True, serialize=False, to='osusers.User', verbose_name='User'),
|
field=models.OneToOneField(
|
||||||
|
primary_key=True, serialize=False, to='osusers.User',
|
||||||
|
verbose_name='User', on_delete=models.CASCADE),
|
||||||
preserve_default=True,
|
preserve_default=True,
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,13 +1,12 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.db import models, migrations
|
|
||||||
import django.utils.timezone
|
import django.utils.timezone
|
||||||
import model_utils.fields
|
import model_utils.fields
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('osusers', '0004_auto_20150104_1751'),
|
('osusers', '0004_auto_20150104_1751'),
|
||||||
]
|
]
|
||||||
|
@ -16,13 +15,25 @@ class Migration(migrations.Migration):
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='SshPublicKey',
|
name='SshPublicKey',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
('id', models.AutoField(
|
||||||
('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, verbose_name='created', editable=False)),
|
verbose_name='ID', serialize=False, auto_created=True,
|
||||||
('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, verbose_name='modified', editable=False)),
|
primary_key=True)),
|
||||||
('algorithm', models.CharField(max_length=20, verbose_name='Algorithm')),
|
('created', model_utils.fields.AutoCreatedField(
|
||||||
('data', models.TextField(help_text='Base64 encoded key bytes', verbose_name='Key bytes')),
|
default=django.utils.timezone.now, verbose_name='created',
|
||||||
('comment', models.TextField(verbose_name='Comment', blank=True)),
|
editable=False)),
|
||||||
('user', models.ForeignKey(verbose_name='User', to='osusers.User')),
|
('modified', model_utils.fields.AutoLastModifiedField(
|
||||||
|
default=django.utils.timezone.now, verbose_name='modified',
|
||||||
|
editable=False)),
|
||||||
|
('algorithm', models.CharField(
|
||||||
|
max_length=20, verbose_name='Algorithm')),
|
||||||
|
('data', models.TextField(
|
||||||
|
help_text='Base64 encoded key bytes',
|
||||||
|
verbose_name='Key bytes')),
|
||||||
|
('comment', models.TextField(
|
||||||
|
verbose_name='Comment', blank=True)),
|
||||||
|
('user', models.ForeignKey(
|
||||||
|
verbose_name='User', to='osusers.User',
|
||||||
|
on_delete=models.CASCADE)),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'verbose_name': 'SSH public key',
|
'verbose_name': 'SSH public key',
|
||||||
|
@ -32,6 +43,6 @@ class Migration(migrations.Migration):
|
||||||
),
|
),
|
||||||
migrations.AlterUniqueTogether(
|
migrations.AlterUniqueTogether(
|
||||||
name='sshpublickey',
|
name='sshpublickey',
|
||||||
unique_together=set([('user', 'algorithm', 'data')]),
|
unique_together={('user', 'algorithm', 'data')},
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
|
@ -198,11 +198,13 @@ class User(TimeStampedModel, models.Model):
|
||||||
_('User name'), max_length=64, unique=True)
|
_('User name'), max_length=64, unique=True)
|
||||||
uid = models.PositiveSmallIntegerField(
|
uid = models.PositiveSmallIntegerField(
|
||||||
_('User ID'), unique=True, primary_key=True)
|
_('User ID'), unique=True, primary_key=True)
|
||||||
group = models.ForeignKey(Group, verbose_name=_('Group'))
|
group = models.ForeignKey(
|
||||||
|
Group, verbose_name=_('Group'), on_delete=models.CASCADE)
|
||||||
gecos = models.CharField(_('Gecos field'), max_length=128, blank=True)
|
gecos = models.CharField(_('Gecos field'), max_length=128, blank=True)
|
||||||
homedir = models.CharField(_('Home directory'), max_length=256)
|
homedir = models.CharField(_('Home directory'), max_length=256)
|
||||||
shell = models.CharField(_('Login shell'), max_length=64)
|
shell = models.CharField(_('Login shell'), max_length=64)
|
||||||
customer = models.ForeignKey(settings.AUTH_USER_MODEL)
|
customer = models.ForeignKey(
|
||||||
|
settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
|
||||||
|
|
||||||
objects = UserManager()
|
objects = UserManager()
|
||||||
|
|
||||||
|
@ -307,7 +309,9 @@ class Shadow(TimeStampedModel, models.Model):
|
||||||
entry.
|
entry.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
user = models.OneToOneField(User, primary_key=True, verbose_name=_('User'))
|
user = models.OneToOneField(
|
||||||
|
User, primary_key=True, verbose_name=_('User'),
|
||||||
|
on_delete=models.CASCADE)
|
||||||
passwd = models.CharField(_('Encrypted password'), max_length=128)
|
passwd = models.CharField(_('Encrypted password'), max_length=128)
|
||||||
changedays = models.PositiveSmallIntegerField(
|
changedays = models.PositiveSmallIntegerField(
|
||||||
_('Date of last change'),
|
_('Date of last change'),
|
||||||
|
@ -364,8 +368,8 @@ class AdditionalGroup(TimeStampedModel, models.Model):
|
||||||
:py:class:`operating system user <osusers.models.User>`.
|
:py:class:`operating system user <osusers.models.User>`.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
user = models.ForeignKey(User)
|
user = models.ForeignKey(User, on_delete=models.CASCADE)
|
||||||
group = models.ForeignKey(Group)
|
group = models.ForeignKey(Group, on_delete=models.CASCADE)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
unique_together = ('user', 'group')
|
unique_together = ('user', 'group')
|
||||||
|
@ -498,7 +502,8 @@ class SshPublicKey(TimeStampedModel):
|
||||||
system user <osusers.models.User>`.
|
system user <osusers.models.User>`.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
user = models.ForeignKey(User, verbose_name=_('User'))
|
user = models.ForeignKey(
|
||||||
|
User, verbose_name=_('User'), on_delete=models.CASCADE)
|
||||||
algorithm = models.CharField(_('Algorithm'), max_length=20)
|
algorithm = models.CharField(_('Algorithm'), max_length=20)
|
||||||
data = models.TextField(_('Key bytes'),
|
data = models.TextField(_('Key bytes'),
|
||||||
help_text=_('Base64 encoded key bytes'))
|
help_text=_('Base64 encoded key bytes'))
|
||||||
|
|
|
@ -4,8 +4,8 @@ This module defines the views for gnuviechadmin operating system user handling.
|
||||||
"""
|
"""
|
||||||
from __future__ import unicode_literals, absolute_import
|
from __future__ import unicode_literals, absolute_import
|
||||||
|
|
||||||
from django.core.urlresolvers import reverse
|
|
||||||
from django.shortcuts import redirect
|
from django.shortcuts import redirect
|
||||||
|
from django.urls import reverse
|
||||||
from django.views.generic import (
|
from django.views.generic import (
|
||||||
CreateView,
|
CreateView,
|
||||||
DeleteView,
|
DeleteView,
|
||||||
|
|
|
@ -5,7 +5,7 @@ This module defines form classes for user database editing.
|
||||||
from __future__ import absolute_import, unicode_literals
|
from __future__ import absolute_import, unicode_literals
|
||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.core.urlresolvers import reverse
|
from django.urls import reverse
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from crispy_forms.helper import FormHelper
|
from crispy_forms.helper import FormHelper
|
||||||
|
|
|
@ -1,13 +1,12 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.db import models, migrations
|
|
||||||
import django.utils.timezone
|
import django.utils.timezone
|
||||||
import model_utils.fields
|
import model_utils.fields
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('osusers', '0004_auto_20150104_1751'),
|
('osusers', '0004_auto_20150104_1751'),
|
||||||
]
|
]
|
||||||
|
@ -16,12 +15,22 @@ class Migration(migrations.Migration):
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='DatabaseUser',
|
name='DatabaseUser',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
('id', models.AutoField(
|
||||||
('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, verbose_name='created', editable=False)),
|
verbose_name='ID', serialize=False, auto_created=True,
|
||||||
('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, verbose_name='modified', editable=False)),
|
primary_key=True)),
|
||||||
('name', models.CharField(max_length=63, verbose_name='username')),
|
('created', model_utils.fields.AutoCreatedField(
|
||||||
('db_type', models.PositiveSmallIntegerField(verbose_name='database type', choices=[(0, 'PostgreSQL'), (1, 'MySQL')])),
|
default=django.utils.timezone.now, verbose_name='created',
|
||||||
('osuser', models.ForeignKey(to='osusers.User')),
|
editable=False)),
|
||||||
|
('modified', model_utils.fields.AutoLastModifiedField(
|
||||||
|
default=django.utils.timezone.now, verbose_name='modified',
|
||||||
|
editable=False)),
|
||||||
|
('name', models.CharField(
|
||||||
|
max_length=63, verbose_name='username')),
|
||||||
|
('db_type', models.PositiveSmallIntegerField(
|
||||||
|
verbose_name='database type',
|
||||||
|
choices=[(0, 'PostgreSQL'), (1, 'MySQL')])),
|
||||||
|
('osuser', models.ForeignKey(
|
||||||
|
to='osusers.User', on_delete=models.CASCADE)),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'verbose_name': 'database user',
|
'verbose_name': 'database user',
|
||||||
|
@ -32,11 +41,20 @@ class Migration(migrations.Migration):
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='UserDatabase',
|
name='UserDatabase',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
('id', models.AutoField(
|
||||||
('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, verbose_name='created', editable=False)),
|
verbose_name='ID', serialize=False, auto_created=True,
|
||||||
('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, verbose_name='modified', editable=False)),
|
primary_key=True)),
|
||||||
('db_name', models.CharField(max_length=63, verbose_name='database name')),
|
('created', model_utils.fields.AutoCreatedField(
|
||||||
('db_user', models.ForeignKey(verbose_name='database user', to='userdbs.DatabaseUser')),
|
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)),
|
||||||
|
('db_name', models.CharField(
|
||||||
|
max_length=63, verbose_name='database name')),
|
||||||
|
('db_user', models.ForeignKey(
|
||||||
|
verbose_name='database user', to='userdbs.DatabaseUser',
|
||||||
|
on_delete=models.CASCADE)),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'verbose_name': 'user database',
|
'verbose_name': 'user database',
|
||||||
|
@ -46,10 +64,10 @@ class Migration(migrations.Migration):
|
||||||
),
|
),
|
||||||
migrations.AlterUniqueTogether(
|
migrations.AlterUniqueTogether(
|
||||||
name='userdatabase',
|
name='userdatabase',
|
||||||
unique_together=set([('db_name', 'db_user')]),
|
unique_together={('db_name', 'db_user')},
|
||||||
),
|
),
|
||||||
migrations.AlterUniqueTogether(
|
migrations.AlterUniqueTogether(
|
||||||
name='databaseuser',
|
name='databaseuser',
|
||||||
unique_together=set([('name', 'db_type')]),
|
unique_together={('name', 'db_type')},
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
|
@ -83,7 +83,7 @@ class DatabaseUserManager(models.Manager):
|
||||||
|
|
||||||
@python_2_unicode_compatible
|
@python_2_unicode_compatible
|
||||||
class DatabaseUser(TimeStampedModel, models.Model):
|
class DatabaseUser(TimeStampedModel, models.Model):
|
||||||
osuser = models.ForeignKey(OsUser)
|
osuser = models.ForeignKey(OsUser, on_delete=models.CASCADE)
|
||||||
name = models.CharField(
|
name = models.CharField(
|
||||||
_('username'), max_length=63)
|
_('username'), max_length=63)
|
||||||
db_type = models.PositiveSmallIntegerField(
|
db_type = models.PositiveSmallIntegerField(
|
||||||
|
@ -203,7 +203,9 @@ class UserDatabase(TimeStampedModel, models.Model):
|
||||||
# MySQL limits to 64, PostgreSQL to 63 characters
|
# MySQL limits to 64, PostgreSQL to 63 characters
|
||||||
db_name = models.CharField(
|
db_name = models.CharField(
|
||||||
_('database name'), max_length=63)
|
_('database name'), max_length=63)
|
||||||
db_user = models.ForeignKey(DatabaseUser, verbose_name=_('database user'))
|
db_user = models.ForeignKey(
|
||||||
|
DatabaseUser, verbose_name=_('database user'),
|
||||||
|
on_delete=models.CASCADE)
|
||||||
|
|
||||||
objects = UserDatabaseManager()
|
objects = UserDatabaseManager()
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ This module defines form classes for website editing.
|
||||||
from __future__ import absolute_import, unicode_literals
|
from __future__ import absolute_import, unicode_literals
|
||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.core.urlresolvers import reverse
|
from django.urls import reverse
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
|
|
||||||
from crispy_forms.bootstrap import AppendedText
|
from crispy_forms.bootstrap import AppendedText
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.db import models, migrations
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
('osusers', '0004_auto_20150104_1751'),
|
('osusers', '0004_auto_20150104_1751'),
|
||||||
('domains', '0002_auto_20150124_1909'),
|
('domains', '0002_auto_20150124_1909'),
|
||||||
|
@ -15,11 +14,19 @@ class Migration(migrations.Migration):
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='Website',
|
name='Website',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
('id', models.AutoField(
|
||||||
('subdomain', models.CharField(max_length=64, verbose_name='sub domain')),
|
verbose_name='ID', serialize=False, auto_created=True,
|
||||||
('wildcard', models.BooleanField(default=False, verbose_name='wildcard')),
|
primary_key=True)),
|
||||||
('domain', models.ForeignKey(verbose_name='domain', to='domains.HostingDomain')),
|
('subdomain', models.CharField(
|
||||||
('osuser', models.ForeignKey(verbose_name='operating system user', to='osusers.User')),
|
max_length=64, verbose_name='sub domain')),
|
||||||
|
('wildcard', models.BooleanField(
|
||||||
|
default=False, verbose_name='wildcard')),
|
||||||
|
('domain', models.ForeignKey(
|
||||||
|
verbose_name='domain', to='domains.HostingDomain',
|
||||||
|
on_delete=models.CASCADE)),
|
||||||
|
('osuser', models.ForeignKey(
|
||||||
|
verbose_name='operating system user', to='osusers.User',
|
||||||
|
on_delete=models.CASCADE)),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'verbose_name': 'website',
|
'verbose_name': 'website',
|
||||||
|
@ -29,6 +36,6 @@ class Migration(migrations.Migration):
|
||||||
),
|
),
|
||||||
migrations.AlterUniqueTogether(
|
migrations.AlterUniqueTogether(
|
||||||
name='website',
|
name='website',
|
||||||
unique_together=set([('domain', 'subdomain')]),
|
unique_together={('domain', 'subdomain')},
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
|
@ -34,9 +34,10 @@ class Website(models.Model):
|
||||||
subdomain = models.CharField(
|
subdomain = models.CharField(
|
||||||
_('sub domain'), max_length=64)
|
_('sub domain'), max_length=64)
|
||||||
osuser = models.ForeignKey(
|
osuser = models.ForeignKey(
|
||||||
OsUser, verbose_name=_('operating system user'))
|
OsUser, verbose_name=_('operating system user'),
|
||||||
|
on_delete=models.CASCADE)
|
||||||
domain = models.ForeignKey(
|
domain = models.ForeignKey(
|
||||||
HostingDomain, verbose_name=_('domain'))
|
HostingDomain, models.CASCADE, verbose_name=_('domain'))
|
||||||
wildcard = models.BooleanField(_('wildcard'), default=False)
|
wildcard = models.BooleanField(_('wildcard'), default=False)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
|
@ -1,39 +0,0 @@
|
||||||
#!/bin/sh -
|
|
||||||
|
|
||||||
apt-get update
|
|
||||||
apt-get install -y python-cryptography
|
|
||||||
|
|
||||||
# We just download the bootstrap script by default and execute that.
|
|
||||||
if [ -x /usr/bin/fetch ]; then
|
|
||||||
/usr/bin/fetch -o - https://raw.githubusercontent.com/saltstack/salt-bootstrap/stable/bootstrap-salt.sh | sh -s -- "$@"
|
|
||||||
elif [ -x /usr/bin/curl ]; then
|
|
||||||
/usr/bin/curl -L https://raw.githubusercontent.com/saltstack/salt-bootstrap/stable/bootstrap-salt.sh | sh -s -- "$@"
|
|
||||||
else
|
|
||||||
python \
|
|
||||||
-c 'import urllib; print urllib.urlopen("https://raw.githubusercontent.com/saltstack/salt-bootstrap/stable/bootstrap-salt.sh").read()' \
|
|
||||||
| sh -s -- "$@"
|
|
||||||
fi
|
|
||||||
|
|
||||||
cat >/etc/salt/minion <<EOF
|
|
||||||
file_client: local
|
|
||||||
|
|
||||||
file_roots:
|
|
||||||
base:
|
|
||||||
- /srv/salt/
|
|
||||||
|
|
||||||
pillar_roots:
|
|
||||||
base:
|
|
||||||
- /srv/pillar
|
|
||||||
|
|
||||||
log_file: file:///dev/log
|
|
||||||
EOF
|
|
||||||
|
|
||||||
umask 077
|
|
||||||
cat >/etc/salt/grains <<EOF
|
|
||||||
roles:
|
|
||||||
- redis-server
|
|
||||||
- rabbitmq-server
|
|
||||||
- gnuviechadmin.database
|
|
||||||
- gnuviechadmin.queues
|
|
||||||
- gnuviechadmin.webinterface
|
|
||||||
EOF
|
|
Loading…
Reference in a new issue