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)
Example #2
0
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
Example #3
0
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'
Example #4
0
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