Add filters feature for plugins
* larpe/admin/hosts.ptl: allows to add custom filters * larpe/plugins/site_authentication/ciril_net_rh.py: add logout support with a filter git-svn-id: svn+ssh://labs.libre-entreprise.org/svnroot/larpe@476 3ed937ae-f919-0410-9a43-8e6f19e4ba6e
This commit is contained in:
parent
246198044e
commit
4d37015708
|
@ -791,8 +791,12 @@ POST request. You can desactivate some or all of them, or change their value.'''
|
|||
self.host.http_headers[name] = old_value
|
||||
self.host.store()
|
||||
|
||||
def generate_apache_filter(self):
|
||||
def generate_apache_filters(self):
|
||||
# Set Python filter path for Apache configuration
|
||||
site_auth = site_authentication.get_site_authentication(self.host)
|
||||
filters = site_auth.get_filters()
|
||||
replace_login_form = self.host.auth_form_places == 'form_everywhere' and \
|
||||
self.host.auth_form_action
|
||||
python_path = os.path.join(self.host.site_dir, 'filters')
|
||||
if python_path not in self.host.apache_python_paths:
|
||||
self.host.apache_python_paths.append(python_path)
|
||||
|
@ -800,16 +804,25 @@ POST request. You can desactivate some or all of them, or change their value.'''
|
|||
# Write Python filter
|
||||
python_file = open(os.path.join(self.host.site_dir, 'filters', 'output_replace_form.py'), 'w')
|
||||
python_file.write(open(OUTPUT_FILTER_BASE).read())
|
||||
python_file.write('''\
|
||||
def filter_page(filter, page):
|
||||
if filters or replace_login_form:
|
||||
python_file.write("def filter_page(filter, page):\n")
|
||||
if replace_login_form:
|
||||
python_file.write('''\
|
||||
current_form = re.compile('<form [^>]*?action="%(auth_form_action)s".*?>.*?</form>', re.DOTALL)
|
||||
return current_form.sub('<form method="post" action="/liberty/%(name)s/login"><input type="submit" value="Connexion" /></form>', page)
|
||||
''' % { 'auth_form_action': self.host.auth_form_action, 'name': self.host.name })
|
||||
python_file.close()
|
||||
page = current_form.sub('<form method="post" action="/liberty/%(name)s/login"><input type="submit" value="Connexion" /></form>', page)'''
|
||||
% { 'auth_form_action': self.host.auth_form_action, 'name': self.host.name })
|
||||
for filter in filters:
|
||||
python_file.write(" r = re.compile(r\"\"\"%s\"\"\", re.DOTALL)\n" % filter["re"])
|
||||
python_file.write(" page = r.sub(r\"\"\"%s\"\"\", page)\n" % filter["sub"])
|
||||
python_file.write(" return page\n")
|
||||
python_file.close()
|
||||
# Set Python filter for Apache configuration
|
||||
if not 'output_replace_form' in self.host.apache_output_python_filters:
|
||||
self.host.apache_output_python_filters.append('output_replace_form')
|
||||
else:
|
||||
if 'output_replace_form' in self.host.apache_output_python_filters:
|
||||
self.host.apache_output_python_filters.remove('output_replace_form')
|
||||
|
||||
# Set Python filter for Apache configuration
|
||||
if not 'output_replace_form' in self.host.apache_output_python_filters:
|
||||
self.host.apache_output_python_filters.append('output_replace_form')
|
||||
|
||||
def sso_init_link [html] (self):
|
||||
form = self.form_sso_init_link()
|
||||
|
@ -859,13 +872,7 @@ authenticate on any of these pages, and don't need to be redirected to a separat
|
|||
for f in fields:
|
||||
setattr(self.host, f, form.get_widget(f).parse())
|
||||
self.host.auth_form_url = self.host.auth_url
|
||||
|
||||
if self.host.auth_form_places == 'form_everywhere' and self.host.auth_form_action:
|
||||
self.generate_apache_filter()
|
||||
else:
|
||||
if 'output_replace_form' in self.host.apache_output_python_filters:
|
||||
self.host.apache_output_python_filters.remove('output_replace_form')
|
||||
|
||||
self.generate_apache_filters()
|
||||
self.host.store()
|
||||
write_apache2_vhosts()
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
|
||||
import re
|
||||
|
||||
from quixote import redirect
|
||||
|
@ -31,9 +32,24 @@ class CirilSiteAuthentication(SiteAuthentication):
|
|||
match = regexp.findall(data)
|
||||
if match:
|
||||
success = True
|
||||
return_content = '<script language="JavaScript" type="text/javascript">window.open("%s", "_parent")</script>' % match[0]
|
||||
return_content = redirect(match[0])
|
||||
|
||||
return success, return_content
|
||||
|
||||
def get_filters(self):
|
||||
""" Rewrite the logout link """
|
||||
filters = []
|
||||
logout = {}
|
||||
if not hasattr(self.host, 'base_url'):
|
||||
return None
|
||||
base_url_tokens = self.host.base_url.split('/')
|
||||
base_url_tokens[-1] = 'logout'
|
||||
new_logout_url = '/'.join(base_url_tokens)
|
||||
logout["re"] = """(<a.*?href=["']).*?(["'].*?>D.*?connexion</a>)"""
|
||||
logout["sub"] = r"\1%s\2" % new_logout_url
|
||||
filters.append(logout)
|
||||
return filters
|
||||
|
||||
|
||||
site_authentication_plugins.register(CirilSiteAuthentication)
|
||||
|
||||
|
|
|
@ -105,6 +105,18 @@ class SiteAuthentication:
|
|||
value = values[0], options = options)
|
||||
return form
|
||||
|
||||
def get_filters(self):
|
||||
""" Allows to filters the page
|
||||
Example with a logout link:
|
||||
filters = []
|
||||
filter = {}
|
||||
filer["re"] = "<a.*?href=\"home.php\.*?\">Logout</a>"
|
||||
filer["sub"] = "<a href=\"/logout\">Logout</a>" % logout_url
|
||||
filters.append(filter)
|
||||
return filters
|
||||
"""
|
||||
return None
|
||||
|
||||
def submit_local_auth_form(self, form):
|
||||
username = form.get_widget('username').parse()
|
||||
password = form.get_widget('password').parse()
|
||||
|
@ -279,9 +291,6 @@ class SiteAuthentication:
|
|||
return success, return_content
|
||||
|
||||
def local_logout(self, federation=None, user=None):
|
||||
"""
|
||||
TODO : recode with twill
|
||||
"""
|
||||
if federation is None and user is not None:
|
||||
federations = Federation.select(lambda x: user.name_identifiers[0] in x.name_identifiers)
|
||||
if federations:
|
||||
|
|
Reference in New Issue