69 lines
2.2 KiB
Python
69 lines
2.2 KiB
Python
"""
|
|
Views for Orders API.
|
|
|
|
Authentication is handled by GRAPHENE MIDDLEWARE in settings.py
|
|
"""
|
|
from django.conf import settings
|
|
from django.http import JsonResponse
|
|
from django.views.decorators.csrf import csrf_exempt
|
|
from jwt import InvalidTokenError
|
|
from graphene_django.views import GraphQLView
|
|
|
|
from .graphql_middleware import PublicNoAuthMiddleware, TeamJWTMiddleware, UserJWTMiddleware
|
|
|
|
from .auth import get_bearer_token, scopes_from_payload, validator
|
|
|
|
|
|
@csrf_exempt
|
|
def test_jwt_orders(request):
|
|
"""Test endpoint for Orders API JWT validation"""
|
|
|
|
try:
|
|
token = get_bearer_token(request)
|
|
except InvalidTokenError as exc:
|
|
return JsonResponse({"status": "error", "error": str(exc)}, status=403)
|
|
|
|
response = {"token_length": len(token), "token_preview": f"{token[:32]}...{token[-32:]}"}
|
|
|
|
try:
|
|
payload = validator.decode(token, audience=getattr(settings, "LOGTO_ORDERS_AUDIENCE", None))
|
|
response.update(
|
|
{
|
|
"status": "ok",
|
|
"payload": payload,
|
|
"user_id": payload.get("sub"),
|
|
"team_uuid": payload.get("team_uuid"),
|
|
"audience": payload.get("aud"),
|
|
"scopes": scopes_from_payload(payload),
|
|
}
|
|
)
|
|
return JsonResponse(response, json_dumps_params={'indent': 2})
|
|
except InvalidTokenError as exc:
|
|
response["status"] = "invalid"
|
|
response["error"] = str(exc)
|
|
return JsonResponse(response, status=403, json_dumps_params={'indent': 2})
|
|
|
|
|
|
class PublicGraphQLView(GraphQLView):
|
|
"""Public endpoint - no authentication required."""
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
kwargs['middleware'] = [PublicNoAuthMiddleware()]
|
|
super().__init__(*args, **kwargs)
|
|
|
|
|
|
class UserGraphQLView(GraphQLView):
|
|
"""User endpoint - requires ID Token."""
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
kwargs['middleware'] = [UserJWTMiddleware()]
|
|
super().__init__(*args, **kwargs)
|
|
|
|
|
|
class TeamGraphQLView(GraphQLView):
|
|
"""Team endpoint - requires Team Access Token."""
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
kwargs['middleware'] = [TeamJWTMiddleware()]
|
|
super().__init__(*args, **kwargs)
|