generate qrcode on frontend, added manual key copy

This commit is contained in:
Spitap
2023-06-30 16:28:00 +02:00
parent a1e03ac117
commit 399eaf5709
5 changed files with 62 additions and 25 deletions
+4 -12
View File
@@ -1,10 +1,5 @@
"""Core API v2 viewsets."""
import io
import qrcode
import qrcode.image.svg
from django_otp.plugins.otp_static.models import StaticDevice, StaticToken
from drf_spectacular.utils import extend_schema
from rest_framework import filters, permissions, response, viewsets
@@ -102,19 +97,16 @@ class AccountViewSet(core_v1_viewsets.AccountViewSet):
"access": str(refresh.access_token)
})
@action(methods=["get"], detail=False, url_path="tfa/setup/qr_code")
def tfa_setup_get_qr_code(self, request):
@action(methods=["get"], detail=False, url_path="tfa/setup/key")
def tfa_setup_get_key(self, request):
"""Get a QR code to finalize the setup process."""
if request.user.tfa_enabled:
return response.Response(status=404)
device = request.user.totpdevice_set.first()
if not device:
return response.Response(status=404)
factory = qrcode.image.svg.SvgPathImage
img = qrcode.make(device.config_url, image_factory=factory)
buf = io.BytesIO()
img.save(buf)
return response.Response(buf.getvalue(), content_type="application/xml")
return response.Response({"key": device.key, "url":device.config_url},
content_type="application/json")
@extend_schema(
request=core_v1_serializers.CheckTFASetupSerializer