staffily / cbh /api /security /utils.py
brestok's picture
init
fa152ae
"""
Security utilities module.
"""
from fastapi import HTTPException
from jinja2 import Environment, FileSystemLoader, select_autoescape
from cbh.api.account.dto import RegistrationType
from cbh.api.account.models import AccountModel
from cbh.core.config import settings
def check_account_to_reset(account_obj: AccountModel, account: AccountModel | None = None) -> None:
"""
Check if the account can be reset.
"""
if not account and account_obj.registrationType != RegistrationType.ORGANIC:
raise HTTPException(
status_code=422,
detail="Please sign in with social providers",
)
elif account and account_obj.registrationType != RegistrationType.ORGANIC:
raise HTTPException(
status_code=422,
detail="Password reset is not available for social login accounts",
)
async def send_password_reset_email(
code: str, account_obj: AccountModel
) -> None:
"""
Send a password reset email.
"""
templates_path = settings.BASE_DIR / "cbh" / "templates" / "emails"
env = Environment(
loader=FileSystemLoader(templates_path),
autoescape=select_autoescape(["html", "xml"]),
)
template = env.get_template("resetPassword.html")
template_content = template.render(
link=f"{settings.Audience}/change-password?code={code}",
audience_link=settings.Audience,
)
await settings.EMAIL_CLIENT.send_email(
account_obj.email,
"You requested a password reset in Arena",
template_content,
)