1
0
Fork 0

Add throttling on Telemetry API endpoint

Signed-off-by: Alfredos-Panagiotis Damkalis <fredy@fredy.gr>
spacecruft
Alfredos-Panagiotis Damkalis 2022-06-04 17:07:16 +03:00
parent 54327a8763
commit 9583d20c49
3 changed files with 32 additions and 0 deletions

View File

@ -0,0 +1,22 @@
"""SatNOGS DB API throttling classes, django rest framework"""
from rest_framework import throttling
class GetTelemetryAnononymousRateThrottle(throttling.AnonRateThrottle):
"""Anonymous GET Throttling"""
scope = 'get_telemetry_anon'
def allow_request(self, request, view):
if request.method == "POST":
return True
return super().allow_request(request, view)
class GetTelemetryUserRateThrottle(throttling.UserRateThrottle):
"""User GET Throttling"""
scope = 'get_telemetry_user'
def allow_request(self, request, view):
if request.method == "POST":
return True
return super().allow_request(request, view)

View File

@ -17,6 +17,7 @@ from db.api import filters, pagination, serializers
from db.api.parsers import JSONLDParser
from db.api.perms import IsAuthenticatedOrOptions, SafeMethodsWithPermission
from db.api.renderers import BrowserableJSONLDRenderer, JSONLDRenderer
from db.api.throttling import GetTelemetryAnononymousRateThrottle, GetTelemetryUserRateThrottle
from db.base.helpers import gridsquare
from db.base.models import SATELLITE_STATUS, SERVICE_TYPE, TRANSMITTER_STATUS, TRANSMITTER_TYPE, \
Artifact, DemodData, LatestTleSet, Mode, Satellite, SatelliteEntry, SatelliteIdentifier, \
@ -520,6 +521,7 @@ class TelemetryViewSet( # pylint: disable=R0901,R0912,R0915
serializer_class = serializers.TelemetrySerializer
filterset_class = filters.TelemetryViewFilter
permission_classes = [SafeMethodsWithPermission]
throttle_classes = [GetTelemetryAnononymousRateThrottle, GetTelemetryUserRateThrottle]
parser_classes = (FormParser, MultiPartParser, FileUploadParser)
pagination_class = pagination.LinkedHeaderPageNumberPagination

View File

@ -286,6 +286,14 @@ REST_FRAMEWORK = {
],
'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend', ),
'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema',
'DEFAULT_THROTTLE_RATES': {
'get_telemetry_anon': config(
'DEFAULT_THROTTLE_RATE_GET_TELEMETRY_ANON', default='6/minute'
),
'get_telemetry_user': config(
'DEFAULT_THROTTLE_RATE_GET_TELEMETRY_USER', default='6/minute'
),
}
}
SPECTACULAR_SETTINGS = {