Exemple #1
0
    def _clear_bans(self):
        """
        Clear all room bans.

        NOTE: This method does not seem to be supported
        by tinychat anymore.

        :return: True if bans were cleared, else False.
        :rtype: bool
        """
        header = {
            'X-Requested-With': 'XMLHttpRequest',
            'Referer': self._privacy_url
        }
        form_data = {'_token': self._csrf_token}

        url = 'https://tinychat.com/settings/privacy/clearbans'
        response = web.post(url=url, data=form_data,
                            headers=header, as_json=True, proxy=self._proxy)

        if len(response.errors) > 0:
            log.error(response.errors)
            return False
        else:
            if not response.json['error']:
                if response.json['response'] == 'Bans cleared':
                    return True

            return False
Exemple #2
0
    def _update(self):
        """
        Update the privacy page with the current settings.

        This is called when ever a change is made.
        """
        self._form_data['privacy_changes'] = 1
        self._form_data['_token'] = self._csrf_token

        if not self._form_data['allow_guest']:
            del self._form_data['allow_guest']
        if not self._form_data['require_twitter']:
            del self._form_data['require_twitter']
        if not self._form_data['require_facebook']:
            del self._form_data['require_facebook']
        if not self._form_data['public_directory']:
            del self._form_data['public_directory']
        if not self._form_data['push2talk']:
            del self._form_data['push2talk']
        if not self._form_data['greenroom']:
            del self._form_data['greenroom']

        response = web.post(url=self._privacy_url, data=self._form_data,
                            referer=self._privacy_url, proxy=self._proxy)

        self.parse_settings(response=response)
Exemple #3
0
    def remove_moderator(self, account):
        """
        Remove a room moderator.

        :param account: The moderator account to remove.
        :return: True if removed else False
        :rtype: bool
        """
        url = 'https://tinychat.com/settings/privacy/removefeatureduser'
        if account in self.room_moderators:

            form_data = {
                '_token': self._csrf_token,
                'name': account,
                'type': 'moderator'
            }
            response = web.post(url=url, data=form_data,
                                as_json=True, proxy=self._proxy)
            if len(response.errors) > 0:
                log.error(response.errors)
                return None
            else:
                if not response.json['error'] and response.json['response'] == 'Data removed':
                    self._room_moderators.remove(account)
                    return True
        return False
Exemple #4
0
    def make_moderator(self, account):
        """
        Make a user account a moderator.

        :param account: The account to make a moderator.
        :type account: str
        :return True if the account was added as a moderator, False if already a moderator
        or None on invalid account name or error.
        :rtype: bool | None
        """
        url = 'https://tinychat.com/settings/privacy/addfeatureduser'
        if self._is_valid_account(account):
            if account not in self.room_moderators:

                form_data = {
                    '_token': self._csrf_token,
                    'name': account,
                    'type': 'moderator'
                }
                response = web.post(url=url, data=form_data,
                                    as_json=True, proxy=self._proxy)

                if len(response.errors) > 0:
                    log.error(response.errors)
                    return None
                else:
                    if not response.json['error'] and response.json['response'] == 'Data added':
                        self.parse_settings()
                        if account in self.room_moderators:
                            return True

            return False

        return None
Exemple #5
0
    def set_broadcast_password(self, password=None):
        """
        Set a broadcast password or clear the password.

        :param password: The broadcast password or None to clear.
        :type password: str | None
        """
        if password is None:
            self._broadcast_password = ''
        else:
            self._broadcast_password = password

        if self._room_password is None:
            self._room_password = ''

        form_data = {
            'roomPassword': self._room_password,
            'broadcastPassword': self._broadcast_password,
            'privacy_password': 1,
            '_token': self._csrf_token
        }
        response = web.post(url=self._privacy_url, data=form_data,
                            referer=self._privacy_url)

        self.parse_settings(response=response)
Exemple #6
0
    def login(self):
        """
        Makes a HTTP login POST to tinychat.
        """
        if self._token is None:
            self._parse_token()

        url = 'https://tinychat.com/login'

        form_data = {
            'login_username': self.account,
            'login_password': self.password,
            'remember': '1',
            'next': 'https://tinychat.com/',
            '_token': self._token
        }

        login_response = web.post(url=url, data=form_data, proxy=self._proxy)

        self._parse_token(response=login_response)

        return self.is_logged_in()
Exemple #7
0
    def _set_t2(self):
        """
        Set the t2 property value.

        TODO: Change to property setter. E.g @property.setter ?
        """
        if self.n_key is not None and self.t1 is not None:

            ts = int(web.time.time())
            post_url = self._t2_post_url.format(self.n_key)

            mpd = web.requests_toolbelt.MultipartEncoder(
                fields={
                    'room_name': self._room_name,
                    'user_id': u'%s' % self.user_id,
                    't1': self.t1,
                    'username': self._username
                },
                boundary='-------------------------%s' % ts  # 3106125133281
            )

            header = web.utils.CaseInsensitiveDict(data={
                'Accept-Language': 'en-US,en;q=0.5',
                'Content-Type': mpd.content_type
            })

            response = web.post(url=post_url, post_data=mpd, header=header,
                                referer=self._base_url.format(self._room_name), json=True, proxy=self._proxy)

            if 'error' not in response.json:
                if 't2' in response.json:
                    self._t2 = response.json['t2']
            else:
                raise CouldNotSetT2Error(response.json)
        else:
            raise CouldNotSetT2Error('n_key=%s, t1=%s' % (self.n_key, self.t1))