signals.py 1.2 KB

123456789101112131415161718192021222324252627282930313233
  1. import logging
  2. from django.contrib.auth.signals import user_login_failed
  3. from django.db.models.signals import post_save
  4. from django.dispatch import receiver
  5. from netbox.config import get_config
  6. from users.models import User, UserConfig
  7. from utilities.request import get_client_ip
  8. @receiver(user_login_failed)
  9. def log_user_login_failed(sender, credentials, request, **kwargs):
  10. logger = logging.getLogger('netbox.auth.login')
  11. username = credentials.get("username")
  12. if client_ip := get_client_ip(request):
  13. logger.info(f"Failed login attempt for username: {username} from {client_ip}")
  14. else:
  15. logger.warning(
  16. "Client IP address could not be determined for validation. Check that the HTTP server is properly "
  17. "configured to pass the required header(s)."
  18. )
  19. logger.info(f"Failed login attempt for username: {username}")
  20. @receiver(post_save, sender=User)
  21. def create_userconfig(instance, created, raw=False, **kwargs):
  22. """
  23. Automatically create a new UserConfig when a new User is created. Skip this if importing a user from a fixture.
  24. """
  25. if created and not raw:
  26. config = get_config()
  27. UserConfig(user=instance, data=config.DEFAULT_USER_PREFERENCES).save()