Source code for oioioi.base.api

from django.conf import settings
from django.template.response import TemplateResponse
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
from rest_framework.authtoken.models import Token
from rest_framework.decorators import api_view
from rest_framework.response import Response

from oioioi.base.menu import account_menu_registry
from oioioi.base.permissions import enforce_condition, not_anonymous


@api_view()
[docs]def ping(request): """ Test endpoint for unauthorized user. """ return Response("pong")
@api_view() @enforce_condition(not_anonymous, login_redirect=False)
[docs]def auth_ping(request): """ Test endpoint for authorized user. """ return Response("pong " + str(request.user))
@enforce_condition(not_anonymous, login_redirect=False)
[docs]def api_token(request, regenerated=False): if request.method != 'POST': return TemplateResponse(request, 'api-key.html', {}) token, created = Token.objects.get_or_create(user=request.user) return TemplateResponse( request, 'api-key.html', {"token": token, "regenerated": regenerated} )
[docs]def regenerate_token(request): if request.method != 'POST': return api_token(request) Token.objects.filter(user=request.user).delete() return api_token(request, regenerated=True)
[docs]def api_token_url(request): return reverse('api_token')
if settings.USE_API: account_menu_registry.register( 'api_token', _("Your API token"), api_token_url, order=160 )