def main(): parser = argparse.ArgumentParser(description="Authenticate with xbox live") parser.add_argument('--tokens', '-t', default=TOKENS_FILE, help="Token filepath, file gets created if nonexistent and auth is successful." " Default: {}".format(TOKENS_FILE)) parser.add_argument('--email', '-e', help="Microsoft Account Email address") parser.add_argument('--password', '-p', help="Microsoft Account password") args = parser.parse_args() tokens_loaded = False two_factor_auth_required = False server_data = None auth_mgr = AuthenticationManager() if args.tokens: try: auth_mgr.load(args.tokens) tokens_loaded = True except FileNotFoundError as e: print('Failed to load tokens from \'{}\'. Error: {}'.format(e.filename, e.strerror)) auth_mgr.email_address = args.email auth_mgr.password = args.password if (not args.email or not args.password) and not tokens_loaded: print("Please input authentication credentials") if not args.email and not tokens_loaded: auth_mgr.email_address = input("Microsoft Account Email: ") if not args.password and not tokens_loaded: auth_mgr.password = getpass.getpass('Microsoft Account Password: '******'2FA is required, message: %s' % e) two_factor_auth_required = True server_data = e.server_data except AuthenticationException as e: print('Email/Password authentication failed! Err: %s' % e) sys.exit(-1) if two_factor_auth_required: try: two_factor_auth(auth_mgr, server_data) except AuthenticationException as e: print('2FA Authentication failed! Err: %s' % e) sys.exit(-1) if args.tokens: auth_mgr.dump(args.tokens) print('Refresh Token: %s' % auth_mgr.refresh_token) print('XSTS Token: %s' % auth_mgr.xsts_token) print('Userinfo: %s' % auth_mgr.userinfo)
def test_auth_invalid_credentials(): auth_manager = AuthenticationManager() auth_manager.email_address = "*****@*****.**" auth_manager.password = "******" with Betamax(auth_manager.session).use_cassette('invalid_auth'): with pytest.raises(AuthenticationException): auth_manager.authenticate() assert auth_manager.authenticated is False
def test_auth_valid_credentials(): auth_manager = AuthenticationManager() auth_manager.email_address = "*****@*****.**" auth_manager.password = "******" with Betamax(auth_manager.session).use_cassette('full_auth'): auth_manager.authenticate(do_refresh=False) assert auth_manager.authenticated is True assert auth_manager.xsts_token.is_valid is True assert auth_manager.access_token.is_valid is True assert auth_manager.refresh_token.is_valid is True assert auth_manager.user_token.is_valid is True assert auth_manager.userinfo.userhash == '1674471606081042789' assert auth_manager.userinfo.xuid == '2535428504476914' assert auth_manager.userinfo.gamertag == 'xboxWebapiGamertag'
def _do_2fa(cassette_name, strategy_index, proof=None, otc=None): auth_manager = AuthenticationManager() auth_manager.email_address = '*****@*****.**' auth_manager.password = '******' with Betamax(auth_manager.session).use_cassette(cassette_name): with pytest.raises(TwoFactorAuthRequired) as excinfo: auth_manager.authenticate() two_fa_auth = TwoFactorAuthentication( auth_manager.session, auth_manager.email_address, excinfo.value.server_data ) two_fa_auth.check_otc(strategy_index, proof) access_token, refresh_token = two_fa_auth.authenticate(strategy_index, proof, otc) auth_manager.access_token = access_token auth_manager.refresh_token = refresh_token auth_manager.authenticate(do_refresh=False) return auth_manager