## Script (Python) "insufficient_privileges"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=Insufficient Privileges
##
from Products.CMFCore.utils import getToolByName
import zope.i18nmessageid
_ = zope.i18nmessageid.MessageFactory('opencore')
portal = context.portal_url.getPortalObject()
dummy_referer = context.portal_url()
referer = context.REQUEST.environ.get('HTTP_REFERER',
dummy_referer)
came_from = context.REQUEST.form.get('came_from', '')
#XXX This should all be refactored!
#XXX maybe put this in a view somewhere
# XXX you can't import things in skins :(
def query_dict(string):
# XXX reinvent urllib.splitquery
query = string.split('?')
if len(query) != 2:
return None
# XXX reinvent dict(cgi.parse_qsl)
queries = [ i for i in query[1].split('&')]
query_dict = dict([i.split('=',1) for i in queries if '=' in i])
query_dict.update(dict([(i,'') for i in queries if '=' not in i]))
return query_dict
# XXX reinvent urlunquote
def urlunquote(string):
url = string.split('%')
return url[0] + ''.join([ chr(int(i[:2], 16)) + i[2:]
for i in url[1:] ])
#XXX revinent urllib.splitquery
query = query_dict(came_from)
if query:
referer = query.get('referer', referer)
if referer:
referer = urlunquote(referer)
plone_utils = getToolByName(portal, 'plone_utils')
plone_utils.addPortalMessage(_(u'psm_not_sufficient_perms', u"You do not have sufficient permissions."))
if referer.split('?')[0].endswith('/require_login'):
referer = dummy_referer
state.setNextAction('redirect_to:string:%s' % referer)
return state