def new_gmail_account(): logger = get_logger() authcode = request.values.get('authcode') redirecturi = request.values.get('redirecturi') reauth = True auth_handler = GmailAuthHandler(provider_name='gmail') auth_handler.OAUTH_REDIRECT_URI = redirecturi auth_info = auth_handler._get_authenticated_user(authcode) auth_info['contacts'] = True auth_info['events'] = True auth_info['provider'] = 'gmail' email_address = auth_info['email'] account_exists = False # Check for email in allowed emails list emails_filter_enabled = config.get('EMAILS_FILTER_ENABLED') allowed_emails = config.get('ALLOWED_EMAILS') if emails_filter_enabled and allowed_emails and email_address not in allowed_emails: return jsonify({"code": "email_not_allowed", "message": "Email not allowed", "profile": auth_info}) with session_scope(0) as db_session: account = db_session.query(Account).filter_by(email_address=email_address).first() if account is not None and not reauth: api_id = account.namespace.public_id return jsonify({"code": "account_exist", "message": "Account already exist", "api_id": api_id}) elif account is not None and reauth: account_exists = True account = auth_handler.update_account(account, auth_info) else: account = auth_handler.create_account(email_address, auth_info) try: if auth_handler.verify_account(account): db_session.add(account) db_session.commit() except NotSupportedError as e: return default_json_error(e) api_id = account.namespace.public_id if account_exists: return jsonify({"code": "account_updated", "message": "Account already exist and Updated", "api_id": api_id}) return jsonify({"code": "account_created", "message": "new account created", "api_id": api_id})
def test_update_account(db): handler = GmailAuthHandler('gmail') # Create an account account = handler.create_account(settings['email'], settings) db.session.add(account) db.session.commit() id_ = account.id # Verify it is updated correctly. updated_settings = copy.deepcopy(settings) updated_settings['name'] = 'Neu!' account = handler.update_account(account, updated_settings) db.session.add(account) db.session.commit() account = db.session.query(Account).get(id_) assert account.name == 'Neu!'
def test_successful_reauth_resets_sync_state(monkeypatch, db): monkeypatch.setattr('inbox.auth.gmail.GmailCrispinClient', mock.Mock()) handler = GmailAuthHandler('gmail') handler.connect_account = lambda account: mock.Mock() account = handler.create_account(settings['email'], settings) assert handler.verify_account(account) is True # Brand new accounts have `sync_state`=None. assert account.sync_state is None db.session.add(account) db.session.commit() # Pretend account sync starts, and subsequently the password changes, # causing the account to be in `sync_state`='invalid'. account.mark_invalid() db.session.commit() assert account.sync_state == 'invalid' # Verify the `sync_state` is reset to 'running' on a successful "re-auth". account = handler.update_account(account, settings) assert handler.verify_account(account) is True assert account.sync_state == 'running' db.session.add(account) db.session.commit()