2
from django.views.decorators.http import require_POST
3
from django import http
4
from django.utils.translation import ugettext as _
5
from django.utils import simplejson
6
from django.shortcuts import redirect
7
from django.contrib import auth
9
from scipio import models, forms, signals, mimeparse
11
def _post_redirect(request):
12
return request.POST.get('redirect', request.META.get('HTTP_REFERER', '/'))
15
if request.method == 'POST':
16
form = forms.AuthForm(request.session, request.POST)
18
after_auth_redirect = form.auth_redirect(_post_redirect(request))
19
return redirect(after_auth_redirect)
20
return_url = _post_redirect(request)
22
form = forms.AuthForm(request.session)
23
return_url = request.GET.get('redirect', '/')
24
return render_to_response(request, 'scipio/login.html', {'form': form, 'redirect': return_url})
26
def complete(request, message=_('Authentication failed')):
27
user = auth.authenticate(session=request.session, query=request.GET, return_path=request.path)
29
return http.HttpResponseForbidden(message)
30
auth.login(request, user)
31
data = dict((k[7:], v) for k, v in request.GET.items() if k.startswith('scipio.'))
32
results = signals.authenticated.send(request, profile=user.scipio_profile, **data)
34
if isinstance(r, http.HttpResponse):
39
return response or redirect(request.GET.get('redirect', '/'))
44
return redirect(_post_redirect(request))
46
def openid_whitelist(request):
47
if request.method == 'POST':
49
profile = models.Profile.objects.get(pk=int(request.POST['id']))
50
profile.spamer = False
52
return redirect(_post_redirect(request))
53
except (Profile.DoesNotExist, ValueError, KeyError):
54
return http.HttpResponseBadRequest()
56
openids = (p.openid for p in Profile.objects.filter(spamer=False) if p.openid)
57
MIMETYPES = ['application/xml', 'text/xml', 'application/json', 'text/plain']
58
accept = request.META.get('HTTP_ACCEPT', '')
60
mimetype = mimeparse.best_match(MIMETYPES, accept)
62
mimetype = 'text/plain'
63
if mimetype.endswith('/xml'):
65
import xml.etree.ElementTree as ET
67
import elementtree.ElementTree as ET
68
root = ET.Element('whitelist')
69
for openid in openids:
70
ET.SubElement(root, 'openid').text = openid
71
xml = ET.ElementTree(root)
72
response = http.HttpResponse(mimetype=mimetype)
73
xml.write(response, encoding='utf-8')
75
if mimetype == 'application/json':
76
response = http.HttpResponse(mimetype=mimetype)
77
simplejson.dump(list(openids), response)
79
if mimetype == 'text/plain':
80
return http.HttpResponse((o + '\n' for o in openids), mimetype=mimetype)
81
return http.HttpResponse('Can accept only: %s' % ', '.join(MIMETYPES), status=406)