|
|
- import uuid
-
- from django.conf import settings
- from django.contrib.auth import authenticate, login as auth_login
- from django.contrib.auth.models import User
- from django.core.mail import send_mail
- from django.core.urlresolvers import reverse
- from django.http import HttpResponseBadRequest
- from django.shortcuts import redirect, render
-
- from hc.accounts.forms import EmailForm
-
-
- def create(request):
- assert request.method == "POST"
-
- form = EmailForm(request.POST)
- if form.is_valid():
- email = form.cleaned_data["email"]
-
- num_existing = User.objects.filter(email=email).count()
- if num_existing > 0:
- # FIXME be more polite about this
- return HttpResponseBadRequest()
-
- username = str(uuid.uuid4())[:30]
- temp_password = str(uuid.uuid4())
-
- user = User(username=username, email=email)
- user.set_password(temp_password)
- user.save()
-
- user = authenticate(username=username, password=temp_password)
- user.set_unusable_password()
- user.save()
-
- auth_login(request, user)
- return redirect("hc-checks")
-
- # FIXME do something nicer here
- return HttpResponseBadRequest()
-
-
- def login(request):
- if request.method == 'POST':
- form = EmailForm(request.POST)
- if form.is_valid():
- email = form.cleaned_data["email"].lower()
- user = User.objects.get(email=email)
-
- # We don't want to reset passwords of staff users :-)
- if user.is_staff:
- return HttpResponseBadRequest()
-
- token = str(uuid.uuid4())
- user.set_password(token)
- user.save()
-
- login_link = reverse("hc-check-token", args=[user.username, token])
- login_link = settings.SITE_ROOT + login_link
- body = "login link: %s" % login_link
-
- send_mail('Log In', body, '[email protected]', [email],
- fail_silently=False)
-
- return redirect("hc-login-link-sent")
-
- else:
- form = EmailForm()
-
- ctx = {"form": form}
- return render(request, "accounts/login.html", ctx)
-
-
- def login_link_sent(request):
- return render(request, "accounts/login_link_sent.html")
-
-
- def check_token(request, username, token):
- user = authenticate(username=username, password=token)
- if user is not None:
- if user.is_active:
- user.set_unusable_password()
- user.save()
- auth_login(request, user)
- return redirect("hc-checks")
-
- return render(request, "bad_link.html")
|