{ "info": { "author": "Dylan Jay", "author_email": "software@pretaweb.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Plugins", "Environment :: Web Environment", "Framework :: Plone :: 4.1", "Framework :: Plone :: 4.2", "Framework :: Plone :: 4.3", "Framework :: Zope2", "Intended Audience :: System Administrators", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Zope", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: System :: Systems Administration", "Topic :: System :: Systems Administration :: Authentication/Directory" ], "description": "LoginLockout\n============\n\n.. image:: https://api.travis-ci.org/collective/Products.LoginLockout.svg\n :target: https://travis-ci.org/collective/Products.LoginLockout\n\n.. image:: https://coveralls.io/repos/collective/Products.LoginLockout/badge.svg?branch=master&service=github\n :target: https://coveralls.io/github/collective/Products.LoginLockout?branch=master\n\nThis Pluggable Authentication Service (PAS) plugin will lock a\nlogin after a predetermined number of incorrect attempts. Once\nlocked, the user will be shown a page that tells them to contact\ntheir administrator to unlock.\n\n\nRequires:\n---------\n\n- PluggableAuthService and its dependencies\n\n- (optional) PlonePAS and its dependencies\n\n\nFeatures\n--------\n\n- Configurable number of allowed incorrect attempts before lockout\n- Account will be usable again after a configurable amount of time\n (the \"reset period\")\n If the first login attempt after the reset period is invalid, the\n invalid login counter is set to 1.\n- The user is presented with a message saying that the account was locked,\n and for how long.\n (It doesn't show remaining time, just the total lockout time.)\n\n\nConfiguration\n-------------\n\nGo to the ZMI -> portal_properties -> loginlockout_properties,\nthere you can changes these defaults:\n\n- allowed incorrect attempts: 3\n- reset period: 24 hours\n\n\nDetails\n-------\n\nLoginLockout can be used as a Plone plugin or with zope and PAS alone.\nFirst we'll show you how it works with Plone.\n\n\nTo Install\n----------\n\nInstall into Plone via Add/Remove Products\n\nTo Use\n------\n\nFirst login as manager::\n\n >>> from Products.Five.testbrowser import Browser\n\nNow we'll open up a new browser and attempt to login::\n\n >>> browser = Browser()\n >>> browser.open(self.portal.absolute_url()+'/login_form')\n >>> browser.getControl('Login Name').value = 'user'\n >>> browser.getControl('Password').value = 'user'\n >>> browser.getControl('Log in').click()\n >>> print browser.contents\n \n ...You are now logged in...\n\n\nLet's try again with another password::\n\n >>> browser = Browser()\n >>> browser.open(self.portal.absolute_url()+'/login_form')\n >>> browser.getControl('Login Name').value = 'user'\n >>> browser.getControl('Password').value = 'notpassword1'\n >>> browser.getControl('Log in').click()\n >>> print browser.contents\n \n ...Login failed...\n\n\nthis incorrect attemp will show up in the log::\n\n >>> admin = Browser()\n >>> admin.open(self.portal.absolute_url()+'/login_form')\n >>> admin.getControl('Login Name').value = 'admin'\n >>> admin.getControl('Password').value = 'admin'\n >>> admin.getControl('Log in').click()\n >>> admin.getLink('Site Setup').click()\n\nWe've installed a Control panel to monitor the login attempts\n\n >>> admin.getLink('LoginLockout').click()\n >>> print admin.contents\n \n ...user...\n ...1...\n\n\n\nIf we try twice more we will be locked out::\n\n >>> browser.open(self.portal.absolute_url()+'/login_form')\n >>> browser.getControl('Login Name').value = 'user'\n >>> browser.getControl('Password').value = 'notpassword2'\n >>> browser.getControl('Login Name').value = 'user'\n >>> browser.getControl('Log in').click()\n >>> browser.getControl('Login Name').value = 'user'\n >>> browser.getControl('Password').value = 'notpassword3'\n >>> browser.getControl('Log in').click()\n >>> browser.getControl('Login Name').value = 'user'\n >>> browser.getControl('Password').value = 'notpassword4'\n >>> browser.getControl('Log in').click()\n >>> print browser.contents\n \n ...This account has now been locked for security purposes...\n\n\nNow even the correct password won't work::\n\n >>> browser.open(self.portal.absolute_url()+'/login_form')\n >>> browser.getControl('Login Name').value = 'user'\n >>> browser.getControl('Password').value = 'user'\n >>> browser.getControl('Log in').click()\n >>> print browser.contents\n \n ...This account has now been locked for security purposes...\n\n\nThe administrator can reset this persons account::\n\n >>> admin.getLink('Site Setup').click()\n >>> admin.getLink('LoginLockout Configuration Panel').click()\n >>> print admin.contents\n \n ...user...\n ...3...\n >>> admin.getControl(name='reset_ploneusers:list').value = ['user']\n >>> admin.getControl('Reset selected accounts').click()\n >>> print admin.contents\n \n ...Accounts were reset for these login names: user...\n\nand now they can log in again::\n\n >>> browser.open(self.portal.absolute_url()+'/login_form')\n >>> browser.getControl('Login Name').value = 'user'\n >>> browser.getControl('Password').value = 'user'\n >>> browser.getControl('Log in').click()\n >>> print browser.contents\n \n ...You are now logged in...\n\n\nManual Installation\n-------------------\n\nThis plugin needs to be installed in two places, the instance PAS where logins\noccur and the root acl_users.\n\n 1. Place the Product directory 'LoginLockout' in your 'Products/'\n directory. Restart Zope.\n\n 2. In your instance PAS 'acl_users', select 'LoginLockout' from the add\n list. Give it an id and title, and push the add button.\n\n 3. Enable the 'Authentication', 'Challenge' and the 'Update Credentials'\n plugin interfaces in the after-add screen.\n\n 4. Rearrange the order of your 'Challenge plugins' so that the\n 'LoginLockout' plugin is at the top.\n\n 5. Repeat the above for your root PAS but as a plugin to\n\n - Anonymoususerfactory\n\n - Update Credentials\n\n and ensure LoginLockout is the first Anonymoususerfactory\n\nSteps 2 through 5 below will be done for you by the Plone installer.\n\nThat's it! Test it out.\n\n\nImplementation\n--------------\n\nIf the root anonymoususerfactory plugin is activated following an\nauthentication plugin activation then this is an unsuccesful login\nattempt. If the password was different from the last unsuccessful\nattempt then we incriment a counter in data stored persistently\nin the root plugin.\n\nIf the instance plugin tries to authenticate a user that has been\nmarked has having too many attempts then Unauthorised will be raised.\nThis will activate the challenge plugin which will display a locked\nout message instead of another login form.\n\nupdateCredentials is called when the login was successful and in this\ncase we reset the unsuccessful login count.\n\n\nTroubleshooting\n---------------\n\nAttributeError: manage_addLoginLockout\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nIf, while running test, you get ``AttributeError: manage_addLoginLockout``,\nthis is likely due to the fact that the ``initialize()`` method from ``__init__.py``\nisn't run during test setup.\n\nTo resolve, explicitly call::\n\n z2.installProduct(portal, 'Products.LoginLockout')\n\n\nDeveloping\n----------\n\nIt's great that you want to help advance this add-on!\n\nTo start development:\n\n::\n\n git clone git@github.com:collective/Products.LoginLockout.git\n cd Products.LoginLockout\n virtualenv .\n ./bin/python bootstrap.py\n ./bin/buildout\n ./bin/test\n\n\nPlease observe the following:\n\n* Only start work when tests are currently passing.\n If not, fix them, or ask someone (*) for help.\n\n* Make your work in a branch and create a pull request for it on github.\n Ask for someone (*) to merge it.\n\n* Please adhere to guidelines: pep8.\n We use plone.recipe.codeanalysis to enforce some of these.\n\n(*) People that might be able to help you out:\n khink, djay, ajung, macagua\n\n\nCopyright, License, Author\n--------------------------\n\nCopyright (c) 2007, PretaWeb, Australia,\n and the respective authors. All rights reserved.\n\nAuthor: Dylan Jay \n\nLicense BSD-ish, see LICENSE.txt\n\n\nCredits\n-------\n\nDylan Jay, original code.\n\nContributors:\n\n* Kees Hink\n* Andreas Jung\n* Leonardo J. Caballero G.\n* Wolfgang Thomas\n* Peter Uittenbroek\n* Ovidiu Miron\n* Ludolf Takens\n* Maarten Kling\n\nThanks to Daniel Nouri and BlueDynamics for their\nNoDuplicateLogin which served as the base for this.\n\n\nChanges\n=======\n\n0.4.0 (2015-11-25)\n------------------\n\n- Fix incorrect flake8 in skins template python script.\n [khink]\n\n\n0.3.9 (2015-11-18)\n------------------\n\n- Don't unicode error in portal message when resetting\n [maartenkling]\n\n\n0.3.8 (2015-10-17)\n------------------\n\n- Include Travis build badge.\n Fixed test setup, make code-analysis work, update README with development info.\n (khink)\n\n\n0.3.7 (2015-06-08)\n------------------\n\n- Reset counter after reset period.\n (ltakens)\n\n0.3.6 (2015-04-08)\n------------------\n\n- Render the lockout message in the site layout.\n Show the reset period in the lockout message,\n so people don't have to contact the site administrator again.\n (khink)\n\n\n0.3.5 (2015-04-02)\n------------------\n\n- Make number of allowed attempts configurable through the ZMI\n (khink)\n\n\n0.3.4 (2015-04-01)\n------------------\n\n- Make reset_period configurable through the ZMI (khink)\n- Added more strings classifiers items for this packages. (macagua)\n- Added plone_deprecated skins for gif icon. (macagua)\n- Added support for Configlet with GenericSetup profile. (macagua)\n- Added Spanish translation. (macagua)\n- Added i18n support. (macagua)\n\n- LoginLockout interface updated as follows (omiron):\n - group user lockouts separate from bogus info\n - links to users profile page\n - provide full user name and email to ease \"find in page\"\n- Introduct 'select all' option in configlet (thepjot)\n- Re-enable 'reset_period', after reset_period has expired, user gets another chance (thepjot)\n\n\n0.3.3 (2013-11-20)\n------------------\n\n- check for fake_client_ip in a more defensive way (pysailor)\n\n\n0.3.2 (2012-03-12)\n------------------\n\n- fixed deprecation warnings (Andreas Jung)\n\n\n0.3.1 (2012-02-13)\n------------------\n\n- fixed some restructured text bugs in documentation (Andreas Jung)\n\n\n0.3 (2011-03-04)\n----------------\n\n- internal cleanup\n\n- using GenericSetup where possible\n\n- added support for logging successful login attempts\n\n- added support logging password changes\n\n(Andreas Jung)\n\n\n0.2 (2009-04-20)\n----------------\n\n- Eggified merged configlet version\n\n- Started doctest\n\n(Dylan Jay)\n\n\n(2009-03-10)\n------------\n\n- Added configlet for viewing failed attempts and resetting accounts from the\n plone control panel.\n\n- Quite probably, dropped support for pure Zope usage.\n\n(Kees Hink)\n\n\n(2008-12-18)\n------------\n\n- Added installer, using Extensions/Install.py.\n (Unfortunately, Generic Setup does not yet seem to support uninstalling, but\n the methods in setuphandlers.py and the import profile (profiles/default) are\n there for when you want to use them. Just uncomment the relevant zcml\n directives.)\n\n(Kees Hink)\n\n\n0.1 (unknown)\n-------------\n\n- Initial Version (Dylan Jay)", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/collective/Products.LoginLockout", "keywords": "PAS Plugins Zope Login Lockout Plone security", "license": "GPL", "maintainer": null, "maintainer_email": null, "name": "Products.LoginLockout", "package_url": "https://pypi.org/project/Products.LoginLockout/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/Products.LoginLockout/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/collective/Products.LoginLockout" }, "release_url": "https://pypi.org/project/Products.LoginLockout/0.4.0/", "requires_dist": null, "requires_python": null, "summary": "This Pluggable Authentication Service (PAS) plugin will lock a login after a predetermined number of incorrect attempts. Once locked, the user will be shown a page that tells them to contact their administrator to unlock.", "version": "0.4.0" }, "last_serial": 1833011, "releases": { "0.2": [ { "comment_text": "", "digests": { "md5": "e20a0cd2ca344f32eff57b4c1508b28e", "sha256": "5d4c7fc12ed3ec8decded469ce4a7c2cdbd28cc5434e2cbdeb61bebbe0582f28" }, "downloads": -1, "filename": "Products.LoginLockout-0.2.tar.gz", "has_sig": false, "md5_digest": "e20a0cd2ca344f32eff57b4c1508b28e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25065, "upload_time": "2010-06-30T02:28:47", "url": "https://files.pythonhosted.org/packages/7f/2a/10395a0c5fb66beb7e9a1cdc58908cec3d92ac4e415df02d8bbc879b20fc/Products.LoginLockout-0.2.tar.gz" } ], "0.2dev": [ { "comment_text": "", "digests": { "md5": "ce21eb962a57d4235853d46f601afc96", "sha256": "dd6002b334e2a48ed22680abe2d5b392523d62aa50b95aa262a3f02475d6ed8e" }, "downloads": -1, "filename": "Products.LoginLockout-0.2dev.tar.gz", "has_sig": false, "md5_digest": "ce21eb962a57d4235853d46f601afc96", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24796, "upload_time": "2009-06-20T11:06:27", "url": "https://files.pythonhosted.org/packages/68/89/8ce73474bcd1459123508a8948c4ed5c3a60bec5379c6c8d8143dba27f15/Products.LoginLockout-0.2dev.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "b414a3b31c45c21a3f18452ebfddce9c", "sha256": "e474959bcbdd5858ddc854ff401e661d90da8a3cfbad6dbbdf18e003b1585877" }, "downloads": -1, "filename": "Products.LoginLockout-0.3.tar.gz", "has_sig": false, "md5_digest": "b414a3b31c45c21a3f18452ebfddce9c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25811, "upload_time": "2011-03-03T15:14:19", "url": "https://files.pythonhosted.org/packages/48/70/e47f153386deb78e8428d1c05a76a108c779840db8581e870c744bfb82c7/Products.LoginLockout-0.3.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "9fb7679bed612a9f57d32c1eb806c2a4", "sha256": "16bd5e88de403c3b0a86d5269f381fc61b59f833facc8bf2ee0ac083612a36a5" }, "downloads": -1, "filename": "Products.LoginLockout-0.3.1.zip", "has_sig": false, "md5_digest": "9fb7679bed612a9f57d32c1eb806c2a4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 45115, "upload_time": "2012-02-13T12:27:41", "url": "https://files.pythonhosted.org/packages/af/e3/eacfd01e5b8f4b5b73fe464c8204fb8d7f9c784927e647d41e00d9da1157/Products.LoginLockout-0.3.1.zip" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "1f47fbc3d1f3bca8fbd8f074483d0223", "sha256": "40090c23bc58c5c96142a990a97a2774fbafcc7f3e06b13bba4a4298e4979302" }, "downloads": -1, "filename": "Products.LoginLockout-0.3.2.zip", "has_sig": false, "md5_digest": "1f47fbc3d1f3bca8fbd8f074483d0223", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 45317, "upload_time": "2012-03-12T08:38:15", "url": "https://files.pythonhosted.org/packages/0d/e2/57ce0e0af2a6cb6342e10ba87d438042df625ea7c0fc81732c49a6233935/Products.LoginLockout-0.3.2.zip" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "27542f69f49cd29c525a186fcf3c7692", "sha256": "9fcdc22e8071364193e3a895d6f81bf29ff5718b8b198105ecca7f8da4fc4f47" }, "downloads": -1, "filename": "Products.LoginLockout-0.3.3.zip", "has_sig": false, "md5_digest": "27542f69f49cd29c525a186fcf3c7692", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 45810, "upload_time": "2013-11-20T14:29:22", "url": "https://files.pythonhosted.org/packages/cf/f5/c56581c78031418bc53537adef96ef473aebcb679f7cb86d0ce427dfdb5e/Products.LoginLockout-0.3.3.zip" } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "e97e9e15da042985f76e5805789c7eaf", "sha256": "ac8db949936f11aa0ace22f0b34e9aa9d28841d4d0c8b4cf92d87328fae9ea83" }, "downloads": -1, "filename": "Products.LoginLockout-0.3.4.zip", "has_sig": false, "md5_digest": "e97e9e15da042985f76e5805789c7eaf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 59932, "upload_time": "2015-04-01T14:24:43", "url": "https://files.pythonhosted.org/packages/ad/10/6d57970c550c858a2e70350cceabaca4409b41d59e084d9133e22ecfa1c2/Products.LoginLockout-0.3.4.zip" } ], "0.3.5": [ { "comment_text": "", "digests": { "md5": "8f78bb0cf0c30a691b93a08714917e38", "sha256": "54beea31347305ff49135986e76b446b5d255f64c57f32424dcd8bfc2569a3e4" }, "downloads": -1, "filename": "Products.LoginLockout-0.3.5.zip", "has_sig": false, "md5_digest": "8f78bb0cf0c30a691b93a08714917e38", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 60055, "upload_time": "2015-04-02T07:15:52", "url": "https://files.pythonhosted.org/packages/9d/49/ee5a446c541b2f3a50fcf0afe00e75a99ac7208320ca2acc0ce06e702e56/Products.LoginLockout-0.3.5.zip" } ], "0.3.6": [ { "comment_text": "", "digests": { "md5": "e68112bed0e4d8d8a4e991c8c7c868b8", "sha256": "208798249d0c3fff214cce726de21bd87dcb5dc5930c1b665919bfd4b9afe3a1" }, "downloads": -1, "filename": "Products.LoginLockout-0.3.6.zip", "has_sig": false, "md5_digest": "e68112bed0e4d8d8a4e991c8c7c868b8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 63735, "upload_time": "2015-04-08T11:57:14", "url": "https://files.pythonhosted.org/packages/60/20/0aff0f75b9bd3215eb5adb1fb46716045fb7fe1fe4df14610f97b9d841a7/Products.LoginLockout-0.3.6.zip" } ], "0.3.7": [ { "comment_text": "", "digests": { "md5": "95e4e8783e3f60c695925cd91ba26cb7", "sha256": "d765f32333ed177fcfca56ed51993de8662ab44d0902ae3ea8140552aac84cda" }, "downloads": -1, "filename": "Products.LoginLockout-0.3.7.zip", "has_sig": false, "md5_digest": "95e4e8783e3f60c695925cd91ba26cb7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 63984, "upload_time": "2015-06-08T09:59:53", "url": "https://files.pythonhosted.org/packages/bc/ea/97d53e2d0ede13c9443cc4fb54c6431ba307d85ec827c5ba8d3e9d89bbdd/Products.LoginLockout-0.3.7.zip" } ], "0.3.8": [ { "comment_text": "", "digests": { "md5": "1a5c089b9a2b0e0740cf150c863d2850", "sha256": "26f1ceb0de8a84181806be08de7c028e59f51c7209fd4068e498d2ee957eec40" }, "downloads": -1, "filename": "Products.LoginLockout-0.3.8.zip", "has_sig": false, "md5_digest": "1a5c089b9a2b0e0740cf150c863d2850", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 66073, "upload_time": "2015-10-17T15:02:29", "url": "https://files.pythonhosted.org/packages/61/ef/988b36b556ba6527a70c287420950eee3250ce9768622bb91476b2810ec6/Products.LoginLockout-0.3.8.zip" } ], "0.3.9": [ { "comment_text": "", "digests": { "md5": "b601a10fb3b9a23121e42af1bf18425c", "sha256": "3064a364107d2ea9b3cc87d0442eb630d4b981178a3a822a30b4583d730bf25e" }, "downloads": -1, "filename": "Products.LoginLockout-0.3.9.zip", "has_sig": false, "md5_digest": "b601a10fb3b9a23121e42af1bf18425c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 66252, "upload_time": "2015-11-18T09:08:35", "url": "https://files.pythonhosted.org/packages/35/58/2de0c1488d0dc123d81e1004a96ee702e24be4109f72171ab993eca6997b/Products.LoginLockout-0.3.9.zip" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "d6df10c1c0af9c28c7b2fbe1917bd820", "sha256": "b441139f635c7288521c47bf6793c47f211753c6845f9e654633464c4b27e6f9" }, "downloads": -1, "filename": "Products.LoginLockout-0.4.0.zip", "has_sig": false, "md5_digest": "d6df10c1c0af9c28c7b2fbe1917bd820", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 66630, "upload_time": "2015-11-25T12:18:15", "url": "https://files.pythonhosted.org/packages/bd/40/08607f119c8c01f45ccc0f9f6ba993e3ee1dea1bda91637562b7c7227e01/Products.LoginLockout-0.4.0.zip" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "d6df10c1c0af9c28c7b2fbe1917bd820", "sha256": "b441139f635c7288521c47bf6793c47f211753c6845f9e654633464c4b27e6f9" }, "downloads": -1, "filename": "Products.LoginLockout-0.4.0.zip", "has_sig": false, "md5_digest": "d6df10c1c0af9c28c7b2fbe1917bd820", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 66630, "upload_time": "2015-11-25T12:18:15", "url": "https://files.pythonhosted.org/packages/bd/40/08607f119c8c01f45ccc0f9f6ba993e3ee1dea1bda91637562b7c7227e01/Products.LoginLockout-0.4.0.zip" } ] }