Esempio n. 1
0
    def handle_kick(self, activity: Activity):
        kicker_id = activity.actor.id
        if kicker_id == '0':
            kicker_name = 'admin'
        else:
            try:
                kicker_name = activity.actor.display_name or utils.get_user_name_for(
                    kicker_id)
            except NoSuchUserException:
                # if kicking from rest api the user might not exist
                logger.error('no such user when kicking: %s' % kicker_id)
                return

        kicked_id = activity.object.id
        kicked_name = activity.object.display_name or utils.get_user_name_for(
            kicked_id)
        kicked_sids = utils.get_sids_for_user_id(kicked_id)
        room_id = activity.target.id

        if room_id is not None:
            room_name = utils.get_room_name(room_id)
        else:
            room_name = activity.target.display_name
        namespace = activity.target.url

        if kicked_sids is None or len(kicked_sids) == 0 or kicked_sids == [
                None
        ] or kicked_sids[0] == '':
            logger.warning('no sid(s) found for user id %s' % kicked_id)
            return

        reason = None
        if hasattr(activity.object, 'content'):
            reason = activity.object.content

        activity_json = utils.activity_for_user_kicked(kicker_id, kicker_name,
                                                       kicked_id, kicked_name,
                                                       room_id, room_name,
                                                       reason)

        try:
            # user just got banned globally, kick from all rooms
            if room_id is None or room_id == '':
                room_keys = self.env.db.rooms_for_user(kicked_id).copy().keys()
                for room_key in room_keys:
                    self.kick(activity_json, activity, room_key, kicked_id,
                              kicked_sids, namespace)
            else:
                self.kick(activity_json, activity, room_id, kicked_id,
                          kicked_sids, namespace)
        except KeyError as e:
            logger.error('could not kick user %s: %s' % (kicked_id, str(e)))
            self.env.capture_exception(sys.exc_info())
Esempio n. 2
0
 def test_activity_for_user_kicked(self):
     self.assertIsNotNone(utils.activity_for_user_kicked('1', '2', '3', '4', '5', '6'))