auth: use logger.debug instead of print

This commit is contained in:
Helmut Merz 2025-04-16 16:51:32 +02:00
parent 1918183c59
commit d128c5f138
4 changed files with 26 additions and 24 deletions

View file

@ -1,11 +1,19 @@
# py-scopes/demo/config.py # py-scopes/demo/config.py
from dotenv import load_dotenv from dotenv import load_dotenv
import logging
from os import getenv from os import getenv
from scopes.server.app import zope_app_factory from scopes.server.app import zope_app_factory
load_dotenv() load_dotenv()
log_file = 'log/scopes.log'
log_level = logging.DEBUG
log_format = '%(asctime)s %(levelname)s %(name)s %(message)s'
log_dateformat = '%Y-%m-%dT%H:%M:%S'
logging.basicConfig(filename=log_file, level=log_level,
format=log_format, datefmt=log_dateformat)
server_port = getenv('SERVER_PORT', '8099') server_port = getenv('SERVER_PORT', '8099')
base_url = getenv('BASE_URL', 'https://demo.cy7.de') base_url = getenv('BASE_URL', 'https://demo.cy7.de')

View file

@ -3,22 +3,16 @@
from scopes.server import auth from scopes.server import auth
from scopes.storage import topic from scopes.storage import topic
import logging
import waitress import waitress
from wsgiref.simple_server import make_server from wsgiref.simple_server import make_server
def run(app, config): def run(app, config):
port = int(config.server_port) port = int(config.server_port)
print(f'Serving on port {port}.') print(f'Serving on port {port}.')
waitress.serve(app, port=port) waitress.serve(app, port=port)
def run_wsgiref(app, config): # obsolete
with make_server('', port, app) as httpd:
print(f'Serving on port {port}.')
try:
httpd.serve_forever()
except KeyboardInterrupt:
print('Shutting down.')
if __name__ == '__main__': if __name__ == '__main__':
import config import config

View file

@ -13,9 +13,6 @@ from scopes.server.browser import getView
import scopes.storage.concept # register container classes import scopes.storage.concept # register container classes
from scopes.storage.folder import Root from scopes.storage.folder import Root
logging.basicConfig(filename='log/scopes.log')
logger = logging.getLogger()
@implementer(IUserPreferredCharsets) @implementer(IUserPreferredCharsets)
class Request(BrowserRequest): class Request(BrowserRequest):
@ -28,7 +25,6 @@ def zope_app_factory(config):
def zope_app(environ, start_response): def zope_app(environ, start_response):
storage = storageFactory(config.dbschema) storage = storageFactory(config.dbschema)
appRoot = Root(storage) appRoot = Root(storage)
#request = BrowserRequest(environ['wsgi.input'], environ)
request = Request(environ['wsgi.input'], environ) request = Request(environ['wsgi.input'], environ)
request.setPublication(Publication(appRoot)) request.setPublication(Publication(appRoot))
request = publish(request, True) request = publish(request, True)

View file

@ -3,6 +3,7 @@
from cryptography.fernet import Fernet from cryptography.fernet import Fernet
from email.utils import formatdate from email.utils import formatdate
import json import json
import logging
import requests import requests
from time import time from time import time
from urllib.parse import urlencode from urllib.parse import urlencode
@ -17,6 +18,8 @@ from scopes import util
import config import config
logger = logging.getLogger('server.auth')
@implementer(IAuthentication) @implementer(IAuthentication)
class OidcAuthentication: class OidcAuthentication:
@ -97,7 +100,7 @@ class Authenticator(DummyFolder):
def authenticate(self): def authenticate(self):
''' return principal or None''' ''' return principal or None'''
data = self.loadSession() data = self.loadSession()
print('*** authenticate', data) logger.debug('authenticate: %s', data)
if data and 'userid' in data: if data and 'userid' in data:
id = self.params.get('principal_prefix', '') + data.pop('userid') id = self.params.get('principal_prefix', '') + data.pop('userid')
return Principal(id, data) return Principal(id, data)
@ -105,7 +108,7 @@ class Authenticator(DummyFolder):
def login(self): def login(self):
req = self.request req = self.request
print('*** login', self, req.getTraversalStack(), req['PATH_INFO']) logger.debug('login: %s %s %s', self, req.getTraversalStack(), req['PATH_INFO'])
#print('***', dir(req)) #print('***', dir(req))
state = util.rndstr() state = util.rndstr()
nonce = util.rndstr() nonce = util.rndstr()
@ -127,10 +130,9 @@ class Authenticator(DummyFolder):
def callback(self): def callback(self):
req = self.request req = self.request
print('*** callback', self, req.form) logger.debug('callback: %s %s', self, req.form)
sdata = self.loadSession() sdata = self.loadSession()
code = req.form['code'] code = req.form['code']
print('*** session data', sdata, code)
# !check state: req.form['state'] == sdata['state'] # !check state: req.form['state'] == sdata['state']
args = dict( args = dict(
grant_type='authorization_code', grant_type='authorization_code',
@ -142,13 +144,13 @@ class Authenticator(DummyFolder):
# !set header: 'Content-Type: application/x-www-form-urlencoded' # !set header: 'Content-Type: application/x-www-form-urlencoded'
tokenResponse = requests.post(self.params['token_url'], data=args) tokenResponse = requests.post(self.params['token_url'], data=args)
tdata = tokenResponse.json() tdata = tokenResponse.json()
print('*** token response', tdata) #print('*** token response', tdata)
headers = dict(Authorization='Bearer ' + tdata['access_token']) headers = dict(Authorization='Bearer ' + tdata['access_token'])
userInfo = requests.get(self.params['userinfo_url'], headers=headers) userInfo = requests.get(self.params['userinfo_url'], headers=headers)
userData = userInfo.json() userData = userInfo.json()
print('*** user data', userData) #print('*** user data', userData)
groupInfo = userData.get('urn:zitadel:iam:org:project:roles', {}) groupInfo = userData.get('urn:zitadel:iam:org:project:roles', {})
print('*** group info', groupInfo) #print('*** group info', groupInfo)
groupInfo = userData.get('urn:zitadel:iam:org:project:roles') groupInfo = userData.get('urn:zitadel:iam:org:project:roles')
ndata = dict( ndata = dict(
userid=userData['preferred_username'], userid=userData['preferred_username'],
@ -164,17 +166,19 @@ class Authenticator(DummyFolder):
pass pass
def storeSession(self, data): def storeSession(self, data):
options = dict(path='/')
lifetime = int(self.params['cookie_lifetime']) lifetime = int(self.params['cookie_lifetime'])
options['expires'] = formatdate(time() + lifetime, localtime=False, usegmt=True) options = dict(
path='/',
expires=formatdate(time() + lifetime, localtime=False, usegmt=True),
httponly=True,
)
options['max-age'] = lifetime options['max-age'] = lifetime
domain = self.params['cookie_domain'] domain = self.params['cookie_domain']
if domain: if domain:
options['domain'] = domain options['domain'] = domain
#options['httponly'] = True
name = self.params['cookie_name'] name = self.params['cookie_name']
value = json.dumps(data) value = json.dumps(data)
print('*** storeSession', name, value, options) #print('*** storeSession', name, value, options)
if self.cookieCrypt: if self.cookieCrypt:
value = self.cookieCrypt.encrypt(value.encode('UTF-8')).decode('ASCII') value = self.cookieCrypt.encrypt(value.encode('UTF-8')).decode('ASCII')
self.request.response.setCookie(name, value, **options) self.request.response.setCookie(name, value, **options)
@ -186,7 +190,7 @@ class Authenticator(DummyFolder):
#raise ValueError('Missing authentication cookie') #raise ValueError('Missing authentication cookie')
if self.cookieCrypt: if self.cookieCrypt:
cookie = self.cookieCrypt.decrypt(cookie) cookie = self.cookieCrypt.decrypt(cookie)
print('*** loadSession', self.params['cookie_name'], cookie) #print('*** loadSession', self.params['cookie_name'], cookie)
# !error check: return None - or raise error? # !error check: return None - or raise error?
data = json.loads(cookie) data = json.loads(cookie)
return data return data