Exemple #1
0
def pusher_auth(request):
    profile = ModelFactory.profile_from_request(request)

    log.debug('Pusher Auth called.')
    if request.method != 'POST':
        raise Http404('Unexpected method type for Pusher access.')

    p = Pusher(
    app_id=os.environ['PUSHER_APP_ID'],
        key=os.environ['PUSHER_APP_KEY'],
        secret=os.environ['PUSHER_APP_SECRET'],
        ssl=True,
        port=443
    )

    channel_name = request.POST.get('channel_name')
    socket_id = request.POST.get('socket_id')
    log.debug('Pusher Auth Channel_Name: {}'.format(channel_name))
    log.debug('Pusher Auth Socket ID: {}'.format(socket_id))
    data = {
        'user_id': str(profile.uuid),
        'user_info': {
            'name': profile.get_full_name(),
            'avatar_cropped_url': profile.avatar_cropped.url
        }
    }

    auth = p.authenticate(channel=channel_name, socket_id=socket_id, custom_data=data)
    return JsonResponse(auth)
Exemple #2
0
class Sender:
    """Pusher send side logic."""
    def __init__(self,
                 app_id,
                 key,
                 secret,
                 channel_name,
                 cluster=None,
                 encrypted=None):
        """Initializes the server object."""
        if cluster is None:
            cluster = 'mt1'

        if encrypted is None:
            encrypted = True

        self.pusher = Pusher(app_id,
                             key,
                             secret,
                             cluster=cluster,
                             ssl=encrypted)

        self.app_id = app_id
        self.key = key
        self.secret = secret
        self.channel_name = channel_name
        self.cluster = cluster
        self.encrypted = encrypted
        self.socket_id = u"1234.12"
        self.auth = self.join_channel()

    def join_channel(self):
        """ Authenticates for the channel and return auth"""
        return self.pusher.authenticate(self.channel_name, self.socket_id)

    def send_message(self, event, message, channel=None):
        """Send an event to the channel"""
        if channel is None:
            channel = self.channel_name
        self.pusher.trigger(channel, event, message)
class Chatkit:
    client = Client()

    def __init__(self, **kwargs):
        base_options = {
            'locator': kwargs.get('instance_locator'),
            'key': kwargs.get('key'),
            'port': kwargs.get('port'),
            'host': kwargs.get('host'),
            'client': kwargs.get('client')
        }

        self.api_instance = Pusher({
            **base_options,
            **{
                'service_name': 'chatkit',
                'service_version': 'v1'
            }
        })
        self.authorizer_instance = Pusher({
            **base_options,
            **{
                'service_name': 'chatkit_authorizer',
                'service_version': 'v1'
            }
        })

    def authenticate(self, request, **kwargs):
        return self.api_instance.authenticate(request, kwargs)

    def generate_access_token(self, **kwargs):
        return self.api_instance.generate_access_token(kwargs)

    # User API
    def create_user(self, id, name, avatar_url, custom_data):
        pass

    def delete_user(self, id):
        pass

    def get_users(self, from_id):
        pass

    def get_users_by_ids(self, user_ids):
        pass

    # Room API
    def get_room(self, room_id):
        pass

    def get_room_messages(self, room_id, initial_id, direction, limit):
        pass

    def get_rooms(self, from_id):
        pass

    # Authorizer API
    def create_room_role(self, name, permissions):
        return self._create_role(name, Permissions.ROOM_SCOPE, permissions)

    def create_global_role(self, name, permissions):
        return self._create_role(name, Permissions.GLOBAL_SCOPE, permissions)

    def delete_room_role(self, role_name):
        return self._delete_role(role_name, Permissions.ROOM_SCOPE)

    def delete_global_role(self, role_name):
        return self._delete_role(role_name, Permissions.GLOBAL_SCOPE)

    def assign_global_role_to_user(self, user_id, role_name):
        return self._assign_role_to_user(user_id, role_name, None)

    def assign_room_role_to_user(self, user_id, role_name, room_id):
        return self._assign_role_to_user(user_id, role_name, room_id)

    def get_roles(self):
        pass

    def get_user_roles(self, user_id):
        pass

    def remove_global_role_for_user(self, user_id):
        return self._remove_role_for_user(user_id, None)

    def remove_room_role_for_user(self, user_id, room_id):
        return self._remove_role_for_user(user_id, room_id)

    def get_permissions_for_global_role(self, role_name):
        return self._get_permissions_for_role(role_name,
                                              Permissions.GLOBAL_SCOPE)

    def get_permissions_for_room_role(self, role_name):
        return self._get_permissions_for_role(role_name,
                                              Permissions.ROOM_SCOPE)

    def update_role_permissions(self, role_name, scope, permissions_to_add,
                                permissions_to_remove):
        self._check_permissions(permissions_to_add + permissions_to_remove)

    def _create_role(self, name, scope, permissions):
        pass

    def _delete_role(self, role_name, scope):
        pass

    def _assign_role_to_user(self, user_id, role_name, room_id):
        pass

    def _remove_role_for_user(self, user_id, room_id):
        pass

    def _get_permissions_for_role(self, role_name, scope):
        pass

    def _check_permissions(self, permissions):
        pass