def __init__(self): ''' Constructor ''' self.storage = UserDataStoreFactory().get_storage() self.signup_validation = UserSignupValidation() self.login_validation = LoginValidation() self.crypt = Crypt()
class LoginValidation(): def __init__(self): factory = UserDataStoreFactory() self.user_datastore = factory.get_storage() self.crypt = Crypt() pass def validate(self, username, password): validation_messages = {} is_valid = False if not self.is_valid_login(username, password): is_valid = False validation_messages[VERIFICATION_MESSAGES_KEYS[5]] = VERIFICATION_MESSAGES[VERIFICATION_MESSAGES_KEYS[5]] else: is_valid = True return validation_messages, is_valid def is_valid_login(self, username, password): is_valid = False user = self.user_datastore.fetchByUsername(username) if user: user_pwd_hashed = user.password if self.crypt.is_password_valid(username, password, user_pwd_hashed): is_valid = True return is_valid
class LoginValidation(): def __init__(self): factory = UserDataStoreFactory() self.user_datastore = factory.get_storage() self.crypt = Crypt() pass def validate(self, username, password): validation_messages = {} is_valid = False if not self.is_valid_login(username, password): is_valid = False validation_messages[VERIFICATION_MESSAGES_KEYS[ 5]] = VERIFICATION_MESSAGES[VERIFICATION_MESSAGES_KEYS[5]] else: is_valid = True return validation_messages, is_valid def is_valid_login(self, username, password): is_valid = False user = self.user_datastore.fetchByUsername(username) if user: user_pwd_hashed = user.password if self.crypt.is_password_valid(username, password, user_pwd_hashed): is_valid = True return is_valid
def __init__(self): ''' Constructor ''' self.storage = UserDataStoreFactory().get_storage() self.signup_validation = UserSignupValidation(); self.login_validation = LoginValidation(); self.crypt = Crypt()
def setUp(self): # Setup mock GAE Data Store self.testbed = testbed.Testbed() self.testbed.activate() self.testbed.init_datastore_v3_stub() self.testbed.init_memcache_stub() self.service = UserService() factory = UserDataStoreFactory() self.storage = factory.get_storage() self.crypt = Crypt()
class UserService(object): ''' User service ''' def __init__(self): ''' Constructor ''' self.storage = UserDataStoreFactory().get_storage() self.signup_validation = UserSignupValidation(); self.login_validation = LoginValidation(); self.crypt = Crypt() def register(self, username,password,verify, email=None): validation_msgs, isValid = self.signup_validation.validate(username=username, password=password, verify=verify, email=email) if not isValid: raise UserRegistrationError(validation_msgs) else: crypt_password = self._crypt_password(username, password) user = UserData(username=username,password=crypt_password,email=email) saved_user = self.storage.save(user) user_id = saved_user.key().id() return self.crypt.make_cookie(user_id) def login(self,username,password, cookie): self.check_cookie(cookie) validation_msgs, login_ok = self.login_validation.validate(username, password) if not login_ok: raise LoginError(validation_msgs) user = self.storage.fetchByUsername(username) user_id = user.user_id return self.crypt.make_cookie(user_id) def logout(self, user_id): user = self.storage.fetch(int(user_id)) user.delete() def welcome(self, cookie): self.check_cookie(cookie) user_id = cookie.split('|')[0] user = self.storage.fetch(int(user_id)) return user def check_cookie(self, cookie): if not cookie: raise InvalidCookieError() else: cookie_ok = self.crypt.is_valid_cookie(cookie) if not cookie_ok: raise InvalidCookieError() def get_user(self, user_id): return self.storage.fetch(int(user_id)) def _crypt_password(self, username, password): return self.crypt.crypt_password(username, password) def _hash_user_id(self, user_id): return self.crypt.crypt_user_id(user_id)
class UserService(object): ''' User service ''' def __init__(self): ''' Constructor ''' self.storage = UserDataStoreFactory().get_storage() self.signup_validation = UserSignupValidation() self.login_validation = LoginValidation() self.crypt = Crypt() def register(self, username, password, verify, email=None): validation_msgs, isValid = self.signup_validation.validate( username=username, password=password, verify=verify, email=email) if not isValid: raise UserRegistrationError(validation_msgs) else: crypt_password = self._crypt_password(username, password) user = UserData(username=username, password=crypt_password, email=email) saved_user = self.storage.save(user) user_id = saved_user.key().id() return self.crypt.make_cookie(user_id) def login(self, username, password, cookie): self.check_cookie(cookie) validation_msgs, login_ok = self.login_validation.validate( username, password) if not login_ok: raise LoginError(validation_msgs) user = self.storage.fetchByUsername(username) user_id = user.user_id return self.crypt.make_cookie(user_id) def logout(self, user_id): user = self.storage.fetch(int(user_id)) user.delete() def welcome(self, cookie): self.check_cookie(cookie) user_id = cookie.split('|')[0] user = self.storage.fetch(int(user_id)) return user def check_cookie(self, cookie): if not cookie: raise InvalidCookieError() else: cookie_ok = self.crypt.is_valid_cookie(cookie) if not cookie_ok: raise InvalidCookieError() def get_user(self, user_id): return self.storage.fetch(int(user_id)) def _crypt_password(self, username, password): return self.crypt.crypt_password(username, password) def _hash_user_id(self, user_id): return self.crypt.crypt_user_id(user_id)
class Test(unittest.TestCase): def setUp(self): # Setup mock GAE Data Store self.testbed = testbed.Testbed() self.testbed.activate() self.testbed.init_datastore_v3_stub() self.testbed.init_memcache_stub() self.service = UserService() factory = UserDataStoreFactory() self.storage = factory.get_storage() self.crypt = Crypt() def tearDown(self): self.testbed.deactivate() def testLogin(self): username = '******' password = '******' hashed_password = self.crypt.crypt_password(username, password) user = UserData(username=username, password=hashed_password) self.storage.save(user) user_id = user.key().id() cookie = self.crypt.make_cookie(user_id) new_cookie = self.service.login(username, password, cookie) self.assertFalse(new_cookie == None) self.assertEquals(user.key().id(), 1) def testLogin_Failed(self): username = '******' password = '******' hashed_password = self.crypt.crypt_password(username, password) user = UserData(username=username, password=hashed_password) self.storage.save(user) user_id = user.key().id() cookie = self.crypt.make_cookie(user_id) try: self.service.login(username + 'foo', password, cookie) self.fail('Should not get here because LoginError should be raised due to bad usernames') except LoginError as error: self.assertEquals(error.validation_messages['login_error'], 'Invalid login') print error def testRegister(self): username = '******' password = '******' verify = password cookie = self.service.register(username=username, password=password, verify=verify) print cookie user = self.storage.fetchByUsername(username) self.assertFalse(cookie == None) user_id = user.key().id() self.assertEquals(user_id, 1) cookie_split = cookie.split('|') self.assertTrue(cookie_split[0] == str(user_id)) self.assertFalse(cookie_split[1] == None) self.assertFalse(cookie_split[1] == '' ) def testRegister_failed(self): username = '******' password = '******' verify = password user = UserData(username=username, password=password) self.storage.save(user) try: self.service.register(username=username, password=password, verify=verify) self.fail('Should not get here because UserRegistrationError should be raised due to the fact that user already exists') except UserRegistrationError as error: self.assertEquals(error.validation_messages['user_exists_error'], 'That user already exists.')
def __init__(self): factory = UserDataStoreFactory() self.user_datastore = factory.get_storage() self.crypt = Crypt() pass