general: remove support for "iframe" mode (#29955)

This commit is contained in:
Frédéric Péters 2019-01-22 09:33:17 +01:00
parent 423c17a425
commit 489c5124c8
8 changed files with 2 additions and 11268 deletions

File diff suppressed because it is too large Load Diff

View File

@ -251,12 +251,6 @@ def test_get_as_datetime():
assert get_as_datetime('2017-04-25T12:00:00') == datetime_value
assert get_as_datetime('25/04/2017 12:00') == datetime_value
def test_etld():
pub = create_temporary_pub()
pub.load_effective_tld_names()
assert pub.etld.parse('www.example.net') == ('www.example', 'net')
assert pub.etld.parse('www.example.rhcloud.com') == ('www.example', 'rhcloud.com')
def test_pagination():
pub = create_temporary_pub()
req = HTTPRequest(None, {'SERVER_NAME': 'example.net', 'SCRIPT_NAME': ''})

View File

@ -253,11 +253,6 @@ class WcsPublisher(StubWcsPublisher):
z.close()
return results
def init_publish(self, request):
if request.get_header('X_WCS_IFRAME_MODE', '') in ('true', 'yes'):
request.response.iframe_mode = True
return QommonPublisher.init_publish(self, request)
def get_object_visitors(self, object_key):
session_manager = self.session_manager_class(session_class=self.session_class)
return session_manager.session_class.get_object_visitors(object_key)

View File

@ -35,7 +35,6 @@ class AfterJob(StorableObject):
class HTTPResponse(quixote.http_response.HTTPResponse):
iframe_mode = False
javascript_scripts = None
javascript_code_parts = None
css_includes = None
@ -47,16 +46,6 @@ class HTTPResponse(quixote.http_response.HTTPResponse):
if not charset:
self.charset = get_publisher().site_charset
def redirect(self, location, permanent=False):
if not self.iframe_mode:
return quixote.http_response.HTTPResponse.redirect(self, location, permanent)
req = get_request()
server_url = '%s://%s' % (req.get_scheme(), req.get_server())
if location.startswith(server_url):
iframe_server_url = '%s://%s' % (req.get_scheme(), req.get_server(clean=False))
location = iframe_server_url + location[len(server_url):]
return quixote.http_response.HTTPResponse.redirect(self, location, permanent)
def reset_includes(self):
self.javascript_scripts = None
self.javascript_code_parts = None

View File

@ -1058,12 +1058,6 @@ class IdPAuthMethod(AuthMethod):
def login(self):
idps = get_cfg('idp', {})
if get_response().iframe_mode and not get_request().form.get('next'):
get_request().form = {'next': '%s://%s%s' % (
get_request().get_scheme(),
get_request().get_server(False),
get_publisher().get_root_url())}
# there is only one visible IdP, perform login automatically on
# this one.
server = misc.get_lasso_server()

View File

@ -454,19 +454,6 @@ class QommonPublisher(Publisher, object):
if request:
if request.get_scheme() == 'https':
self.config.session_cookie_secure = True
canonical_hostname = request.get_server(clean = False).lower().split(':')[0].rstrip('.')
if canonical_hostname.count('.') >= 2 and self.etld:
try:
socket.inet_aton(canonical_hostname)
except socket.error:
# not an IP address
try:
base_name = self.etld.parse(canonical_hostname)[1]
except:
pass
else:
self.config.session_cookie_domain = '.'.join(
canonical_hostname.split('.')[-2-base_name.count('.'):])
md5_hash = hashlib.md5()
md5_hash.update(self.app_dir)
@ -492,7 +479,7 @@ class QommonPublisher(Publisher, object):
Set the application directory, creating it if possible and authorized.
'''
canonical_hostname = request.get_server(clean = False).lower().split(':')[0].rstrip('.')
for prefix in ['iframe', 'mobile', 'm']:
for prefix in ['mobile', 'm']:
if canonical_hostname.startswith(prefix + '.') or \
canonical_hostname.startswith(prefix + '-'):
canonical_hostname = canonical_hostname[len(prefix)+1:]
@ -501,8 +488,6 @@ class QommonPublisher(Publisher, object):
self.app_dir = os.path.join(self.APP_DIR, canonical_hostname)
if script_name:
if script_name.startswith('iframe.'):
script_name = script_name[7:]
script_name = script_name.replace('/', '+')
self.app_dir += '+' + script_name
@ -549,23 +534,15 @@ class QommonPublisher(Publisher, object):
self.initialize_app_dir()
# possibility to enable iframe mode via SCRIPT_NAME
script_name = request.get_header('SCRIPT_NAME', '').strip('/')
if script_name.startswith('iframe.'):
request.response.page_template_key = 'iframe'
# determine appropriate theme variant
canonical_hostname = request.get_server(False).lower().split(':')[0].rstrip('.')
override_template_keys = {'m': 'mobile'}
for prefix in ['iframe', 'mobile', 'm']:
for prefix in ['mobile', 'm']:
if canonical_hostname.startswith(prefix + '.') or \
canonical_hostname.startswith(prefix + '-'):
request.response.page_template_key = override_template_keys.get(prefix, prefix)
break
if request.response.page_template_key == 'iframe':
request.response.iframe_mode = True
self.set_config(request)
if request.get_cookie('mobile') == 'false':
@ -732,17 +709,6 @@ class QommonPublisher(Publisher, object):
except OSError:
pass
@classmethod
def load_effective_tld_names(cls):
if hasattr(cls, 'etld') and cls.etld:
return
filename = os.path.join(cls.DATA_DIR, 'vendor', 'effective_tld_names.dat')
if not os.path.exists(filename):
cls.etld = None
return
from vendor import etld
cls.etld = etld.etld(filename)
@classmethod
def register_cronjobs(cls):
cls.register_cronjob(CronJob(cls.clean_sessions, minutes=range(0, 60, 5)))
@ -750,8 +716,6 @@ class QommonPublisher(Publisher, object):
cls.register_cronjob(CronJob(cls.clean_afterjobs, hourly=True))
cls.register_cronjob(CronJob(cls.clean_tempfiles, hourly=True))
register_tld_names = False
_initialized = False
@classmethod
def init_publisher_class(cls):
@ -760,9 +724,6 @@ class QommonPublisher(Publisher, object):
cls._initialized = True
cls.load_extra_dirs()
if cls.register_tld_names:
cls.load_effective_tld_names()
@classmethod
def create_publisher(cls, **kwargs):
publisher = cls(cls.root_directory_class(),

View File

@ -1,65 +0,0 @@
#!/usr/bin/python
# Copyright (c) 2009 Michael Still
# Released under the terms of the GNU GPL v2
# Mozilla publishes a rule file which may be used to calculate effective TLDs
# at:
#
# http://mxr.mozilla.org/mozilla-central/source/netwerk/dns/src/
# effective_tld_names.dat?raw=1
#
# Use that file to take a domain name and return a (domain, etld) tuple.
# Documentation for the rule file format is at:
#
# https://wiki.mozilla.org/Gecko:Effective_TLD_Service
import re
import sys
import time
class etld(object):
"""Helper to determine the effective TLD portion of a domain name."""
def __init__(self, datafile='effective_tld_names.dat'):
"""Load the data file ready for lookups."""
self.rules = {}
file = open(datafile)
line = file.readline()
while line:
line = line.rstrip()
if line and not line.startswith('//'):
tld = line.split('.')[-1]
self.rules.setdefault(tld, [])
self.rules[tld].append(re.compile(self.regexpize(line)))
line = file.readline()
file.close()
def regexpize(self, line):
"""Convert a rule to regexp syntax."""
line = line[::-1].replace('.', '\\.').replace('*', '[^\\.]*').replace('!', '')
return '^(%s)\.(.*)$' % line
def parse(self, hostname):
"""Parse a hostanme into domain and etld portions."""
hostname = hostname.lower()
tld = hostname.split('.')[-1]
hostname = hostname[::-1]
domain = ''
etld = ''
for rule in self.rules[tld]:
m = rule.match(hostname)
if m and m.group(1) > etld:
domain = m.group(2)[::-1]
etld = m.group(1)[::-1]
if not etld:
raise Exception('Parse failed')
return (domain, etld)

View File

@ -29,9 +29,7 @@
{{ workflow_form.render|safe }}
{% endif %}
{% if not response.iframe_mode %}
<div class="back-home-button">
<a href="{{ publisher.get_root_url }}">{% trans "Back Home" %}</a>
</div>
{% endif %}
{% endblock %}