Skip to content

Commit 042c95b

Browse files
committed
[IMP] website: autocorrect website domain
Before, get_http_domain make the job, now we force website.domain to be valid closes odoo#71161 Signed-off-by: Jérémy Kersten (jke) <jke@openerp.com>
1 parent 01cefd0 commit 042c95b

File tree

3 files changed

+45
-11
lines changed

3 files changed

+45
-11
lines changed

addons/website/models/website.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,7 @@ def _default_language(self):
6161

6262
name = fields.Char('Website Name', required=True)
6363
sequence = fields.Integer(default=10)
64-
domain = fields.Char('Website Domain',
65-
help='Will be prefixed by http in canonical URLs if no scheme is specified')
64+
domain = fields.Char('Website Domain', help='E.g. https://www.mydomain.com')
6665
country_group_ids = fields.Many2many('res.country.group', 'website_country_group_rel', 'website_id', 'country_group_id',
6766
string='Country Groups', help='Used when multiple websites have the same domain.')
6867
company_id = fields.Many2one('res.company', string="Company", default=lambda self: self.env.company, required=True)
@@ -171,7 +170,7 @@ def _get_menu_ids(self):
171170

172171
@api.model
173172
def create(self, vals):
174-
self._handle_favicon(vals)
173+
self._handle_create_write(vals)
175174

176175
if 'user_id' not in vals:
177176
company = self.env['res.company'].browse(vals.get('company_id'))
@@ -191,7 +190,7 @@ def create(self, vals):
191190
def write(self, values):
192191
public_user_to_change_websites = self.env['website']
193192
original_company = self.company_id
194-
self._handle_favicon(values)
193+
self._handle_create_write(values)
195194

196195
self.clear_caches()
197196

@@ -233,11 +232,23 @@ def write(self, values):
233232

234233
return result
235234

235+
@api.model
236+
def _handle_create_write(self, vals):
237+
self._handle_favicon(vals)
238+
self._handle_domain(vals)
239+
236240
@api.model
237241
def _handle_favicon(self, vals):
238242
if 'favicon' in vals:
239243
vals['favicon'] = tools.image_process(vals['favicon'], size=(256, 256), crop='center', output_format='ICO')
240244

245+
@api.model
246+
def _handle_domain(self, vals):
247+
if 'domain' in vals and vals['domain']:
248+
if not vals['domain'].startswith('http'):
249+
vals['domain'] = 'https://%s' % vals['domain']
250+
vals['domain'] = vals['domain'].rstrip('/')
251+
241252
@api.ondelete(at_uninstall=False)
242253
def _unlink_except_last_remaining_website(self):
243254
website = self.search([('id', 'not in', self.ids)], limit=1)
@@ -922,7 +933,7 @@ def rule_is_enumerable(self, rule):
922933
endpoint.routing['auth'] in ('none', 'public') and
923934
endpoint.routing.get('website', False) and
924935
all(hasattr(converter, 'generate') for converter in converters)):
925-
return False
936+
return False
926937

927938
# dont't list routes without argument having no default value or converter
928939
sign = inspect.signature(endpoint.method.original_func)

addons/website/tests/test_base_url.py

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,12 +57,35 @@ def test_01_base_url(self):
5757
# Test URL is correct for the website itself when no domain is set
5858
self.assertEqual(self.website.get_base_url(), icp_base_url)
5959

60+
# Test URL is correctly auto fixed
61+
domains = [
62+
# trailing /
63+
("https://www.monsite.com/", "https://www.monsite.com"),
64+
# no scheme
65+
("www.monsite.com", "https://www.monsite.com"),
66+
("monsite.com", "https://monsite.com"),
67+
# respect scheme
68+
("https://www.monsite.com", "https://www.monsite.com"),
69+
("http://www.monsite.com", "http://www.monsite.com"),
70+
# respect port
71+
("www.monsite.com:8069", "https://www.monsite.com:8069"),
72+
("www.monsite.com:8069/", "https://www.monsite.com:8069"),
73+
# no guess wwww
74+
("monsite.com", "https://monsite.com"),
75+
# mix
76+
("www.monsite.com/", "https://www.monsite.com"),
77+
]
78+
for (domain, expected) in domains:
79+
self.website.domain = domain
80+
self.assertEqual(self.website.get_base_url(), expected)
81+
6082
def test_02_canonical_url(self):
61-
self._assertCanonical('/', self.domain + '/')
62-
self._assertCanonical('/?debug=1', self.domain + '/')
63-
self._assertCanonical('/a-page', self.domain + '/a-page')
64-
self._assertCanonical('/en_US', self.domain + '/')
65-
self._assertCanonical('/fr_FR', self.domain + '/fr/')
83+
# test does not work in local due to port
84+
self._assertCanonical('/', self.website.get_base_url() + '/')
85+
self._assertCanonical('/?debug=1', self.website.get_base_url() + '/')
86+
self._assertCanonical('/a-page', self.website.get_base_url() + '/a-page')
87+
self._assertCanonical('/en_US', self.website.get_base_url() + '/')
88+
self._assertCanonical('/fr_FR', self.website.get_base_url() + '/fr/')
6689

6790

6891
@odoo.tests.tagged('-at_install', 'post_install')

addons/website_sale/static/tests/tours/website_sale_shop_mail.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ tour.register('shop_mail', {
9595
{
9696
content: "check it's the correct email, and the URL is correct too",
9797
trigger: 'div.oe_form_field_html[name="body_html"] p:contains("Your"):contains("order")',
98-
extra_trigger: 'div.oe_form_field_html[name="body_html"] a[href^="http://my-test-domain.com"]',
98+
extra_trigger: 'div.oe_form_field_html[name="body_html"] a[href^="https://my-test-domain.com"]',
9999
},
100100
]);
101101
});

0 commit comments

Comments
 (0)