Compare commits
No commits in common. "89462cb100252073b86300bbb2faa4f34bee53ee" and "252ac918cc4657ac02b1137c22d196114a3264de" have entirely different histories.
89462cb100
...
252ac918cc
11 changed files with 86 additions and 94 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -202,4 +202,3 @@ dmypy.json
|
|||
# Pyre type checker
|
||||
.pyre/
|
||||
|
||||
backend/config/
|
||||
|
|
|
|||
|
|
@ -96,23 +96,26 @@ WSGI_APPLICATION = 'backend.wsgi.application'
|
|||
# https://docs.djangoproject.com/en/3.1/ref/settings/#databases
|
||||
|
||||
DATABASES = {
|
||||
# 'default': {
|
||||
# 'ENGINE': 'django.db.backends.sqlite3',
|
||||
# 'NAME': BASE_DIR / 'db.sqlite3',
|
||||
# },
|
||||
'default': {
|
||||
'ENGINE': 'django.db.backends.sqlite3',
|
||||
'NAME': BASE_DIR / 'db.sqlite3',
|
||||
},
|
||||
'mail': {
|
||||
'ENGINE': 'django.db.backends.sqlite3',
|
||||
'NAME': BASE_DIR / 'mail.sqlite3',
|
||||
},
|
||||
'ldap': {
|
||||
'ENGINE': 'ldapdb.backends.ldap',
|
||||
'NAME': config.ldap.uri,
|
||||
'USER': config.ldap.bind_dn,
|
||||
'PASSWORD': config.ldap.bind_pass,
|
||||
},
|
||||
'default': {
|
||||
'HOST': config.sql.host,
|
||||
'NAME': config.sql.database,
|
||||
'ENGINE': 'django.db.backends.mysql',
|
||||
'USER': config.sql.user,
|
||||
'PASSWORD': config.sql.password
|
||||
}
|
||||
#'mysql': {
|
||||
# 'NAME': 'user_data',
|
||||
# 'ENGINE': 'django.db.backends.mysql',
|
||||
# 'USER': 'mysql_user',
|
||||
# 'PASSWORD': 'priv4te'
|
||||
#}
|
||||
}
|
||||
|
||||
# Password validation
|
||||
|
|
|
|||
|
|
@ -1,9 +1,7 @@
|
|||
from django.contrib.auth.decorators import login_required
|
||||
from django.forms import ModelForm
|
||||
from django.forms.utils import ErrorList
|
||||
from django.http import HttpResponseRedirect, Http404
|
||||
from django.shortcuts import render
|
||||
from django.db import IntegrityError
|
||||
|
||||
from multimail.models import Domain, Mailbox, Alias
|
||||
from multimail.owner import user_from_request
|
||||
|
|
@ -13,7 +11,7 @@ class DomainForm(ModelForm):
|
|||
class Meta:
|
||||
model = Domain
|
||||
fields = '__all__'
|
||||
# fields = ['domain']
|
||||
#fields = ['domain']
|
||||
|
||||
|
||||
class MailboxForm(ModelForm):
|
||||
|
|
@ -37,18 +35,14 @@ def edit_domain(request, domain_id):
|
|||
raise Http404
|
||||
if request.method == 'POST':
|
||||
form = DomainForm(request.POST, instance=domain)
|
||||
try:
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
return HttpResponseRedirect('/domains/')
|
||||
|
||||
except IntegrityError as e:
|
||||
form.add_error(None, e)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
return HttpResponseRedirect('/domains/')
|
||||
|
||||
else:
|
||||
form = DomainForm(instance=domain)
|
||||
|
||||
return render(request, 'multimail/edit.html', {'form': form})
|
||||
return render(request, 'multimail/edit_domain.html', {'form': form})
|
||||
|
||||
|
||||
@login_required(login_url='/login/')
|
||||
|
|
@ -56,19 +50,15 @@ def new_domain(request):
|
|||
user = user_from_request(request)
|
||||
if request.method == 'POST':
|
||||
form = DomainForm(request.POST)
|
||||
try:
|
||||
if form.is_valid():
|
||||
domain = form.save()
|
||||
domain.admin.create(admin=user['name'], source=user['source'])
|
||||
return HttpResponseRedirect('/domains/')
|
||||
|
||||
except IntegrityError as e:
|
||||
form.add_error(None, e)
|
||||
if form.is_valid():
|
||||
domain = form.save()
|
||||
domain.admin.create(admin=user['name'], source=user['source'])
|
||||
return HttpResponseRedirect('/domains/')
|
||||
|
||||
else:
|
||||
form = DomainForm()
|
||||
|
||||
return render(request, 'multimail/edit.html', {'form': form})
|
||||
return render(request, 'multimail/edit_domain.html', {'form': form})
|
||||
|
||||
|
||||
@login_required(login_url='/login/')
|
||||
|
|
@ -81,18 +71,14 @@ def edit_mailbox(request, mailbox_id):
|
|||
raise Http404
|
||||
if request.method == 'POST':
|
||||
form = MailboxForm(request.POST, instance=mailbox)
|
||||
try:
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
return HttpResponseRedirect('/mailboxes/')
|
||||
|
||||
except IntegrityError as e:
|
||||
form.add_error(None, e)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
return HttpResponseRedirect('/mailboxes/')
|
||||
|
||||
else:
|
||||
form = MailboxForm(instance=mailbox)
|
||||
|
||||
return render(request, 'multimail/edit.html', {'form': form})
|
||||
return render(request, 'multimail/edit_mailbox.html', {'form': form})
|
||||
|
||||
|
||||
@login_required(login_url='/login/')
|
||||
|
|
@ -101,18 +87,14 @@ def new_mailbox(request):
|
|||
user = user_from_request(request)
|
||||
domains = [o.domain for o in Domain.objects.filter(admin__admin=user['name'], admin__source=user['source'])]
|
||||
form = MailboxForm(request.POST)
|
||||
try:
|
||||
if form.is_valid() and form.domain in domains:
|
||||
form.save()
|
||||
return HttpResponseRedirect('/mailboxes/')
|
||||
|
||||
except IntegrityError as e:
|
||||
form.add_error(None, e)
|
||||
if form.is_valid() and form.domain in domains:
|
||||
form.save()
|
||||
return HttpResponseRedirect('/mailboxes/')
|
||||
|
||||
else:
|
||||
form = MailboxForm()
|
||||
|
||||
return render(request, 'multimail/edit.html', {'form': form})
|
||||
return render(request, 'multimail/edit_mailbox.html', {'form': form})
|
||||
|
||||
|
||||
@login_required(login_url='/login/')
|
||||
|
|
@ -125,18 +107,14 @@ def edit_alias(request, alias_id):
|
|||
raise Http404
|
||||
if request.method == 'POST':
|
||||
form = AliasForm(request.POST, instance=alias)
|
||||
try:
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
return HttpResponseRedirect('/aliases/')
|
||||
|
||||
except IntegrityError as e:
|
||||
form.add_error(None, e)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
return HttpResponseRedirect('/aliases/')
|
||||
|
||||
else:
|
||||
form = AliasForm(instance=alias)
|
||||
|
||||
return render(request, 'multimail/edit.html', {'form': form})
|
||||
return render(request, 'multimail/edit_alias.html', {'form': form})
|
||||
|
||||
|
||||
@login_required(login_url='/login/')
|
||||
|
|
@ -145,15 +123,11 @@ def new_alias(request):
|
|||
user = user_from_request(request)
|
||||
domains = [o.domain for o in Domain.objects.filter(admin__admin=user['name'], admin__source=user['source'])]
|
||||
form = AliasForm(request.POST)
|
||||
try:
|
||||
if form.is_valid() and form.source_domain in domains:
|
||||
form.save()
|
||||
return HttpResponseRedirect('/aliases/')
|
||||
|
||||
except IntegrityError as e:
|
||||
form.add_error(None, e)
|
||||
if form.is_valid() and form.source_domain in domains:
|
||||
form.save()
|
||||
return HttpResponseRedirect('/aliases/')
|
||||
|
||||
else:
|
||||
form = AliasForm()
|
||||
|
||||
return render(request, 'multimail/edit.html', {'form': form})
|
||||
return render(request, 'multimail/edit_alias.html', {'form': form})
|
||||
|
|
|
|||
|
|
@ -1,21 +1,20 @@
|
|||
import datetime
|
||||
from django.db import models
|
||||
from django.utils import timezone
|
||||
|
||||
|
||||
class Alias(models.Model):
|
||||
id = models.AutoField(primary_key=True)
|
||||
source_username = models.CharField(max_length=64, blank=True)
|
||||
source_username = models.CharField(max_length=64)
|
||||
source_domain = models.CharField(max_length=255)
|
||||
destination_username = models.CharField(max_length=64)
|
||||
destination_domain = models.CharField(max_length=255)
|
||||
enabled = models.BooleanField(default=True)
|
||||
enabled = models.IntegerField(blank=True, null=True)
|
||||
|
||||
class Meta:
|
||||
managed = False
|
||||
db_table = 'aliases'
|
||||
|
||||
def __str__(self):
|
||||
return self.source_username + '@' + self.source_domain
|
||||
|
||||
|
||||
class Domain(models.Model):
|
||||
domain = models.CharField(max_length=255)
|
||||
|
|
@ -24,9 +23,6 @@ class Domain(models.Model):
|
|||
managed = False
|
||||
db_table = 'domains'
|
||||
|
||||
def __str__(self):
|
||||
return self.domain
|
||||
|
||||
|
||||
class Mailbox(models.Model):
|
||||
id = models.AutoField(primary_key=True)
|
||||
|
|
@ -34,16 +30,13 @@ class Mailbox(models.Model):
|
|||
domain = models.CharField(max_length=255)
|
||||
password = models.CharField(max_length=255)
|
||||
quota = models.IntegerField(blank=True, null=True)
|
||||
enabled = models.BooleanField(default=True)
|
||||
sendonly = models.BooleanField(default=False)
|
||||
enabled = models.IntegerField(blank=True, null=True)
|
||||
sendonly = models.IntegerField(blank=True, null=True)
|
||||
|
||||
class Meta:
|
||||
managed = False
|
||||
db_table = 'mailboxes'
|
||||
|
||||
def __str__(self):
|
||||
return self.username + '@' + self.domain
|
||||
|
||||
|
||||
class TLSPolicy(models.Model):
|
||||
domain = models.CharField(max_length=255)
|
||||
|
|
@ -54,15 +47,11 @@ class TLSPolicy(models.Model):
|
|||
managed = False
|
||||
db_table = 'tlspolicies'
|
||||
|
||||
def __str__(self):
|
||||
return self.domain
|
||||
|
||||
|
||||
class DomainOwner(models.Model):
|
||||
domain = models.ForeignKey(Domain, on_delete=models.CASCADE, related_name='admin')
|
||||
admin = models.CharField(max_length=200)
|
||||
source = models.CharField(max_length=8, choices=[('system', 'system'), ('ldap', 'ldap'), ('mail', 'mail')],
|
||||
default=0)
|
||||
source = models.CharField(max_length=8, choices=[('system','system'), ('ldap', 'ldap'), ('mail', 'mail')], default=0)
|
||||
|
||||
def __str__(self):
|
||||
return self.admin
|
||||
|
|
|
|||
|
|
@ -38,7 +38,6 @@
|
|||
</table>
|
||||
{% else %}
|
||||
<p>You haven't set up any aliases yet.</p>
|
||||
<a href="{% url 'multimail:new_alias' %}" class="btn btn-primary btn-sm m-0">Add</a>
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
||||
|
|
@ -32,7 +32,6 @@
|
|||
</table>
|
||||
{% else %}
|
||||
<p>You haven't set up any domains yet.</p>
|
||||
<a href="{% url 'multimail:new_domain' %}" class="btn btn-primary btn-sm m-0">Add</a>
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
||||
18
backend/multimail/templates/multimail/edit_alias.html
Normal file
18
backend/multimail/templates/multimail/edit_alias.html
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
{% extends 'multimail/base.html' %}
|
||||
{% load bootstrap4 %}
|
||||
|
||||
{% block content %}
|
||||
<h1 class="mt-4">{{ form.source_username.value }}@{{ form.source_domain.value }}</h1>
|
||||
|
||||
{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}
|
||||
|
||||
|
||||
<form action="" method="post" class="form">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form form %}
|
||||
{% buttons %}
|
||||
<button type="submit" class="btn btn-primary">Submit</button>
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
|
|
@ -2,7 +2,10 @@
|
|||
{% load bootstrap4 %}
|
||||
|
||||
{% block content %}
|
||||
<h1 class="mt-4">{{ form.domain.value }}</h1>
|
||||
|
||||
{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}
|
||||
|
||||
<form action="" method="post" class="form">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form form %}
|
||||
|
|
@ -10,4 +13,5 @@
|
|||
<button type="submit" class="btn btn-primary">Submit</button>
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
17
backend/multimail/templates/multimail/edit_mailbox.html
Normal file
17
backend/multimail/templates/multimail/edit_mailbox.html
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
{% extends 'multimail/base.html' %}
|
||||
{% load bootstrap4 %}
|
||||
|
||||
{% block content %}
|
||||
<h1 class="mt-4">{{ form.username.value }}@{{ form.domain.value }}</h1>
|
||||
|
||||
{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}
|
||||
|
||||
<form action="" method="post" class="form">
|
||||
{% csrf_token %}
|
||||
{% bootstrap_form form %}
|
||||
{% buttons %}
|
||||
<button type="submit" class="btn btn-primary">Submit</button>
|
||||
{% endbuttons %}
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
|
|
@ -32,7 +32,6 @@
|
|||
</table>
|
||||
{% else %}
|
||||
<p>You haven't set up any mailboxes yet.</p>
|
||||
<a href="{% url 'multimail:new_mailbox' %}" class="btn btn-primary btn-sm m-0">Add</a>
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
Django==3.1.3
|
||||
django-auth-ldap==2.2.0
|
||||
django-ldapdb==1.5.1
|
||||
django-static-fontawesome==5.14.0.0
|
||||
django-bootstrap4==2.3.1
|
||||
mysqlclient==2.0.1
|
||||
passlib==1.7.4
|
||||
python-ldap==3.3.1
|
||||
# djangorestframework==3.12.1
|
||||
Loading…
Add table
Add a link
Reference in a new issue