Files
python-tdd/src/apps/lyric/views.py
Disco DeDisco cf40f626e6 Sig select: _card-deck.scss extract, WS cursor fixes, own-role indicators, role icon refresh
- New _card-deck.scss: sig select styles moved out of _room.scss + _game-kit.scss
- sig-select.js: 3 WS bug fixes — thumbs-up deferred to window.load (layout settled
  before getBoundingClientRect), hover cursor cleared for all cards on reservation
  (not just the reserved card), applyHover guards against already-reserved roles
- Own-role indicators: gamer now sees their own role-coloured card outline + thumbs-up
- Reservation glow: replaced blurry role+ninUser double-shadow with crisp 2px outline
- Gravity qualifier: Graven text set to --terUser (matches Leavened/--quiUser pattern)
- Role card SVGs refreshed; starter-role-Blank removed
- FTs + Jasmine specs extended for sig select WS behaviour
- setup_sig_session management command for multi-browser manual testing

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-08 11:52:49 -04:00

42 lines
1.3 KiB
Python

from django.conf import settings
from django.contrib import auth, messages
from django.http import Http404
from django.shortcuts import redirect
from django.urls import reverse
from .models import LoginToken
from .tasks import send_login_email_task
def send_login_email(request):
email = request.POST["email"]
login_token = LoginToken.objects.create(email=email)
url = request.build_absolute_uri(
reverse("login") + "?token=" + str(login_token.uid),
)
send_login_email_task.delay(email, url)
messages.success(
request,
"Check your email!—there you'll find a magic login link. But hurry… it's only temporary!",
)
return redirect("/")
def login(request):
if user := auth.authenticate(uid=request.GET["token"]):
auth.login(request, user)
else:
messages.error(request, "Invalid login link!—please request another")
return redirect("/")
def dev_login(request, session_key):
"""DEBUG-only: set session cookie and redirect. Used by setup_sig_session command."""
if not settings.DEBUG:
raise Http404
next_url = request.GET.get("next", "/")
response = redirect(next_url)
response.set_cookie(settings.SESSION_COOKIE_NAME, session_key, httponly=True)
return response