diff options
author | Michał Górny <mgorny@gentoo.org> | 2013-08-08 23:52:54 +0200 |
---|---|---|
committer | Michał Górny <mgorny@gentoo.org> | 2013-08-09 22:40:22 +0200 |
commit | 93ba426acfa65a4e50094a89947b3418072566a9 (patch) | |
tree | bbe4722066a87b67e06c4603bf0074fd284ec108 /okupy/accounts | |
parent | Introduce 'otp-setup', to set TOTP up. (diff) | |
download | identity.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.py | 1 | ||||
-rw-r--r-- | okupy/accounts/views.py | 17 |
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 |