use a password field in mailbox instead of raw hash input
This commit is contained in:
parent
b8073cc539
commit
e8d9347443
4 changed files with 31 additions and 12 deletions
|
@ -1,6 +1,5 @@
|
|||
from django.contrib.auth.decorators import login_required
|
||||
from django.forms import ModelForm
|
||||
from django.forms.utils import ErrorList
|
||||
from django.forms import ModelForm, CharField, PasswordInput
|
||||
from django.http import HttpResponseRedirect, Http404
|
||||
from django.shortcuts import render
|
||||
from django.db import IntegrityError
|
||||
|
@ -17,9 +16,19 @@ class DomainForm(ModelForm):
|
|||
|
||||
|
||||
class MailboxForm(ModelForm):
|
||||
plain_password = CharField(label='Password', required=False, widget=PasswordInput())
|
||||
class Meta:
|
||||
model = Mailbox
|
||||
fields = '__all__'
|
||||
# fields = '__all__'
|
||||
fields = ['domain', 'username', 'plain_password', 'sendonly', 'enabled']
|
||||
|
||||
def save(self, commit=True):
|
||||
mailbox = super(MailboxForm, self).save(commit=False)
|
||||
if not self.cleaned_data["plain_password"] == '':
|
||||
mailbox.set_password(self.cleaned_data["plain_password"])
|
||||
if commit:
|
||||
mailbox.save()
|
||||
return mailbox
|
||||
|
||||
|
||||
class AliasForm(ModelForm):
|
||||
|
@ -82,7 +91,7 @@ def edit_mailbox(request, mailbox_id):
|
|||
if request.method == 'POST':
|
||||
form = MailboxForm(request.POST, instance=mailbox)
|
||||
try:
|
||||
if form.is_valid():
|
||||
if form.is_valid() and form.cleaned_data['domain'] in domains:
|
||||
form.save()
|
||||
return HttpResponseRedirect('/mailboxes/')
|
||||
|
||||
|
@ -102,7 +111,7 @@ def new_mailbox(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:
|
||||
if form.is_valid() and form.cleaned_data['domain'] in domains:
|
||||
form.save()
|
||||
return HttpResponseRedirect('/mailboxes/')
|
||||
|
||||
|
@ -126,7 +135,7 @@ def edit_alias(request, alias_id):
|
|||
if request.method == 'POST':
|
||||
form = AliasForm(request.POST, instance=alias)
|
||||
try:
|
||||
if form.is_valid():
|
||||
if form.is_valid() and form.cleaned_data['source_domain'] in domains:
|
||||
form.save()
|
||||
return HttpResponseRedirect('/aliases/')
|
||||
|
||||
|
@ -146,7 +155,7 @@ def new_alias(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:
|
||||
if form.is_valid() and form.cleaned_data['source_domain'] in domains:
|
||||
form.save()
|
||||
return HttpResponseRedirect('/aliases/')
|
||||
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
import crypt
|
||||
|
||||
from django.db import models
|
||||
|
||||
|
||||
|
@ -12,6 +14,7 @@ class Alias(models.Model):
|
|||
class Meta:
|
||||
managed = False
|
||||
db_table = 'aliases'
|
||||
unique_together = (('source_domain', 'source_username'),)
|
||||
|
||||
def __str__(self):
|
||||
return self.source_username + '@' + self.source_domain
|
||||
|
@ -40,6 +43,10 @@ class Mailbox(models.Model):
|
|||
class Meta:
|
||||
managed = False
|
||||
db_table = 'mailboxes'
|
||||
unique_together = (('domain', 'username'),)
|
||||
|
||||
def set_password(self, password):
|
||||
self.password = '{SHA512-CRYPT}' + crypt.crypt(password)
|
||||
|
||||
def __str__(self):
|
||||
return self.username + '@' + self.domain
|
||||
|
@ -64,5 +71,8 @@ class DomainOwner(models.Model):
|
|||
source = models.CharField(max_length=8, choices=[('system', 'system'), ('ldap', 'ldap'), ('mail', 'mail')],
|
||||
default=0)
|
||||
|
||||
class Meta:
|
||||
unique_together = (('domain', 'admin', 'source'),)
|
||||
|
||||
def __str__(self):
|
||||
return self.admin
|
||||
|
|
|
@ -4,6 +4,4 @@ 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
|
||||
|
|
8
update.sh
Normal file → Executable file
8
update.sh
Normal file → Executable file
|
@ -1,6 +1,6 @@
|
|||
#!/bin/bash
|
||||
|
||||
DIR=$(dirname $0)
|
||||
export DIR=$(dirname $0)
|
||||
|
||||
function prefix_date(){
|
||||
while read line
|
||||
|
@ -10,9 +10,11 @@ function prefix_date(){
|
|||
}
|
||||
|
||||
function run_update(){
|
||||
cd $DIR
|
||||
echo run autoupdate in $(pwd)
|
||||
git pull
|
||||
cd backend
|
||||
python manage.py migrate
|
||||
python3 manage.py migrate
|
||||
}
|
||||
|
||||
run_update | prefix_date > $DIR/update.log
|
||||
run_update | prefix_date >> $DIR/update.log
|
||||
|
|
Loading…
Reference in a new issue