summaryrefslogtreecommitdiff
path: root/addons/link_tracker/models
diff options
context:
space:
mode:
Diffstat (limited to 'addons/link_tracker/models')
-rw-r--r--addons/link_tracker/models/link_tracker.py12
1 files changed, 11 insertions, 1 deletions
diff --git a/addons/link_tracker/models/link_tracker.py b/addons/link_tracker/models/link_tracker.py
index 50b00b9011f..ace848971af 100644
--- a/addons/link_tracker/models/link_tracker.py
+++ b/addons/link_tracker/models/link_tracker.py
@@ -10,6 +10,8 @@ from werkzeug import urls
from odoo import tools, models, fields, api, _
+URL_MAX_SIZE = 10 * 1024 * 1024
+
class LinkTracker(models.Model):
""" Link trackers allow users to wrap any URL into a short URL that can be
@@ -94,7 +96,15 @@ class LinkTracker(models.Model):
@api.depends('url')
def _get_title_from_url(self, url):
try:
- page = requests.get(url, timeout=5)
+ head = requests.head(url, timeout=5)
+ if (
+ int(head.headers.get('Content-Length', 0)) > URL_MAX_SIZE
+ or
+ 'text/html' not in head.headers.get('Content-Type', 'text/html')
+ ):
+ return url
+ # HTML parser can work with a part of page, so ask server to limit downloading to 50 KB
+ page = requests.get(url, timeout=5, headers={"range": "bytes=0-50000"})
p = html.fromstring(page.text.encode('utf-8'), parser=html.HTMLParser(encoding='utf-8'))
title = p.find('.//title').text
except: