def clean_chat_from_non_users(self): import logging for email in self.participants: try: User.all().filter('address =', email).fetch(1)[0] except IndexError: logging.error("Cleaning away non user %s from chat %s" % (email, self.title)) self.remove_participant(email)
def setUp(self): super(TestChatListeners, self).setUp() self.user1 = User.create(u'u1', u'u1@foo') self.user2 = User.create(u'u2', u'u2@foo') self.user3 = User.create(u'u3', u'u3@foo') self.chat = Chat.create(title=u'chat 1') self.chat.add_participant(self.user1.address) self.chat.add_participant(self.user2.address) self.chat.add_participant(self.user3.address)
def test_user_from_any_address(self): '''Retrieve a user using any registered address, email or primary''' self.assertEqual( User.user_from_any_address(self.user.address).key(), self.user.key()) self.assertEqual( User.user_from_any_address(self.address1).key(), self.user.key()) self.assertEqual( User.user_from_any_address(self.address2).key(), self.user.key())
def post(self): delete_key = self.request.get('key').strip() nick = self.request.get('nick').strip() address = self.request.get('address').strip() if delete_key != '': User.murder(delete_key) elif address: User.create(nick, address) self.get()
def pm_command(self, message=None): if self.set_chat_and_user(message): arg = message.arg.strip() space = arg.find(' ') to = arg[:space] msg = arg[space+1:] user = User.user(to) if user == None: user = User.user_from_nick(to) if user != None: xmpp.send_message(user.address, messages.PRIVATE_MESSAGE % (self.sender.nickname, msg), message.to) else: logging.info("Failed PM from '%s' to '%s' in channel '%s'." % (self.sender.nickname, to, self.chat)) message.reply(messages.SYSTEM_MESSAGE % "No such user")
def who_command(self, message=None): if self.set_chat_and_user(message): arg = message.arg.strip() if arg in ["", "am i", "online"]: if arg == "am i": message.reply(messages.SYSTEM_MESSAGE % ("You are " + user_listing([self.sender]))) else: who = "\nOnline:\n" listeners = [ u for u in self.chat.listeners if xmpp.get_presence(u.address, message.to) ] who += user_listing(listeners) if arg != "online": offlines = [ u for u in self.chat.users if not xmpp.get_presence(u.address, message.to) ] who += "\n\nOffline:\n" who += user_listing(offlines) who += "\n\nOnline, but has muted this chat:\n" non_listeners = [ User.user(address) for address in self.chat.non_listeners if xmpp.get_presence(address, message.to) ] who += user_listing(non_listeners) message.reply(messages.SYSTEM_MESSAGE % who) else: message.reply(messages.HELP_MSG)
def add_participant(self, address): """ Adds a user to a chat and also sends an invitation to the user to authorize the channel. """ if address in [u.address for u in User.all()]: db.run_in_transaction(self._add_participantTx, address) xmpp.send_invite(address, self.jid)
def get(self, key): user = User.get(key) if user != None: template_values = { 'user': user } self.Render("user.html", template_values)
def get(self, _key_or_title): chat = self._get_chat(_key_or_title) if chat != None: chat.clean_chat_from_non_users() template_values = { 'chat': chat, 'users': User.all() } self.Render("chat.html", template_values)
def set_chat_and_user(self, message): sender_address = message.sender.split('/')[0].lower() (self.chat, self.sender) = (get_chat(message), User.user(sender_address)) if user_in_chat(self.sender, self.chat): return True else: message.reply(messages.NO_ACCESS) logging.info("Denied access for address %s to chat %s" % (sender_address, self.chat)) return False
def pm_command(self, message=None): if self.set_chat_and_user(message): arg = message.arg.strip() space = arg.find(' ') to = arg[:space] msg = arg[space + 1:] user = User.user(to) if user == None: user = User.user_from_nick(to) if user != None: xmpp.send_message( user.address, messages.PRIVATE_MESSAGE % (self.sender.nickname, msg), message.to) else: logging.info("Failed PM from '%s' to '%s' in channel '%s'." % (self.sender.nickname, to, self.chat)) message.reply(messages.SYSTEM_MESSAGE % "No such user")
def post(self, key): user = User.get(key) if user != None: action = self.request.get('action') if action == 'delete_user': user.murder(key) elif action == 'update_user': user.address = self.request.get('address').strip() user.nick = self.request.get('nick').strip() user.email_addresses = self.request.get('email_addresses') user.put() self.get(key)
def who_command(self, message=None): if self.set_chat_and_user(message): arg = message.arg.strip() if arg in ["", "am i", "online"]: if arg == "am i": message.reply(messages.SYSTEM_MESSAGE % ("You are " + user_listing([self.sender]))) else: who = "\nOnline:\n" listeners = [u for u in self.chat.listeners if xmpp.get_presence(u.address, message.to)] who += user_listing(listeners) if arg != "online": offlines = [u for u in self.chat.users if not xmpp.get_presence(u.address, message.to)] who += "\n\nOffline:\n" who += user_listing(offlines) who += "\n\nOnline, but has muted this chat:\n" non_listeners = [User.user(address) for address in self.chat.non_listeners if xmpp.get_presence(address, message.to)] who += user_listing(non_listeners) message.reply(messages.SYSTEM_MESSAGE % who) else: message.reply(messages.HELP_MSG)
def test_default_email_addresses(self): '''Empty list of addresses when addresses are not assigned''' user = User.create('A', 'B') self.assertEqual([], user.email_addresses)
def non_users(self): return [ u for u in User.all() if not self.title in [c.title for c in u.chats] ]
def users(self): return [User.user(p) for p in self.participants if User.user(p)]
def remove_listener(self, address): if address not in self.non_listeners and address in [ u.address for u in User.all() ]: self.non_listeners.append(address) self.put()
def setUp(self): super(TestChatTaglines, self).setUp() self.user1 = User.create(u'u1', u'u1@foo') self.chat = Chat.create(title=u'chat 1') self.chat.add_participant(self.user1.address)
def get_chat_and_user(message): sender_address = message.sender.split('/')[0].lower() return get_chat(message), User.user(sender_address)
def get(self): template_values = { 'users': User.all(), } self.Render("users.html", template_values)
def non_users(self): return [u for u in User.all() if not self.title in [c.title for c in u.chats]]
def remove_listener(self, address): if address not in self.non_listeners and address in [u.address for u in User.all()]: self.non_listeners.append(address) self.put()
def test_user_from_address(self): '''Get a user using the registered XMPP address''' self.assertEqual(self.user.key(), User.user(self.user.address).key())
def setUp(self): ModelTestCase.setUp(self) self.user = User.create('Foo', '*****@*****.**')
def test_user_from_email_address_not_found(self): '''Email address not there, no user for you''' self.assertNone(User.user_from_email_address('*****@*****.**'))
def test_user_from_nick(self): '''Retrieve a user using the nick name''' self.assertEqual(self.user.key(), User.user_from_nick(self.user.nickname).key())
def test_user_from_email_address(self): '''Retrieve a user from one of her e-mail addresses''' self.assertEqual( User.user_from_email_address(self.address2).key(), self.user.key())
def get_chat_and_user(message): to_address = get_to_address(message) sender_address = get_sender_address(message) return get_chat(to_address), User.user_from_any_address(sender_address)