import requests from django.contrib import auth, messages from django.conf import settings # from django.core.mail import send_mail from django.shortcuts import redirect from django.urls import reverse from .models import Token def send_login_email(request): email = request.POST["email"] token = Token.objects.create(email=email) url = request.build_absolute_uri( reverse("login") + "?token=" + str(token.uid), ) message_body = f"Use this magic link to login to your Dashboard:\n\n{url}" # Send mail via Mailgun HTTP API response = requests.post( f"https://api.mailgun.net/v3/{settings.MAILGUN_DOMAIN}/messages", auth=("api", settings.MAILGUN_API_KEY), data={ "from": "adman@howdy.earthmanrpg.me", "to": email, "subject": "A magic login link to your Dashboard", "text": message_body, }, ) # Log any errors if response.status_code != 200: print(f"Mailgun API error: {response.status_code}: {response.text}") 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("/")