{ "info": { "author": "Niko Heikkil\u00e4", "author_email": "yo@nikoheikkila.fi", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy" ], "description": "\n# `pwnedapi` (Have I Been Pwned)\n\n[![Codacy grade](https://img.shields.io/codacy/grade/c08d3ae2b32f4f4e939765eda3608d8f.svg?style=for-the-badge)](https://app.codacy.com/project/nikoheikkila/pwnedapi/dashboard)\n[![Travis (.org)](https://img.shields.io/travis/nikoheikkila/pwnedapi.svg?style=for-the-badge)](https://travis-ci.org/nikoheikkila/pwnedapi)\n[![Codecov](https://img.shields.io/codecov/c/github/nikoheikkila/pwnedapi.svg?style=for-the-badge)](https://codecov.io/gh/nikoheikkila/pwnedapi)\n[![PyPI](https://img.shields.io/pypi/v/pwnedapi.svg?style=for-the-badge)](https://pypi.org/project/pwnedapi/)\n[![PyPI - Downloads](https://img.shields.io/pypi/dm/pwnedapi.svg?style=for-the-badge)](https://pypi.org/project/pwnedapi/)\n[![Read the Docs](https://img.shields.io/readthedocs/pwnedapi.svg?style=for-the-badge)](https://pwnedapi.readthedocs.io/en/latest/)\n[![GitHub](https://img.shields.io/github/license/nikoheikkila/pwnedapi.svg?style=for-the-badge)](LICENSE)\n[![Twitter Follow](https://img.shields.io/twitter/follow/nikoheikkila.svg?style=for-the-badge&label=Follow)](https://twitter.com/nikoheikkila)\n\nA Python library to leverage **Troy Hunt's** [_Have I Been Pwned API v2_][hibp]\nand the _k-Anonymity_ model. Inspired by **Phil Nash's** Ruby gem [_pwned_][pwned].\n\n## Support\n\nThis library is supported on Python versions 3.5 and up. Some development packages\nrequire Python 3.6 or newer so issues regarding the development environment compatibility\nshould not be reported without first attempting to install newer version of Python.\n\n## Installation\n\n```bash\n# Option 1: From the PyPI repository\npip install pwnedapi\n\n# Option 2: For people of great taste\npipenv install pwnedapi\n\n# Option 3: Locally\ngit clone https://github.com/nikoheikkila/pwnedapi\ncd pwnedapi\npython setup.py install\n```\n\n## Usage\n\nIn its simplest form you'll only need to use two methods.\nWill probably add more if and when the API grows.\n\n![Check a single password](docs/check.png)\n\nYou can also scan a file of passwords, and export results in any format\nsupported by the [`tablib`][tablib] library.\n\n![Scan a file of passwords](docs/scan.png)\n\n## CLI usage\n\nThe library also installs a command-line tool which you can use to check\nyour password from the comfort of your terminal. Run `pwned` to see all the possibilities.\n\n## Development\n\nClone the repository normally. Then run `make` to install the dependencies.\n\nWhile developing it's useful to ensure an acceptable code quality where the\nPylama linter is helpful: run `make lint` to check your code. Once you have\nwritten your tests run `make test` to invoke the PyTest suites.\n\nTo run tests and calculate the code coverage run `make coverage`. This command\nwill fail if you haven't set up a Codecov project with `$CODECOV_TOKEN`\nvariable.\n\nRemember to document your features and see that the documentation compiles\nsuccessfully by running `make docs`.\n\n## Contributing\n\nCheck the source code and issues from this repository, and should anything\ninteresting pop out feel free to open a pull request.\n\nBefore your changes will be merged make sure that Travis CI pipeline is green\nand code coverage is on acceptable level. GitHub takes care of these\neventually but to save time always consider running the tests locally before\npushing.\n\n[hibp]: https://haveibeenpwned.com/API/v2#SearchingPwnedPasswordsByRange\n[pwned]: https://philnash.github.io/pwned/\n[tablib]: http://docs.python-tablib.org/en/latest/\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/nikoheikkila/pwnedapi", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "pwnedapi", "package_url": "https://pypi.org/project/pwnedapi/", "platform": "", "project_url": "https://pypi.org/project/pwnedapi/", "project_urls": { "Homepage": "https://github.com/nikoheikkila/pwnedapi" }, "release_url": "https://pypi.org/project/pwnedapi/1.0.2/", "requires_dist": [ "requests", "tablib", "click" ], "requires_python": ">=3.5.0", "summary": "Library for easily interfacing with Have I Been Pwned API v2.", "version": "1.0.2" }, "last_serial": 5471948, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "af2b78bbc1c7b4bdbf3d04c677c3529e", "sha256": "56047c1c2e7082142aa4ae6da96c0bb24a4e1c7ca3eca37a99879544ceebcad4" }, "downloads": -1, "filename": "pwnedapi-0.1.tar.gz", "has_sig": false, "md5_digest": "af2b78bbc1c7b4bdbf3d04c677c3529e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2827, "upload_time": "2018-04-07T16:36:52", "url": "https://files.pythonhosted.org/packages/61/d2/258cd1e12842db40bd3374eb1afe5e11b9f24c4d2a41871f8298f94afa4b/pwnedapi-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "70ced46fc25985a46ffc79657a92d3bd", "sha256": "8f29c3f9f8a3fac935ef601e8be00549ee5ffecc4b9f1430b2c0c0eb3e18111e" }, "downloads": -1, "filename": "pwnedapi-0.2.tar.gz", "has_sig": false, "md5_digest": "70ced46fc25985a46ffc79657a92d3bd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2845, "upload_time": "2018-04-07T17:27:59", "url": "https://files.pythonhosted.org/packages/b3/5f/7a5a95b1497e1c49532b9ce3ea88fd11db228ada03cd073c423b2bf013d8/pwnedapi-0.2.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "302c74461ae79aee179548de424c518c", "sha256": "7c732c740e15b0554e3a0e9285e470da2d7f4ca0356de4d37be6489dbbd8ad41" }, "downloads": -1, "filename": "pwnedapi-0.3.0.tar.gz", "has_sig": false, "md5_digest": "302c74461ae79aee179548de424c518c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3931, "upload_time": "2018-04-08T15:57:51", "url": "https://files.pythonhosted.org/packages/9b/3c/daad96174a651c8d39949f93f0d00dcdf19d79e092195c4c9770b9eac0b0/pwnedapi-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "7016b04448eb130ce94ad72f1735a224", "sha256": "f266d8f4b26b076f5530c111d8800c8fe169f0b9c914dc8a700f6ff2d61594e4" }, "downloads": -1, "filename": "pwnedapi-0.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7016b04448eb130ce94ad72f1735a224", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 5336, "upload_time": "2018-05-06T19:33:07", "url": "https://files.pythonhosted.org/packages/18/72/dfe34bc6cfc6d69269f2ea69ff275b3fe7562735cc5db126d98a15c0021c/pwnedapi-0.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c2b5100e212198c32c223bf5da984ab8", "sha256": "ee3ebde1afc1269b9fa3868931c8159457dfd1f5f7ede802c0609b2c06ea4d7c" }, "downloads": -1, "filename": "pwnedapi-0.4.0.tar.gz", "has_sig": false, "md5_digest": "c2b5100e212198c32c223bf5da984ab8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 5375, "upload_time": "2018-05-06T19:33:08", "url": "https://files.pythonhosted.org/packages/c2/e6/f69c96e96020ce3504ffb4a5e2f491b55439d7f6d55521a8be3773b69545/pwnedapi-0.4.0.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "908d4dac42799a6bd6ef2540d0688ecf", "sha256": "b2ff93d39ea2f0660a34f65b35a4de0981065cf4f069b3d261fac6cad87b3519" }, "downloads": -1, "filename": "pwnedapi-0.5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "908d4dac42799a6bd6ef2540d0688ecf", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5.0", "size": 6168, "upload_time": "2018-10-19T08:27:37", "url": "https://files.pythonhosted.org/packages/e2/ef/e1960a48ca3645246b49dd540e681576fa69da3863f5f2af3ce855f676ad/pwnedapi-0.5.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "37ef4946427a6ac3b4e775e1b417012b", "sha256": "5078cc605ce50ee3945fa6a5cecad28ad46d600b52abcbdebf98492a88be133b" }, "downloads": -1, "filename": "pwnedapi-0.5.0.tar.gz", "has_sig": false, "md5_digest": "37ef4946427a6ac3b4e775e1b417012b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 5373, "upload_time": "2018-10-19T08:27:39", "url": "https://files.pythonhosted.org/packages/a2/47/3bbf3dbf2488d35092fdea76ea0a7473957cacb6a646612f99a7bcb64ef8/pwnedapi-0.5.0.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "d5c7278a7e8f5ecf320027771daecc8c", "sha256": "b68acc08b3fd44d46e475428c4082207eb9bd5bc21f751f0a9fdec66023d28e1" }, "downloads": -1, "filename": "pwnedapi-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d5c7278a7e8f5ecf320027771daecc8c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5.0", "size": 7521, "upload_time": "2019-01-05T18:17:01", "url": "https://files.pythonhosted.org/packages/8a/f8/6d78c3c8404155de8ac402e6639ac631836b5da1a5f531e7e91580d4bccb/pwnedapi-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a731a173f36d4cc25d7bae7c007d360d", "sha256": "d0e0b2e27db8af07f01c964daac4acc12b668f8799004ef3781cd4e46dd11a74" }, "downloads": -1, "filename": "pwnedapi-1.0.0.tar.gz", "has_sig": false, "md5_digest": "a731a173f36d4cc25d7bae7c007d360d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 6502, "upload_time": "2019-01-05T18:17:02", "url": "https://files.pythonhosted.org/packages/17/c0/ceb82b9fa68678c3dbff5e341f34ba1b0b62c02ff404df247a6ee60c7efb/pwnedapi-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "fdda0b1df8b7c32e9ccef09d40ff7699", "sha256": "e95cedbd7434da4fec27b24597543861853fdaa4301649765699bdd0e70490ba" }, "downloads": -1, "filename": "pwnedapi-1.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "fdda0b1df8b7c32e9ccef09d40ff7699", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5.0", "size": 7523, "upload_time": "2019-04-20T12:02:08", "url": "https://files.pythonhosted.org/packages/db/3a/d37940e62fff69cf2e3d4b14510492d018cc0fa41dd15a9673619356b7b5/pwnedapi-1.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cfecac494c1f679414aafd7ed4ca6e27", "sha256": "dbea9dacb1c9831532eff6933a6637dc2093c1de36f839bfef22e8beb31b87fe" }, "downloads": -1, "filename": "pwnedapi-1.0.1.tar.gz", "has_sig": false, "md5_digest": "cfecac494c1f679414aafd7ed4ca6e27", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 6505, "upload_time": "2019-04-20T12:02:09", "url": "https://files.pythonhosted.org/packages/26/70/27af625b89165922d4adcfa4e23f65a70538b1331824384b10f5f2a4448f/pwnedapi-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "bf6f4c268d29401758130451b04eeb34", "sha256": "3663236ce0f15f796b966a988e9fa1dab20c7e81955a5f3b86bd73adef90da93" }, "downloads": -1, "filename": "pwnedapi-1.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "bf6f4c268d29401758130451b04eeb34", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5.0", "size": 7634, "upload_time": "2019-07-01T16:30:23", "url": "https://files.pythonhosted.org/packages/2b/3c/59364e23fc52e99a0f871e1509823c44d1075d6379ad813fe87eb6ec1b55/pwnedapi-1.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "139411203994f4d038f2eb1c3bf2aa26", "sha256": "04bd60c9a0643c6b741775bdfe9c70b9433d44553cad623996569b1489e19537" }, "downloads": -1, "filename": "pwnedapi-1.0.2.tar.gz", "has_sig": false, "md5_digest": "139411203994f4d038f2eb1c3bf2aa26", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 6606, "upload_time": "2019-07-01T16:30:24", "url": "https://files.pythonhosted.org/packages/c8/d4/ad0929eee6e58a72c6353d9a599a4aa809b5e439dfcbe0602ebe8dd731b4/pwnedapi-1.0.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "bf6f4c268d29401758130451b04eeb34", "sha256": "3663236ce0f15f796b966a988e9fa1dab20c7e81955a5f3b86bd73adef90da93" }, "downloads": -1, "filename": "pwnedapi-1.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "bf6f4c268d29401758130451b04eeb34", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5.0", "size": 7634, "upload_time": "2019-07-01T16:30:23", "url": "https://files.pythonhosted.org/packages/2b/3c/59364e23fc52e99a0f871e1509823c44d1075d6379ad813fe87eb6ec1b55/pwnedapi-1.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "139411203994f4d038f2eb1c3bf2aa26", "sha256": "04bd60c9a0643c6b741775bdfe9c70b9433d44553cad623996569b1489e19537" }, "downloads": -1, "filename": "pwnedapi-1.0.2.tar.gz", "has_sig": false, "md5_digest": "139411203994f4d038f2eb1c3bf2aa26", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.0", "size": 6606, "upload_time": "2019-07-01T16:30:24", "url": "https://files.pythonhosted.org/packages/c8/d4/ad0929eee6e58a72c6353d9a599a4aa809b5e439dfcbe0602ebe8dd731b4/pwnedapi-1.0.2.tar.gz" } ] }