[IMP] website: autocorrect website domain

Before, get_http_domain make the job,
now we force website.domain to be valid

closes odoo/odoo#71161

Signed-off-by: Jérémy Kersten (jke) <jke@openerp.com>
This commit is contained in:
Jeremy Kersten
2021-06-02 14:27:02 +00:00
parent 01cefd0e75
commit 042c95b021
3 changed files with 45 additions and 11 deletions
+16 -5
View File
@@ -61,8 +61,7 @@ class Website(models.Model):
name = fields.Char('Website Name', required=True)
sequence = fields.Integer(default=10)
domain = fields.Char('Website Domain',
help='Will be prefixed by http in canonical URLs if no scheme is specified')
domain = fields.Char('Website Domain', help='E.g. https://www.mydomain.com')
country_group_ids = fields.Many2many('res.country.group', 'website_country_group_rel', 'website_id', 'country_group_id',
string='Country Groups', help='Used when multiple websites have the same domain.')
company_id = fields.Many2one('res.company', string="Company", default=lambda self: self.env.company, required=True)
@@ -171,7 +170,7 @@ class Website(models.Model):
@api.model
def create(self, vals):
self._handle_favicon(vals)
self._handle_create_write(vals)
if 'user_id' not in vals:
company = self.env['res.company'].browse(vals.get('company_id'))
@@ -191,7 +190,7 @@ class Website(models.Model):
def write(self, values):
public_user_to_change_websites = self.env['website']
original_company = self.company_id
self._handle_favicon(values)
self._handle_create_write(values)
self.clear_caches()
@@ -233,11 +232,23 @@ class Website(models.Model):
return result
@api.model
def _handle_create_write(self, vals):
self._handle_favicon(vals)
self._handle_domain(vals)
@api.model
def _handle_favicon(self, vals):
if 'favicon' in vals:
vals['favicon'] = tools.image_process(vals['favicon'], size=(256, 256), crop='center', output_format='ICO')
@api.model
def _handle_domain(self, vals):
if 'domain' in vals and vals['domain']:
if not vals['domain'].startswith('http'):
vals['domain'] = 'https://%s' % vals['domain']
vals['domain'] = vals['domain'].rstrip('/')
@api.ondelete(at_uninstall=False)
def _unlink_except_last_remaining_website(self):
website = self.search([('id', 'not in', self.ids)], limit=1)
@@ -922,7 +933,7 @@ class Website(models.Model):
endpoint.routing['auth'] in ('none', 'public') and
endpoint.routing.get('website', False) and
all(hasattr(converter, 'generate') for converter in converters)):
return False
return False
# dont't list routes without argument having no default value or converter
sign = inspect.signature(endpoint.method.original_func)
+28 -5
View File
@@ -57,12 +57,35 @@ class TestBaseUrl(TestUrlCommon):
# Test URL is correct for the website itself when no domain is set
self.assertEqual(self.website.get_base_url(), icp_base_url)
# Test URL is correctly auto fixed
domains = [
# trailing /
("https://www.monsite.com/", "https://www.monsite.com"),
# no scheme
("www.monsite.com", "https://www.monsite.com"),
("monsite.com", "https://monsite.com"),
# respect scheme
("https://www.monsite.com", "https://www.monsite.com"),
("http://www.monsite.com", "http://www.monsite.com"),
# respect port
("www.monsite.com:8069", "https://www.monsite.com:8069"),
("www.monsite.com:8069/", "https://www.monsite.com:8069"),
# no guess wwww
("monsite.com", "https://monsite.com"),
# mix
("www.monsite.com/", "https://www.monsite.com"),
]
for (domain, expected) in domains:
self.website.domain = domain
self.assertEqual(self.website.get_base_url(), expected)
def test_02_canonical_url(self):
self._assertCanonical('/', self.domain + '/')
self._assertCanonical('/?debug=1', self.domain + '/')
self._assertCanonical('/a-page', self.domain + '/a-page')
self._assertCanonical('/en_US', self.domain + '/')
self._assertCanonical('/fr_FR', self.domain + '/fr/')
# test does not work in local due to port
self._assertCanonical('/', self.website.get_base_url() + '/')
self._assertCanonical('/?debug=1', self.website.get_base_url() + '/')
self._assertCanonical('/a-page', self.website.get_base_url() + '/a-page')
self._assertCanonical('/en_US', self.website.get_base_url() + '/')
self._assertCanonical('/fr_FR', self.website.get_base_url() + '/fr/')
@odoo.tests.tagged('-at_install', 'post_install')
@@ -95,7 +95,7 @@ tour.register('shop_mail', {
{
content: "check it's the correct email, and the URL is correct too",
trigger: 'div.oe_form_field_html[name="body_html"] p:contains("Your"):contains("order")',
extra_trigger: 'div.oe_form_field_html[name="body_html"] a[href^="http://my-test-domain.com"]',
extra_trigger: 'div.oe_form_field_html[name="body_html"] a[href^="https://my-test-domain.com"]',
},
]);
});