This is an automated email from the ASF dual-hosted git repository.
yasithdev pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airavata-portals.git
The following commit(s) were added to refs/heads/main by this push:
new acb400793 Fix stale auth-middleware comments (#218)
acb400793 is described below
commit acb400793fd978e3d57e663983314a2bf1c18343
Author: Yasith Jayawardana <[email protected]>
AuthorDate: Sat Jun 13 01:39:55 2026 -0400
Fix stale auth-middleware comments (#218)
The session/bearer auth middlewares are wired in settings.MIDDLEWARE, but
their
comments still said "NOT wired into settings yet" and referenced the
since-removed
token_authentication.KeycloakTokenAuthentication class. Update the section
header,
the keycloak_bearer_middleware docstring, and the non-admin-default comment
to
describe the live state.
---
airavata-django-portal/django_airavata/apps/admin/views.py | 5 -----
airavata-django-portal/django_airavata/apps/api/helpers.py | 5 -----
airavata-django-portal/django_airavata/apps/api/web.py | 12 ------------
.../django_airavata/apps/auth/middleware.py | 12 +++++-------
4 files changed, 5 insertions(+), 29 deletions(-)
diff --git a/airavata-django-portal/django_airavata/apps/admin/views.py
b/airavata-django-portal/django_airavata/apps/admin/views.py
index cf2967782..98d4eee51 100644
--- a/airavata-django-portal/django_airavata/apps/admin/views.py
+++ b/airavata-django-portal/django_airavata/apps/admin/views.py
@@ -24,11 +24,6 @@ def credential_store(request):
return render(request, "admin/admin_base.html")
-@login_required
-def compute_resource(request):
- return render(request, "admin/compute_resource.html")
-
-
@login_required
def group_resource_profile(request):
request.active_nav_item = "group_resource_profile"
diff --git a/airavata-django-portal/django_airavata/apps/api/helpers.py
b/airavata-django-portal/django_airavata/apps/api/helpers.py
index 9324444f6..f1ddd5d22 100644
--- a/airavata-django-portal/django_airavata/apps/api/helpers.py
+++ b/airavata-django-portal/django_airavata/apps/api/helpers.py
@@ -195,8 +195,3 @@ class WorkspacePreferencesHelper:
def _can_write(self, request, entity_id):
return compute_resources.user_can_write(request.airavata, entity_id)
-
- def _can_read(self, request, entity_id):
- return request.airavata.sharing.user_has_access(
- resource_id=entity_id, user_id=request.user.username,
permission_type="READ"
- )
diff --git a/airavata-django-portal/django_airavata/apps/api/web.py
b/airavata-django-portal/django_airavata/apps/api/web.py
index 5f1c5164f..f622ae271 100644
--- a/airavata-django-portal/django_airavata/apps/api/web.py
+++ b/airavata-django-portal/django_airavata/apps/api/web.py
@@ -274,18 +274,6 @@ class NOT:
# Make the operators on BasePermission subclasses return _OperandHolder so that
# ``ClassA | ClassB`` (classes, not instances) composes into a callable class.
-def _cls_or(cls, other):
- return _OperandHolder(OR, cls, other)
-
-
-def _cls_and(cls, other):
- return _OperandHolder(AND, cls, other)
-
-
-def _cls_invert(cls):
- return _OperandHolder(NOT, cls)
-
-
OperationHolderMixin.__or__ = lambda self, other: _OperandHolder(OR, self,
other) # ty: ignore[invalid-assignment] # intentional monkeypatch so
class-level operators return _OperandHolder
OperationHolderMixin.__and__ = lambda self, other: _OperandHolder(AND, self,
other) # ty: ignore[invalid-assignment] # intentional monkeypatch so
class-level operators return _OperandHolder
OperationHolderMixin.__invert__ = lambda self: _OperandHolder(NOT, self) #
ty: ignore[invalid-assignment] # intentional monkeypatch so class-level
operators return _OperandHolder
diff --git a/airavata-django-portal/django_airavata/apps/auth/middleware.py
b/airavata-django-portal/django_airavata/apps/auth/middleware.py
index e04018e9a..81c1973d3 100644
--- a/airavata-django-portal/django_airavata/apps/auth/middleware.py
+++ b/airavata-django-portal/django_airavata/apps/auth/middleware.py
@@ -89,8 +89,8 @@ def gateway_groups_middleware(get_response):
# ---------------------------------------------------------------------------
-# DRF-replacement middleware (Phase B). NOT wired into settings yet — defined
-# here so the cutover can add them to MIDDLEWARE in one step.
+# DRF-replacement auth middleware (session + Keycloak bearer token), wired into
+# settings.MIDDLEWARE.
# ---------------------------------------------------------------------------
@@ -192,15 +192,13 @@ def session_keycloak_user_middleware(get_response):
def keycloak_bearer_middleware(get_response):
"""Authenticate ``Authorization: Bearer <jwt>`` requests against Keycloak.
- Mirrors ``token_authentication.KeycloakTokenAuthentication`` (reusing
- ``_jwks`` / ``KeycloakUser`` / ``AuthzToken``): if ``request.user`` is
already
+ Reuses ``token_authentication``'s ``_jwks`` / ``KeycloakUser`` /
``AuthzToken``:
+ if ``request.user`` is already
authenticated (session) this is a no-op; elif a Bearer token is present it
is
validated and ``request.user`` / ``request.authz_token`` (+ the
``is_gateway_admin`` / ``is_read_only_gateway_admin`` defaults) are set;
else
the request is left Anonymous. An invalid token leaves the user Anonymous
(no
raise — the permission layer returns 401).
-
- NOT wired into settings yet.
"""
import jwt
@@ -240,7 +238,7 @@ def keycloak_bearer_middleware(get_response):
request.user = keycloak_user
request.authz_token = authz_token
# The session-based gateway_groups_middleware sets these; pure-token
auth
- # skips it, so default to non-admin (matches
KeycloakTokenAuthentication).
+ # skips it, so default to non-admin.
request.is_gateway_admin = False
request.is_read_only_gateway_admin = False