# Copyright (C) 2018-2025 by BDE ENS Paris-Saclay # SPDX-License-Identifier: GPL-3.0-or-later import base64 import os from io import BytesIO import qrcode import pyotp from django.contrib.auth.models import User from django.http.response import HttpResponse from rest_framework import viewsets, mixins from .serializers import OAuthSerializer class UserInformationView(mixins.RetrieveModelMixin, viewsets.GenericViewSet): """ These fields are give to OAuth authenticators. """ serializer_class = OAuthSerializer def get_queryset(self): return User.objects.filter(pk=self.request.user.pk) def get_object(self): return self.request.user def qrcode(self, request, *args, **kwargs): secret = base64.b32encode(os.getenv("DJANGO_SECRET_KEY").encode()) qr_img = qrcode.make(f"{str(request.user.username)}{pyotp.TOTP(secret, interval=30).now()}") buffer = BytesIO() qr_img.save(buffer, format="PNG") buffer.seek(0) return HttpResponse(buffer, content_type="image/png")