[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:
@@ -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)
|
||||
|
||||
@@ -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"]',
|
||||
},
|
||||
]);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user