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