summaryrefslogtreecommitdiffstats
path: root/api/middleware.py
blob: 84eddca2c5638a3084356b648b1ef240fb637ef9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
from django.http import HttpResponse

from api.models import Token


class ApiTokenMiddleware:
    """
    Adds request.user and request.identity if an API token appears.
    Also nukes request.session so it can't be used accidentally.
    """

    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        auth_header = request.headers.get("authorization", None)
        if auth_header and auth_header.startswith("Bearer "):
            token_value = auth_header[7:]
            try:
                token = Token.objects.get(token=token_value)
            except Token.DoesNotExist:
                return HttpResponse("Invalid Bearer token", status=400)
            request.user = token.user
            request.identity = token.identity
            request.session = None
        response = self.get_response(request)
        return response