{ "info": { "author": "Matthew Taylor", "author_email": "matthew@m-taylor.co.uk", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "Intended Audience :: System Administrators", "License :: OSI Approved :: GNU General Public License v2 (GPLv2)", "Programming Language :: Python :: 3", "Topic :: Security", "Topic :: System :: Systems Administration", "Topic :: Utilities" ], "description": "# py_oathtool\n\nA python wrapper script around oathtool to allow for easy OTP code generation on the command line.\n\nThis project was born out of my frustration of having many many 2-Factor accounts on my mobile phone, which did not present a quick and easy mechanism to generate and use codes.\n\nDeveloped and tested mainly on MacOS.\n\n## Installation\n\n`pip install py_oathtool`\n\n## Dependencies\n\n* Python packages\n * subprocess32\n * pyaml\n\n**oathtool** should be available on the PATH\n\n* Mac: `brew install oath-toolkit`\n\nClipboard support on MacOS is supported by `pbcopy` which is installed by default. For Linux install `xclip`\n\n## Usage\n\nList the configured accounts with the **-l** switch.\n\n $ otp -l\n github\n aws-account-dev\n aws-account-prod\n\nGenerate an OTP by providing the account name. The script will provide the OTP code, and also drop it to the clipboard.\n\n $ otp aws-account-dev\n 129987\n Valid for 18 more seconds\n (On the clipboard!)\n\nIf a code is only valid for a short duration the script will pause until the next 30-second window begins.\n\n $ otp cr-dev\n Short lived OTP. Holding off for 4 seconds...\n 591658\n Valid for 30 more seconds\n (On the clipboard!)\n\nRead about all options\n\n $ otp -h\n\n## Declaring accounts\n\nTwo pieces of information are required for each account:\n\n* An account name / label\n* Your 64 character oath secret provided by the 3rd party. This is typically a QR code, but websites often also offer the string.\n\nThe script will read these values from a config file sourced from, by default, **~/.otp-secrets.yaml** in the following format:\n\n otpsecrets:\n github: IOOVV6U5AUHUISZKJNVCCG4JWUR5XDFSI7ND62A7QT5ZOEVYVA7JEEDKTG3ZM57B\n aws-account-dev: XQYNZOIA4PWCTJCB9654EQP5LUIP23BOW6J5ZIRZZSDHK24AUEDUSCONP3KQQY4N\n aws-account-prod: 57QPXJFJ4D2ILQBRZGSHKAZCJ2Y46C52FGVSZRYMY7UMWTIQI6I3GOJQZ4VJN2R4\n\nAdditionally, the following configuration options are supported in the **~/.otp-secrets.yaml** file:\n\n* `holdoff`: Specify a different holdoff value to wait for the next code\n* `use_clipboard`: Disable putting the code on the clipboard\n\n## Autocompletion\n\nAutocompletion support can be added through use of the `-t` flag.\n\nFor zsh support, add the following to your `.zshrc` file:\n\n compdef _otp otp\n _otp() {\n compadd `otp -t`\n }\n## Building\n\nActivate the pipenv with the `--dev` flag\n\n pipenv --three\n pipenv install --dev\n pipenv shell\n\nBuild the packages\n\n python setup.py sdist bdist_wheel\n\nUpload to PyPI\n\n twine upload --repository-url https://upload.pypi.org/legacy/ dist/*\n\n## Disclaimer\n\n2-Factor is meant to provide an extra layer of account security and this tool does not exactly promote that concept. You should be responsible for taking reasonable steps to protect your secrets file, and perhaps this is not the ideal 2-Factor solution for your most important accounts.\n\nI take no responsibility if you lose accounts through using this tool.\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/matalo33/py_oathtool", "keywords": "oathtool wrapper", "license": "GPLv2", "maintainer": "", "maintainer_email": "", "name": "py-oathtool", "package_url": "https://pypi.org/project/py-oathtool/", "platform": "", "project_url": "https://pypi.org/project/py-oathtool/", "project_urls": { "Homepage": "https://github.com/matalo33/py_oathtool" }, "release_url": "https://pypi.org/project/py-oathtool/1.1.0/", "requires_dist": [ "subprocess32", "pyaml" ], "requires_python": "", "summary": "A python wrapper around oathtool", "version": "1.1.0" }, "last_serial": 5817215, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "edcd34bb2569f4e4dfaaa43c6b04e833", "sha256": "544597cf43677356375ef3603adf59ee533fcdcc30c71a5b1f4a57b8f46b6ea5" }, "downloads": -1, "filename": "py_oathtool-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "edcd34bb2569f4e4dfaaa43c6b04e833", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 4657, "upload_time": "2015-09-07T15:12:34", "url": "https://files.pythonhosted.org/packages/8d/44/53503b46e20610916cf79a07830c1c567333e1103cbdecf26602c938dea8/py_oathtool-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bac5e69fddc333d68a4896233865b5cd", "sha256": "3cff646a693f96423a4d2d98aa173ad00e3c48ab486bee457af9b45a7f945b82" }, "downloads": -1, "filename": "py_oathtool-1.0.0.tar.gz", "has_sig": false, "md5_digest": "bac5e69fddc333d68a4896233865b5cd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3615, "upload_time": "2015-09-07T15:12:30", "url": "https://files.pythonhosted.org/packages/a7/84/e699306416dbe4d63b350c1d76e222b8bdc5fb0aafaade8b67f7f87f6916/py_oathtool-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "536d6cb19e29da897e1e2e81cebd27c2", "sha256": "ba999c68ff78d76280eb08508c33ca0d2a223792a912184ac2f264bf4cc3a63a" }, "downloads": -1, "filename": "py_oathtool-1.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "536d6cb19e29da897e1e2e81cebd27c2", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 6965, "upload_time": "2015-09-07T16:40:48", "url": "https://files.pythonhosted.org/packages/25/27/612e6cfe023046b94f72a6a603b9e546012c721ca1c8791feb153020c3c1/py_oathtool-1.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4cb10f2220c87686f6bc7cfdbab39ec5", "sha256": "7d2079532305ec5ec810493a2f4e141a87dc81a0562c24150ee6db8ad4ec64d5" }, "downloads": -1, "filename": "py_oathtool-1.0.1.tar.gz", "has_sig": false, "md5_digest": "4cb10f2220c87686f6bc7cfdbab39ec5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4886, "upload_time": "2015-09-07T16:40:37", "url": "https://files.pythonhosted.org/packages/b4/cb/058aed9fc22398c81b2018cd617c064756587e391ecaa51be5eaf04934eb/py_oathtool-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "722e6b93a8596cc1d36bddec4f2b07c3", "sha256": "cdc1476a453a549a756f7643abab912748fc292ff203994a6d052948836a023b" }, "downloads": -1, "filename": "py_oathtool-1.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "722e6b93a8596cc1d36bddec4f2b07c3", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 4938, "upload_time": "2018-07-16T02:18:53", "url": "https://files.pythonhosted.org/packages/95/7f/fa9be318912ee4550273884e61e5601b02cade7aa3c7f84c1b1c428add4b/py_oathtool-1.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "172b242ef0a1c90e7ca42cdde540d2b0", "sha256": "5d1243a2e15cdc486a6668fad7ca22cc5b109db2292a411d885a0fc254f6c081" }, "downloads": -1, "filename": "py_oathtool-1.0.2.tar.gz", "has_sig": false, "md5_digest": "172b242ef0a1c90e7ca42cdde540d2b0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4982, "upload_time": "2018-07-16T02:18:54", "url": "https://files.pythonhosted.org/packages/50/da/624b453bd83f0420d08071f51cc5e84f2036aba0077fd604a8ae7f03fc07/py_oathtool-1.0.2.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "2eac45abad8ce11bdf1d1b73dac70117", "sha256": "513fb3780f4ef873636887ca8599bd34da70e59f8bce1873d93a0bfd9095b5ba" }, "downloads": -1, "filename": "py_oathtool-1.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2eac45abad8ce11bdf1d1b73dac70117", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 5387, "upload_time": "2019-09-11T22:05:57", "url": "https://files.pythonhosted.org/packages/92/01/3e9f8c55038420b15d5a8cfaa31ec6080b904f5f1ce839479660c19d4b8e/py_oathtool-1.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "663ab441fc921a70c4a1f31e8a6f5753", "sha256": "1930e56bfade8992440027f3b04eae83977d11e6fe0e32565dbfa40eeaa0793f" }, "downloads": -1, "filename": "py_oathtool-1.1.0.tar.gz", "has_sig": false, "md5_digest": "663ab441fc921a70c4a1f31e8a6f5753", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5517, "upload_time": "2019-09-11T22:05:58", "url": "https://files.pythonhosted.org/packages/a2/bc/97e8b31164ccde595bee713a63fb841e38cd8314ace99d3d20c80880b447/py_oathtool-1.1.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "2eac45abad8ce11bdf1d1b73dac70117", "sha256": "513fb3780f4ef873636887ca8599bd34da70e59f8bce1873d93a0bfd9095b5ba" }, "downloads": -1, "filename": "py_oathtool-1.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2eac45abad8ce11bdf1d1b73dac70117", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 5387, "upload_time": "2019-09-11T22:05:57", "url": "https://files.pythonhosted.org/packages/92/01/3e9f8c55038420b15d5a8cfaa31ec6080b904f5f1ce839479660c19d4b8e/py_oathtool-1.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "663ab441fc921a70c4a1f31e8a6f5753", "sha256": "1930e56bfade8992440027f3b04eae83977d11e6fe0e32565dbfa40eeaa0793f" }, "downloads": -1, "filename": "py_oathtool-1.1.0.tar.gz", "has_sig": false, "md5_digest": "663ab441fc921a70c4a1f31e8a6f5753", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5517, "upload_time": "2019-09-11T22:05:58", "url": "https://files.pythonhosted.org/packages/a2/bc/97e8b31164ccde595bee713a63fb841e38cd8314ace99d3d20c80880b447/py_oathtool-1.1.0.tar.gz" } ] }