from django.contrib.auth.signals import user_logged_in, user_logged_out, user_login_failed
from django.dispatch import receiver

from .models import ActivityLog


@receiver(user_logged_in)
def _logged_in(sender, request, user, **kwargs):
    ActivityLog.record(ActivityLog.LOGIN, user=user, request=request)


@receiver(user_logged_out)
def _logged_out(sender, request, user, **kwargs):
    if user is not None:
        ActivityLog.record(ActivityLog.LOGOUT, user=user, request=request)


@receiver(user_login_failed)
def _login_failed(sender, credentials, request=None, **kwargs):
    # Only the username is recorded; the submitted password is never read or stored.
    ActivityLog.record(ActivityLog.LOGIN_FAILED, request=request, username=str(credentials.get("username", ""))[:150])
