diff --git a/browser/loops/auth.py b/browser/loops/auth.py
index 82e3113..a57fdef 100644
--- a/browser/loops/auth.py
+++ b/browser/loops/auth.py
@@ -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):
diff --git a/browser/loops/configure.zcml b/browser/loops/configure.zcml
index f868905..e1abaf7 100644
--- a/browser/loops/configure.zcml
+++ b/browser/loops/configure.zcml
@@ -26,6 +26,7 @@
layer="loops"
allowed_interface="zope.app.publisher.interfaces.browser.IMenuAccessView"
/>
+
@@ -44,4 +45,19 @@
layer="loops"
/>
+
+
+
+
+
+
+
+