{ "info": { "author": "Stephan Richter, Roger Ineichen and the Zope Community", "author_email": "zope3-dev@zope.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Framework :: Zope :: 3", "Intended Audience :: Developers", "License :: OSI Approved :: Zope Public License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Internet :: WWW/HTTP" ], "description": ".. image:: https://travis-ci.org/zopefoundation/z3c.password.png?branch=master\n :target: https://travis-ci.org/zopefoundation/z3c.password\n\n.. image:: https://coveralls.io/repos/github/zopefoundation/z3c.password/badge.svg?branch=master\n :target: https://coveralls.io/github/zopefoundation/z3c.password?branch=master\n\n.. image:: https://img.shields.io/pypi/v/z3c.password.svg\n :target: https://pypi.python.org/pypi/z3c.password\n\n.. image:: https://img.shields.io/pypi/pyversions/z3c.password.svg\n :target: https://pypi.python.org/pypi/z3c.password/\n\nThis package provides an API and implementation of a password generation and\nverification utility. A high-security implementation is provided that is\nsuitable for banks and other high-security institutions. The package also\noffers a field and a property for those fields.\n\n\n=======\nCHANGES\n=======\n\n1.0.0 (2018-11-14)\n------------------\n\n- Add support for Python 3.6 and 3.7. Drop support for Python 3.5 and\n below. Drop Python 2.6 support.\n\n- Drop support for ``None`` passwords, since they are not supported in the\n underlying APIs anymore.\n\n1.0.0a1 (2013-02-28)\n--------------------\n\n- Added support for Python 3.3.\n\n- Dropped dependency on ``zope.app.testing`` and ``zope.app.authentication``.\n\n- Replaced deprecated ``zope.interface.implements`` usage with equivalent\n ``zope.interface.implementer`` decorator.\n\n- Dropped support for Python 2.4 and 2.5.\n\n\n0.11.1 (2012-09-19)\n-------------------\n\n- ``TooSimilarPassword``: do not round ``maxSimilarity`` up, because we\n sometimes use 0.999 to avoid the same password set.\n 0.999 would be displayed as 100% (100% vs. 100%)\n\n\n0.11.0 (2012-08-09)\n-------------------\n\n- Better error messages for invalid password exceptions (when you reject the\n user's password for being too short or too long, it's only polite to tell\n them what the minimum/maximum password length is).\n\n This introduces new translatable strings which haven't been translated yet.\n\n\n0.10.1 (2011-03-28)\n-------------------\n\n- Minor changes:\n\n * Password field: added ignoreEmpty=False parameter\n * previousPasswords: always set the property, not just append\n * some caching of IPasswordOptionsUtility property usage\n\n\n0.10.0 (2010-03-24)\n-------------------\n\n- Check for relevancy of the request when counting failed login attempts as\n early as possible. This prevents account locked errors raised for things like\n resources.\n\n0.9.0 (2010-02-18)\n------------------\n\n- Added Dutch translations (janwijbrand)\n\n0.8.0 (2009-01-29)\n------------------\n\n- Feature: ``failedAttemptCheck``:\n\n * increment failedAttempts on all/any request (this is the default)\n * increment failedAttempts only on non-resource requests\n * increment failedAttempts only on POST requests\n\n- Feature: more specific exceptions on new password verification.\n\n0.7.4 (2009-12-22)\n------------------\n\n- Fix: ``PrincipalMixIn.passwordSetOn`` happens to be ``None`` in case the\n class is mixed in after the user was created, that caused a bug.\n\n0.7.3 (2009-12-08)\n------------------\n\n- Fix: ``disallowPasswordReuse`` must not check ``None`` passwords.\n\n0.7.2 (2009-08-07)\n------------------\n\n- German translations\n\n0.7.1 (2009-07-02)\n------------------\n\n- Feature: ``passwordOptionsUtilityName`` property on the ``PrincipalMixIn``.\n This allows to set different options for a set of users instead of storing\n the direct values on the principal.\n\n\n0.7.0 (2009-06-22)\n------------------\n\n- Feature: Even harder password settings:\n\n * ``minLowerLetter``\n * ``minUpperLetter``\n * ``minDigits``\n * ``minSpecials``\n * ``minOthers``\n * ``minUniqueCharacters``\n * ``minUniqueLetters``: count and do not allow less then specified number\n\n- Feature:\n\n * ``disallowPasswordReuse``: do not allow to set a previously used password\n\n- 100% test coverage\n\n0.6.0 (2009-06-17)\n------------------\n\n- Features:\n\n ``PrincipalMixIn`` got some new properties:\n\n * ``passwordExpired``: to force the expiry of the password\n * ``lockOutPeriod``: to enable automatic lock and unlock on too many bad tries\n\n ``IPasswordOptionsUtility`` to have global password options:\n\n * ``changePasswordOnNextLogin``: not implemented here, use\n PrincipalMixIn.passwordExpired\n * ``lockOutPeriod``: global counterpart of the PrincipalMixIn property\n * ``passwordExpiresAfter``: global counterpart of the PrincipalMixIn property\n * ``maxFailedAttempts``: global counterpart of the PrincipalMixIn property\n\n Password checking goes like this (on the high level):\n\n 1. raise AccountLocked if too many bad tries and account should be locked\n 2. raise PasswordExpired if expired AND password matches\n 3. raise TooManyLoginFailures if too many bad tries\n 4. return whether password matches\n\n More details in ``principal.txt``\n\n- Added Russian translation\n\n- Refactor PrincipalMixIn now() into a separate method to facilitate\n override and testing\n\n- Changed the order the password is checked:\n\n 1. check password against stored\n 2. check maxFailedAttempts, raise TooManyLoginFailures if over\n 3. if password is OK, check expirationDate, raise PasswordExpired if over\n 4. return whether password matches\n\n This is because I need to be sure that PasswordExpired is raised only if the\n password *IS* valid. Entering an invalid password *MUST NOT* raise\n PasswordExpired, because I want to use PasswordExpired to allow the user\n to change it's password. This should not happen if the user did not enter a\n valid password.\n\n0.5.0 (2008-10-21)\n------------------\n\n- Initial Release", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://pypi.org/project/z3c.password", "keywords": "zope3 z3c password verification", "license": "ZPL 2.1", "maintainer": "", "maintainer_email": "", "name": "z3c.password", "package_url": "https://pypi.org/project/z3c.password/", "platform": "", "project_url": "https://pypi.org/project/z3c.password/", "project_urls": { "Homepage": "http://pypi.org/project/z3c.password" }, "release_url": "https://pypi.org/project/z3c.password/1.0.0/", "requires_dist": null, "requires_python": "", "summary": "Password generation and verification utility for Zope3", "version": "1.0.0" }, "last_serial": 4486942, "releases": { "0.10.0": [ { "comment_text": "", "digests": { "md5": "bd1fe8c1e779c6e3c9591324e444d501", "sha256": "20d8f6c4804700607c6e77002465580a597c8153452bfa3ff042c2950a59b60d" }, "downloads": -1, "filename": "z3c.password-0.10.0.tar.gz", "has_sig": false, "md5_digest": "bd1fe8c1e779c6e3c9591324e444d501", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25483, "upload_time": "2010-03-24T10:39:29", "url": "https://files.pythonhosted.org/packages/b1/89/3ac2e6028b0befb6a8a07f37628268cb67f827aae80077391daa1681cd17/z3c.password-0.10.0.tar.gz" } ], "0.10.1": [ { "comment_text": "", "digests": { "md5": "10f16df4a44828e5e3a7e0a1a356cb77", "sha256": "b5a883439d16caf1bb1ec3aed95ef78ba272ba8814c87986024a3387f2a0e5eb" }, "downloads": -1, "filename": "z3c.password-0.10.1.tar.gz", "has_sig": false, "md5_digest": "10f16df4a44828e5e3a7e0a1a356cb77", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28397, "upload_time": "2011-03-28T13:05:25", "url": "https://files.pythonhosted.org/packages/0c/76/47e1eb6cecdf06998b26002363d2b7cd0ca565212b118b6f5f387677a555/z3c.password-0.10.1.tar.gz" } ], "0.11.0": [ { "comment_text": "", "digests": { "md5": "1dc567b597d0c8c5e515bef45328302d", "sha256": "c90279e1057582cd7c28cb5cce8cba313151946133b21208f97018f318cf7829" }, "downloads": -1, "filename": "z3c.password-0.11.0.zip", "has_sig": false, "md5_digest": "1dc567b597d0c8c5e515bef45328302d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 51983, "upload_time": "2012-08-09T15:04:45", "url": "https://files.pythonhosted.org/packages/31/46/b52fe3b2efde326a7f9a00f9f23c0a7fa76c93e4a37bcaaba24e51a8b94f/z3c.password-0.11.0.zip" } ], "0.11.1": [ { "comment_text": "", "digests": { "md5": "2b2fccc9546d1c672a1a7ab6d2ded065", "sha256": "5debc210fe02bbc1f4f0e014b55268dc90958662d70821966d5eefae098b48be" }, "downloads": -1, "filename": "z3c.password-0.11.1.zip", "has_sig": false, "md5_digest": "2b2fccc9546d1c672a1a7ab6d2ded065", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 53210, "upload_time": "2012-09-19T07:28:31", "url": "https://files.pythonhosted.org/packages/2c/60/f78d41574ce9eb221587f9eb50e8981a17c440bdabf31956a71b2326c5e9/z3c.password-0.11.1.zip" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "ac54ba7f893d2219b97811cf9a6cf9b9", "sha256": "a35ce574f2512919eb117afc9fed8534c41a2f8e37170ffbce6cbe20851ffac9" }, "downloads": -1, "filename": "z3c.password-0.5.0.zip", "has_sig": false, "md5_digest": "ac54ba7f893d2219b97811cf9a6cf9b9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21753, "upload_time": "2008-10-21T11:17:06", "url": "https://files.pythonhosted.org/packages/9e/a8/9bb4ae8279e69ba3a7e3d4041d9c61bd6543696a1d3b8e304cdb3af866ee/z3c.password-0.5.0.zip" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "71b18f45201f5e3dfcc2109e544ab56c", "sha256": "f48719ae20ee60d4fdaf09aca7cefd9061668475fd1921e53772f64270e0f5f9" }, "downloads": -1, "filename": "z3c.password-0.6.0.zip", "has_sig": false, "md5_digest": "71b18f45201f5e3dfcc2109e544ab56c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30536, "upload_time": "2009-06-17T12:35:53", "url": "https://files.pythonhosted.org/packages/57/c6/8ef11dcee5bf5c585b04d0a9a0d4e51b381675a9e71f4fd45d69aa8b5233/z3c.password-0.6.0.zip" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "75a6664ad419de2dbddada647d30af63", "sha256": "a0ed2c84bb65ffd19b2df1d859098e16d3eb9d41019d9e618fafdb25e0aed9a5" }, "downloads": -1, "filename": "z3c.password-0.7.0.zip", "has_sig": false, "md5_digest": "75a6664ad419de2dbddada647d30af63", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33666, "upload_time": "2009-06-22T10:29:52", "url": "https://files.pythonhosted.org/packages/6c/db/3a2e926099634d1cdfc413e21ae613fc2248c66bc5c202bb2ccfa1236fd7/z3c.password-0.7.0.zip" } ], "0.7.1": [ { "comment_text": "", "digests": { "md5": "acb245ae71f7b3cfdb3bca238fb94195", "sha256": "dd2c5b9465c93106973a0a863d6a64c11bb0d2fe9952f2ae5548566b4f9a8673" }, "downloads": -1, "filename": "z3c.password-0.7.1.zip", "has_sig": false, "md5_digest": "acb245ae71f7b3cfdb3bca238fb94195", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34320, "upload_time": "2009-07-02T11:34:26", "url": "https://files.pythonhosted.org/packages/00/d5/0b58f519e70901c95eaadad268fddac02f0f1b5b1c9aab6b1895718483e4/z3c.password-0.7.1.zip" } ], "0.7.2": [ { "comment_text": "", "digests": { "md5": "4267d10b688628f5b91f3f61951c79ef", "sha256": "7ed69593f69e320225d7487269efb2de5bef900ae70ccb65b3dff2d89ec2eab3" }, "downloads": -1, "filename": "z3c.password-0.7.2.tar.gz", "has_sig": false, "md5_digest": "4267d10b688628f5b91f3f61951c79ef", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21463, "upload_time": "2009-08-07T09:07:23", "url": "https://files.pythonhosted.org/packages/5d/a3/8f1a0b3857206c861a447dfe9b8f7ed6cf79b6c38e6d92c158f8fa31c308/z3c.password-0.7.2.tar.gz" } ], "0.7.3": [ { "comment_text": "", "digests": { "md5": "7cf3cb07b38c70e47f8a5d714191e364", "sha256": "2ded63b18a1e1fc50a1ef4194dd0a49f17f4c0c821f1e51b06a44fa9461fed61" }, "downloads": -1, "filename": "z3c.password-0.7.3.zip", "has_sig": false, "md5_digest": "7cf3cb07b38c70e47f8a5d714191e364", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37245, "upload_time": "2009-12-08T14:52:23", "url": "https://files.pythonhosted.org/packages/bf/08/d75813616d31a7adda7715bf24381859fc1732c6b63bea28f5d70662aa84/z3c.password-0.7.3.zip" } ], "0.7.4": [ { "comment_text": "", "digests": { "md5": "ca5c71a7c4b8ca569d065e69f7d8fbbd", "sha256": "19541357351db76eb5fa7c9647f54199e907d1e0773d867bfb6179a32b970d15" }, "downloads": -1, "filename": "z3c.password-0.7.4.zip", "has_sig": false, "md5_digest": "ca5c71a7c4b8ca569d065e69f7d8fbbd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37548, "upload_time": "2009-12-22T13:50:59", "url": "https://files.pythonhosted.org/packages/75/08/8e77748dca2f3b25eec5e336246d9299f7850bd7b4eb7d3f8c45a4a2ab44/z3c.password-0.7.4.zip" } ], "0.8.0": [ { "comment_text": "", "digests": { "md5": "594a105c4a105bf74cbfc485d2d8e83a", "sha256": "f0229d9f6240ba65049c12dde34b6a149f686b0faf0dee04cafe5e289f61a106" }, "downloads": -1, "filename": "z3c.password-0.8.0.tar.gz", "has_sig": false, "md5_digest": "594a105c4a105bf74cbfc485d2d8e83a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24567, "upload_time": "2010-01-29T18:32:16", "url": "https://files.pythonhosted.org/packages/3d/1c/ef6a758d0b3f232428396e5abae5c12b9b1fadf97edc74f31f3a1caf777d/z3c.password-0.8.0.tar.gz" } ], "0.9.0": [ { "comment_text": "", "digests": { "md5": "65ee35ae6310b686c06de2cf5b3e669f", "sha256": "b185ba7ff6017a37c994e5f2febc8f4645e9e08b2ddfe2228fab0f036a9a54b9" }, "downloads": -1, "filename": "z3c.password-0.9.0.tar.gz", "has_sig": false, "md5_digest": "65ee35ae6310b686c06de2cf5b3e669f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25218, "upload_time": "2010-02-18T13:15:52", "url": "https://files.pythonhosted.org/packages/2e/f4/804d44c048e792e186d583000377aa63f197c0d24b1af9d2351e510811a7/z3c.password-0.9.0.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "092cf6edf5d23bd22d2769c55bda7e66", "sha256": "415f209975e4462aebb5491f0a9094d5d60d95fd05c20738d6ba1867c247533f" }, "downloads": -1, "filename": "z3c.password-1.0.0.tar.gz", "has_sig": false, "md5_digest": "092cf6edf5d23bd22d2769c55bda7e66", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28906, "upload_time": "2018-11-14T20:50:17", "url": "https://files.pythonhosted.org/packages/75/98/c510fb8eaa79251f693a7a19c7ed0a521e0a88d7c9b22977062be7d06ae4/z3c.password-1.0.0.tar.gz" } ], "1.0.0a1": [ { "comment_text": "", "digests": { "md5": "b2f39ade5d3d994cf379e9e1abe2818b", "sha256": "b311f2772fbf4b390393cea37de5716db0efd6e0182a9c312ebab2d020cc6397" }, "downloads": -1, "filename": "z3c.password-1.0.0a1.zip", "has_sig": false, "md5_digest": "b2f39ade5d3d994cf379e9e1abe2818b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 53188, "upload_time": "2013-03-01T03:17:47", "url": "https://files.pythonhosted.org/packages/ae/ab/c2f77fa001a567168e02189ee47c52d0a1911185b0a2b57edcd735332118/z3c.password-1.0.0a1.zip" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "092cf6edf5d23bd22d2769c55bda7e66", "sha256": "415f209975e4462aebb5491f0a9094d5d60d95fd05c20738d6ba1867c247533f" }, "downloads": -1, "filename": "z3c.password-1.0.0.tar.gz", "has_sig": false, "md5_digest": "092cf6edf5d23bd22d2769c55bda7e66", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28906, "upload_time": "2018-11-14T20:50:17", "url": "https://files.pythonhosted.org/packages/75/98/c510fb8eaa79251f693a7a19c7ed0a521e0a88d7c9b22977062be7d06ae4/z3c.password-1.0.0.tar.gz" } ] }