accounts/apps/gooyal_oauth2/throttling.py
Sayyid Hamid Mahdavi 0e9ca49ca0 conflict error
2026-04-11 12:55:06 +03:30

47 lines
1.5 KiB
Python

from rest_framework.throttling import UserRateThrottle
from apps.gooyal_oauth2.models import AccessToken
def get_application(request):
try:
application = request.auth.application
except:
application = None
return application
class TokenLimitThrottle:
def allow_request(self, request, view):
application = get_application(request)
if application:
if hasattr(view, "max_allowed_session"):
max_allowed_session = view.max_allowed_session
else:
max_allowed_session = application.max_allowed_session
if max_allowed_session:
session_count = AccessToken.objects.filter(application=application, user=request.user).count()
if max_allowed_session >= session_count:
return True
else:
from utils.exceptions import Conflict
raise Conflict(code='max_allowed_session_reached')
active_tokens = AccessToken.objects.filter(
application=application, user=request.user
).order_by("created")[:max_allowed_session].values_list("token", flat=True)
if request.auth.token in active_tokens:
return True
else:
from utils.exceptions import Conflict
raise Conflict(code='max_allowed_session_reached')
else:
return True
return True
def wait(self):
pass