Metadata-Version: 2.1
Name: glocaltokens
Version: 0.2.3
Summary: Tool to extract Google device local authentication tokens in Python
Home-page: https://github.com/leikoilja/glocaltokens
Author: Ilja Leiko
Author-email: leikoilja@gmail.com
License: MIT
Download-URL: https://pypi.org/project/glocaltokens/
Description: [![GitHub Workflow Status][workflow-shield]][workflow]
        [![Contributors][contributors-shield]][contributors]
        [![PyPI][pypi-shield]][pypi]
        
        [![Open Issues][issues-shield]][issues]
        [![Open Pull-Requests][pr-shield]][pr]
        
        [![GitHub Release][releases-shield]][releases]
        [![GitHub Activity][commits-shield]][commits]
        [![License][license-shield]][license]
        
        # Google home local authentication token extraction
        
        Python 3 package to extract google home devices local authentication tokens from google servers. These local
        authentication tokens are needed to control Google Home devices(See
        @rithvikvibhu's [Google Home (2.0) API](https://rithvikvibhu.github.io/GHLocalApi/)).
        
        Please note:
        Once you have local google authentication tokens they only live about 1 day long. After that you will need to obtain new
        ones. You will probably need to run the script repeatedly storing the tokens somewhere convenient.
        
        ## Quickstart
        
        Note: the package was written and tested on Python 3.
        
        - Install the python package
        
        ```
        pip install glocaltokens
        ```
        
        Use in your program as (see examples folder for detailed example):
        
        ```Python
        from glocaltokens.client import GLocalAuthenticationTokens
        
        # Using google username and password
        #
        # ONLY CALL THIS ONCE
        #
        # If you call this too often, google will disconnect your android devices and other weird things will happen
        #
        # Call get_google_devices_json() afterwards to get timers/alarms as oftens as you want to update.
        client = GLocalAuthenticationTokens(
          username="<YOUR_GOOGLE_USERNAME>",
          password="<YOUR_GOOGLE_PASSWORD>"
        )
        
        # Get master token
        print("[*] Master token", client.get_master_token())
        
        # Get access token (lives 1 hour)
        print("\n[*] Access token (lives 1 hour)", client.get_access_token())
        
        # Get google device local authentication tokens (live about 1 day)
        print("\n[*] Google devices local authentication tokens")
        google_devices = client.get_google_devices_json()
        
        # You can also select specific models to select when calling get_google_devices or get_google_devices_json with the models_list parameter.
        # For example, we have pre-defined a constant with some Google Home Models (WARNING! Not all of them may be present)
        # This could be used this way
        from glocaltokens.const import GOOGLE_HOME_MODELS
        
        google_devices_select = client.get_google_devices_json(GOOGLE_HOME_MODELS)
        
        # But if you need to select just a set of models, or add new models, you can use a list of str
        google_devices_select_2 = client.get_google_devices_json([
            f"Google Home",
            f"Google Home Mini",
            f"Google Nest Mini",
        ])
        ```
        
        ### Predefined models list
        There are some pre-defined models list in [`scanner.py`](/glocaltokens/scanner.py), feel free to
        add new lists, or add models to a list with a pull-request.
        #### `GOOGLE_HOME_MODELS`:
        - Google Home
        - Google Home Mini
        - Google Nest Mini
        - Lenovo Smart Clock
        
        ## Security Recommendation
        
        Never store the user's password nor username in plain text, if storage is necessary, generate a master token and store
        it. Example approach:
        
        ```python
        from glocaltokens.client import GLocalAuthenticationTokens
        
        # Using google username and password first, and only once
        client = GLocalAuthenticationTokens(
          username="<YOUR_GOOGLE_USERNAME>",
          password="<YOUR_GOOGLE_PASSWORD>"
        )
        
        # Get master token
        master_token = client.get_master_token()
        print("[*] Master token", master_token)
        
        """Now store master_token somewhere"""
        
        ```
        
        ## Contributing
        
        This is an open-source project and all countribution is highly welcomed. To contribute please:
        
        - Fork this repo
        - Create a new branch
        - Create a new virtual environment and install dependencies:
          `pip install -r requirements`
        - Implement your changes
        - If possible add tests for your changes
        - Push your changes to your branch
        - Open Pull Request
        
        When writting unittests please follow the good practises like:
        
        - Use `faker` to fake the data. See [examples](https://faker.readthedocs.io/en/master/)
        - Use `mock` to patch objects/methods. See [examples](https://realpython.com/python-mock-library/)
        - You can run `python -m discover -p 'test*.py'` or `tox` inside of your virtual environment to test locally.
        
        # Credits
        
        Much credits go to @rithvikvibhu(https://github.com/rithvikvibhu) for doing most of the heavy work like finding a way to
        extract master and access tokens
        (See his gist [here](https://gist.github.com/rithvikvibhu/952f83ea656c6782fbd0f1645059055d)).
        
        Also, thank you very much to the guys at `pychromecast` which provided the code required to scan devices in the network.
        
        
        [workflow-shield]: https://img.shields.io/github/workflow/status/leikoilja/glocaltokens/Running%20tests?style=for-the-badge
        [workflow]: https://github.com/leikoilja/glocaltokens/actions
        
        [pypi-shield]: https://img.shields.io/pypi/v/glocaltokens?style=for-the-badge
        [pypi]: https://pypi.org/project/glocaltokens/
        
        [issues-shield]: https://img.shields.io/github/issues/leikoilja/glocaltokens?style=for-the-badge
        [issues]: https://github.com/leikoilja/glocaltokens/issues
        
        [pr-shield]: https://img.shields.io/github/issues-pr/leikoilja/glocaltokens?style=for-the-badge
        [pr]: https://github.com/leikoilja/glocaltokens/pulls
        
        [commits-shield]: https://img.shields.io/github/commit-activity/y/leikoilja/glocaltokens?style=for-the-badge
        [commits]: https://github.com/leikoilja/glocaltokens/commits/main
        
        [contributors-shield]: https://img.shields.io/github/contributors/leikoilja/glocaltokens?style=for-the-badge
        [contributors]: https://github.com/leikoilja/glocaltokens/graphs/contributors
        
        [license]: https://github.com/leikoilja/glocaltokens/blob/main/LICENSE
        [license-shield]: https://img.shields.io/github/license/leikoilja/glocaltokens.svg?style=for-the-badge
        
        [releases-shield]: https://img.shields.io/github/release/leikoilja/glocaltokens.svg?style=for-the-badge
        [releases]: https://github.com/leikoilja/glocaltokens/releases
        
        
        ### v0.2.2
        #### Changes
        
        - Removing redundant `uuid` dependency from package setup
        
        ### v0.2.1
        #### Changes
        
        - Zeroconf import @ArnyminerZ (#32)
        
        #### 🚀 Features
        
        - Adding client tests for fetching tokens @leikoilja (#30)
        - Grpcio tools version @ArnyminerZ (#29)
        
        #### 🧰 Maintenance
        
        - Get devices testing @ArnyminerZ (#31)
        
        
        ### v0.2.0
        #### Changes
        
        - Adding support for python 3.9 @leikoilja (#26)
        - Adding isort to pre-commit and github action @leikoilja (#25)
        - Adding logging and pre-commit hooks @leikoilja (#19)
        - Added access token expiration @ArnyminerZ (#9)
        - Update explanation to make sure that others use your script corretly @DurgNomis-drol (#10)
        
        #### 🚀 Features
        
        - Added device IP discovery @ArnyminerZ (#13)
        - Testing environment @leikoilja (#15)
        
        #### 🔧 Enhancement
        
        - Implement typing @ArnyminerZ (#22)
        - Improve Android ID generation @leikoilja (#24)
        
        #### 🧰 Maintenance
        
        - Implement typing @ArnyminerZ (#22)
        
        
        ### v0.1.4
        - Pinning `grpcio==1.31.0` dependency to match with HomeAssistant's version
        
        
        ### v0.1.3
        - Removing `jq` dependency, thanks @DurgNomis-drol
        
        
        ### v0.1.2
        - Removing dependency `requests==2.23.0` since `gpsoauth` is supporting newest versions
        
        
        ### v0.1.1
        - Fixing the `GetHomeGraphResponse.Home.Device.State.value` serialization issue
        
        
        ### v0.1
        - Initial release
        
Keywords: Google,Google Home,Authentication,LocalAuthenticationTokens
Platform: UNKNOWN
Description-Content-Type: text/markdown
