Add throttling on Telemetry API endpoint
Signed-off-by: Alfredos-Panagiotis Damkalis <fredy@fredy.gr>spacecruft
parent
54327a8763
commit
9583d20c49
|
@ -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)
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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 = {
|
||||
|
|
Loading…
Reference in New Issue