diff --git a/gn_auth/auth/authentication/oauth2/grants/jwt_bearer_grant.py b/gn_auth/auth/authentication/oauth2/grants/jwt_bearer_grant.py
index c802091..63f979c 100644
--- a/gn_auth/auth/authentication/oauth2/grants/jwt_bearer_grant.py
+++ b/gn_auth/auth/authentication/oauth2/grants/jwt_bearer_grant.py
@@ -1,9 +1,8 @@
"""JWT as Authorisation Grant"""
import uuid
import time
-
+import logging
from typing import Optional
-from flask import current_app as app
from authlib.jose import jwt
from authlib.common.encoding import to_native
@@ -12,12 +11,17 @@ from authlib.oauth2.rfc7523.jwt_bearer import JWTBearerGrant as _JWTBearerGrant
from authlib.oauth2.rfc7523.token import (
JWTBearerTokenGenerator as _JWTBearerTokenGenerator)
-from gn_auth.debug import __pk__
+from gn_libs.debug import make_peeker
+
from gn_auth.auth.db.sqlite3 import with_db_connection
from gn_auth.auth.authentication.users import User, user_by_id
from gn_auth.auth.authentication.oauth2.models.oauth2client import OAuth2Client
+logger = logging.getLogger(__name__)
+__pk__ = make_peeker(logger)
+
+
class JWTBearerTokenGenerator(_JWTBearerTokenGenerator):
"""
A JSON Web Token formatted bearer token generator for jwt-bearer grant type.
@@ -149,6 +153,6 @@ class JWTBearerGrant(_JWTBearerGrant):
include_refresh_token=self.request.client.check_grant_type(
"refresh_token")
)
- app.logger.debug('Issue token %r to %r', token, self.request.client)
+ logger.debug('Issue token %r to %r', token, self.request.client)
self.save_token(token)
return 200, token, self.TOKEN_RESPONSE_HEADER
diff --git a/gn_auth/auth/authentication/oauth2/models/oauth2client.py b/gn_auth/auth/authentication/oauth2/models/oauth2client.py
index fe12ff9..dfe5d79 100644
--- a/gn_auth/auth/authentication/oauth2/models/oauth2client.py
+++ b/gn_auth/auth/authentication/oauth2/models/oauth2client.py
@@ -1,5 +1,6 @@
"""OAuth2 Client model."""
import json
+import logging
import datetime
from uuid import UUID
from urllib.parse import urlparse
@@ -8,13 +9,12 @@ from dataclasses import asdict, dataclass
from typing import Any, Sequence, Optional
import requests
-from flask import current_app as app
from requests.exceptions import JSONDecodeError
from authlib.jose import KeySet, JsonWebKey
from authlib.oauth2.rfc6749 import ClientMixin
from pymonad.maybe import Just, Maybe, Nothing
+from gn_libs.debug import make_peeker
-from gn_auth.debug import __pk__
from gn_auth.auth.db import sqlite3 as db
from gn_auth.auth.errors import NotFoundError
from gn_auth.auth.authentication.users import (User,
@@ -23,6 +23,10 @@ from gn_auth.auth.authentication.users import (User,
same_password)
+logger = logging.getLogger(__name__)
+__pk__ = make_peeker(logger)
+
+
@dataclass(frozen=True)
class OAuth2Client(ClientMixin):
"""
@@ -66,7 +70,7 @@ class OAuth2Client(ClientMixin):
jwksuri = self.client_metadata.get("public-jwks-uri")
__pk__(f"PUBLIC JWKs link for client {self.client_id}", jwksuri)
if not bool(jwksuri):
- app.logger.debug("No Public JWKs URI set for client!")
+ logger.debug("No Public JWKs URI set for client!")
return KeySet([])
try:
## IMPORTANT: This can cause a deadlock if the client is working in
@@ -78,13 +82,12 @@ class OAuth2Client(ClientMixin):
timeout=300,
allow_redirects=True).json()["jwks"]])
except requests.ConnectionError as _connerr:
- app.logger.debug(
+ logger.debug(
"Could not connect to provided URI: %s", jwksuri, exc_info=True)
except JSONDecodeError as _jsonerr:
- app.logger.debug(
- "Could not convert response to JSON", exc_info=True)
+ logger.debug("Could not convert response to JSON", exc_info=True)
except Exception as _exc:# pylint: disable=[broad-except]
- app.logger.debug(
+ logger.debug(
"Error retrieving the JWKs for the client.", exc_info=True)
return KeySet([])
diff --git a/gn_auth/auth/authentication/oauth2/resource_server.py b/gn_auth/auth/authentication/oauth2/resource_server.py
index 8ecf923..edab02c 100644
--- a/gn_auth/auth/authentication/oauth2/resource_server.py
+++ b/gn_auth/auth/authentication/oauth2/resource_server.py
@@ -1,4 +1,5 @@
"""Protect the resources endpoints"""
+import logging
from datetime import datetime, timezone, timedelta
from flask import current_app as app
@@ -16,6 +17,9 @@ from gn_auth.auth.authentication.oauth2.models.jwt_bearer_token import (
from gn_auth.auth.authentication.oauth2.models.oauth2token import (
token_by_access_token)
+logger = logging.getLogger(__name__)
+
+
class BearerTokenValidator(_BearerTokenValidator):
"""Extends `authlib.oauth2.rfc6750.BearerTokenValidator`"""
def authenticate_token(self, token_string: str):
@@ -66,7 +70,7 @@ class JWTBearerTokenValidator(_JWTBearerTokenValidator):
claims.validate()
return claims
except JoseError as error:
- app.logger.debug('Authenticate token failed. %r', error)
+ logger.debug('Authenticate token failed. %r', error)
return None
diff --git a/gn_auth/auth/authentication/oauth2/views.py b/gn_auth/auth/authentication/oauth2/views.py
index 6c3de51..8cc123f 100644
--- a/gn_auth/auth/authentication/oauth2/views.py
+++ b/gn_auth/auth/authentication/oauth2/views.py
@@ -1,5 +1,6 @@
"""Endpoints for the oauth2 server"""
import uuid
+import logging
import traceback
from urllib.parse import urlparse
@@ -27,8 +28,10 @@ from .endpoints.revocation import RevocationEndpoint
from .endpoints.introspection import IntrospectionEndpoint
+logger = logging.getLogger(__name__)
auth = Blueprint("auth", __name__)
+
@auth.route("/delete-client/<uuid:client_id>", methods=["GET", "POST"])
def delete_client(client_id: uuid.UUID):
"""Delete an OAuth2 client."""
@@ -91,11 +94,11 @@ def authorise():
flash(email_passwd_msg, "alert alert-danger")
return redirect_response # type: ignore[return-value]
except EmailNotValidError as _enve:
- app.logger.debug(traceback.format_exc())
+ logger.debug(traceback.format_exc())
flash(email_passwd_msg, "alert alert-danger")
return redirect_response # type: ignore[return-value]
except NotFoundError as _nfe:
- app.logger.debug(traceback.format_exc())
+ logger.debug(traceback.format_exc())
flash(email_passwd_msg, "alert alert-danger")
return redirect_response # type: ignore[return-value]
diff --git a/gn_auth/auth/authorisation/users/collections/views.py b/gn_auth/auth/authorisation/users/collections/views.py
index f619c3d..5ed2c23 100644
--- a/gn_auth/auth/authorisation/users/collections/views.py
+++ b/gn_auth/auth/authorisation/users/collections/views.py
@@ -1,4 +1,5 @@
"""Views regarding user collections."""
+import logging
from uuid import UUID
from redis import Redis
@@ -25,8 +26,10 @@ from .models import (
REDIS_COLLECTIONS_KEY,
delete_collections as _delete_collections)
+logger = logging.getLogger(__name__)
collections = Blueprint("collections", __name__)
+
@collections.route("/list")
@require_oauth("profile user")
def list_user_collections() -> Response:
@@ -44,7 +47,7 @@ def list_anonymous_collections(anon_id: UUID) -> Response:
def __list__(conn: db.DbConnection) -> tuple:
try:
_user = user_by_id(conn, anon_id)
- current_app.logger.warning(
+ logger.warning(
"Fetch collections for authenticated user using the "
"`list_user_collections()` endpoint.")
return tuple()
diff --git a/gn_auth/debug.py b/gn_auth/debug.py
deleted file mode 100644
index 6b7173b..0000000
--- a/gn_auth/debug.py
+++ /dev/null
@@ -1,22 +0,0 @@
-"""Debug utilities"""
-import logging
-from flask import current_app
-
-__this_module_name__ = __name__
-
-
-# pylint: disable=invalid-name
-def getLogger(name: str):
- """Return a logger"""
- return (
- logging.getLogger(name)
- if not bool(current_app)
- else current_app.logger)
-
-def __pk__(*args):
- """Format log entry"""
- value = args[-1]
- title_vals = " => ".join(args[0:-1])
- logger = getLogger(__this_module_name__)
- logger.debug("%s: %s", title_vals, value)
- return value
|