objects = UserLastLoginManager() def update_last_login(sender, user, **kwargs): """ A signal receiver which updates the last_login date for the user logging in. """ user_last_login = UserLastLogin.objects.get_by_username(user.username) if user_last_login is None: user_last_login = UserLastLogin(username=user.username) user_last_login.last_login = timezone.now() user_last_login.save() user_logged_in.connect(update_last_login) class CommandsLastCheck(models.Model): """Record last check time for Django/custom commands. """ command_type = models.CharField(max_length=100) last_check = models.DateTimeField() ###### Deprecated class InnerPubMsg(models.Model): """ Model used for leave message on inner pub page. """ from_email = models.EmailField()
When an admin visist to the syadmin related pages, seahub would ask him to confirm his/her password to ensure security. The admin only need to provide the password once for several hours. See https://help.github.com/articles/sudo-mode/ for an introduction to github's sudo mode. """ import time from seahub.auth.signals import user_logged_in from seahub.settings import ENABLE_SUDO_MODE _SUDO_EXPIRE_SECONDS = 2 * 3600 # 2 hours _SUDO_MODE_SESSION_KEY = 'sudo_expire_ts' def sudo_mode_check(request): return request.session.get(_SUDO_MODE_SESSION_KEY, 0) > time.time() def update_sudo_mode_ts(request): request.session[_SUDO_MODE_SESSION_KEY] = time.time() + _SUDO_EXPIRE_SECONDS def update_sudo_ts_when_login(**kwargs): request = kwargs['request'] if request.user.is_staff and not getattr(request, 'client_token_login', False): update_sudo_mode_ts(request) if ENABLE_SUDO_MODE: user_logged_in.connect(update_sudo_ts_when_login)
class UserLastLogin(models.Model): username = models.CharField(max_length=255, db_index=True) last_login = models.DateTimeField(default=timezone.now) objects = UserLastLoginManager() def update_last_login(sender, user, **kwargs): """ A signal receiver which updates the last_login date for the user logging in. """ user_last_login = UserLastLogin.objects.get_by_username(user.username) if user_last_login is None: user_last_login = UserLastLogin(username=user.username) user_last_login.last_login = timezone.now() user_last_login.save() user_logged_in.connect(update_last_login) class CommandsLastCheck(models.Model): """Record last check time for Django/custom commands. """ command_type = models.CharField(max_length=100) last_check = models.DateTimeField() ###### Deprecated class InnerPubMsg(models.Model): """ Model used for leave message on inner pub page. """ from_email = models.EmailField() message = models.CharField(max_length=500) timestamp = models.DateTimeField(default=datetime.datetime.now)
if (user is not None) and (device is not None) and (device.user_id == user.id): request.session[DEVICE_ID_SESSION_KEY] = device.persistent_id request.user.otp_device = device def _handle_auth_login(sender, request, user, **kwargs): """ Automatically persists an OTP device that was set by an OTP-aware AuthenticationForm. """ if hasattr(user, 'otp_device'): login(request, user.otp_device) user_logged_in.connect(_handle_auth_login) def match_token(user, token): """ Attempts to verify a :term:`token` on every device attached to the given user until one of them succeeds. When possible, you should prefer to verify tokens against specific devices. :param user: The user supplying the token. :type user: :class:`~seahub.auth.models.User` :param string token: An OTP token to verify. :returns: The device that accepted ``token``, if any. :rtype: :class:`~django_otp.models.Device` or ``None``