add auth status api endpoint
This commit is contained in:
parent
d1dc2ed5e0
commit
7c12b649e3
2 changed files with 27 additions and 1 deletions
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue