mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-08-26 12:46:08 +00:00
email: aliases: Drop ability to enable/disable aliases
- There is no use case for keeping an alias disabled. Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org> Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
This commit is contained in:
parent
60822f7198
commit
9d0d7e586c
@ -4,7 +4,7 @@
|
|||||||
import contextlib
|
import contextlib
|
||||||
import pwd
|
import pwd
|
||||||
import sqlite3
|
import sqlite3
|
||||||
from dataclasses import InitVar, dataclass, field
|
from dataclasses import dataclass
|
||||||
|
|
||||||
from plinth import actions
|
from plinth import actions
|
||||||
|
|
||||||
@ -13,11 +13,6 @@ from plinth import actions
|
|||||||
class Alias:
|
class Alias:
|
||||||
value: str
|
value: str
|
||||||
name: str
|
name: str
|
||||||
enabled: bool = field(init=False)
|
|
||||||
status: InitVar[int]
|
|
||||||
|
|
||||||
def __post_init__(self, status):
|
|
||||||
self.enabled = (status != 0)
|
|
||||||
|
|
||||||
|
|
||||||
@contextlib.contextmanager
|
@contextlib.contextmanager
|
||||||
@ -36,7 +31,7 @@ def _get_cursor():
|
|||||||
|
|
||||||
def get(username):
|
def get(username):
|
||||||
"""Get all aliases of a user."""
|
"""Get all aliases of a user."""
|
||||||
query = 'SELECT name, value, status FROM alias WHERE value=?'
|
query = 'SELECT name, value FROM alias WHERE value=?'
|
||||||
with _get_cursor() as cursor:
|
with _get_cursor() as cursor:
|
||||||
rows = cursor.execute(query, (username, ))
|
rows = cursor.execute(query, (username, ))
|
||||||
return [Alias(**row) for row in rows]
|
return [Alias(**row) for row in rows]
|
||||||
@ -58,10 +53,10 @@ def exists(name):
|
|||||||
|
|
||||||
def put(username, name):
|
def put(username, name):
|
||||||
"""Insert if not exists a new alias."""
|
"""Insert if not exists a new alias."""
|
||||||
query = 'INSERT INTO alias (name, value, status) VALUES (?, ?, ?)'
|
query = 'INSERT INTO alias (name, value) VALUES (?, ?)'
|
||||||
with _get_cursor() as cursor:
|
with _get_cursor() as cursor:
|
||||||
try:
|
try:
|
||||||
cursor.execute(query, (name, username, 1))
|
cursor.execute(query, (name, username))
|
||||||
except sqlite3.IntegrityError:
|
except sqlite3.IntegrityError:
|
||||||
pass # Alias exists, rare since we are already checking
|
pass # Alias exists, rare since we are already checking
|
||||||
|
|
||||||
@ -76,26 +71,6 @@ def delete(username, aliases):
|
|||||||
cursor.execute('COMMIT')
|
cursor.execute('COMMIT')
|
||||||
|
|
||||||
|
|
||||||
def enable(username, aliases):
|
|
||||||
"""Enable a list of aliases."""
|
|
||||||
return _set_status(username, aliases, 1)
|
|
||||||
|
|
||||||
|
|
||||||
def disable(username, aliases):
|
|
||||||
"""Disable a list of aliases."""
|
|
||||||
return _set_status(username, aliases, 0)
|
|
||||||
|
|
||||||
|
|
||||||
def _set_status(username, aliases, status):
|
|
||||||
"""Set the status value of a list of aliases."""
|
|
||||||
query = 'UPDATE alias SET status=? WHERE value=? AND name=?'
|
|
||||||
parameter_seq = ((status, username, name) for name in aliases)
|
|
||||||
with _get_cursor() as cursor:
|
|
||||||
cursor.execute('BEGIN')
|
|
||||||
cursor.executemany(query, parameter_seq)
|
|
||||||
cursor.execute('COMMIT')
|
|
||||||
|
|
||||||
|
|
||||||
def first_setup():
|
def first_setup():
|
||||||
"""Create the database file and schema inside it."""
|
"""Create the database file and schema inside it."""
|
||||||
actions.superuser_run('email', ['aliases', 'setup'])
|
actions.superuser_run('email', ['aliases', 'setup'])
|
||||||
@ -106,7 +81,6 @@ BEGIN;
|
|||||||
CREATE TABLE IF NOT EXISTS alias (
|
CREATE TABLE IF NOT EXISTS alias (
|
||||||
name TEXT NOT NULL,
|
name TEXT NOT NULL,
|
||||||
value TEXT NOT NULL,
|
value TEXT NOT NULL,
|
||||||
status INTEGER NOT NULL,
|
|
||||||
PRIMARY KEY (name)
|
PRIMARY KEY (name)
|
||||||
);
|
);
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
# Do not edit this file. Manage your settings on FreedomBox.
|
# Do not edit this file. Manage your settings on FreedomBox.
|
||||||
|
|
||||||
dbpath = /var/lib/postfix/freedombox-aliases/aliases.sqlite3
|
dbpath = /var/lib/postfix/freedombox-aliases/aliases.sqlite3
|
||||||
query = SELECT value FROM alias WHERE name='%s' AND status=1
|
query = SELECT value FROM alias WHERE name='%s'
|
||||||
|
|||||||
@ -60,26 +60,5 @@ class AliasListForm(forms.Form):
|
|||||||
def __init__(self, aliases, *args, **kwargs):
|
def __init__(self, aliases, *args, **kwargs):
|
||||||
"""Populate the choices for aliases."""
|
"""Populate the choices for aliases."""
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
enabled_aliases = [(alias.name, alias.name) for alias in aliases
|
choices = [(alias.name, alias.name) for alias in aliases]
|
||||||
if alias.enabled]
|
|
||||||
disabled_aliases = [(alias.name, alias.name) for alias in aliases
|
|
||||||
if not alias.enabled]
|
|
||||||
choices = []
|
|
||||||
if enabled_aliases:
|
|
||||||
choices.append((_('Enabled'), enabled_aliases))
|
|
||||||
|
|
||||||
if disabled_aliases:
|
|
||||||
choices.append((_('Disabled'), disabled_aliases))
|
|
||||||
|
|
||||||
self.fields['aliases'].choices = choices
|
self.fields['aliases'].choices = choices
|
||||||
|
|
||||||
def clean(self):
|
|
||||||
"""Add the pressed button to cleaned data."""
|
|
||||||
cleaned_data = super().clean()
|
|
||||||
buttons = [key[4:] for key in self.data if key.startswith('btn_')]
|
|
||||||
if len(buttons) != 1 or buttons[0] not in ('enable', 'disable',
|
|
||||||
'delete'):
|
|
||||||
raise ValidationError('Invalid button pressed')
|
|
||||||
|
|
||||||
cleaned_data['action'] = buttons[0]
|
|
||||||
return cleaned_data
|
|
||||||
|
|||||||
@ -20,10 +20,6 @@
|
|||||||
{{ list_form|bootstrap }}
|
{{ list_form|bootstrap }}
|
||||||
|
|
||||||
<input type="hidden" name="form" value="list">
|
<input type="hidden" name="form" value="list">
|
||||||
<input class="btn btn-default" type="submit" name="btn_disable"
|
|
||||||
value="{% trans 'Disable' %}">
|
|
||||||
<input class="btn btn-default" type="submit" name="btn_enable"
|
|
||||||
value="{% trans 'Enable' %}">
|
|
||||||
<input class="btn btn-danger" type="submit" name="btn_delete"
|
<input class="btn btn-danger" type="submit" name="btn_delete"
|
||||||
value="{% trans 'Delete' %}">
|
value="{% trans 'Delete' %}">
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@ -116,14 +116,8 @@ class AliasView(FormView):
|
|||||||
def _list_form_valid(self, form):
|
def _list_form_valid(self, form):
|
||||||
"""Handle a valid alias list form operation."""
|
"""Handle a valid alias list form operation."""
|
||||||
aliases = form.cleaned_data['aliases']
|
aliases = form.cleaned_data['aliases']
|
||||||
action = form.cleaned_data['action']
|
|
||||||
username = self.request.user.username
|
username = self.request.user.username
|
||||||
if action == 'delete':
|
aliases_module.delete(username, aliases)
|
||||||
aliases_module.delete(username, aliases)
|
|
||||||
elif action == 'disable':
|
|
||||||
aliases_module.disable(username, aliases)
|
|
||||||
elif action == 'enable':
|
|
||||||
aliases_module.enable(username, aliases)
|
|
||||||
|
|
||||||
def _create_form_valid(self, form):
|
def _create_form_valid(self, form):
|
||||||
"""Handle a valid create alias form operation."""
|
"""Handle a valid create alias form operation."""
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user