- 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>
42 lines
1.3 KiB
Python
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
|