Ejemplo n.º 1
0
    def _join(self):
        """
        The initial connect message to the room.

        The client sends this after the websocket handshake has been established.
        """
        pat = '^[a-zA-Z0-9_]*$'
        if not string_util.is_valid_string(self.nick, pattern=pat):
            raise InvalidNickNameError('nick name may only contain a-zA-Z0-9_')

        else:

            rtc_version = TinychatApi.rtc_version(self.room)
            if rtc_version is None:
                rtc_version = config.FALLBACK_RTC_VERSION
                log.debug('failed to parse rtc version, using fallback: %s' %
                          rtc_version)

            payload = {
                'tc': 'join',
                'req': self._req,
                'useragent':
                'tinychat-client-webrtc-undefined_win32-' + rtc_version,
                'token': self._connect_args['token'],
                'room': self.room,
                'nick': self.nick
            }
            self.send(payload)
Ejemplo n.º 2
0
    def login(self):
        """
        Login to tinychat.

        :return: True if logged in, else False
        :rtype: bool
        """
        if self.account is not None and self.password is not None:

            if not string_util.is_valid_string(self.account):
                raise InvalidAccountNameError(
                    'account name may only contain letter(a-z) and numbers(0-9)'
                )
            else:

                account = Account(self.account, self.password, self.proxy)
                if not account.is_logged_in():

                    if account.login():
                        self.console.write('Logged in as `%s`' % self.account,
                                           Color.B_GREEN)
                    else:
                        self.console.write(
                            'Failed to login as `%s`' % self.account,
                            Color.B_RED)

                return account.is_logged_in()

        return False
Ejemplo n.º 3
0
    def connect(self):
        """
        Connect to the websocket server.
        """
        if not string_util.is_valid_string(self.room):
            raise InvalidRoomNameError(
                'room name may only contain letters(a-z) and numbers(0-9).')

        else:
            tc_header = {
                'User-Agent':
                'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:66.0) Gecko/20100101 Firefox/66.0',
                'Accept-Language': 'en-US,en;q=0.5',
                'Accept-Encoding': 'gzip, deflate, br',
                'Sec-WebSocket-Protocol': 'tc',
                'Sec-WebSocket-Extensions': 'permessage-deflate'
            }

            websocket.enableTrace(config.DEBUG_MODE)

            self._connect_args = TinychatApi.connect_token(self.room)
            if self._connect_args is not None:

                self._ws = websocket.WebSocketApp(
                    self._connect_args['endpoint'],
                    header=tc_header,
                    on_open=self.on_open,
                    on_message=self.on_message,
                    on_error=self.on_error,
                    on_pong=self.on_pong)

                self._ws.run_forever(origin='https://tinychat.com',
                                     ping_interval=20,
                                     ping_timeout=5)
            else:
                log.info('missing connect args %s' % self._connect_args)
Ejemplo n.º 4
0
 def _is_youtube_id(cls, yid):
     if string_util.is_valid_string(yid, pattern='^[a-zA-Z0-9_-]{11}$'):
         return True
     return False