Ignore:
Timestamp:
14 Oct 2012, 21:02:31 (12 years ago)
Author:
Henrik Bettermann
Message:

Dedicated officers should be able to login as student with a temporary password set by the system. This is the first part of its implementation.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • main/waeup.kofa/trunk/src/waeup/kofa/students/tests/test_authentication.py

    r8983 r9334  
    1717##
    1818import unittest
     19from datetime import datetime, timedelta
    1920from zope.authentication.interfaces import IAuthentication
    2021from zope.component import provideUtility, queryUtility, getGlobalSiteManager
     
    6667    phone = None
    6768    suspended = False
     69    temp_password_minutes = 10
     70
     71    def setTempPassword(self, user, password):
     72        passwordmanager = queryUtility(IPasswordManager, 'SSHA')
     73        self.temp_password = {}
     74        self.temp_password[
     75            'password'] = passwordmanager.encodePassword(password)
     76        self.temp_password['user'] = user
     77        self.temp_password['timestamp'] = datetime.utcnow()
     78
     79    def getTempPassword(self):
     80        temp_password_dict = getattr(self, 'temp_password', None)
     81        if temp_password_dict is not None:
     82            delta = timedelta(minutes=self.temp_password_minutes)
     83            now = datetime.utcnow()
     84            if now < temp_password_dict.get('timestamp') + delta:
     85                return temp_password_dict.get('password')
     86            else:
     87                # Unset temporary password if expired
     88                self.temp_password = None
     89        return None
    6890
    6991
     
    138160        return
    139161
     162    def test_check_temp_password(self):
     163        # make sure that, if a temp password is set,
     164        # this password is used for authentication
     165        self.account.setPassword('secret')
     166        self.fake_stud.setTempPassword(user='beate', password='temp_secret')
     167        result1 = self.account.checkPassword('secret')
     168        result2 = self.account.checkPassword(None)
     169        result3 = self.account.checkPassword('nonsense')
     170        result4 = self.account.checkPassword('temp_secret')
     171        self.assertEqual(result1, False)
     172        self.assertEqual(result2, False)
     173        self.assertEqual(result3, False)
     174        self.assertEqual(result4, True)
     175        # if the temp password is expired, the original password
     176        # is used again
     177        delta = timedelta(minutes=11)
     178        self.fake_stud.temp_password['timestamp'] = datetime.utcnow() - delta
     179        result5 = self.account.checkPassword('temp_secret')
     180        result6 = self.account.checkPassword('secret')
     181        self.assertEqual(result5, False)
     182        self.assertEqual(result6, True)
     183        return
     184
    140185    def test_check_unset_password(self):
    141186        # empty and unset passwords do not match anything
Note: See TracChangeset for help on using the changeset viewer.