From 3eca6864c34732feeda72c8a2f425310e6f5d14c Mon Sep 17 00:00:00 2001 From: Pierre Jaury Date: Sun, 1 May 2016 20:04:40 +0200 Subject: [PATCH] Rename the generic 'address' to 'email' --- admin/freeposte/admin/forms.py | 4 +- admin/freeposte/admin/models.py | 40 +++++++++---------- .../admin/templates/admin/create.html | 2 +- .../freeposte/admin/templates/admin/list.html | 4 +- .../admin/templates/alias/create.html | 2 +- .../freeposte/admin/templates/alias/list.html | 6 +-- .../freeposte/admin/templates/fetch/list.html | 2 +- .../admin/templates/manager/create.html | 2 +- .../admin/templates/manager/list.html | 4 +- .../freeposte/admin/templates/user/list.html | 14 +++---- admin/freeposte/admin/views/admins.py | 4 +- admin/freeposte/admin/views/aliases.py | 5 ++- admin/freeposte/admin/views/base.py | 2 +- admin/freeposte/admin/views/fetches.py | 22 +++++----- admin/freeposte/admin/views/users.py | 5 ++- dovecot/conf/dovecot-sql.conf.ext | 4 +- dovecot/conf/pigeonhole-sieve.dict | 6 +-- fetchmail/fetchmail.py | 8 ++-- postfix/conf/sqlite-virtual_alias_maps.cf | 2 +- 19 files changed, 70 insertions(+), 68 deletions(-) diff --git a/admin/freeposte/admin/forms.py b/admin/freeposte/admin/forms.py index d208abf4..b1f22944 100644 --- a/admin/freeposte/admin/forms.py +++ b/admin/freeposte/admin/forms.py @@ -64,12 +64,12 @@ class AliasForm(Form): class AdminForm(Form): - admin = fields.StringField('Admin address', [validators.Email()]) + admin = fields.StringField('Admin email', [validators.Email()]) submit = fields.SubmitField('Submit') class ManagerForm(Form): - manager = fields.StringField('Manager address', [validators.Email()]) + manager = fields.StringField('Manager email', [validators.Email()]) submit = fields.SubmitField('Submit') diff --git a/admin/freeposte/admin/models.py b/admin/freeposte/admin/models.py index fea5ff39..d8d493c3 100644 --- a/admin/freeposte/admin/models.py +++ b/admin/freeposte/admin/models.py @@ -10,7 +10,7 @@ import re # Many-to-many association table for domain managers managers = db.Table('manager', db.Column('domain_name', db.String(80), db.ForeignKey('domain.name')), - db.Column('user_address', db.String(255), db.ForeignKey('user.address')) + db.Column('user_email', db.String(255), db.ForeignKey('user.email')) ) @@ -34,9 +34,9 @@ class Domain(Base): max_users = db.Column(db.Integer, nullable=False, default=0) max_aliases = db.Column(db.Integer, nullable=False, default=0) - def has_address(self, localpart): - for address in self.users + self.aliases: - if address.localpart == localpart: + def has_email(self, localpart): + for email in self.users + self.aliases: + if email.localpart == localpart: return True else: return False @@ -45,8 +45,8 @@ class Domain(Base): return self.name -class Address(Base): - """ Abstraction for a mail address (localpart and domain). +class Email(Base): + """ Abstraction for an email address (localpart and domain). """ __abstract__ = True @@ -61,7 +61,7 @@ class Address(Base): # It is however very useful for quick lookups without joining tables, # especially when the mail server il reading the database. @declarative.declared_attr - def address(cls): + def email(cls): updater = lambda context: "{0}@{1}".format( context.current_parameters["localpart"], context.current_parameters["domain_name"], @@ -72,14 +72,14 @@ class Address(Base): @classmethod def get_by_email(cls, email): - return cls.query.filter_by(address=email).first() + return cls.query.filter_by(email=email).first() def __str__(self): - return self.address + return self.email -class User(Address): - """ A user is a mail address that has a password to access a mailbox. +class User(Email): + """ A user is an email address that has a password to access a mailbox. """ domain = db.relationship(Domain, backref='users') password = db.Column(db.String(255), nullable=False) @@ -106,7 +106,7 @@ class User(Address): is_anonymous = False def get_id(self): - return self.address + return self.email pw_context = context.CryptContext( ["sha512_crypt", "sha256_crypt", "md5_crypt"] @@ -125,12 +125,12 @@ class User(Address): else: return self.manager_of - def get_managed_addresses(self): - addresses = [] + def get_managed_emails(self): + emails = [] for domain in self.get_managed_domains(): - addresses.extend(domain.users) - addresses.extend(domain.aliases) - return addresses + emails.extend(domain.users) + emails.extend(domain.aliases) + return emails @classmethod def login(cls, email, password): @@ -138,8 +138,8 @@ class User(Address): return user if (user and user.check_password(password)) else None -class Alias(Address): - """ An alias is a mail address that redirects to some other addresses. +class Alias(Email): + """ An alias is an email address that redirects to some destination. """ domain = db.relationship(Domain, backref='aliases') destination = db.Column(db.String(), nullable=False) @@ -150,7 +150,7 @@ class Fetch(Base): account. """ id = db.Column(db.Integer(), primary_key=True) - user_address = db.Column(db.String(255), db.ForeignKey(User.address), + user_email = db.Column(db.String(255), db.ForeignKey(User.email), nullable=False) user = db.relationship(User, backref='fetches') protocol = db.Column(db.Enum('imap', 'pop3'), nullable=False) diff --git a/admin/freeposte/admin/templates/admin/create.html b/admin/freeposte/admin/templates/admin/create.html index c974e28b..9000b3c5 100644 --- a/admin/freeposte/admin/templates/admin/create.html +++ b/admin/freeposte/admin/templates/admin/create.html @@ -15,7 +15,7 @@ Add a global administrator tagClass: 'label label-primary large', typeahead: { afterSelect: function(val) { this.$element.val(""); }, - source: {{ current_user.get_managed_addresses()|map('string')|list|tojson }} + source: {{ current_user.get_managed_emails()|map('string')|list|tojson }} } }); diff --git a/admin/freeposte/admin/templates/admin/list.html b/admin/freeposte/admin/templates/admin/list.html index eeaa1d12..45b3d8e6 100644 --- a/admin/freeposte/admin/templates/admin/list.html +++ b/admin/freeposte/admin/templates/admin/list.html @@ -13,14 +13,14 @@ Global administrators Actions - Address + Email Created Last edit {% for admin in admins %} - + {{ admin }} {{ admin.created_at }} diff --git a/admin/freeposte/admin/templates/alias/create.html b/admin/freeposte/admin/templates/alias/create.html index 697ebb31..5bf6e9da 100644 --- a/admin/freeposte/admin/templates/alias/create.html +++ b/admin/freeposte/admin/templates/alias/create.html @@ -21,7 +21,7 @@ Create alias tagClass: 'label label-primary large', typeahead: { afterSelect: function(val) { this.$element.val(""); }, - source: {{ current_user.get_managed_addresses()|map('string')|list|tojson }} + source: {{ current_user.get_managed_emails()|map('string')|list|tojson }} } }); diff --git a/admin/freeposte/admin/templates/alias/list.html b/admin/freeposte/admin/templates/alias/list.html index 2e5810b3..c6966bf8 100644 --- a/admin/freeposte/admin/templates/alias/list.html +++ b/admin/freeposte/admin/templates/alias/list.html @@ -17,7 +17,7 @@ Alias list Actions - Address + Email Destination Comment Created @@ -26,8 +26,8 @@ Alias list {% for alias in domain.aliases %} -   - +   + {{ alias }} {{ alias.destination or '-' }} diff --git a/admin/freeposte/admin/templates/fetch/list.html b/admin/freeposte/admin/templates/fetch/list.html index f871d61a..a838ca70 100644 --- a/admin/freeposte/admin/templates/fetch/list.html +++ b/admin/freeposte/admin/templates/fetch/list.html @@ -9,7 +9,7 @@ Fetched accounts {% endblock %} {% block main_action %} -Add an account +Add an account {% endblock %} {% block box %} diff --git a/admin/freeposte/admin/templates/manager/create.html b/admin/freeposte/admin/templates/manager/create.html index aa70bd7d..0447cddf 100644 --- a/admin/freeposte/admin/templates/manager/create.html +++ b/admin/freeposte/admin/templates/manager/create.html @@ -19,7 +19,7 @@ Add a manager tagClass: 'label label-primary large', typeahead: { afterSelect: function(val) { this.$element.val(""); }, - source: {{ current_user.get_managed_addresses()|map('string')|list|tojson }} + source: {{ current_user.get_managed_emails()|map('string')|list|tojson }} } }); diff --git a/admin/freeposte/admin/templates/manager/list.html b/admin/freeposte/admin/templates/manager/list.html index 2e978906..f7b92d4a 100644 --- a/admin/freeposte/admin/templates/manager/list.html +++ b/admin/freeposte/admin/templates/manager/list.html @@ -17,14 +17,14 @@ Manager list Actions - Address + Email Created Last edit {% for manager in domain.managers %} - + {{ manager }} {{ manager.created_at }} diff --git a/admin/freeposte/admin/templates/user/list.html b/admin/freeposte/admin/templates/user/list.html index 433d172d..0f605f6b 100644 --- a/admin/freeposte/admin/templates/user/list.html +++ b/admin/freeposte/admin/templates/user/list.html @@ -18,7 +18,7 @@ User list Actions User settings - Address + Email Features Quota Comment @@ -28,14 +28,14 @@ User list {% for user in domain.users %} -   - +   + -   -   -   -   +   +   +   +   {{ user }} diff --git a/admin/freeposte/admin/views/admins.py b/admin/freeposte/admin/views/admins.py index d7b93fa0..1808d746 100644 --- a/admin/freeposte/admin/views/admins.py +++ b/admin/freeposte/admin/views/admins.py @@ -19,7 +19,7 @@ def admin_list(): def admin_create(): form = forms.AdminForm() if form.validate_on_submit(): - user = models.User.query.filter_by(address=form.admin.data).first() + user = models.User.query.filter_by(email=form.admin.data).first() if user: user.global_admin = True db.session.add(user) @@ -34,7 +34,7 @@ def admin_create(): @app.route('/admin/delete/', methods=['GET']) @flask_login.login_required def admin_delete(admin): - user = models.User.query.filter_by(address=admin).first() + user = models.User.query.filter_by(email=admin).first() if user: user.global_admin = False db.session.add(user) diff --git a/admin/freeposte/admin/views/aliases.py b/admin/freeposte/admin/views/aliases.py index 1f8cc6ff..11749507 100644 --- a/admin/freeposte/admin/views/aliases.py +++ b/admin/freeposte/admin/views/aliases.py @@ -23,8 +23,9 @@ def alias_create(domain_name): flask.url_for('.alias_list', domain_name=domain.name)) form = forms.AliasForm() if form.validate_on_submit(): - if domain.has_address(form.localpart.data): - flask.flash('Address %s is already used' % address, 'error') + if domain.has_email(form.localpart.data): + # TODO email is not declared + flask.flash('Email %s is already used' % email, 'error') else: alias = models.Alias(localpart=form.localpart.data, domain=domain) alias.destination = form.destination.data diff --git a/admin/freeposte/admin/views/base.py b/admin/freeposte/admin/views/base.py index 4bf7d68a..2158576c 100644 --- a/admin/freeposte/admin/views/base.py +++ b/admin/freeposte/admin/views/base.py @@ -21,7 +21,7 @@ def login(): flask_login.login_user(user) return flask.redirect(flask.url_for('.index')) else: - flask.flash('Wrong e-mail address or password', 'error') + flask.flash('Wrong e-mail or password', 'error') return flask.render_template('login.html', form=form) diff --git a/admin/freeposte/admin/views/fetches.py b/admin/freeposte/admin/views/fetches.py index 4137a445..75aae6bb 100644 --- a/admin/freeposte/admin/views/fetches.py +++ b/admin/freeposte/admin/views/fetches.py @@ -6,19 +6,19 @@ import flask import wtforms_components -@app.route('/fetch/list', methods=['GET', 'POST'], defaults={'user_address': None}) -@app.route('/fetch/list/', methods=['GET']) +@app.route('/fetch/list', methods=['GET', 'POST'], defaults={'user_email': None}) +@app.route('/fetch/list/', methods=['GET']) @flask_login.login_required -def fetch_list(user_address): - user = utils.get_user(user_address, True) +def fetch_list(user_email): + user = utils.get_user(user_email, True) return flask.render_template('fetch/list.html', user=user) -@app.route('/fetch/list', methods=['GET', 'POST'], defaults={'user_address': None}) -@app.route('/fetch/create/', methods=['GET', 'POST']) +@app.route('/fetch/list', methods=['GET', 'POST'], defaults={'user_email': None}) +@app.route('/fetch/create/', methods=['GET', 'POST']) @flask_login.login_required -def fetch_create(user_address): - user = utils.get_user(user_address) +def fetch_create(user_email): + user = utils.get_user(user_email) form = forms.FetchForm() if form.validate_on_submit(): fetch = models.Fetch(user=user) @@ -32,7 +32,7 @@ def fetch_create(user_address): db.session.commit() flask.flash('Fetch configuration created') return flask.redirect( - flask.url_for('.fetch_list', user_address=user.address)) + flask.url_for('.fetch_list', user_email=user.email)) return flask.render_template('fetch/create.html', form=form) @@ -52,7 +52,7 @@ def fetch_edit(fetch_id): db.session.commit() flask.flash('Fetch configuration updated') return flask.redirect( - flask.url_for('.fetch_list', user_address=fetch.user.address)) + flask.url_for('.fetch_list', user_email=fetch.user.email)) return flask.render_template('fetch/edit.html', form=form, fetch=fetch) @@ -65,4 +65,4 @@ def fetch_delete(fetch_id): db.session.commit() flask.flash('Fetch configuration delete') return flask.redirect( - flask.url_for('.fetch_list', user_address=fetch.user.address)) + flask.url_for('.fetch_list', user_email=fetch.user.email)) diff --git a/admin/freeposte/admin/views/users.py b/admin/freeposte/admin/views/users.py index b1c0d298..5f0ba750 100644 --- a/admin/freeposte/admin/views/users.py +++ b/admin/freeposte/admin/views/users.py @@ -23,8 +23,9 @@ def user_create(domain_name): flask.url_for('.user_list', domain_name=domain.name)) form = forms.UserForm() if form.validate_on_submit(): - if domain.has_address(form.localpart.data): - flask.flash('Address %s is already used' % address, 'error') + if domain.has_email(form.localpart.data): + # TODO: email is not declared + flask.flash('Email %s is already used' % email, 'error') else: user = models.User(localpart=form.localpart.data, domain=domain) user.comment = form.comment.data diff --git a/dovecot/conf/dovecot-sql.conf.ext b/dovecot/conf/dovecot-sql.conf.ext index 7cb60250..a1636a23 100644 --- a/dovecot/conf/dovecot-sql.conf.ext +++ b/dovecot/conf/dovecot-sql.conf.ext @@ -5,10 +5,10 @@ connect = /data/freeposte.db password_query = \ SELECT password \ FROM user \ - WHERE user.address = '%u' + WHERE user.email = '%u' # Mostly get the user quota user_query = \ SELECT '*:bytes=' || user.quota_bytes AS quota_rule \ FROM user \ - WHERE user.address = '%u' + WHERE user.email = '%u' diff --git a/dovecot/conf/pigeonhole-sieve.dict b/dovecot/conf/pigeonhole-sieve.dict index 62f5c410..711fd6bf 100644 --- a/dovecot/conf/pigeonhole-sieve.dict +++ b/dovecot/conf/pigeonhole-sieve.dict @@ -3,20 +3,20 @@ connect = /data/freeposte.db map { pattern = priv/reply_subject table = user - username_field = address + username_field = email value_field = reply_subject } map { pattern = priv/reply_body table = user - username_field = address + username_field = email value_field = reply_body } map { pattern = priv/forward table = user - username_field = address + username_field = email value_field = forward } diff --git a/fetchmail/fetchmail.py b/fetchmail/fetchmail.py index c90a9817..b755c37e 100755 --- a/fetchmail/fetchmail.py +++ b/fetchmail/fetchmail.py @@ -10,7 +10,7 @@ RC_LINE = """ poll {host} proto {protocol} port {port} user "{username}" password "{password}" smtphost "smtp" - smtpname {user_address} + smtpname {user_email} {options} """ @@ -25,15 +25,15 @@ def fetchmail(fetchmailrc): def run(cursor): cursor.execute(""" - SELECT user_address, protocol, host, port, tls, username, password + SELECT user_email, protocol, host, port, tls, username, password FROM fetch """) fetchmailrc = "" for line in cursor.fetchall(): - user_address, protocol, host, port, tls, username, password = line + user_email, protocol, host, port, tls, username, password = line options = "options ssl" if tls else "" fetchmailrc += RC_LINE.format( - user_address=user_address, + user_email=user_email, protocol=protocol, host=host, port=port, diff --git a/postfix/conf/sqlite-virtual_alias_maps.cf b/postfix/conf/sqlite-virtual_alias_maps.cf index 979133ff..cdd6c71d 100644 --- a/postfix/conf/sqlite-virtual_alias_maps.cf +++ b/postfix/conf/sqlite-virtual_alias_maps.cf @@ -2,4 +2,4 @@ dbpath = /data/freeposte.db query = SELECT destination FROM alias - WHERE alias.address = '%s' + WHERE alias.email = '%s'