mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-05-20 10:34:30 +00:00
email_server: aliases: Minor refactoring
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org> Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
This commit is contained in:
parent
6e8b825d44
commit
778d22ac49
@ -9,38 +9,27 @@ from plinth import actions
|
|||||||
|
|
||||||
from . import models
|
from . import models
|
||||||
|
|
||||||
map_db_schema_script = """
|
|
||||||
PRAGMA journal_mode=WAL;
|
|
||||||
BEGIN;
|
|
||||||
CREATE TABLE IF NOT EXISTS Alias (
|
|
||||||
email_name TEXT NOT NULL,
|
|
||||||
uid_number INTEGER NOT NULL,
|
|
||||||
status INTEGER NOT NULL,
|
|
||||||
PRIMARY KEY (email_name)
|
|
||||||
);
|
|
||||||
COMMIT;
|
|
||||||
"""
|
|
||||||
|
|
||||||
sqlite_db_path = '/var/lib/postfix/freedombox-aliases/aliases.sqlite3'
|
|
||||||
|
|
||||||
|
|
||||||
@contextlib.contextmanager
|
@contextlib.contextmanager
|
||||||
def db_cursor():
|
def _get_cursor():
|
||||||
|
"""Return a DB cursor as context manager."""
|
||||||
# Turn ON autocommit mode
|
# Turn ON autocommit mode
|
||||||
con = sqlite3.connect(sqlite_db_path, isolation_level=None)
|
db_path = '/var/lib/postfix/freedombox-aliases/aliases.sqlite3'
|
||||||
con.row_factory = sqlite3.Row
|
connection = sqlite3.connect(db_path, isolation_level=None)
|
||||||
|
connection.row_factory = sqlite3.Row
|
||||||
try:
|
try:
|
||||||
cur = con.cursor()
|
cursor = connection.cursor()
|
||||||
yield cur
|
yield cursor
|
||||||
finally:
|
finally:
|
||||||
con.close()
|
connection.close()
|
||||||
|
|
||||||
|
|
||||||
def get(uid_number):
|
def get(uid_number):
|
||||||
s = 'SELECT * FROM Alias WHERE uid_number=?'
|
"""Get all aliases of a user."""
|
||||||
with db_cursor() as cur:
|
query = 'SELECT * FROM Alias WHERE uid_number=?'
|
||||||
rows = cur.execute(s, (uid_number, ))
|
with _get_cursor() as cursor:
|
||||||
result = [models.Alias(**r) for r in rows]
|
rows = cursor.execute(query, (uid_number, ))
|
||||||
|
result = [models.Alias(**row) for row in rows]
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
@ -52,53 +41,69 @@ def exists(email_name):
|
|||||||
except KeyError:
|
except KeyError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
with db_cursor() as cur:
|
with _get_cursor() as cursor:
|
||||||
query = 'SELECT COUNT(*) FROM Alias WHERE email_name=?'
|
query = 'SELECT COUNT(*) FROM Alias WHERE email_name=?'
|
||||||
cur.execute(query, (email_name, ))
|
cursor.execute(query, (email_name, ))
|
||||||
return cur.fetchone()[0] != 0
|
return cursor.fetchone()[0] != 0
|
||||||
|
|
||||||
|
|
||||||
def put(uid_number, email_name):
|
def put(uid_number, email_name):
|
||||||
s = """INSERT INTO Alias(email_name, uid_number, status)
|
"""Insert if not exists a new alias."""
|
||||||
SELECT ?,?,? WHERE NOT EXISTS(
|
query = '''
|
||||||
|
INSERT INTO Alias(email_name, uid_number, status)
|
||||||
|
SELECT ?,?,? WHERE NOT EXISTS (
|
||||||
SELECT 1 FROM Alias WHERE email_name=?
|
SELECT 1 FROM Alias WHERE email_name=?
|
||||||
)"""
|
)
|
||||||
with db_cursor() as cur:
|
'''
|
||||||
cur.execute(s, (email_name, uid_number, 1, email_name))
|
with _get_cursor() as cursor:
|
||||||
|
cursor.execute(query, (email_name, uid_number, 1, email_name))
|
||||||
|
|
||||||
|
|
||||||
def delete(uid_number, alias_list):
|
def delete(uid_number, alias_list):
|
||||||
s = 'DELETE FROM Alias WHERE uid_number=? AND email_name=?'
|
"""Delete a set of aliases."""
|
||||||
parameter_seq = ((uid_number, a) for a in alias_list)
|
query = 'DELETE FROM Alias WHERE uid_number=? AND email_name=?'
|
||||||
with db_cursor() as cur:
|
parameter_seq = ((uid_number, alias) for alias in alias_list)
|
||||||
cur.execute('BEGIN')
|
with _get_cursor() as cursor:
|
||||||
cur.executemany(s, parameter_seq)
|
cursor.execute('BEGIN')
|
||||||
cur.execute('COMMIT')
|
cursor.executemany(query, parameter_seq)
|
||||||
|
cursor.execute('COMMIT')
|
||||||
|
|
||||||
|
|
||||||
def set_enabled(uid_number, alias_list):
|
def enable(uid_number, alias_list):
|
||||||
|
"""Enable a list of aliases."""
|
||||||
return _set_status(uid_number, alias_list, 1)
|
return _set_status(uid_number, alias_list, 1)
|
||||||
|
|
||||||
|
|
||||||
def set_disabled(uid_number, alias_list):
|
def disable(uid_number, alias_list):
|
||||||
|
"""Disable a list of aliases."""
|
||||||
return _set_status(uid_number, alias_list, 0)
|
return _set_status(uid_number, alias_list, 0)
|
||||||
|
|
||||||
|
|
||||||
def _set_status(uid_number, alias_list, status):
|
def _set_status(uid_number, alias_list, status):
|
||||||
s = 'UPDATE Alias SET status=? WHERE uid_number=? AND email_name=?'
|
"""Set the status value of a list of aliases."""
|
||||||
parameter_seq = ((status, uid_number, a) for a in alias_list)
|
query = 'UPDATE Alias SET status=? WHERE uid_number=? AND email_name=?'
|
||||||
with db_cursor() as cur:
|
parameter_seq = ((status, uid_number, alias) for alias in alias_list)
|
||||||
cur.execute('BEGIN')
|
with _get_cursor() as cursor:
|
||||||
cur.executemany(s, parameter_seq)
|
cursor.execute('BEGIN')
|
||||||
cur.execute('COMMIT')
|
cursor.executemany(query, parameter_seq)
|
||||||
|
cursor.execute('COMMIT')
|
||||||
|
|
||||||
|
|
||||||
def first_setup():
|
def first_setup():
|
||||||
|
"""Create the database file and schema inside it."""
|
||||||
actions.superuser_run('email_server', ['-i', 'aliases', 'setup'])
|
actions.superuser_run('email_server', ['-i', 'aliases', 'setup'])
|
||||||
_create_db_schema_if_not_exists()
|
|
||||||
|
|
||||||
|
|
||||||
def _create_db_schema_if_not_exists():
|
|
||||||
# Create schema if not exists
|
# Create schema if not exists
|
||||||
with db_cursor() as cur:
|
query = '''
|
||||||
cur.executescript(map_db_schema_script)
|
PRAGMA journal_mode=WAL;
|
||||||
|
BEGIN;
|
||||||
|
CREATE TABLE IF NOT EXISTS Alias (
|
||||||
|
email_name TEXT NOT NULL,
|
||||||
|
uid_number INTEGER NOT NULL,
|
||||||
|
status INTEGER NOT NULL,
|
||||||
|
PRIMARY KEY (email_name)
|
||||||
|
);
|
||||||
|
COMMIT;
|
||||||
|
'''
|
||||||
|
with _get_cursor() as cursor:
|
||||||
|
cursor.executescript(query)
|
||||||
|
|||||||
@ -203,9 +203,9 @@ class AliasView(FormView):
|
|||||||
if action == 'delete':
|
if action == 'delete':
|
||||||
aliases_module.delete(uid, alias_list)
|
aliases_module.delete(uid, alias_list)
|
||||||
elif action == 'disable':
|
elif action == 'disable':
|
||||||
aliases_module.set_disabled(uid, alias_list)
|
aliases_module.disable(uid, alias_list)
|
||||||
elif action == 'enable':
|
elif action == 'enable':
|
||||||
aliases_module.set_enabled(uid, alias_list)
|
aliases_module.enable(uid, alias_list)
|
||||||
|
|
||||||
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