def authenticate(self, channel, socket_id, custom_data=None): """Used to generate delegated client subscription token. :param channel: name of the channel to authorize subscription to :param socket_id: id of the socket that requires authorization :param custom_data: used on presence channels to provide user info """ channel = validate_channel(channel) if not channel_name_re.match(channel): raise ValueError('Channel should be a valid channel, got: %s' % channel) socket_id = validate_socket_id(socket_id) if custom_data: custom_data = json.dumps(custom_data, cls=self._json_encoder) string_to_sign = "%s:%s" % (socket_id, channel) if custom_data: string_to_sign += ":%s" % custom_data signature = sign(self.secret, string_to_sign) auth = "%s:%s" % (self.key, signature) result = {'auth': auth} if custom_data: result['channel_data'] = custom_data return result
def trigger(self, channels, event_name, data, socket_id=None): """Trigger an event on one or more channels, see: http://pusher.com/docs/rest_api#method-post-event """ if isinstance(channels, six.string_types): channels = [channels] if isinstance(channels, dict) or not isinstance( channels, (collections.Sized, collections.Iterable)): raise TypeError("Expected a single or a list of channels") if len(channels) > 10: raise ValueError("Too many channels") channels = list(map(validate_channel, channels)) event_name = ensure_text(event_name, "event_name") if len(event_name) > 200: raise ValueError("event_name too long") data = data_to_string(data, self._json_encoder) if len(data) > 10240: raise ValueError("Too much data") params = {'name': event_name, 'channels': channels, 'data': data} if socket_id: params['socket_id'] = validate_socket_id(socket_id) return Request(self, POST, "/apps/%s/events" % self.app_id, params)
def trigger(self, channels, event_name, data, socket_id=None): """Trigger an event on one or more channels, see: http://pusher.com/docs/rest_api#method-post-event """ if isinstance(channels, six.string_types): channels = [channels] if isinstance(channels, dict) or not isinstance( channels, (collections.Sized, collections.Iterable)): raise TypeError("Expected a single or a list of channels") if len(channels) > self.max_num_channels: raise ValueError("Too many channels") event_name = ensure_text(event_name, "event_name") if len(event_name) > self.max_len_event_name: raise ValueError("event_name too long") data = data_to_string(data, self._json_encoder) if len(data) > self.max_len_data: raise ValueError("Too much data") channels = list(map(validate_channel, channels)) if len(channels) > 1: for chan in channels: if is_encrypted_channel(chan): raise ValueError( "You cannot trigger to multiple channels when using encrypted channels" ) if is_encrypted_channel(channels[0]): data = json.dumps(encrypt(channels[0], data, self._encryption_master_key), ensure_ascii=False) params = {'name': event_name, 'channels': channels, 'data': data} if socket_id: params['socket_id'] = validate_socket_id(socket_id) return Request(self, POST, "/apps/%s/events" % self.app_id, params)
def trigger(self, channels, event_name, data, socket_id=None): """Trigger an event on one or more channels, see: http://pusher.com/docs/rest_api#method-post-event """ if isinstance(channels, six.string_types): channels = [channels] if isinstance(channels, dict) or not isinstance( channels, (collections.Sized, collections.Iterable)): raise TypeError("Expected a single or a list of channels") if len(channels) > 100: raise ValueError("Too many channels") event_name = ensure_text(event_name, "event_name") if len(event_name) > 200: raise ValueError("event_name too long") data = data_to_string(data, self._json_encoder) if len(data) > 10240: raise ValueError("Too much data") channels = list(map(validate_channel, channels)) if len(channels) > 1: for chan in channels: if is_encrypted_channel(chan): raise ValueError("You cannot trigger to multiple channels when using encrypted channels") if is_encrypted_channel(channels[0]): data = json.dumps(encrypt(channels[0], data, self._encryption_master_key), ensure_ascii=False) params = { 'name': event_name, 'channels': channels, 'data': data} if socket_id: params['socket_id'] = validate_socket_id(socket_id) return Request(self, POST, "/apps/%s/events" % self.app_id, params)
def trigger(self, channels, event_name, data, socket_id=None): ''' Trigger an event on one or more channels, see: http://pusher.com/docs/rest_api#method-post-event ''' if isinstance(channels, six.string_types): channels = [channels] if isinstance(channels, dict) or not isinstance(channels, (collections.Sized, collections.Iterable)): raise TypeError("Expected a single or a list of channels") if len(channels) > 10: raise ValueError("Too many channels") channels = list(map(validate_channel, channels)) event_name = ensure_text(event_name, "event_name") if len(event_name) > 200: raise ValueError("event_name too long") if isinstance(data, six.string_types): data = ensure_text(data, "data") else: data = json.dumps(data, cls=self._json_encoder) if len(data) > 10240: raise ValueError("Too much data") params = { 'name': event_name, 'channels': channels, 'data': data } if socket_id: params['socket_id'] = validate_socket_id(socket_id) return Request(self, POST, "/apps/%s/events" % self.app_id, params)
def authenticate(self, channel, socket_id, custom_data=None): """Used to generate delegated client subscription token. :param channel: name of the channel to authorize subscription to :param socket_id: id of the socket that requires authorization :param custom_data: used on presence channels to provide user info """ channel = validate_channel(channel) if not channel_name_re.match(channel): raise ValueError('Channel should be a valid channel, got: %s' % channel) socket_id = validate_socket_id(socket_id) if custom_data: custom_data = json.dumps(custom_data, cls=self._json_encoder) string_to_sign = "%s:%s" % (socket_id, channel) if custom_data: string_to_sign += ":%s" % custom_data signature = sign(self.secret, string_to_sign) auth = "%s:%s" % (self.key, signature) response_payload = {"auth": auth} if is_encrypted_channel(channel): shared_secret = generate_shared_secret( ensure_binary(channel, "channel"), self._encryption_master_key) shared_secret_b64 = base64.b64encode(shared_secret) response_payload["shared_secret"] = shared_secret_b64 if custom_data: response_payload['channel_data'] = custom_data return response_payload