def testLoginExisting(self): first = UserData.onLogin("uid", "user name", "*****@*****.**", "test") self.assertSerialEquals(first, UserData.read(first.getId())) first.addRole("role1") first.save() self.assertSerialEquals(first, UserData.read(first.getId())) self.assertEquals(['role1'], first.getRoles()) self.assertEquals(["*****@*****.**"], first.getAllEmails()) import time time.sleep(1) last = UserData.onLogin("uid", "user name", "*****@*****.**", "test") self.assertEquals(first.getUserID(), last.getUserID()) self.assertEquals(first.getUserName(), last.getUserName()) self.assertEquals(first.getEmail(), last.getEmail()) self.assertEquals(first.getRoles(), last.getRoles()) self.assertEquals(["*****@*****.**"], last.getAllEmails()) self.assertEquals([":uid", "test:uid"], last.getAllUserIDs()) #Check stats def stat(name): return last.getPrefValue(UserData.PREFS_STATS, name, "") self.assertTrue(len(stat("LastLoginTime")) > 1) self.assertEquals("test", stat("LastLoginAuth")) self.assertEquals("uid", stat("LastLoginID")) self.assertEquals("*****@*****.**", stat("LastLoginEmail")) #Check auth prefs #Only one auth section - our "test" from above self.assertEquals(1, len(last.getPrefs(UserData.PREFS_AUTH))) def auth(name): prefs = last.getPrefValue(UserData.PREFS_AUTH, "test", {}) return prefs.get(name, "") self.assertTrue(len(auth("LastLogin")) > 1) self.assertEquals("uid", auth("LastID")) self.assertEquals("*****@*****.**", auth("LastEmail")) self.assertEquals("user name", auth("UserName")) self.assertEquals(["*****@*****.**"], auth("Emails")) self.assertEquals(["uid"], auth("UserIDs"))
def testLoginExisting(self): first = UserData.onLogin("uid", "user name", "*****@*****.**", "test") self.assertSerialEquals(first, UserData.read(first.getId())) first.addRole("role1") first.save() self.assertSerialEquals(first, UserData.read(first.getId())) self.assertEquals(['role1'], first.getRoles()) self.assertEquals(["*****@*****.**"], first.getAllEmails()) import time time.sleep(1) last = UserData.onLogin("uid", "user name", "*****@*****.**", "test") self.assertEquals(first.getUserID(), last.getUserID()) self.assertEquals(first.getUserName(), last.getUserName()) self.assertEquals(first.getEmail(), last.getEmail()) self.assertEquals(first.getRoles(), last.getRoles()) self.assertEquals(["*****@*****.**"], last.getAllEmails()) self.assertEquals([":uid", "test:uid"], last.getAllUserIDs()) #Check stats def stat(name): return last.getPrefValue(UserData.PREFS_STATS, name, "") self.assertTrue(len(stat("LastLoginTime")) > 1) self.assertEquals("test", stat("LastLoginAuth")) self.assertEquals("uid", stat("LastLoginID")) self.assertEquals("*****@*****.**", stat("LastLoginEmail")) #Check auth prefs #Only one auth section - our "test" from above self.assertEquals(1, len(last.getPrefs(UserData.PREFS_AUTH))) def auth(name): prefs = last.getPrefValue(UserData.PREFS_AUTH, "test", {}) return prefs.get(name, "") self.assertTrue(len(auth("LastLogin")) > 1) self.assertEquals("uid", auth("LastID")) self.assertEquals("*****@*****.**", auth("LastEmail")) self.assertEquals("user name", auth("UserName")) self.assertEquals(["*****@*****.**"], auth("Emails")) self.assertEquals(["uid"], auth("UserIDs"))
def readContextUser(self, msg): ctx = self._findContext(msg) userId = self.extractUserId(msg) if userId == '': userData = { 'id': '', 'userId': '', 'userName': '', 'userEmail': '', 'prefs': {} } else: user = UserData.read(userId) if not user: ctxId = msg.getContextValue(CONTEXT_USER_CONTEXT, None) user = UserData.readByLogin(userId, None, ctxId) if user is None: raise ProcessingExcept("No user found found in context") userData = { 'id': user.getId(), 'userId': user.getUserID(), 'userName': user.getUserName(), 'userEmail': user.getEmail(), 'prefs': user.getPrefs(ctx.getName()) } return self.makeResponse(msg, userData, INFORM_ACT)
def testLoginSameUserMultEmail(self): UserData.onLogin("uid", "user name", "*****@*****.**", "test") user = UserData.onLogin("uid", "user name", "*****@*****.**", "test") self.assertSerialEquals(user, UserData.read(user.getId())) self.assertEquals(["*****@*****.**", "*****@*****.**"], user.getAllEmails()) self.assertEquals([":uid", "test:uid"], user.getAllUserIDs()) #Check stats def stat(name): return user.getPrefValue(UserData.PREFS_STATS, name, "") self.assertEquals("test", stat("LastLoginAuth")) self.assertEquals("uid", stat("LastLoginID")) self.assertEquals("*****@*****.**", stat("LastLoginEmail")) #Check auth prefs def auth(name): prefs = user.getPrefValue(UserData.PREFS_AUTH, "test", {}) return prefs.get(name, "") self.assertEquals("uid", auth("LastID")) self.assertEquals("*****@*****.**", auth("LastEmail")) self.assertEquals("user name", auth("UserName")) self.assertEquals(["*****@*****.**", "*****@*****.**"], auth("Emails")) self.assertEquals(["uid"], auth("UserIDs"))
def testLoginSameUserMultEmail(self): UserData.onLogin("uid", "user name", "*****@*****.**", "test") user = UserData.onLogin("uid", "user name", "*****@*****.**", "test") self.assertSerialEquals(user, UserData.read(user.getId())) self.assertEquals(["*****@*****.**", "*****@*****.**"], user.getAllEmails()) self.assertEquals([":uid", "test:uid"], user.getAllUserIDs()) #Check stats def stat(name): return user.getPrefValue(UserData.PREFS_STATS, name, "") self.assertEquals("test", stat("LastLoginAuth")) self.assertEquals("uid", stat("LastLoginID")) self.assertEquals("*****@*****.**", stat("LastLoginEmail")) #Check auth prefs def auth(name): prefs = user.getPrefValue(UserData.PREFS_AUTH, "test", {}) return prefs.get(name, "") self.assertEquals("uid", auth("LastID")) self.assertEquals("*****@*****.**", auth("LastEmail")) self.assertEquals("user name", auth("UserName")) self.assertEquals(["*****@*****.**", "*****@*****.**"], auth("Emails")) self.assertEquals(["uid"], auth("UserIDs"))
def testAnon(self): anon1 = UserData.onLogin(None, None, None, None) anon2 = UserData() anon3 = UserData("bob") anon3.becomeAnon() self.assertSerialEquals(anon1, anon2) self.assertSerialEquals(anon2, anon3) self.assertSerialEquals(anon1, anon3) print anon1.getId(), anon1 anon1.save() print UserData.read(anon1.getId()) self.assertReadWrite(anon1) self.assertReadWrite(anon2) self.assertReadWrite(anon3)
def testAnon(self): anon1 = UserData.onLogin(None, None, None, None) anon2 = UserData() anon3 = UserData("bob") anon3.becomeAnon() self.assertSerialEquals(anon1, anon2) self.assertSerialEquals(anon2, anon3) self.assertSerialEquals(anon1, anon3) print anon1.getId(), anon1 anon1.save() print UserData.read(anon1.getId()) self.assertReadWrite(anon1) self.assertReadWrite(anon2) self.assertReadWrite(anon3)
def readContextUserKeys(self, msg): ctx = self._findContext(msg) userId = self.extractUserId(msg) if userId == '': return self.makeResponse(msg, [], INFORM_ACT) #Anonymous else: usr = UserData.read(userId) if not usr: ctxId = msg.getContextValue(CONTEXT_USER_CONTEXT, None) usr = UserData.readByLogin(userId, None, ctxId) if not usr: raise ProcessingExcept("Could not find user " + userId) return self.makeResponse(msg, usr.getPrefs(ctx.getName()), INFORM_ACT)
def hasUserInContext(self, msg): ctx = self._findContext(msg, False) userId = self.extractUserId(msg) user = UserData.read(userId) if not user: ctxId = msg.getContextValue(CONTEXT_USER_CONTEXT, None) user = UserData.readByLogin(userId, None, ctxId) if user is None: return False elif ctx is not None and (user.getId() not in ctx.getUsers()): return False else: return True
def hasUserInContext(self, msg): ctx = self._findContext(msg, False) userId = self.extractUserId(msg) user = UserData.read(userId) if not user: ctxId = msg.getContextValue(CONTEXT_USER_CONTEXT, None) user = UserData.readByLogin(userId, None, ctxId) if user is None: return False elif ctx is not None and (user.getId() not in ctx.getUsers()): return False else: return True
def readContextUserKeys(self, msg): ctx = self._findContext(msg) userId = self.extractUserId(msg) if userId == '': return self.makeResponse(msg, [], INFORM_ACT) #Anonymous else: usr = UserData.read(userId) if not usr: ctxId = msg.getContextValue(CONTEXT_USER_CONTEXT, None) usr = UserData.readByLogin(userId, None, ctxId) if not usr: raise ProcessingExcept("Could not find user " + userId) return self.makeResponse(msg, usr.getPrefs(ctx.getName()), INFORM_ACT)
def testSnarfMissingUserData(self): #Login/create user, then update with no name or email user = UserData.onLogin("uid", "user name 1", "*****@*****.**", "test") user.setUserName("") user.setEmail("") user.save() #Should grab the new stuff on login user = UserData.onLogin("uid", "user name 2", "*****@*****.**", "test") self.assertSerialEquals(user, UserData.read(user.getId())) self.assertEquals("user name 2", user.getUserName()) self.assertEquals("*****@*****.**", user.getEmail())
def testSnarfMissingUserData(self): #Login/create user, then update with no name or email user = UserData.onLogin("uid", "user name 1", "*****@*****.**", "test") user.setUserName("") user.setEmail("") user.save() #Should grab the new stuff on login user = UserData.onLogin("uid", "user name 2", "*****@*****.**", "test") self.assertSerialEquals(user, UserData.read(user.getId())) self.assertEquals("user name 2", user.getUserName()) self.assertEquals("*****@*****.**", user.getEmail())
def readContextUserVal(self, msg): ctx = self._findContext(msg) key = msg.getObject() if not key: raise ProcessingExcept("No user context pref key found") userId = self.extractUserId(msg) if userId == '': return self.makeResponse(msg, '', INFORM_ACT) #Anonymous usr = UserData.read(userId) if not usr: ctxId = msg.getContextValue(CONTEXT_USER_CONTEXT, None) usr = UserData.readByLogin(userId, None, ctxId) if not usr: raise ProcessingExcept("Could not find user " + userId) value = usr.getPrefValue(ctx.getName(), key) return self.makeResponse(msg, value, INFORM_ACT)
def readContextUserVal(self, msg): ctx = self._findContext(msg) key = msg.getObject() if not key: raise ProcessingExcept("No user context pref key found") userId = self.extractUserId(msg) if userId == '': return self.makeResponse(msg, '', INFORM_ACT) #Anonymous usr = UserData.read(userId) if not usr: ctxId = msg.getContextValue(CONTEXT_USER_CONTEXT, None) usr = UserData.readByLogin(userId, None, ctxId) if not usr: raise ProcessingExcept("Could not find user " + userId) value = usr.getPrefValue(ctx.getName(), key) return self.makeResponse(msg, value, INFORM_ACT)
def testUpdateMissingAuth(self): orig = UserData.onLogin("uid", "user name", "*****@*****.**", None) self.assertSerialEquals(orig, UserData.read(orig.getId())) UA = UserData.UNKNOWN_AUTH #Make the code a little more concise self.assertEquals("uid", orig.getUserID()) self.assertEquals("user name", orig.getUserName()) self.assertEquals("*****@*****.**", orig.getEmail()) self.assertEquals([], orig.getRoles()) self.assertEquals(["*****@*****.**"], orig.getAllEmails()) self.assertEquals([":uid", UA+":uid"], orig.getAllUserIDs()) #Check stats def stat(name): return orig.getPrefValue(UserData.PREFS_STATS, name, "") self.assertTrue(len(stat("LastLoginTime")) > 1) self.assertEquals(UA, stat("LastLoginAuth")) self.assertEquals("uid", stat("LastLoginID")) self.assertEquals("*****@*****.**", stat("LastLoginEmail")) #Check auth prefs #Only one auth section - our "test" from above self.assertEquals(1, len(orig.getPrefs(UserData.PREFS_AUTH))) def auth(name): prefs = orig.getPrefValue(UserData.PREFS_AUTH, UA, {}) return prefs.get(name, "") self.assertTrue(len(auth("LastLogin")) > 1) self.assertEquals("uid", auth("LastID")) self.assertEquals("*****@*****.**", auth("LastEmail")) self.assertEquals("user name", auth("UserName")) self.assertEquals(["*****@*****.**"], auth("Emails")) self.assertEquals(["uid"], auth("UserIDs"))
def testUpdateMissingAuth(self): orig = UserData.onLogin("uid", "user name", "*****@*****.**", None) self.assertSerialEquals(orig, UserData.read(orig.getId())) UA = UserData.UNKNOWN_AUTH #Make the code a little more concise self.assertEquals("uid", orig.getUserID()) self.assertEquals("user name", orig.getUserName()) self.assertEquals("*****@*****.**", orig.getEmail()) self.assertEquals([], orig.getRoles()) self.assertEquals(["*****@*****.**"], orig.getAllEmails()) self.assertEquals([":uid", UA + ":uid"], orig.getAllUserIDs()) #Check stats def stat(name): return orig.getPrefValue(UserData.PREFS_STATS, name, "") self.assertTrue(len(stat("LastLoginTime")) > 1) self.assertEquals(UA, stat("LastLoginAuth")) self.assertEquals("uid", stat("LastLoginID")) self.assertEquals("*****@*****.**", stat("LastLoginEmail")) #Check auth prefs #Only one auth section - our "test" from above self.assertEquals(1, len(orig.getPrefs(UserData.PREFS_AUTH))) def auth(name): prefs = orig.getPrefValue(UserData.PREFS_AUTH, UA, {}) return prefs.get(name, "") self.assertTrue(len(auth("LastLogin")) > 1) self.assertEquals("uid", auth("LastID")) self.assertEquals("*****@*****.**", auth("LastEmail")) self.assertEquals("user name", auth("UserName")) self.assertEquals(["*****@*****.**"], auth("Emails")) self.assertEquals(["uid"], auth("UserIDs"))
def writeContextUserVal(self, msg): ctx = self._findContext(msg) key = msg.getObject() if not key: raise ProcessingExcept("No user context pref key found") userId = self.extractUserId(msg) #NOPE - writing for an anonymous user is an error if not userId or len(userId) == 0: raise ProcessingExcept("No user ID specified") usr = UserData.read(userId) if not usr: ctxId = msg.getContextValue(CONTEXT_USER_CONTEXT, None) usr = UserData.readByLogin(userId, None, ctxId) if not usr: raise ProcessingExcept("Could not find user " + userId) #usr = UserData.onLogin(userId) #ctx.addUser(userId) #ctx.save() value = msg.getResult() usr.setPrefValue(ctx.getName(), key, value) usr.save() return self.makeResponse(msg, True, CONFIRM_ACT)
def readContextUser(self, msg): ctx = self._findContext(msg) userId = self.extractUserId(msg) if userId == '': userData = {'id': '', 'userId': '', 'userName': '', 'userEmail': '', 'prefs': {}} else: user = UserData.read(userId) if not user: ctxId = msg.getContextValue(CONTEXT_USER_CONTEXT, None) user = UserData.readByLogin(userId, None, ctxId) if user is None: raise ProcessingExcept("No user found found in context") userData = {'id': user.getId(), 'userId': user.getUserID(), 'userName': user.getUserName(), 'userEmail': user.getEmail(), 'prefs': user.getPrefs(ctx.getName())} return self.makeResponse(msg, userData, INFORM_ACT)
def writeContextUserVal(self, msg): ctx = self._findContext(msg) key = msg.getObject() if not key: raise ProcessingExcept("No user context pref key found") userId = self.extractUserId(msg) #NOPE - writing for an anonymous user is an error if not userId or len(userId) == 0: raise ProcessingExcept("No user ID specified") usr = UserData.read(userId) if not usr: ctxId = msg.getContextValue(CONTEXT_USER_CONTEXT, None) usr = UserData.readByLogin(userId, None, ctxId) if not usr: raise ProcessingExcept("Could not find user " + userId) #usr = UserData.onLogin(userId) #ctx.addUser(userId) #ctx.save() value = msg.getResult() usr.setPrefValue(ctx.getName(), key, value) usr.save() return self.makeResponse(msg, True, CONFIRM_ACT)
def testRoles(self): user = UserData.onLogin("uid", "user name", "*****@*****.**", "test") self.assertSerialEquals(user, UserData.read(user.getId())) #Add role user.addRole("role1") self.assertEquals(["role1"], user.getRoles()) #Maintain alphabetical order user.addRole("role0") self.assertEquals(["role0", "role1"], user.getRoles()) #Save/read with multiple roles self.assertReadWrite(user) #Ignore dups user.addRole("role0") user.addRole("role1") self.assertEquals(["role0", "role1"], user.getRoles()) self.assertFalse(user.needRole("role0")) self.assertFalse(user.needRole("role1")) self.assertTrue(user.needRole("role2")) self.assertEquals(["role0", "role1", "role2"], user.getRoles())
def testRoles(self): user = UserData.onLogin("uid", "user name", "*****@*****.**", "test") self.assertSerialEquals(user, UserData.read(user.getId())) #Add role user.addRole("role1") self.assertEquals(["role1"], user.getRoles()) #Maintain alphabetical order user.addRole("role0") self.assertEquals(["role0", "role1"], user.getRoles()) #Save/read with multiple roles self.assertReadWrite(user) #Ignore dups user.addRole("role0") user.addRole("role1") self.assertEquals(["role0", "role1"], user.getRoles()) self.assertFalse(user.needRole("role0")) self.assertFalse(user.needRole("role1")) self.assertTrue(user.needRole("role2")) self.assertEquals(["role0", "role1", "role2"], user.getRoles())
def testLoginMultiple(self): logins = [ ("uidA1", "user name 1", "*****@*****.**", "testA"), ("uidA2", "user name 2", "*****@*****.**", "testA"), #Same email, different user ("uidA1", "user name 3", "*****@*****.**", "testA"), #Same UID, different email ("uidB1", "user name 4", "*****@*****.**", "testB"), #New auth provider - but should match with previous email ("uidB1", "user name 5", "*****@*****.**", "testB"), #Same UID, different email (from other auth) ("uidB2", "user name 6", "*****@*****.**", "testB"), #Same email, different UID ("uidB2", "user name 7", "*****@*****.**", "testB"), #Same UID, different email ] all_emails = [] all_uids = [] user = None for uid, uname, email, auth in logins: all_emails.append(email) all_uids.append(auth + ':' + uid) user = UserData.onLogin(uid, uname, email, auth) self.assertIsNotNone(user) #First login created the user - so that's the "main" ID self.assertSerialEquals(user, UserData.read(user.getId())) all_emails = sorted(set(all_emails)) print "ALL EMAILS: %s" % str(all_emails) self.assertEquals(4, len(all_emails)) self.assertEquals(all_emails, user.getAllEmails()) all_uids.append(":uidA1") all_uids = sorted(set(all_uids)) print "ALL UIDS: %s" % str(all_uids) self.assertEquals(5, len(all_uids)) #4 + top-level ID self.assertEquals(all_uids, user.getAllUserIDs()) #Check stats def stat(name): return user.getPrefValue(UserData.PREFS_STATS, name, "") self.assertEquals("testB", stat("LastLoginAuth")) self.assertEquals("uidB2", stat("LastLoginID")) self.assertEquals("*****@*****.**", stat("LastLoginEmail")) #Check auth prefs def auth(auth, name): prefs = user.getPrefValue(UserData.PREFS_AUTH, auth, {}) return prefs.get(name, "") self.assertEquals("uidA1", auth("testA", "LastID")) self.assertEquals("*****@*****.**", auth("testA", "LastEmail")) self.assertEquals("user name 3", auth("testA", "UserName")) self.assertEquals(["*****@*****.**", "*****@*****.**"], auth("testA", "Emails")) self.assertEquals(["uidA1", "uidA2"], auth("testA", "UserIDs")) self.assertEquals("uidB2", auth("testB", "LastID")) self.assertEquals("*****@*****.**", auth("testB", "LastEmail")) self.assertEquals("user name 7", auth("testB", "UserName")) self.assertEquals(["*****@*****.**", "*****@*****.**", "*****@*****.**"], auth("testB", "Emails")) self.assertEquals(["uidB1", "uidB2"], auth("testB", "UserIDs"))
def testLoginMultiple(self): logins = [ ("uidA1", "user name 1", "*****@*****.**", "testA"), ("uidA2", "user name 2", "*****@*****.**", "testA"), #Same email, different user ("uidA1", "user name 3", "*****@*****.**", "testA"), #Same UID, different email ("uidB1", "user name 4", "*****@*****.**", "testB" ), #New auth provider - but should match with previous email ("uidB1", "user name 5", "*****@*****.**", "testB"), #Same UID, different email (from other auth) ("uidB2", "user name 6", "*****@*****.**", "testB"), #Same email, different UID ("uidB2", "user name 7", "*****@*****.**", "testB"), #Same UID, different email ] all_emails = [] all_uids = [] user = None for uid, uname, email, auth in logins: all_emails.append(email) all_uids.append(auth + ':' + uid) user = UserData.onLogin(uid, uname, email, auth) self.assertIsNotNone(user) #First login created the user - so that's the "main" ID self.assertSerialEquals(user, UserData.read(user.getId())) all_emails = sorted(set(all_emails)) print "ALL EMAILS: %s" % str(all_emails) self.assertEquals(4, len(all_emails)) self.assertEquals(all_emails, user.getAllEmails()) all_uids.append(":uidA1") all_uids = sorted(set(all_uids)) print "ALL UIDS: %s" % str(all_uids) self.assertEquals(5, len(all_uids)) #4 + top-level ID self.assertEquals(all_uids, user.getAllUserIDs()) #Check stats def stat(name): return user.getPrefValue(UserData.PREFS_STATS, name, "") self.assertEquals("testB", stat("LastLoginAuth")) self.assertEquals("uidB2", stat("LastLoginID")) self.assertEquals("*****@*****.**", stat("LastLoginEmail")) #Check auth prefs def auth(auth, name): prefs = user.getPrefValue(UserData.PREFS_AUTH, auth, {}) return prefs.get(name, "") self.assertEquals("uidA1", auth("testA", "LastID")) self.assertEquals("*****@*****.**", auth("testA", "LastEmail")) self.assertEquals("user name 3", auth("testA", "UserName")) self.assertEquals(["*****@*****.**", "*****@*****.**"], auth("testA", "Emails")) self.assertEquals(["uidA1", "uidA2"], auth("testA", "UserIDs")) self.assertEquals("uidB2", auth("testB", "LastID")) self.assertEquals("*****@*****.**", auth("testB", "LastEmail")) self.assertEquals("user name 7", auth("testB", "UserName")) self.assertEquals( ["*****@*****.**", "*****@*****.**", "*****@*****.**"], auth("testB", "Emails")) self.assertEquals(["uidB1", "uidB2"], auth("testB", "UserIDs"))