aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichał Górny <mgorny@gentoo.org>2013-08-08 23:52:54 +0200
committerMichał Górny <mgorny@gentoo.org>2013-08-09 22:40:22 +0200
commit93ba426acfa65a4e50094a89947b3418072566a9 (patch)
treebbe4722066a87b67e06c4603bf0074fd284ec108 /okupy/accounts
parentIntroduce 'otp-setup', to set TOTP up. (diff)
downloadidentity.gentoo.org-93ba426acfa65a4e50094a89947b3418072566a9.tar.gz
identity.gentoo.org-93ba426acfa65a4e50094a89947b3418072566a9.tar.bz2
identity.gentoo.org-93ba426acfa65a4e50094a89947b3418072566a9.zip
Support displaying QRCode for TOTP URI.
Diffstat (limited to 'okupy/accounts')
-rw-r--r--okupy/accounts/urls.py1
-rw-r--r--okupy/accounts/views.py17
2 files changed, 17 insertions, 1 deletions
diff --git a/okupy/accounts/urls.py b/okupy/accounts/urls.py
index 1823c41..91800b0 100644
--- a/okupy/accounts/urls.py
+++ b/okupy/accounts/urls.py
@@ -14,6 +14,7 @@ accounts_urlpatterns = patterns('',
url(r'^signup/$', v.signup),
url(r'^activate/(?P<token>[a-zA-Z0-9]+)/$', v.activate),
url(r'^otp-setup/$', v.otp_setup),
+ url(r'^otp-qrcode.png$', v.otp_qrcode),
url(r'^endpoint/$', v.openid_endpoint),
url(r'^id/(.*)/$', v.user_page),
url(r'^auth-site/$', v.openid_auth_site),
diff --git a/okupy/accounts/views.py b/okupy/accounts/views.py
index 9b21a2d..4baac00 100644
--- a/okupy/accounts/views.py
+++ b/okupy/accounts/views.py
@@ -8,7 +8,7 @@ from django.core.mail import send_mail
from django.core.urlresolvers import reverse
from django.db import IntegrityError
from django.forms.models import model_to_dict
-from django.http import HttpResponse
+from django.http import HttpResponse, HttpResponseForbidden
from django.views.generic.base import View
from django.shortcuts import redirect, render
from django.utils.html import format_html
@@ -38,9 +38,11 @@ from ..otp.totp.models import TOTPDevice
import openid.yadis.discover
import openid.fetchers
import django_otp
+import io
import ldap
import ldap.modlist as modlist
import logging
+import qrcode
logger = logging.getLogger('okupy')
logger_mail = logging.getLogger('mail_okupy')
@@ -410,6 +412,19 @@ def otp_setup(request):
})
+def otp_qrcode(request):
+ dev = TOTPDevice()
+ secret = request.session.get('otp_secret')
+ if not secret:
+ return HttpResponseForbidden()
+
+ qr = qrcode.make(dev.get_uri(secret), box_size=5)
+ f = io.BytesIO()
+ qr.save(f, 'PNG')
+
+ return HttpResponse(f.getvalue(), content_type='image/png')
+
+
# OpenID-specific