[![GitHub Workflow Status][workflow-shield]][workflow]
[![PyPI][pypi-shield]][pypi]
[![Downloads][pepy-shield]][pepy]
[![Pre-commit][pre-commit-shield]][pre-commit]
[![GitHub Activity][commits-shield]][commits]
# 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](https://github.com/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
See [Contributing guidelines](CONTRIBUTING.md).
This is an open-source project and all countribution is highly welcomed.
# 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/actions/workflow/status/leikoilja/glocaltokens/linting-and-testing.yaml?branch=master
[workflow]: https://github.com/leikoilja/glocaltokens/actions
[pypi-shield]: https://img.shields.io/pypi/v/glocaltokens
[pypi]: https://pypi.org/project/glocaltokens/
[pepy-shield]: https://pepy.tech/badge/glocaltokens
[pepy]: https://pepy.tech/project/glocaltokens
[commits-shield]: https://img.shields.io/github/commit-activity/y/leikoilja/glocaltokens
[commits]: https://github.com/leikoilja/glocaltokens/commits/master
[pre-commit-shield]: https://img.shields.io/badge/pre--commit-enabled-brightgreen
[pre-commit]: https://pre-commit.com/
Raw data
{
"_id": null,
"home_page": null,
"name": "glocaltokens",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "Authentication, Google, Google Home, LocalAuthenticationTokens",
"author": null,
"author_email": "Ilja Leiko <leikoilja@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/34/62/fa16bfe010db88fab0ba28264af75b17011705595bc3c3ba879ed54ae783/glocaltokens-0.7.3.tar.gz",
"platform": null,
"description": "[![GitHub Workflow Status][workflow-shield]][workflow]\n[![PyPI][pypi-shield]][pypi]\n[![Downloads][pepy-shield]][pepy]\n[![Pre-commit][pre-commit-shield]][pre-commit]\n[![GitHub Activity][commits-shield]][commits]\n\n# Google home local authentication token extraction\n\nPython 3 package to extract google home devices local authentication tokens from google servers.\nThese local authentication tokens are needed to control Google Home devices\n(See [@rithvikvibhu](https://github.com/rithvikvibhu)'s [Google Home (2.0) API](https://rithvikvibhu.github.io/GHLocalApi/)).\n\nPlease note:\nOnce you have local google authentication tokens they only live about 1 day long.\nAfter that you will need to obtain new ones.\nYou will probably need to run the script repeatedly storing the tokens somewhere convenient.\n\n## Quickstart\n\nNote: the package was written and tested on Python 3.\n\n- Install the python package\n\n```\npip install glocaltokens\n```\n\nUse in your program as (see examples folder for detailed example):\n\n```Python\nfrom glocaltokens.client import GLocalAuthenticationTokens\n\n# Using google username and password\n#\n# ONLY CALL THIS ONCE\n#\n# If you call this too often, google will disconnect your android devices and other weird things will happen\n#\n# Call get_google_devices_json() afterwards to get timers/alarms as oftens as you want to update.\nclient = GLocalAuthenticationTokens(\n username=\"<YOUR_GOOGLE_USERNAME>\",\n password=\"<YOUR_GOOGLE_PASSWORD>\"\n)\n\n# Get master token\nprint(\"[*] Master token\", client.get_master_token())\n\n# Get access token (lives 1 hour)\nprint(\"\\n[*] Access token (lives 1 hour)\", client.get_access_token())\n\n# Get google device local authentication tokens (live about 1 day)\nprint(\"\\n[*] Google devices local authentication tokens\")\ngoogle_devices = client.get_google_devices_json()\n\n# You can also select specific models to select when calling get_google_devices or get_google_devices_json with the models_list parameter.\n# For example, we have pre-defined a constant with some Google Home Models (WARNING! Not all of them may be present)\n# This could be used this way\nfrom glocaltokens.const import GOOGLE_HOME_MODELS\n\ngoogle_devices_select = client.get_google_devices_json(GOOGLE_HOME_MODELS)\n\n# But if you need to select just a set of models, or add new models, you can use a list of str\ngoogle_devices_select_2 = client.get_google_devices_json([\n f\"Google Home\",\n f\"Google Home Mini\",\n f\"Google Nest Mini\",\n])\n```\n\n### Predefined models list\n\nThere are some pre-defined models list in [`scanner.py`](/glocaltokens/scanner.py), feel free to\nadd new lists, or add models to a list with a pull-request.\n\n#### `GOOGLE_HOME_MODELS`:\n\n- Google Home\n- Google Home Mini\n- Google Nest Mini\n- Lenovo Smart Clock\n\n## Security Recommendation\n\nNever store the user's password nor username in plain text, if storage is necessary, generate a master token and store it.\nExample approach:\n\n```python\nfrom glocaltokens.client import GLocalAuthenticationTokens\n\n# Using google username and password first, and only once\nclient = GLocalAuthenticationTokens(\n username=\"<YOUR_GOOGLE_USERNAME>\",\n password=\"<YOUR_GOOGLE_PASSWORD>\"\n)\n\n# Get master token\nmaster_token = client.get_master_token()\nprint(\"[*] Master token\", master_token)\n\n\"\"\"Now store master_token somewhere\"\"\"\n\n```\n\n## Contributing\n\nSee [Contributing guidelines](CONTRIBUTING.md).\nThis is an open-source project and all countribution is highly welcomed.\n\n# Credits\n\nMuch credits go to [@rithvikvibhu](https://github.com/rithvikvibhu) for doing most of the heavy work like finding a way to\nextract master and access tokens\n(See his gist [here](https://gist.github.com/rithvikvibhu/952f83ea656c6782fbd0f1645059055d)).\n\nAlso, thank you very much to the guys at `pychromecast` which provided the code required to scan devices in the network.\n\n[workflow-shield]: https://img.shields.io/github/actions/workflow/status/leikoilja/glocaltokens/linting-and-testing.yaml?branch=master\n[workflow]: https://github.com/leikoilja/glocaltokens/actions\n[pypi-shield]: https://img.shields.io/pypi/v/glocaltokens\n[pypi]: https://pypi.org/project/glocaltokens/\n[pepy-shield]: https://pepy.tech/badge/glocaltokens\n[pepy]: https://pepy.tech/project/glocaltokens\n[commits-shield]: https://img.shields.io/github/commit-activity/y/leikoilja/glocaltokens\n[commits]: https://github.com/leikoilja/glocaltokens/commits/master\n[pre-commit-shield]: https://img.shields.io/badge/pre--commit-enabled-brightgreen\n[pre-commit]: https://pre-commit.com/\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Tool to extract Google device local authentication tokens in Python",
"version": "0.7.3",
"project_urls": {
"Bug Tracker": "https://github.com/leikoilja/glocaltokens/issues",
"Homepage": "https://github.com/leikoilja/glocaltokens",
"Release Notes": "https://github.com/leikoilja/glocaltokens/releases"
},
"split_keywords": [
"authentication",
" google",
" google home",
" localauthenticationtokens"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "8d5d6edfd26988b6de6662449ea2b4dfd5ce210d30ccbc96825ddd5b7cb32026",
"md5": "cc17ee8710d1dfeb4de6b798be0b8b08",
"sha256": "bf8f395a207492b60e12a470d1fb1428c913861e27de603b5ed44a78136890be"
},
"downloads": -1,
"filename": "glocaltokens-0.7.3-py3-none-any.whl",
"has_sig": false,
"md5_digest": "cc17ee8710d1dfeb4de6b798be0b8b08",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 14081,
"upload_time": "2024-11-05T11:31:51",
"upload_time_iso_8601": "2024-11-05T11:31:51.323841Z",
"url": "https://files.pythonhosted.org/packages/8d/5d/6edfd26988b6de6662449ea2b4dfd5ce210d30ccbc96825ddd5b7cb32026/glocaltokens-0.7.3-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "3462fa16bfe010db88fab0ba28264af75b17011705595bc3c3ba879ed54ae783",
"md5": "e476600a631fa49df80e6a1109aeadb2",
"sha256": "6dd4051a6eaa6a613cffec85b59b6110d905d4d86aa1f5a5b3cbce757b0a9f57"
},
"downloads": -1,
"filename": "glocaltokens-0.7.3.tar.gz",
"has_sig": false,
"md5_digest": "e476600a631fa49df80e6a1109aeadb2",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 60718,
"upload_time": "2024-11-05T11:31:52",
"upload_time_iso_8601": "2024-11-05T11:31:52.827371Z",
"url": "https://files.pythonhosted.org/packages/34/62/fa16bfe010db88fab0ba28264af75b17011705595bc3c3ba879ed54ae783/glocaltokens-0.7.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-11-05 11:31:52",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "leikoilja",
"github_project": "glocaltokens",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "glocaltokens"
}