diff --git a/ivatar/urls.py b/ivatar/urls.py index 98aa6b4..7902d7b 100644 --- a/ivatar/urls.py +++ b/ivatar/urls.py @@ -7,11 +7,14 @@ from django.conf.urls import url from django.conf.urls.static import static from django.views.generic import TemplateView from ivatar import settings +from . views import AvatarImageView urlpatterns = [ path('admin/', admin.site.urls), url('openid/', include('django_openid_auth.urls')), url('accounts/', include('ivatar.ivataraccount.urls')), + url('avatar/(?P\w{64})', AvatarImageView.as_view()), + url('avatar/(?P\w{32})', AvatarImageView.as_view()), url('', TemplateView.as_view(template_name='home.html')), ] diff --git a/ivatar/views.py b/ivatar/views.py new file mode 100644 index 0000000..bc0de55 --- /dev/null +++ b/ivatar/views.py @@ -0,0 +1,34 @@ +''' +views under / +''' +import io +from django.views.generic.base import TemplateView +from django.http import HttpResponse +from . ivataraccount.models import ConfirmedEmail, ConfirmedOpenId + + +class AvatarImageView(TemplateView): + ''' + View to return (binary) image, based for OpenID/Email (both by digest) + ''' + + def get(self, *args, **kwargs): + ''' + Override get from parent class + ''' + model = ConfirmedEmail + if len(kwargs['digest']) == 32: + # Fetch by digest from mail + pass + elif len(kwargs['digest']) == 64: + # Fetch by digest from OpenID + model = ConfirmedOpenId + else: + raise Exception('Digest provided is wrong: %s' % kwargs['digest']) + + email = model.objects.get(digest=kwargs['digest']) + if not email.photo: + raise Exception('No photo assigned to "%s"' % email.email) + + return HttpResponse( + io.BytesIO(email.photo.data), content_type='image/%s' % email.photo.format)