provide modified session authentication plugin with correct 'camefrom' setting

git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@1250 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2006-06-19 11:17:15 +00:00
parent f4eebb5967
commit caac5d81df
2 changed files with 37 additions and 3 deletions

View file

@ -24,12 +24,30 @@ $Id$
import urllib
from zope.app import zapi
from zope.app.authentication.session import SessionCredentialsPlugin
from zope.app.component import hooks
from zope.app.i18n import ZopeMessageFactory as _
from zope.app.security.browser.auth import LoginLogout as BaseLoginLogout
from zope.cachedescriptors.property import Lazy
from zope.i18n import translate
from zope.app.security.interfaces import IUnauthenticatedPrincipal
from zope.app.security.interfaces import ILogoutSupported
from zope.app.i18n import ZopeMessageFactory as _
from zope.cachedescriptors.property import Lazy
from zope.i18n import translate
from zope.publisher.interfaces.http import IHTTPRequest
class LoopsSessionCredentialsPlugin(SessionCredentialsPlugin):
def challenge(self, request):
if not IHTTPRequest.providedBy(request):
return False
site = hooks.getSite()
#camefrom = request.getURL() # wrong when object is not viewable
camefrom = request.getApplicationURL() + request['PATH_INFO']
url = '%s/@@%s?%s' % (zapi.absoluteURL(site, request),
self.loginpagename,
urllib.urlencode({'camefrom': camefrom}))
request.response.redirect(url)
return True
class LoginLogout(BaseLoginLogout):

View file

@ -26,6 +26,7 @@
layer="loops"
allowed_interface="zope.app.publisher.interfaces.browser.IMenuAccessView"
/>
<!-- login/logout stuff -->
<zope:adapter factory="zope.app.security.LogoutSupported" />
@ -44,4 +45,19 @@
layer="loops"
/>
<zope:utility
name="Loops Session Credentials"
provides="zope.app.authentication.interfaces.ICredentialsPlugin"
factory=".auth.LoopsSessionCredentialsPlugin"
/>
<zope:localUtility class=".auth.LoopsSessionCredentialsPlugin">
<zope:require
permission="zope.ManageServices"
interface="zope.app.authentication.session.IBrowserFormChallenger"
set_schema="zope.app.authentication.session.IBrowserFormChallenger" />
</zope:localUtility>
</configure>