57 lines
1.6 KiB
Python
57 lines
1.6 KiB
Python
![]() |
from django.core.validators import EmailValidator
|
||
|
from django.http import HttpRequest
|
||
|
from django.shortcuts import render
|
||
|
from django.utils.translation import gettext as _
|
||
|
from django.views.decorators.http import require_http_methods
|
||
|
|
||
|
from common.views import render_error
|
||
|
|
||
|
from ..models import Email
|
||
|
from .common import process_verified_account
|
||
|
|
||
|
|
||
|
@require_http_methods(["POST"])
|
||
|
def email_login(request: HttpRequest):
|
||
|
login_email = request.POST.get("email", "")
|
||
|
try:
|
||
|
EmailValidator()(login_email)
|
||
|
except Exception:
|
||
|
return render_error(request, _("Invalid email address"))
|
||
|
Email.send_login_email(request, login_email, "login")
|
||
|
return render(
|
||
|
request,
|
||
|
"users/verify.html",
|
||
|
{
|
||
|
"msg": _("Verification"),
|
||
|
"secondary_msg": _(
|
||
|
"Verification email is being sent, please check your inbox."
|
||
|
),
|
||
|
"action": "login",
|
||
|
},
|
||
|
)
|
||
|
|
||
|
|
||
|
@require_http_methods(["GET", "POST"])
|
||
|
def email_verify(request: HttpRequest):
|
||
|
if request.method == "GET":
|
||
|
return render(request, "users/verify.html")
|
||
|
code = request.POST.get("code", "").strip()
|
||
|
if not code:
|
||
|
return render(
|
||
|
request,
|
||
|
"users/verify.html",
|
||
|
{
|
||
|
"error": _("Invalid verification code"),
|
||
|
},
|
||
|
)
|
||
|
account = Email.authenticate(request, code)
|
||
|
if not account:
|
||
|
return render(
|
||
|
request,
|
||
|
"users/verify.html",
|
||
|
{
|
||
|
"error": _("Invalid verification code"),
|
||
|
},
|
||
|
)
|
||
|
return process_verified_account(request, account)
|