All pastes #767205 Raw Edit

Anonymous

public text v1 · immutable
·published 2007-11-09 15:37 UTC
rendered paste body
## 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