43 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """passbook password_expiry_policy Models"""
 | |
| from datetime import timedelta
 | |
| from logging import getLogger
 | |
| 
 | |
| from django.db import models
 | |
| from django.utils.timezone import now
 | |
| from django.utils.translation import gettext as _
 | |
| 
 | |
| from passbook.core.models import Policy, User
 | |
| 
 | |
| LOGGER = getLogger(__name__)
 | |
| 
 | |
| 
 | |
| class PasswordExpiryPolicy(Policy):
 | |
|     """If password change date is more than x days in the past, call set_unusable_password
 | |
|     and show a notice"""
 | |
| 
 | |
|     deny_only = models.BooleanField(default=False)
 | |
|     days = models.IntegerField()
 | |
| 
 | |
|     form = 'passbook.password_expiry_policy.forms.PasswordExpiryPolicyForm'
 | |
| 
 | |
|     def passes(self, user: User) -> bool:
 | |
|         """If password change date is more than x days in the past, call set_unusable_password
 | |
|         and show a notice"""
 | |
|         actual_days = (now() - user.password_change_date).days
 | |
|         days_since_expiry = (now() - (user.password_change_date + timedelta(days=self.days))).days
 | |
|         if actual_days >= self.days:
 | |
|             if not self.deny_only:
 | |
|                 user.set_unusable_password()
 | |
|                 user.save()
 | |
|                 return False, _(('Password expired %(days)d days ago. '
 | |
|                                  'Please update your password.') % {
 | |
|                                      'days': days_since_expiry
 | |
|                                  })
 | |
|             return False, _('Password has expired.')
 | |
|         return True
 | |
| 
 | |
|     class Meta:
 | |
| 
 | |
|         verbose_name = _('Password Expiry Policy')
 | |
|         verbose_name_plural = _('Password Expiry Policies')
 | 
