def test_dataverse_add_external_account_existing(self, mock_connection): mock_connection.return_value = create_mock_connection() host = 'myfakehost.data.verse' token = 'dont-use-this-token-in-other-tests' display_name = 'loaded_version' # Save an existing version external_account = ExternalAccount( provider='dataverse', provider_name='Dataverse', display_name=display_name, oauth_key=host, oauth_secret=token, provider_id=token, ) external_account.save() url = api_url_for('dataverse_add_user_account') params = {'host': host, 'api_token': token} self.app.post_json(url, params, auth=self.user.auth) self.user.reload() assert_equal(len(self.user.external_accounts), 1) external_account = self.user.external_accounts[0] assert_equal(external_account.provider, 'dataverse') assert_equal(external_account.oauth_key, host) assert_equal(external_account.oauth_secret, token) # Ensure we got the loaded version assert_equal(external_account.display_name, display_name)
def migrate_to_external_account(user_settings_document): user_info = utils.get_user_info( access_key=user_settings_document['access_key'], secret_key=user_settings_document['secret_key']) user = User.load(user_settings_document['owner']) if not user_info: return (None, None, None) new = False try: external_account = ExternalAccount.find_one( Q('provider_id', 'eq', user_info.id)) logger.info( 'Duplicate account use found: s3usersettings {0} with id {1}'. format(user_settings_document['_id'], user._id)) except NoResultsFound: new = True external_account = ExternalAccount( provider=PROVIDER, provider_name=PROVIDER_NAME, provider_id=user_info.id, oauth_key=user_settings_document['access_key'], oauth_secret=user_settings_document['secret_key'], display_name=user_info.display_name, ) external_account.save() user.external_accounts.append(external_account) user.save() return external_account, user, new
def migrate_to_external_account(user_settings_document): if not user_settings_document.get('access_token'): return (None, None, None) new = False user = User.load(user_settings_document['owner']) try: external_account = ExternalAccount.find( Q('provider_id', 'eq', user_settings_document['dropbox_id']))[0] logger.info( 'Duplicate account use found: User {0} with dropbox_id {1}'.format( user.username, user_settings_document['dropbox_id'])) except IndexError: new = True external_account = ExternalAccount( provider=PROVIDER, provider_name=PROVIDER_NAME, provider_id=user_settings_document['dropbox_id'], oauth_key=user_settings_document['access_token'], display_name=user_settings_document['dropbox_info'].get( 'display_name', None) if user_settings_document.get( 'dropbox_info', None) else None, ) external_account.save() # generate pk for external accountc user.external_accounts.append(external_account) user.save() return external_account, user, new
def test_dataverse_add_external_account_existing(self, mock_connection): mock_connection.return_value = create_mock_connection() host = 'myfakehost.data.verse' token = 'dont-use-this-token-in-other-tests' display_name = 'loaded_version' # Save an existing version external_account = ExternalAccount( provider='dataverse', provider_name='Dataverse', display_name=display_name, oauth_key=host, oauth_secret=token, provider_id=token, ) external_account.save() url = api_url_for('dataverse_add_user_account') params = {'host': host, 'api_token': token} self.app.post_json(url, params, auth=self.user.auth) self.user.reload() assert_equal(len(self.user.external_accounts), 1) external_account = self.user.external_accounts[0] assert_equal(external_account.provider, 'dataverse') assert_equal(external_account.oauth_key, host) assert_equal(external_account.oauth_secret, token) # Ensure we got the loaded version assert_equal(external_account.display_name, display_name)
def migrate_to_external_account(user_settings_document): user_info = utils.get_user_info(access_key=user_settings_document['access_key'], secret_key=user_settings_document['secret_key']) user = User.load(user_settings_document['owner']) if not user_info: return (None, None, None) new = False try: external_account = ExternalAccount.find_one(Q('provider_id', 'eq', user_info.id)) logger.info('Duplicate account use found: s3usersettings {0} with id {1}'.format(user_settings_document['_id'], user._id)) except NoResultsFound: new = True external_account = ExternalAccount( provider=PROVIDER, provider_name=PROVIDER_NAME, provider_id=user_info.id, oauth_key=user_settings_document['access_key'], oauth_secret=user_settings_document['secret_key'], display_name=user_info.display_name, ) external_account.save() user.external_accounts.append(external_account) user.save() return external_account, user, new
def s3_add_user_account(auth, **kwargs): """Verifies new external account credentials and adds to user's list""" try: access_key = request.json['access_key'] secret_key = request.json['secret_key'] except KeyError: raise HTTPError(httplib.BAD_REQUEST) if not (access_key and secret_key): return { 'message': 'All the fields above are required.' }, httplib.BAD_REQUEST user_info = utils.get_user_info(access_key, secret_key) if not user_info: return { 'message': ('Unable to access account.\n' 'Check to make sure that the above credentials are valid, ' 'and that they have permission to list buckets.') }, httplib.BAD_REQUEST if not utils.can_list(access_key, secret_key): return { 'message': ('Unable to list buckets.\n' 'Listing buckets is required permission that can be changed via IAM' ) }, httplib.BAD_REQUEST account = None try: account = ExternalAccount( provider=SHORT_NAME, provider_name=FULL_NAME, oauth_key=access_key, oauth_secret=secret_key, provider_id=user_info.id, display_name=user_info.display_name, ) account.save() except KeyExistsException: # ... or get the old one account = ExternalAccount.find_one( Q('oauth_key', 'eq', access_key) & Q('oauth_secret', 'eq', secret_key)) assert account is not None if account not in auth.user.external_accounts: auth.user.external_accounts.append(account) # Ensure S3 is enabled. auth.user.get_or_add_addon('s3', auth=auth) auth.user.save() return {}
def s3_add_user_account(auth, **kwargs): """Verifies new external account credentials and adds to user's list""" try: access_key = request.json['access_key'] secret_key = request.json['secret_key'] except KeyError: raise HTTPError(httplib.BAD_REQUEST) if not (access_key and secret_key): return { 'message': 'All the fields above are required.' }, httplib.BAD_REQUEST user_info = utils.get_user_info(access_key, secret_key) if not user_info: return { 'message': ('Unable to access account.\n' 'Check to make sure that the above credentials are valid, ' 'and that they have permission to list buckets.') }, httplib.BAD_REQUEST if not utils.can_list(access_key, secret_key): return { 'message': ('Unable to list buckets.\n' 'Listing buckets is required permission that can be changed via IAM') }, httplib.BAD_REQUEST account = None try: account = ExternalAccount( provider=SHORT_NAME, provider_name=FULL_NAME, oauth_key=access_key, oauth_secret=secret_key, provider_id=user_info.id, display_name=user_info.display_name, ) account.save() except KeyExistsException: # ... or get the old one account = ExternalAccount.find_one( Q('provider', 'eq', SHORT_NAME) & Q('provider_id', 'eq', user_info.id) ) assert account is not None if account not in auth.user.external_accounts: auth.user.external_accounts.append(account) # Ensure S3 is enabled. auth.user.get_or_add_addon('s3', auth=auth) auth.user.save() return {}
def do_migration(records): database['googledrivenodesettings'].update({'user_settings': { '$type': 2 }}, {'$rename': { 'user_settings': 'foreign_user_settings' }}, multi=True) for user_addon in records: user = user_addon.owner old_account = user_addon.oauth_settings logger.info('Record found for user {}'.format(user._id)) # Create/load external account and append to user try: account = ExternalAccount( provider='googledrive', provider_name='Google Drive', display_name=old_account.username, oauth_key=old_account.access_token, refresh_token=old_account.refresh_token, provider_id=old_account.user_id, expires_at=old_account.expires_at, ) account.save() except KeyExistsException: # ... or get the old one account = ExternalAccount.find_one( Q('provider', 'eq', 'googledrive') & Q('provider_id', 'eq', old_account.user_id)) assert account is not None user.external_accounts.append(account) user.save() # Remove oauth_settings from user settings object user_addon.oauth_settings = None user_addon.save() logger.info('Added external account {0} to user {1}'.format( account._id, user._id, )) # Add external account to authorized nodes for node in GoogleDriveNodeSettings.find(): if node.foreign_user_settings is None: continue logger.info('Migrating user_settings for googledrive {}'.format( node._id)) node.user_settings = node.foreign_user_settings node.save()
def do_migration(records): host = 'dataverse.harvard.edu' for user_addon in records: user = user_addon.owner api_token = user_addon.api_token logger.info('Record found for user {}'.format(user._id)) # Modified from `dataverse_add_user_account` # Create/load external account and append to user try: account = ExternalAccount( provider='dataverse', provider_name='Dataverse', display_name=host, oauth_key=host, oauth_secret=api_token, provider_id=api_token, ) account.save() except KeyExistsException: # ... or get the old one account = ExternalAccount.find_one( Q('provider', 'eq', 'dataverse') & Q('provider_id', 'eq', api_token)) assert account is not None user.external_accounts.append(account) user.save() # Remove api_token from user settings object user_addon.api_token = None user_addon.save() logger.info('Added external account {0} to user {1}'.format( account._id, user._id, )) ####### BROKEN ####### # Field user_addon needed to be user_addon._id for lookup. # # Add external account to authorized nodes for node_addon in get_authorized_node_settings(user_addon): node_addon.set_auth(account, user) logger.info('Added external account {0} to node {1}'.format( account._id, node_addon.owner._id, ))
def do_migration(records): host = 'dataverse.harvard.edu' for user_addon in records: user = user_addon.owner api_token = user_addon.api_token logger.info('Record found for user {}'.format(user._id)) # Modified from `dataverse_add_user_account` # Create/load external account and append to user try: account = ExternalAccount( provider='dataverse', provider_name='Dataverse', display_name=host, oauth_key=host, oauth_secret=api_token, provider_id=api_token, ) account.save() except KeyExistsException: # ... or get the old one account = ExternalAccount.find_one( Q('provider', 'eq', 'dataverse') & Q('provider_id', 'eq', api_token) ) assert account is not None user.external_accounts.append(account) user.save() # Remove api_token from user settings object user_addon.api_token = None user_addon.save() logger.info('Added external account {0} to user {1}'.format( account._id, user._id, )) ####### BROKEN ####### # Field user_addon needed to be user_addon._id for lookup. # # Add external account to authorized nodes for node_addon in get_authorized_node_settings(user_addon): node_addon.set_auth(account, user) logger.info('Added external account {0} to node {1}'.format( account._id, node_addon.owner._id, ))
def do_migration(records): database['googledrivenodesettings'].update({'user_settings': {'$type': 2}}, {'$rename': { 'user_settings': 'foreign_user_settings'}}, multi=True) for user_addon in records: user = user_addon.owner old_account = user_addon.oauth_settings logger.info('Record found for user {}'.format(user._id)) # Create/load external account and append to user try: account = ExternalAccount( provider='googledrive', provider_name='Google Drive', display_name=old_account.username, oauth_key=old_account.access_token, refresh_token=old_account.refresh_token, provider_id=old_account.user_id, expires_at=old_account.expires_at, ) account.save() except KeyExistsException: # ... or get the old one account = ExternalAccount.find_one( Q('provider', 'eq', 'googledrive') & Q('provider_id', 'eq', old_account.user_id) ) assert account is not None user.external_accounts.append(account) user.save() # Remove oauth_settings from user settings object user_addon.oauth_settings = None user_addon.save() logger.info('Added external account {0} to user {1}'.format( account._id, user._id, )) # Add external account to authorized nodes for node in GoogleDriveNodeSettings.find(): if node.foreign_user_settings is None: continue logger.info('Migrating user_settings for googledrive {}'.format(node._id)) node.user_settings = node.foreign_user_settings node.save()
def migrate_to_external_account(user_settings_document, oauth_settings_document): if not oauth_settings_document.get('oauth_access_token'): return (None, None, None) try: user_info = GitHubClient( access_token=oauth_settings_document['oauth_access_token']).user() except (GitHubError, ApiError): user_id = oauth_settings_document['github_user_id'] profile_url = None display_name = oauth_settings_document['github_user_name'] else: user_id = user_info.id profile_url = user_info.html_url display_name = user_info.login new = False user = User.load(user_settings_document['owner']) try: external_account = ExternalAccount.find(Q('provider_id', 'eq', user_id))[0] logger.info( 'Duplicate account use found: User {0} with github_user_id {1}'. format(user.username, user_id)) except IndexError: new = True external_account = ExternalAccount( provider=PROVIDER, provider_name=PROVIDER_NAME, provider_id=user_id, profile_url=profile_url, oauth_key=oauth_settings_document['oauth_access_token'], display_name=display_name, ) external_account.save() if not profile_url: invalid_oauth_creds[external_account._id] = ( user_settings_document['_id'], oauth_settings_document['_id']) logger.info( "Created ExternalAccount<_id:{0}> with invalid oauth credentials." .format(external_account._id)) user.external_accounts.append(external_account) user.save() return external_account, user, new
def migrate_to_external_account(user_settings_document): if not user_settings_document.get('access_token'): return (None, None, None) new = False user = User.load(user_settings_document['owner']) try: external_account = ExternalAccount.find(Q('provider_id', 'eq', user_settings_document['dropbox_id']))[0] logger.info('Duplicate account use found: User {0} with dropbox_id {1}'.format(user.username, user_settings_document['dropbox_id'])) except IndexError: new = True external_account = ExternalAccount( provider=PROVIDER, provider_name=PROVIDER_NAME, provider_id=user_settings_document['dropbox_id'], oauth_key=user_settings_document['access_token'], display_name=user_settings_document['dropbox_info'].get('display_name', None) if user_settings_document.get('dropbox_info', None) else None, ) external_account.save() # generate pk for external accountc user.external_accounts.append(external_account) user.save() return external_account, user, new
def migrate_to_external_account(user_settings_document, oauth_settings_document): if not oauth_settings_document.get('oauth_access_token'): return (None, None, None) try: user_info = GitHubClient(access_token=oauth_settings_document['oauth_access_token']).user() except (GitHubError, ApiError): user_id = oauth_settings_document['github_user_id'] profile_url = None display_name = oauth_settings_document['github_user_name'] else: user_id = user_info.id profile_url = user_info.html_url display_name = user_info.login new = False user = User.load(user_settings_document['owner']) try: external_account = ExternalAccount.find(Q('provider_id', 'eq', user_id))[0] logger.info('Duplicate account use found: User {0} with github_user_id {1}'.format(user.username, user_id)) except IndexError: new = True external_account = ExternalAccount( provider=PROVIDER, provider_name=PROVIDER_NAME, provider_id=user_id, profile_url=profile_url, oauth_key=oauth_settings_document['oauth_access_token'], display_name=display_name, ) external_account.save() if not profile_url: invalid_oauth_creds[external_account._id] = (user_settings_document['_id'], oauth_settings_document['_id']) logger.info("Created ExternalAccount<_id:{0}> with invalid oauth credentials.".format( external_account._id )) user.external_accounts.append(external_account) user.save() return external_account, user, new