auth: logout: start implementation (expire cookie)

This commit is contained in:
Helmut Merz 2025-04-20 10:42:42 +02:00
parent d128c5f138
commit 67985a6bdb
2 changed files with 11 additions and 9 deletions

View file

@ -48,11 +48,8 @@ class OidcAuthentication:
Authenticator(request).login()
def logout(self, request):
print('*** OidcAuthentication: logout')
Authenticator(request).logout()
JwtAuthentication = OidcAuthentication # old name - still used?
authentication = OidcAuthentication(None)
@ -72,7 +69,6 @@ class Principal:
@property
def groups(self):
groups = [self.group_prefix + g for g in self.data.get('groups', [])]
print('*** Principal.groups', groups)
return groups
def asDict(self):
@ -125,7 +121,7 @@ class Authenticator(DummyFolder):
)
self.storeSession(dict(state=state, nonce=nonce, code_verifier=codeVerifier))
loginUrl = '?'.join((self.params['auth_url'], urlencode(args)))
print('***', loginUrl)
logger.debug('login: URL %s', loginUrl)
req.response.redirect(loginUrl, trusted=True)
def callback(self):
@ -163,14 +159,17 @@ class Authenticator(DummyFolder):
req.response.redirect(self.reqUrl, trusted=True)
def logout(self):
pass
cname = self.params['cookie_name']
logger.debug('logout, cookie: %s', cname)
self.request.response.expireCookie(cname, path='/')
self.request.response.redirect(config.base_url, trusted=True)
def storeSession(self, data):
lifetime = int(self.params['cookie_lifetime'])
options = dict(
path='/',
expires=formatdate(time() + lifetime, localtime=False, usegmt=True),
httponly=True,
#httponly=True,
)
options['max-age'] = lifetime
domain = self.params['cookie_domain']
@ -198,7 +197,6 @@ class Authenticator(DummyFolder):
@register('auth', Root)
def authView(context, request):
print('*** auth', context, request['PATH_INFO'])
return Authenticator(request)
@register('login', Authenticator)
@ -213,5 +211,5 @@ def callback(context, request):
@register('logout', Authenticator)
def logout(context, request):
print('*** logout', context, request['PATH_INFO'], request.getTraversalStack())
context.logout()
return DefaultView(context, request)

View file

@ -1,9 +1,12 @@
# scopes.server.browser
import json
import logging
from zope.interface import implementer
from scopes.interfaces import IContainer, IReference, IView
logger = logging.getLogger('server.browser')
views = {} # registry for all views: {name: {prefix: viewClass, ...}, ...}
def register(name, *contextTypes):
@ -29,6 +32,7 @@ def getView(request, ob, name):
factory = nameEntry.get('')
if factory is None:
return None
logger.debug('getView: %s %s', ob, request['PATH_INFO'])
return factory(ob, request)