38 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""Tokens API Viewset"""
 | 
						|
from django.http.response import Http404
 | 
						|
from rest_framework.decorators import action
 | 
						|
from rest_framework.request import Request
 | 
						|
from rest_framework.response import Response
 | 
						|
from rest_framework.serializers import ModelSerializer
 | 
						|
from rest_framework.viewsets import ModelViewSet
 | 
						|
 | 
						|
from passbook.audit.models import Event, EventAction
 | 
						|
from passbook.core.models import Token
 | 
						|
 | 
						|
 | 
						|
class TokenSerializer(ModelSerializer):
 | 
						|
    """Token Serializer"""
 | 
						|
 | 
						|
    class Meta:
 | 
						|
 | 
						|
        model = Token
 | 
						|
        fields = ["pk", "identifier", "intent", "user", "description"]
 | 
						|
 | 
						|
 | 
						|
class TokenViewSet(ModelViewSet):
 | 
						|
    """Token Viewset"""
 | 
						|
 | 
						|
    lookup_field = "identifier"
 | 
						|
    queryset = Token.filter_not_expired()
 | 
						|
    serializer_class = TokenSerializer
 | 
						|
 | 
						|
    @action(detail=True)
 | 
						|
    def view_key(self, request: Request, identifier: str) -> Response:
 | 
						|
        """Return token key and log access"""
 | 
						|
        tokens = Token.filter_not_expired(identifier=identifier)
 | 
						|
        if not tokens.exists():
 | 
						|
            raise Http404
 | 
						|
        token = tokens.first()
 | 
						|
        Event.new(EventAction.TOKEN_VIEW, token=token).from_http(request)
 | 
						|
        return Response({"key": token.key})
 |