コード例 #1
0
    def build_fs(self,
                 current_user,
                 credentials,
                 root=None,
                 callback_url=None,
                 request=None,
                 session=None):
        """Build dropbox filesystem."""
        url = url_for('oauthclient.login', remote_app='dropbox')
        client_id = oauth.remote_apps['dropbox'].consumer_key
        user_id = current_user.get_id()
        token = RemoteToken.get(user_id, client_id)

        if token is not None:
            credentials = {'access_token': token.access_token}
            try:
                filesystem = DropboxFS(root, credentials)
                filesystem.about()
                return filesystem
            except ResourceNotFoundError:
                if (root != "/"):
                    filesystem = DropboxFS("/", credentials)
                filesystem.makedir(root, recursive=True)
                filesystem = DropboxFS(root, credentials)
                return filesystem
            except:
                raise CloudRedirectUrl(url, __name__)
        else:
            raise CloudRedirectUrl(url, __name__)
コード例 #2
0
ファイル: helpers.py プロジェクト: drschoener/zenodo
def get_api(user_id=None):
    """ Get an authenticated GitHub API interface """
    if user_id:
        access_token = RemoteToken.get(user_id, get_client_id()).access_token
    else:
        access_token = get_remote().get_request_token()[0]
    return init_api(access_token)
コード例 #3
0
ファイル: helpers.py プロジェクト: rsalas82/lw-daap
def get_api(user_id=None):
    """ Get an authenticated GitHub API interface """
    if user_id:
        access_token = RemoteToken.get(user_id, get_client_id()).access_token
    else:
        access_token = get_remote().get_request_token()[0]
    return init_api(access_token)
コード例 #4
0
ファイル: google_drive.py プロジェクト: SCOAP3/invenio
    def build_fs(self, current_user, credentials, root=None,
                 callback_url=None, request=None, session=None):
        """Build google drive filesystem."""
        url = url_for('oauthclient.login', remote_app='google_drive')

        client_id = oauth.remote_apps['google_drive'].consumer_key
        client_secret = oauth.remote_apps['google_drive'].consumer_secret
        user_id = current_user.get_id()
        token = RemoteToken.get(user_id, client_id)

        if token is not None:
            credentials = {
                'access_token': token.access_token,
                'client_id': client_id,
                'client_secret': client_secret,
                'refresh_token':
                token.remote_account.extra_data.get('refresh_token'),
                'token_expiry': None,
                'token_uri':
                'https://accounts.google.com/o/oauth2/token'
                }
            try:
                filesystem = GoogleDriveFS(root, credentials)
                filesystem.about()
                return filesystem
            except Exception:
                raise CloudRedirectUrl(url, __name__)
        else:
            raise CloudRedirectUrl(url, __name__)
コード例 #5
0
ファイル: helpers.py プロジェクト: drschoener/zenodo
def get_token(user_id=None):
    """ Retrieve token for linked GitHub account """
    session_token = None
    if user_id is None:
        session_token = token_getter(get_remote())
    if session_token:
        token = RemoteToken.get(current_user.get_id(),
                                get_client_id(),
                                access_token=session_token[0])
        return token
    return None
コード例 #6
0
ファイル: helpers.py プロジェクト: rsalas82/lw-daap
def get_token(user_id=None):
    """ Retrieve token for linked GitHub account """
    session_token = None
    if user_id is None:
        session_token = token_getter(get_remote())
    if session_token:
        token = RemoteToken.get(
            current_user.get_id(), get_client_id(),
            access_token=session_token[0]
        )
        return token
    return None
コード例 #7
0
ファイル: handlers.py プロジェクト: egabancho/zenodo
def disconnect(remote):
    """
    Authorized callback handler for GitHub
    """
    # User must be authenticated
    if not current_user.is_authenticated():
        return current_app.login_manager.unauthorized()

    token = RemoteToken.get(current_user.get_id(), remote.consumer_key)

    if token:
        disconnect_github.delay(
            remote.name, token.access_token, token.remote_account.extra_data
        )
        token.remote_account.delete()

    return redirect(url_for('oauthclient_settings.index'))
コード例 #8
0
def disconnect(remote):
    """
    Disconnect callback handler for GitHub.

    This is a test
    """
    # User must be authenticated
    if not current_user.is_authenticated():
        return current_app.login_manager.unauthorized()

    token = RemoteToken.get(current_user.get_id(), remote.consumer_key)

    if token:
        disconnect_github.delay(remote.name, token.access_token,
                                token.remote_account.extra_data)
        token.remote_account.delete()

    return redirect(url_for('oauthclient_settings.index'))
コード例 #9
0
ファイル: google_drive.py プロジェクト: chokribr/invenio-1
    def build_fs(self,
                 current_user,
                 credentials,
                 root=None,
                 callback_url=None,
                 request=None,
                 session=None):
        """Build google drive filesystem."""
        url = url_for('oauthclient.login', remote_app='google_drive')

        client_id = oauth.remote_apps['google_drive'].consumer_key
        client_secret = oauth.remote_apps['google_drive'].consumer_secret
        user_id = current_user.get_id()
        token = RemoteToken.get(user_id, client_id)

        if token is not None:
            credentials = {
                'access_token':
                token.access_token,
                'client_id':
                client_id,
                'client_secret':
                client_secret,
                'refresh_token':
                token.remote_account.extra_data.get('refresh_token'),
                'token_expiry':
                None,
                'token_uri':
                'https://accounts.google.com/o/oauth2/token'
            }
            try:
                filesystem = GoogleDriveFS(root, credentials)
                filesystem.about()
                return filesystem
            except Exception:
                raise CloudRedirectUrl(url, __name__)
        else:
            raise CloudRedirectUrl(url, __name__)
コード例 #10
0
ファイル: dropbox_factory.py プロジェクト: mhellmic/b2share
    def build_fs(self, current_user, credentials, root=None,
                 callback_url=None, request=None, session=None):
        url = url_for('oauthclient.login', remote_app='dropbox')

        client_id = oauth.remote_apps['dropbox'].consumer_key
        user_id = current_user.get_id()
        token = RemoteToken.get(user_id, client_id)

        if token is not None:
            credentials = {'access_token': token.access_token}
            try:
                filesystem = DropboxFS(root, credentials)
                filesystem.about()
                return filesystem
            except ResourceNotFoundError:
                if(root != "/"):
                    filesystem = DropboxFS("/", credentials)
                filesystem.makedir(root, recursive=True)
                filesystem = DropboxFS(root, credentials)
                return filesystem
            except:
                raise CloudRedirectUrl(url, __name__)
        else:
            raise CloudRedirectUrl(url, __name__)
コード例 #11
0
ファイル: test_views.py プロジェクト: mhellmic/b2share
    def test_token_getter_setter(self, save_session):
        from invenio.modules.oauthclient.models import RemoteToken
        from invenio.modules.oauthclient.handlers import token_getter
        from invenio.modules.oauthclient.client import oauth

        user = MagicMock()
        user.get_id = MagicMock(return_value=1)
        user.is_authenticated = MagicMock(return_value=True)
        with patch('flask.ext.login._get_user', return_value=user):
            with self.app.test_client() as c:
                # First call login to be redirected
                res = c.get(url_for("oauthclient.login", remote_app='full'))
                assert res.status_code == 302
                assert res.location.startswith(
                    oauth.remote_apps['full'].authorize_url
                )
                # Mock resposen class
                self.mock_response(app='full')

                # Imitate that the user authorized our request in the remote
                # application.
                c.get(url_for(
                    "oauthclient.authorized", remote_app='full', code='test',
                ))

                # Assert if every is as it should be.
                assert session['oauth_token_full'] == ('test_access_token', '')

                t = RemoteToken.get(1, "fullid")
                assert t.remote_account.client_id == 'fullid'
                assert t.access_token == 'test_access_token'
                assert RemoteToken.query.count() == 1

                self.mock_response(app='full', data={
                    "access_token": "new_access_token",
                    "scope": "",
                    "token_type": "bearer"
                })

                c.get(url_for(
                    "oauthclient.authorized", remote_app='full', code='test',
                ))

                t = RemoteToken.get(1, "fullid")
                assert t.access_token == 'new_access_token'
                assert RemoteToken.query.count() == 1

                val = token_getter(oauth.remote_apps['full'])
                assert val == ('new_access_token', '')

                # Disconnect account
                res = c.get(url_for(
                    "oauthclient.disconnect", remote_app='full',
                ))
                assert res.status_code == 302
                assert res.location.endswith(
                    url_for('oauthclient_settings.index')
                )
                # Assert that remote account have been removed.
                t = RemoteToken.get(1, "fullid")
                assert t is None
コード例 #12
0
    def test_token_getter_setter(self, session, save_session):
        from invenio.modules.oauthclient.models import RemoteToken
        from invenio.modules.oauthclient.handlers import token_getter
        from invenio.modules.oauthclient.client import oauth

        # Mock user
        user = MagicMock()
        user.get_id = MagicMock(return_value=1)
        user.is_authenticated = MagicMock(return_value=True)

        # Mock session id
        session.sid = '1234'

        with patch('flask_login._get_user', return_value=user):
            with self.app.test_client() as c:
                # First call login to be redirected
                res = c.get(url_for("oauthclient.login", remote_app='full'))
                assert res.status_code == 302
                assert res.location.startswith(
                    oauth.remote_apps['full'].authorize_url
                )
                state = parse_qs(urlparse(res.location).query)['state'][0]

                # Mock resposen class
                self.mock_response(app='full')

                # Imitate that the user authorized our request in the remote
                # application.
                c.get(url_for(
                    "oauthclient.authorized", remote_app='full', code='test',
                    state=state,
                ))

                # Assert if everything is as it should be.
                from flask import session as flask_session
                assert flask_session['oauth_token_full'] == \
                    ('test_access_token', '')

                t = RemoteToken.get(1, "fullid")
                assert t.remote_account.client_id == 'fullid'
                assert t.access_token == 'test_access_token'
                assert RemoteToken.query.count() == 1

                # Mock a new authorized request
                self.mock_response(app='full', data={
                    "access_token": "new_access_token",
                    "scope": "",
                    "token_type": "bearer"
                })

                c.get(url_for(
                    "oauthclient.authorized", remote_app='full', code='test',
                    state=state
                ))

                t = RemoteToken.get(1, "fullid")
                assert t.access_token == 'new_access_token'
                assert RemoteToken.query.count() == 1

                val = token_getter(oauth.remote_apps['full'])
                assert val == ('new_access_token', '')

                # Disconnect account
                res = c.get(url_for(
                    "oauthclient.disconnect", remote_app='full',
                ))
                assert res.status_code == 302
                assert res.location.endswith(
                    url_for('oauthclient_settings.index')
                )
                # Assert that remote account have been removed.
                t = RemoteToken.get(1, "fullid")
                assert t is None