migrated to modern-rest
This commit is contained in:
parent
d9a92569f0
commit
8e44c4501a
11 changed files with 1014 additions and 572 deletions
|
|
@ -18,17 +18,19 @@ class TelemetryConsumer(AsyncWebsocketConsumer):
|
|||
|
||||
async def receive(self, text_data):
|
||||
|
||||
from .serializers import TelemetryPacketSerializer
|
||||
from pydantic import ValidationError
|
||||
from .dtos import TelemetryIn
|
||||
|
||||
if not self.write_enabled:
|
||||
await self.send(text_data=json.dumps({"error": "Read-only mode"}))
|
||||
return
|
||||
|
||||
data = json.loads(text_data)
|
||||
serializer = TelemetryPacketSerializer(data=data)
|
||||
|
||||
if not serializer.is_valid():
|
||||
await self.send(text_data=json.dumps({"error": serializer.errors}))
|
||||
try:
|
||||
TelemetryIn(**data)
|
||||
except ValidationError as exc:
|
||||
await self.send(text_data=json.dumps({"error": json.loads(exc.json())}))
|
||||
return
|
||||
|
||||
saved_data = await self.save_telemetry(data)
|
||||
|
|
@ -51,15 +53,6 @@ class TelemetryConsumer(AsyncWebsocketConsumer):
|
|||
|
||||
async def telemetry_message(self, event):
|
||||
await self.send(text_data=json.dumps(event["data"]))
|
||||
@database_sync_to_async
|
||||
def get_user_from_token(self, token_key, Token):
|
||||
from rest_framework.authtoken.models import Token
|
||||
User = get_user_model()
|
||||
try:
|
||||
token = Token.objects.select_related("user").get(key=token_key)
|
||||
return token.user
|
||||
except Token.DoesNotExist:
|
||||
return None
|
||||
|
||||
@database_sync_to_async
|
||||
def save_telemetry(self, data):
|
||||
|
|
@ -99,12 +92,20 @@ class StationTelemetryConsumer(TelemetryConsumer):
|
|||
write_enabled = True
|
||||
|
||||
async def connect(self):
|
||||
from rest_framework.authtoken.models import Token
|
||||
from django.conf import settings
|
||||
from dmr.security.jwt.token import JWToken
|
||||
|
||||
token_key = self.scope["query_string"].decode().split("token=")[-1]
|
||||
try:
|
||||
token = await database_sync_to_async(Token.objects.select_related("user").get)(key=token_key)
|
||||
self.scope["user"] = token.user
|
||||
except Token.DoesNotExist:
|
||||
decoded = JWToken.decode(
|
||||
encoded_token=token_key,
|
||||
secret=settings.SECRET_KEY,
|
||||
algorithm='HS256',
|
||||
)
|
||||
self.scope["user"] = await database_sync_to_async(
|
||||
get_user_model().objects.get
|
||||
)(pk=decoded.sub)
|
||||
except Exception:
|
||||
await self.close()
|
||||
return
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue