emails: allow configuring known/valid domains for typo fixes (#44663)
This commit is contained in:
parent
c81b3b1fb2
commit
a95f583c3e
|
@ -4897,6 +4897,12 @@ def test_settings_emails(pub):
|
|||
resp = app.get('/backoffice/settings/emails/')
|
||||
resp = resp.click('General Options')
|
||||
assert 'Warning: all emails are sent to <foo@example.net>' in resp.text
|
||||
resp.form['from'] = 'test@localhost'
|
||||
resp = resp.form.submit('submit')
|
||||
pub.reload_cfg()
|
||||
assert pub.cfg['emails']['from'] == 'test@localhost'
|
||||
assert pub.cfg['emails']['well_known_domains']
|
||||
assert pub.cfg['emails']['valid_known_domains']
|
||||
|
||||
pub.cfg['debug'] = {}
|
||||
pub.write_cfg()
|
||||
|
|
|
@ -5,7 +5,7 @@ import sys
|
|||
import shutil
|
||||
import copy
|
||||
|
||||
from quixote import cleanup
|
||||
from quixote import cleanup, get_response
|
||||
from quixote.http_request import parse_query
|
||||
import mechanize
|
||||
|
||||
|
@ -286,9 +286,12 @@ def test_textwidget():
|
|||
|
||||
|
||||
def test_emailwidget():
|
||||
pub.cfg = {'emails': {'check_domain_with_dns': True}}
|
||||
get_response().javascript_code_parts = []
|
||||
widget = EmailWidget('test')
|
||||
form = MockHtmlForm(widget)
|
||||
assert 'name="test"' in form.as_html
|
||||
assert 'WCS_WELL_KNOWN_DOMAINS' in ''.join(get_response().javascript_code_parts)
|
||||
req.form = {}
|
||||
assert widget.parse() is None
|
||||
|
||||
|
|
|
@ -116,6 +116,16 @@ class EmailsDirectory(Directory):
|
|||
title = _('Check DNS for domain name'),
|
||||
value = emails.get('check_domain_with_dns', True),
|
||||
hint = _('Use a DNS request to check domain names used in email fields'))
|
||||
form.add(WidgetList, 'well_known_domains',
|
||||
title=_('Domains to check for spelling errors'),
|
||||
element_type=StringWidget,
|
||||
element_kwargs={'render_br': False},
|
||||
value=get_publisher().get_email_well_known_domains())
|
||||
form.add(WidgetList, 'valid_known_domains',
|
||||
title=_('Domains that should not be considered spelling errors'),
|
||||
element_type=StringWidget,
|
||||
element_kwargs={'render_br': False},
|
||||
value=get_publisher().get_email_valid_known_domains())
|
||||
|
||||
form.add_submit('submit', _('Submit'))
|
||||
form.add_submit('cancel', _('Cancel'))
|
||||
|
@ -140,7 +150,8 @@ class EmailsDirectory(Directory):
|
|||
else:
|
||||
cfg_submit(form, 'emails', [ 'smtp_server', 'smtp_login',
|
||||
'smtp_password', 'from', 'reply_to', 'footer',
|
||||
'check_domain_with_dns'])
|
||||
'check_domain_with_dns', 'well_known_domains',
|
||||
'valid_known_domains'])
|
||||
return redirect('.')
|
||||
|
||||
def _q_index(self):
|
||||
|
|
|
@ -898,6 +898,11 @@ class EmailWidget(StringWidget):
|
|||
|
||||
def add_media(self):
|
||||
get_response().add_javascript(['jquery.js', '../../i18n.js', 'qommon.forms.js'])
|
||||
get_response().add_javascript_code('''
|
||||
const WCS_WELL_KNOWN_DOMAINS = %s;
|
||||
const WCS_VALID_KNOWN_DOMAINS = %s;
|
||||
''' % (json.dumps(get_publisher().get_email_well_known_domains()),
|
||||
json.dumps(get_publisher().get_email_valid_known_domains())))
|
||||
|
||||
def _parse(self, request):
|
||||
StringWidget._parse(self, request)
|
||||
|
@ -919,7 +924,7 @@ class EmailWidget(StringWidget):
|
|||
return
|
||||
domain = force_text(domain, 'utf-8', errors='ignore')
|
||||
try:
|
||||
domain = domain.encode('idna')
|
||||
domain = force_str(domain.encode('idna'))
|
||||
except UnicodeError:
|
||||
self.error = _('invalid address domain')
|
||||
return
|
||||
|
|
|
@ -934,6 +934,22 @@ class QommonPublisher(Publisher, object):
|
|||
return [x.strip() for x in modes.split(',')]
|
||||
return ['lazy', 'django-condition']
|
||||
|
||||
def get_email_well_known_domains(self):
|
||||
emails_cfg = get_cfg('emails', {})
|
||||
well_known_domains = emails_cfg.get('well_known_domains')
|
||||
if not well_known_domains:
|
||||
well_known_domains = ['gmail.com', 'msn.com', 'hotmail.com',
|
||||
'hotmail.fr', 'wanadoo.fr', 'free.fr', 'yahoo.fr',
|
||||
'numericable.fr', 'laposte.fr', 'orange.fr', 'yahoo.com']
|
||||
return well_known_domains
|
||||
|
||||
def get_email_valid_known_domains(self):
|
||||
emails_cfg = get_cfg('emails', {})
|
||||
valid_known_domains = emails_cfg.get('valid_known_domains')
|
||||
if not valid_known_domains:
|
||||
valid_known_domains = ['yopmail.com']
|
||||
return valid_known_domains
|
||||
|
||||
def get_substitution_variables(self):
|
||||
from . import misc
|
||||
from wcs.variables import LazyDateObject
|
||||
|
|
|
@ -108,11 +108,9 @@ $(function() {
|
|||
});
|
||||
}
|
||||
// common domains we want to offer suggestions for.
|
||||
var well_known_domains = ['gmail.com', 'msn.com', 'hotmail.com', 'hotmail.fr', 'wanadoo.fr',
|
||||
'free.fr', 'yahoo.fr', 'numericable.fr', 'laposte.fr', 'orange.fr',
|
||||
'yahoo.com'];
|
||||
var well_known_domains = WCS_WELL_KNOWN_DOMAINS;
|
||||
// existing domains we know but don't want to use in suggestion engine.
|
||||
var known_domains = ['yopmail.com'];
|
||||
var known_domains = WCS_VALID_KNOWN_DOMAINS;
|
||||
$('input[type=email]').on('change wcs:change', function() {
|
||||
var $email_input = $(this);
|
||||
var val = $email_input.val();
|
||||
|
|
Loading…
Reference in New Issue