Beispiel #1
0
def dropbox_oauth_finish(auth, **kwargs):
    """View called when the Oauth flow is completed. Adds a new DropboxUserSettings
    record to the user and saves the user's access token and account info.
    """
    if not auth.logged_in:
        raise HTTPError(http.FORBIDDEN)
    user = auth.user

    node = Node.load(session.data.get('dropbox_auth_nid'))
    result = finish_auth(node)
    # If result is a redirect response, follow the redirect
    if isinstance(result, BaseResponse):
        return result
    # Make sure user has dropbox enabled
    user.add_addon('dropbox')
    user.save()
    user_settings = user.get_addon('dropbox')
    user_settings.owner = user
    user_settings.access_token = result.access_token
    user_settings.dropbox_id = result.dropbox_id
    client = get_client_from_user_settings(user_settings)
    user_settings.dropbox_info = client.account_info()
    user_settings.save()

    if node:
        del session.data['dropbox_auth_nid']
        # Automatically use newly-created auth
        if node.has_addon('dropbox'):
            node_addon = node.get_addon('dropbox')
            node_addon.set_user_auth(user_settings)
            node_addon.save()
        return redirect(node.web_url_for('node_setting'))
    return redirect(web_url_for('user_addons'))
Beispiel #2
0
def dropbox_oauth_finish(auth, **kwargs):
    """View called when the Oauth flow is completed. Adds a new DropboxUserSettings
    record to the user and saves the user's access token and account info.
    """
    if not auth.logged_in:
        raise HTTPError(http.FORBIDDEN)
    user = auth.user

    node = Node.load(session.data.get('dropbox_auth_nid'))
    result = finish_auth(node)
    # If result is a redirect response, follow the redirect
    if isinstance(result, BaseResponse):
        return result
    # Make sure user has dropbox enabled
    user.add_addon('dropbox')
    user.save()
    user_settings = user.get_addon('dropbox')
    user_settings.owner = user
    user_settings.access_token = result.access_token
    user_settings.dropbox_id = result.dropbox_id
    client = get_client_from_user_settings(user_settings)
    user_settings.dropbox_info = client.account_info()
    user_settings.save()

    if node:
        del session.data['dropbox_auth_nid']
        # Automatically use newly-created auth
        if node.has_addon('dropbox'):
            node_addon = node.get_addon('dropbox')
            node_addon.set_user_auth(user_settings)
            node_addon.save()
        return redirect(node.web_url_for('node_setting'))
    return redirect(web_url_for('user_addons'))
Beispiel #3
0
def dropbox_user_config_get(user_addon, auth, **kwargs):
    """View for getting a JSON representation of the logged-in user's
    Dropbox user settings.
    """
    urls = {
        'create': api_url_for('dropbox_oauth_start_user'),
        'delete': api_url_for('dropbox_oauth_delete_user')
    }
    info = user_addon.dropbox_info
    valid_credentials = True

    if user_addon.has_auth:
        try:
            client = get_client_from_user_settings(user_addon)
            client.account_info()
        except ErrorResponse as error:
            if error.status == 401:
                valid_credentials = False
            else:
                HTTPError(http.BAD_REQUEST)

    return {
        'result': {
            'userHasAuth': user_addon.has_auth,
            'validCredentials': valid_credentials,
            'dropboxName': info['display_name'] if info else None,
            'nNodesAuthorized': len(user_addon.nodes_authorized),
            'urls': urls
        },
    }, http.OK
Beispiel #4
0
def dropbox_user_config_get(user_addon, auth, **kwargs):
    """View for getting a JSON representation of the logged-in user's
    Dropbox user settings.
    """
    urls = {
        'create': api_url_for('dropbox_oauth_start_user'),
        'delete': api_url_for('dropbox_oauth_delete_user')
    }
    info = user_addon.dropbox_info
    valid_credentials = True

    if user_addon.has_auth:
        try:
            client = get_client_from_user_settings(user_addon)
            client.account_info()
        except ErrorResponse as error:
            if error.status == 401:
                valid_credentials = False
            else:
                HTTPError(http.BAD_REQUEST)

    return {
        'result': {
            'userHasAuth': user_addon.has_auth,
            'validCredentials': valid_credentials,
            'dropboxName': info['display_name'] if info else None,
            'nNodesAuthorized': len(user_addon.nodes_authorized),
            'urls': urls
        },
    }, http.OK
Beispiel #5
0
def dropbox_oauth_delete_user(user_addon, auth, **kwargs):
    """View for deauthorizing Dropbox."""
    try:
        client = get_client_from_user_settings(user_addon)
        client.disable_access_token()
    except ErrorResponse as error:
        if error.status == 401:
            pass
        else:
            raise HTTPError(http.BAD_REQUEST)
    user_addon.delete()
    user_addon.save()

    return None
Beispiel #6
0
def dropbox_oauth_delete_user(user_addon, auth, **kwargs):
    """View for deauthorizing Dropbox."""
    try:
        client = get_client_from_user_settings(user_addon)
        client.disable_access_token()
    except ErrorResponse as error:
        if error.status == 401:
            pass
        else:
            raise HTTPError(http.BAD_REQUEST)
    user_addon.delete()
    user_addon.save()

    return None
Beispiel #7
0
def serialize_settings(node_settings, current_user, client=None):
    """View helper that returns a dictionary representation of a
    DropboxNodeSettings record. Provides the return value for the
    dropbox config endpoints.
    """
    user_settings = node_settings.user_settings
    user_is_owner = user_settings is not None and (
        user_settings.owner._primary_key == current_user._primary_key)
    current_user_settings = current_user.get_addon('dropbox')
    valid_credentials = True

    if user_settings:
        try:
            client = client or get_client_from_user_settings(user_settings)
            client.account_info()
        except ErrorResponse as error:
            if error.status == 401:
                valid_credentials = False
            else:
                raise HTTPError(http.BAD_REQUEST)

    result = {
        'nodeHasAuth':
        node_settings.has_auth,
        'userIsOwner':
        user_is_owner,
        'userHasAuth':
        current_user_settings is not None and current_user_settings.has_auth,
        'validCredentials':
        valid_credentials,
        'urls':
        serialize_urls(node_settings),
    }

    if node_settings.has_auth:
        # Add owner's profile URL
        result['urls']['owner'] = web_url_for(
            'profile_view_id', uid=user_settings.owner._primary_key)
        result['ownerName'] = user_settings.owner.fullname
        # Show available folders
        path = node_settings.folder
        if path is None:
            result['folder'] = {'name': None, 'path': None}
        else:
            result['folder'] = {
                'name': path if path != '/' else '/ (Full Dropbox)',
                'path': path
            }
    return result
Beispiel #8
0
def serialize_settings(node_settings, current_user, client=None):
    """View helper that returns a dictionary representation of a
    DropboxNodeSettings record. Provides the return value for the
    dropbox config endpoints.
    """
    user_settings = node_settings.user_settings
    user_is_owner = user_settings is not None and (
        user_settings.owner._primary_key == current_user._primary_key
    )
    current_user_settings = current_user.get_addon('dropbox')
    valid_credentials = True

    if user_settings:
        try:
            client = client or get_client_from_user_settings(user_settings)
            client.account_info()
        except ErrorResponse as error:
            if error.status == 401:
                valid_credentials = False
            else:
                raise HTTPError(http.BAD_REQUEST)

    result = {
        'nodeHasAuth': node_settings.has_auth,
        'userIsOwner': user_is_owner,
        'userHasAuth': current_user_settings is not None and current_user_settings.has_auth,
        'validCredentials': valid_credentials,
        'urls': serialize_urls(node_settings),
    }

    if node_settings.has_auth:
        # Add owner's profile URL
        result['urls']['owner'] = web_url_for('profile_view_id',
            uid=user_settings.owner._primary_key)
        result['ownerName'] = user_settings.owner.fullname
        # Show available folders
        path = node_settings.folder
        if path is None:
            result['folder'] = {'name': None, 'path': None}
        else:
            result['folder'] = {
                'name': 'Dropbox' + path,
                'path': path
            }
    return result
Beispiel #9
0
def dropbox_user_config_get(auth, **kwargs):
    """View for getting a JSON representation of the logged-in user's
    Dropbox user settings.
    """
    urls = {
        'create': api_url_for('dropbox_oauth_start_user'),
        'delete': api_url_for('dropbox_oauth_delete_user')
    }
    user_addon = auth.user.get_addon('dropbox')

    info = None
    user_has_auth = False
    n_nodes_authorized = 0
    valid_credentials = True
    if user_addon:
        info = user_addon.dropbox_info
        user_has_auth = user_addon.has_auth
        n_nodes_authorized = len(user_addon.nodes_authorized)

        if user_addon.has_auth:
            try:
                client = get_client_from_user_settings(user_addon)
                client.account_info()
            except ErrorResponse as error:
                if error.status == 401:
                    valid_credentials = False
                else:
                    raise HTTPError(http.BAD_REQUEST,
                                    data=dict(message_long=error.error_msg))

    return {
        'result': {
            'userHasAuth': user_has_auth,
            'validCredentials': valid_credentials,
            'dropboxName': info['display_name'] if info else None,
            'nNodesAuthorized': n_nodes_authorized,
            'urls': urls
        },
    }, http.OK
Beispiel #10
0
def dropbox_user_config_get(auth, **kwargs):
    """View for getting a JSON representation of the logged-in user's
    Dropbox user settings.
    """
    urls = {
        'create': api_url_for('dropbox_oauth_start_user'),
        'delete': api_url_for('dropbox_oauth_delete_user')
    }
    user_addon = auth.user.get_addon('dropbox')

    info = None
    user_has_auth = False
    n_nodes_authorized = 0
    valid_credentials = True
    if user_addon:
        info = user_addon.dropbox_info
        user_has_auth = user_addon.has_auth
        n_nodes_authorized = len(user_addon.nodes_authorized)

        if user_addon.has_auth:
            try:
                client = get_client_from_user_settings(user_addon)
                client.account_info()
            except ErrorResponse as error:
                if error.status == 401:
                    valid_credentials = False
                else:
                    raise HTTPError(http.BAD_REQUEST, data=dict(message_long=error.error_msg))

    return {
        'result': {
            'userHasAuth': user_has_auth,
            'validCredentials': valid_credentials,
            'dropboxName': info['display_name'] if info else None,
            'nNodesAuthorized': n_nodes_authorized,
            'urls': urls
        },
    }, http.OK
Beispiel #11
0
 def test_get_client_from_user_settings(self):
     client = get_client_from_user_settings(self.user_settings)
     assert_true(isinstance(client, DropboxClient))