def _unfollow(self, event, username, session=None):
        user = get_user_by_jid(event['from'].jid, session)
        contact = get_user_by_username(username, session)

        if not contact:
            body = 'User @%s not found.' % username
            self.xmpp.sendMessage(event['from'].jid,
                                  body,
                                  mfrom=self.jid,
                                  mtype='chat')
            return

        for idx, u in enumerate(user.contacts):
            if u.username == contact.username:
                user.contacts.pop(idx)
                session.commit()
                self.xmpp.sendMessage(user.jid,
                                      'You don\'t follow @%s anymore.' %
                                      username,
                                      mfrom=self.jid,
                                      mtype='chat')
                self.xmpp.sendMessage(contact.jid,
                                      'You lost one of your followers: @%s.' %
                                      user.username,
                                      mfrom=self.jid,
                                      mtype='chat')
                return

        self.xmpp.sendMessage(user.jid,
                              'You don\'t folow @%s.' % username,
                              mfrom=self.jid,
                              mtype='chat')
    def _unfollow(self, event, username, session=None):
        user = get_user_by_jid(event['from'].jid, session)
        contact = get_user_by_username(username, session)

        if not contact:
            body = 'User @%s not found.' % username
            self.xmpp.sendMessage(event['from'].jid, body, mfrom=self.jid, mtype='chat')
            return

        for idx, u in enumerate(user.contacts):
            if u.username == contact.username:
                user.contacts.pop(idx)
                session.commit()
                self.xmpp.sendMessage(
                    user.jid,
                    'You don\'t follow @%s anymore.' % username,
                    mfrom = self.jid,
                    mtype = 'chat'
                )
                self.xmpp.sendMessage(
                    contact.jid,
                    'You lost one of your followers: @%s.' % user.username,
                    mfrom = self.jid,
                    mtype = 'chat'
                )
                return

        self.xmpp.sendMessage(
            user.jid,
            'You don\'t folow @%s.' % username,
            mfrom = self.jid,
            mtype = 'chat'
        )
 def get(self, username):
     user = get_user_by_username(username, self._session)
     self.render(
         'user.html',
         user=user,
         vcard=user.vcard,
         mypage=user == self.current_user,
     )
 def get(self, username):
     user = get_user_by_username(username, self._session)
     self.render(
         'user.html',
         user = user,
         vcard = user.vcard,
         mypage = user == self.current_user,
     )
    def get(self, username):
        user = get_user_by_username(username, self._session)
        vc = user.vcard
        if vc is None or vc.PHOTO is None:
            raise tornado.web.HTTPError(404)
        else:
            message = base64.standard_b64decode(vc.PHOTO.BINVAL.text)
            self.set_header('Content-Type', vc.PHOTO.TYPE or 'image/jpeg')

        self.write(message)
    def _reply_message(self, event, username, message, session=None):
        user = get_user_by_username(username, session)
        from_ = get_user_by_jid(event['from'].jid, session)

        if user:
            body = 'Reply from @%s: %s' % (from_.username, message)
            self.send_message(user.jid, body, mfrom=self.jid, mtype='chat', payload=event.payload)
        else:
            body = 'User @%s not found.' % username
            self.send_message(from_.jid, body, mfrom=self.jid, mtype='chat', payload=event.payload)
    def get(self, username):
        user = get_user_by_username(username, self._session)
        vc = user.vcard
        if vc is None or vc.PHOTO is None:
            raise tornado.web.HTTPError(404)
        else:
            message = base64.standard_b64decode(vc.PHOTO.BINVAL.text)
            self.set_header('Content-Type', vc.PHOTO.TYPE or 'image/jpeg')

        self.write(message)
    def handle_new_message(self, event, session):
        text = event['body']
        from_user = get_user_by_jid(event['from'].jid, session)

        text_len = len(text)
        if self.max_tweet_length and text_len > self.max_tweet_length:
            self.send_message(
                from_user.jid,
                'Your message is longer than %s characters (%s chars). '
                'Your message has not been posted.' %
                (self.max_tweet_length, text_len),
                mfrom=self.jid,
                mtype='chat')
            return

        try:
            tweet = Tweet(
                username=from_user.username,
                text=text,
            )
            session.add(tweet)
        except Exception:
            self.log.exception('can\'t save tweet')

        body = '@%s: %s' % (from_user.username, text)
        for subscriber in from_user.subscribers:
            self.send_message(subscriber.jid,
                              body,
                              mfrom=self.jid,
                              mtype='chat',
                              payload=event.payload)

        body = 'Mention by @%s: %s' % (from_user.username, text)
        for username in re.findall(r'\W@\w+', text):
            try:
                user = get_user_by_username(username[1:], session)
            except UserNotFound:
                continue
            if user not in from_user.subscribers:
                self.send_message(user.jid,
                                  body,
                                  mfrom=self.jid,
                                  mtype='chat',
                                  payload=event.payload)

        search.process_message(event)
    def _reply_message(self, event, username, message, session=None):
        user = get_user_by_username(username, session)
        from_ = get_user_by_jid(event['from'].jid, session)

        if user:
            body = 'Reply from @%s: %s' % (from_.username, message)
            self.send_message(user.jid,
                              body,
                              mfrom=self.jid,
                              mtype='chat',
                              payload=event.payload)
        else:
            body = 'User @%s not found.' % username
            self.send_message(from_.jid,
                              body,
                              mfrom=self.jid,
                              mtype='chat',
                              payload=event.payload)
    def post(self):
        username = self.get_argument('username')
        password = self.get_argument('password')
        next = self.get_argument('next', '/')

        errors = defaultdict(unicode)
        try:
            user = get_user_by_username(username, self._session)
        except UserNotFound:
            errors['username'] = '******'
        else:
            if user.password == password:
                self.set_secure_cookie('session', username)
                self.redirect(next)
                return
            else:
                errors['password'] = '******'

        self.render('login.html', next=next, errors=errors)
    def post(self):
        username = self.get_argument('username')
        password = self.get_argument('password')
        next = self.get_argument('next', '/')

        errors = defaultdict(unicode)
        try:
            user = get_user_by_username(username, self._session)
        except UserNotFound:
            errors['username'] = '******'
        else:
            if user.password == password:
                self.set_secure_cookie('session', username)
                self.redirect(next)
                return
            else:
                errors['password'] = '******'

        self.render('login.html', next=next, errors=errors)
    def _process_event(event, session=None):
        log.debug('Processing word "%s"' % event['body'])

        text = event['body']
        from_user = get_user_by_jid(event['from'].jid, session)

        body = 'Search: @%s says "%s"' % (from_user.username, text)

        num_recipients = 0

        text = text.lower()
        receivers = set()
        terms = {}  # user to terms hash

        def all_in_text(words, text):
            return all(map(lambda word: word in text, words))

        for words, users in _searches.items():
            if all_in_text(words, text):
                receivers.update(users)
                for user in users:
                    terms[user] = words

        for username in receivers:
            user = get_user_by_username(username, session)
            if user not in from_user.subscribers and \
                    user != from_user:
                payload = copy.deepcopy(event.payload)

                for term in terms[username]:
                    payload.add_node('searchTerm', term)

                num_recipients += 1
                bot.send_message(user.jid,
                                 body,
                                 mfrom=bot.jid,
                                 mtype='chat',
                                 payload=payload)

        log.debug('This message was received by %s recipients.' %
                  num_recipients)
    def _follow(self, event, username, session=None):
        user = get_user_by_jid(event['from'].jid, session)
        contact = get_user_by_username(username, session)

        if not contact:
            body = 'User @%s not found.' % username
            self.xmpp.sendMessage(event['from'].jid,
                                  body,
                                  mfrom=self.jid,
                                  mtype='chat')
            return

        if user == contact:
            body = 'You can\'t follow youself.'
            self.xmpp.sendMessage(event['from'].jid,
                                  body,
                                  mfrom=self.jid,
                                  mtype='chat')
            return

        if contact in user.contacts:
            self.xmpp.sendMessage(user.jid,
                                  'You already follow @%s.' % username,
                                  mfrom=self.jid,
                                  mtype='chat')
            return

        user.contacts.append(contact)
        session.commit()

        self.xmpp.sendMessage(user.jid,
                              'Now you are following @%s.' % username,
                              mfrom=self.jid,
                              mtype='chat')
        self.xmpp.sendMessage(contact.jid,
                              'You have a new follower: @%s.' % user.username,
                              mfrom=self.jid,
                              mtype='chat')
    def handle_new_message(self, event, session):
        text = event['body']
        from_user = get_user_by_jid(event['from'].jid, session)

        text_len = len(text)
        if self.max_tweet_length and text_len > self.max_tweet_length:
            self.send_message(
                from_user.jid,
                'Your message is longer than %s characters (%s chars). '
                'Your message has not been posted.' % (self.max_tweet_length, text_len),
                mfrom = self.jid,
                mtype = 'chat'
            )
            return

        try:
            tweet = Tweet(
                username = from_user.username,
                text = text,
            )
            session.add(tweet)
        except Exception:
            self.log.exception('can\'t save tweet')

        body = '@%s: %s' % (from_user.username, text)
        for subscriber in from_user.subscribers:
            self.send_message(subscriber.jid, body, mfrom=self.jid, mtype='chat', payload=event.payload)

        body = 'Mention by @%s: %s' % (from_user.username, text)
        for username in re.findall(r'\W@\w+', text):
            try:
                user = get_user_by_username(username[1:], session)
            except UserNotFound:
                continue
            if user not in from_user.subscribers:
                self.send_message(user.jid, body, mfrom=self.jid, mtype='chat', payload=event.payload)

        search.process_message(event)
    def _follow(self, event, username, session=None):
        user = get_user_by_jid(event['from'].jid, session)
        contact = get_user_by_username(username, session)

        if not contact:
            body = 'User @%s not found.' % username
            self.xmpp.sendMessage(event['from'].jid, body, mfrom=self.jid, mtype='chat')
            return

        if user == contact:
            body = 'You can\'t follow youself.'
            self.xmpp.sendMessage(event['from'].jid, body, mfrom=self.jid, mtype='chat')
            return

        if contact in user.contacts:
            self.xmpp.sendMessage(
                user.jid,
                'You already follow @%s.' % username,
                mfrom = self.jid,
                mtype = 'chat'
            )
            return

        user.contacts.append(contact)
        session.commit()

        self.xmpp.sendMessage(
            user.jid,
            'Now you are following @%s.' % username,
            mfrom = self.jid,
            mtype = 'chat'
        )
        self.xmpp.sendMessage(
            contact.jid,
            'You have a new follower: @%s.' % user.username,
            mfrom = self.jid,
            mtype = 'chat'
        )
    def _process_event(event, session=None):
        log.debug('Processing word "%s"' % event['body'])

        text = event['body']
        from_user = get_user_by_jid(event['from'].jid, session)

        body = 'Search: @%s says "%s"' % (from_user.username, text)

        num_recipients = 0

        text = text.lower()
        receivers = set()
        terms = {} # user to terms hash

        def all_in_text(words, text):
            return all(map(lambda word: word in text, words))

        for words, users in _searches.items():
            if all_in_text(words, text):
                receivers.update(users)
                for user in users:
                    terms[user] = words

        for username in receivers:
            user = get_user_by_username(username, session)
            if user not in from_user.subscribers and \
                    user != from_user:
                payload = copy.deepcopy(event.payload)

                for term in terms[username]:
                    payload.add_node('searchTerm', term)

                num_recipients += 1
                bot.send_message(user.jid, body, mfrom=bot.jid, mtype='chat', payload=payload)

        log.debug('This message was received by %s recipients.' % num_recipients)
 def get(self, username):
     user = get_user_by_username(username, self._session)
     next = self.get_argument('next', '/')
     self.render('unfollow.html', user=user, next=next)
 def post(self, username):
     if self.get_argument('choice') == 'YES':
         user = get_user_by_username(username, self._session)
         user.subscribers.append(self.current_user)
     next = self.get_argument('next', '/')
     self.redirect(next)
 def get_current_user(self):
     username = self.get_secure_cookie('session')
     if username:
         return get_user_by_username(username, self._session)
     return None
 def post(self, username):
     if self.get_argument('choice') == 'YES':
         user = get_user_by_username(username, self._session)
         user.subscribers.append(self.current_user)
     next = self.get_argument('next', '/')
     self.redirect(next)
 def get(self, username):
     user = get_user_by_username(username, self._session)
     next = self.get_argument('next', '/')
     self.render('follow.html', user=user, next=next)
 def get_current_user(self):
     username = self.get_secure_cookie('session')
     if username:
         return get_user_by_username(username, self._session)
     return None