auth: use logger.debug instead of print
This commit is contained in:
		
							parent
							
								
									1918183c59
								
							
						
					
					
						commit
						d128c5f138
					
				
					 4 changed files with 26 additions and 24 deletions
				
			
		|  | @ -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') | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -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 | ||||||
|  |  | ||||||
|  | @ -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) | ||||||
|  |  | ||||||
|  | @ -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 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue