add auth status api endpoint

This commit is contained in:
Laura Klünder 2023-12-02 01:31:58 +01:00
parent d1dc2ed5e0
commit 7c12b649e3
2 changed files with 27 additions and 1 deletions

View file

@ -2,11 +2,37 @@ from django.conf import settings
from ninja import Router as APIRouter
from ninja import Schema
from c3nav.api.newauth import auth_responses, APIAuthMethod
from c3nav.api.utils import NonEmptyStr
from c3nav.control.models import UserPermissions
auth_api_router = APIRouter(tags=["auth"])
class AuthStatusSchema(Schema):
"""
Current auth state and permissions
"""
method: APIAuthMethod
readonly: bool
scopes: list[str]
@auth_api_router.get('/status/', summary="Get current auth status",
response={200: AuthStatusSchema, **auth_responses})
def get_status(request):
permissions = UserPermissions.get_for_user(request.user)
scopes = [
*(p for p in ("editor_access", "grant_permissions", "mesh_control") if getattr(permissions, p)),
*([] if request.auth.readonly else ["write"]),
]
return AuthStatusSchema(
method=request.auth.method,
readonly=request.auth.readonly,
scopes=scopes,
)
class APITokenSchema(Schema):
"""
An API token to be used with Bearer authentication

View file

@ -55,7 +55,7 @@ class APITokenAuth(HttpBearer):
self.SessionStore = engine.SessionStore
def _authenticate(self, request, token) -> NewAPIAuth:
request.user = AnonymousUser
request.user = AnonymousUser()
request.user_permissions = SimpleLazyObject(lambda: UserPermissionsMiddleware.get_user_permissions(request))
request.user_space_accesses = lazy(UserPermissionsMiddleware.get_user_space_accesses, dict)(request)