SSO利用時のlogoutスクリプト

SSOのlogoutスクリプト

from Products.CMFCore.utils import getToolByName
try:
	from Products.CMFPlone import transaction_note
except ImportError:
	from Products.CMFPlone.utils import transaction_note

from Products.PluggableAuthService.PluggableAuthService import logger
logger.info("REQUEST.cookies = %r" % repr(context.REQUEST.cookies))
try:
    context.acl_users.logout(context.REQUEST)
except:
    pass
target_url = context.REQUEST.URL1.replace('$', '$$')
skinvar = context.portal_skins.getRequestVarname()
path = '/' + context.absolute_url(1)
if context.REQUEST.has_key(skinvar) and not context.portal_skins.getCookiePersistence():
    #logger.info("expiring skin cookie")
    context.REQUEST.RESPONSE.expireCookie(skinvar, path=path)
sdm = getToolByName(context, 'session_data_manager', None)
if sdm is not None:
    #logger.info("got session_data_manager")
    session = sdm.getSessionData(create=0)
    if session is not None:
        #logger.info("invalidating session")
        session.invalidate()
if context.REQUEST.cookies.has_key('__ac'):
    #logger.info("building local account logout URL")
    transaction_note('Logged out')
    target_url += '/logged_out'
    context.REQUEST.RESPONSE.redirect(target_url)
else:
    #logger.info("building shibboleth lazy logout URL")
    config = context.acl_users.ShibbolethLogin.getConfig()
    spliturl = target_url.split(':')
    if config['http_logout_to_http']:
        spliturl[0] = 'http'
    try:
        if config['http_login_url'][0][1][-1] == '=':
            splitpath = spliturl[2].split('/')
            port = str(config['http_login_to_port'])
            if (spliturl[0] == 'https' and port == '443') or \
               (spliturl[0] == 'http' and port == '80'):
                # don't include default ports
                del spliturl[0]
            else:
                splitpath[0] = port
            if splitpath:
                spliturl[2] = '/'.join(splitpath)
            else:
                del spliturl[2]
            target_url = config['http_logout_url'] + ':'.join(spliturl) + '/logged_out'
        else:
            raise IndexError
    except IndexError:
        target_url = ':'.join(spliturl)
        target_url = '%s/Shibboleth.sso/Logout?return=%s' % (target_url, target_url)
    context.REQUEST.RESPONSE.redirect(target_url)
print 'This is the %s "%s" in %s' % (script.meta_type, script.getId(), context.absolute_url())
return printed