diff --git a/demo/config.py b/demo/config.py index b910662..da103fe 100644 --- a/demo/config.py +++ b/demo/config.py @@ -18,3 +18,7 @@ dbuser = getenv('DBUSER', 'demo') dbpassword = getenv('DBPASSWORD', 'secret') dbschema = getenv('DBSCHEMA', 'demo') +# authentication settings +oidc_params = dict( + clientid=getenv('OIDC_CLIENTID', '311613119816392525') +) diff --git a/demo/demo_server.py b/demo/demo_server.py index 2a81076..e6513d2 100644 --- a/demo/demo_server.py +++ b/demo/demo_server.py @@ -17,7 +17,6 @@ def run(app, config): if __name__ == '__main__': import config - #run(config.app, config) app = config.app_factory(config) run(app, config) # see zope.app.wsgi.getWSGIApplication diff --git a/scopes/server/auth.py b/scopes/server/auth.py index 68e7917..24ee1a9 100644 --- a/scopes/server/auth.py +++ b/scopes/server/auth.py @@ -7,6 +7,8 @@ from zope.publisher.interfaces import Unauthorized from scopes.server.browser import DefaultView, register from scopes.storage.folder import DummyFolder, Root +import config + def authenticate(request): #print('*** authenticate') @@ -21,6 +23,7 @@ class OidcAuthentication: def authenticate(self, request): prc = authenticate(request) + # prc = Authenticator().authenticate(request) if prc is None and self.baseAuth is not None: prc = self.baseAuth.authenticate(request) return prc @@ -38,21 +41,40 @@ class OidcAuthentication: return self.baseAuth.unauthorized(id, request) def logout(self, request): - print('*** JwtAuthentication: logout') + print('*** OidcAuthentication: logout') JwtAuthentication = OidcAuthentication # old name - still used? class Authenticator(DummyFolder): + prefix = 'auth' + def authenticate(request): + return None + + def login(self, request): + params = config.oidc_params + print('*** login', self, request.getTraversalStack(), request['PATH_INFO']) + print('***', dir(request)) + @register('auth', Root) def authView(context, request): - print('*** auth', context, request['PATH_INFO'], request.getTraversalStack()) + print('*** auth', context, request['PATH_INFO']) return Authenticator() @register('login', Authenticator) def login(context, request): - print('*** login', context, request['PATH_INFO'], request.getTraversalStack()) + context.login(request) + return DefaultView(context, request) + +@register('callback', Authenticator) +def login(context, request): + print('*** callback', context, request['PATH_INFO'], request.getTraversalStack()) + return DefaultView(context, request) + +@register('logout', Authenticator) +def login(context, request): + print('*** logout', context, request['PATH_INFO'], request.getTraversalStack()) return DefaultView(context, request) diff --git a/scopes/storage/folder.py b/scopes/storage/folder.py index 77bd563..e8dd61a 100644 --- a/scopes/storage/folder.py +++ b/scopes/storage/folder.py @@ -15,8 +15,8 @@ class DummyFolder(dict): return self def __repr__(self): - return '%s: %s' % (self.__class__.__name__, - super(DummyFolder, self).__repr__()) + return '<%s: %s>' % (self.__class__.__name__, + super(DummyFolder, self).__repr__()) @implementer(IContainer, IReference) diff --git a/scopes/storage/tracking.py b/scopes/storage/tracking.py index d16acc6..9ab72b8 100644 --- a/scopes/storage/tracking.py +++ b/scopes/storage/tracking.py @@ -67,7 +67,7 @@ class Track(object): return str(self.trackId) def __repr__(self): - return '%s: %s' % (self.__class__.__name__, self.asDict()) + return '<%s: %s>' % (self.__class__.__name__, self.asDict()) def asDict(self): return dict(uid=self.uid, head=self.head, data=self.data,