{ "info": { "author": "Daniel Nouri", "author_email": "daniel.nouri@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "Introduction\n============\n\nThis PAS plugin will reject multiple logins with the same user at the same\ntime. It ensures that only one browser may be logged with the same userid at\none time.\n\nImplementation\n--------------\n\nThe implementation works like this: Suppose that Anna and Karl are two people\nwho share a login annaandkarl in our site. Anna logs in, authenticating for\nthe first time. We generate a cookie with a unique id for Anna and remember\nthe id ourselves. For every subsequent authentication (i.e. for every\nrequest), we will make sure that Anna's browser has the cookie.\n\nNow Karl decides to log in into the site with the same login annaandkarl, the\none that Anna uses to surf the site right now. The plugin sees that Karl's\nbrowser doesn't have our cookie yet, so it generates one with a unique id for\nKarl's browser, remembers it and forgets about Anna's cookie.\n\nWhat happens when Anna clicks on a link on the site? The plugin sees that Anna\nhas our cookie but that it differs from the cookie value that it remembered\n(Karl's browser has that cookie value). Anna is logged out but the plugin and\nsees the message \"Someone else logged in under your name\".\n\nUsage\n-----\n\nThis product, when active, will automatically prevent users from staying logged\nin if they attempt to open a second session. This works well for all\nauthentication schemes that have a concept of ``credential reset``, but for\nusers logged in with Basic Auth this will not work as expected, and both\nsessions will interfere with eachother without one being permanently ended.\nThis is a limitation of the Basic Auth technology, so we recommend not using\nthis plugin in combination with Basic Auth sites.\n\nThis plugin also provides a ``revoke_session`` view on itself, which can be\naccessed by visiting\n``http://www.example.com/acl_users/no_duplicate_login/revoke_session``, which\ncan be used by site administrators to manually invoke the forced logout\nmechanism.\n\nInstallation\n------------\n\nAdd ``Products.NoDuplicateLogin`` to the eggs parameter of your ``plone.recipe.zope2instance``\nsection::\n\n [plone]\n recipe = plone.recipe.zope2instance\n eggs =\n Plone\n ...\n Products.NoDuplicateLogin\n\nNow run buildout and restart Plone. Once Plone has started, login and browse to\n``Site Setup -> Zope Management Interface -> acl_users`` and add a ``No\nDuplicate Login Plugin`` from the drop down menu in the upper right.\n\nAfter that, click on the ``No Duplicate Login Plugin`` object in the acl_users\nfolder listing. For each of the ``Authentication``, ``Credential Update`` and\n``Reset Credentials`` objects in the ``No Duplicate Login Plugin`` folder\nlisting, click, then move the ``no_duplicate_login`` plugin from the\n``Available Plugins`` display widget on the left to the ``Active Plugins``\ndisplay widget on the right using the arrow buttons in the middle.\n\nIt you will also need to \"arrow up\" the ``no_duplicate_login`` plugin in the\n``Active Plugins`` display listing for both ``Authentication`` and ``Reset\nCredentials``.\n\nIf you are using a policy product to install this as part of your deployment\nyou can perform these actions by including an empty ``noduplicatelogin.xml``\nfile in your profile directory.\n\n\nHistory\n-------\n\n2.0 (2014-11-25)\n~~~~~~~~~~~~~~~~~~\n\n* Security and performance improvements [matthewwilkes]\n* Remove reimplementation of plone.session [matthewwilkes]\n* Change internal data structures to avoid unnecessary object stores [matthewwilkes]\n* Add tests to test harness [matthewwilkes]\n* Fix pure Zope compatibility [matthewwilkes]\n\n1.0a2 (02/18/2011)\n~~~~~~~~~~~~~~~~~~\n\n* Add more installation instructions\n \n1.0a1 (12/17/2010)\n~~~~~~~~~~~~~~~~~~\n\n* Add test harness [aclark]\n* Rip out \"experimental\" session storage, too many ZODB conflicts. [aclark]\n* Plone 4 compat [aclark]\n* Re-package as egg [aclark]\n\n1.0 svn/dev\n~~~~~~~~~~~\n\n* Plone 3 compat [perrito]\n* Original implementation [nouri]", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://svn.plone.org/svn/collective/PASPlugins/Products.NoDuplicateLogin", "keywords": null, "license": "UNKNOWN", "maintainer": null, "maintainer_email": null, "name": "Products.NoDuplicateLogin", "package_url": "https://pypi.org/project/Products.NoDuplicateLogin/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/Products.NoDuplicateLogin/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://svn.plone.org/svn/collective/PASPlugins/Products.NoDuplicateLogin" }, "release_url": "https://pypi.org/project/Products.NoDuplicateLogin/2.0/", "requires_dist": null, "requires_python": null, "summary": "Products.NoDuplicateLogin", "version": "2.0" }, "last_serial": 1385547, "releases": { "1.0a1": [ { "comment_text": "", "digests": { "md5": "46f924c5684627cc6b0facafc01c07aa", "sha256": "635dfe5f19102f8c3ebfe5b0d0a3554a376d57d9eb22540af30ad8ff59ab674e" }, "downloads": -1, "filename": "Products.NoDuplicateLogin-1.0a1.zip", "has_sig": false, "md5_digest": "46f924c5684627cc6b0facafc01c07aa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18283, "upload_time": "2010-12-18T14:52:21", "url": "https://files.pythonhosted.org/packages/bf/d6/350a5f87dafe0d48625ac464e7c52b715dfc896f5f2a36a48a788e312e2d/Products.NoDuplicateLogin-1.0a1.zip" } ], "1.0a2": [ { "comment_text": "", "digests": { "md5": "22167e61759abb0b88447f6299891ee1", "sha256": "84b6ba7da418c342025f40e65aca51457cbccbd464a2b3bbfa678fe9de45b5d5" }, "downloads": -1, "filename": "Products.NoDuplicateLogin-1.0a2.zip", "has_sig": false, "md5_digest": "22167e61759abb0b88447f6299891ee1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19296, "upload_time": "2011-02-18T15:32:41", "url": "https://files.pythonhosted.org/packages/f3/f3/327ef8b65a254946d4bf71dee4a27bf69fa637d98e842c580e02eb56952f/Products.NoDuplicateLogin-1.0a2.zip" } ], "2.0": [ { "comment_text": "", "digests": { "md5": "46e0b26fc53219c5a40d6de28540bb9f", "sha256": "62f09667209480f4d04b3224ba35966e6667ec8604dda0bee4410cbbc12fa684" }, "downloads": -1, "filename": "Products.NoDuplicateLogin-2.0-py2-none-any.whl", "has_sig": false, "md5_digest": "46e0b26fc53219c5a40d6de28540bb9f", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 16633, "upload_time": "2015-01-16T23:41:54", "url": "https://files.pythonhosted.org/packages/a5/89/cb79a23c60f53e116ef83486d0dd36b4bb7d1b4ab873e4e68e5fddea5ef2/Products.NoDuplicateLogin-2.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "869de94370a9b859a305c16f4cd939f4", "sha256": "a76e61e617b2d2d7ec9c4f3cf20a41127ff8186d6396757fe0d1cb9571d089f5" }, "downloads": -1, "filename": "Products.NoDuplicateLogin-2.0.tar.gz", "has_sig": false, "md5_digest": "869de94370a9b859a305c16f4cd939f4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12356, "upload_time": "2015-01-16T23:41:52", "url": "https://files.pythonhosted.org/packages/8b/01/c7062bb5b167f8f7c0a95cfc2f697c4af269c24187b23bed56dfc1e44e7d/Products.NoDuplicateLogin-2.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "46e0b26fc53219c5a40d6de28540bb9f", "sha256": "62f09667209480f4d04b3224ba35966e6667ec8604dda0bee4410cbbc12fa684" }, "downloads": -1, "filename": "Products.NoDuplicateLogin-2.0-py2-none-any.whl", "has_sig": false, "md5_digest": "46e0b26fc53219c5a40d6de28540bb9f", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 16633, "upload_time": "2015-01-16T23:41:54", "url": "https://files.pythonhosted.org/packages/a5/89/cb79a23c60f53e116ef83486d0dd36b4bb7d1b4ab873e4e68e5fddea5ef2/Products.NoDuplicateLogin-2.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "869de94370a9b859a305c16f4cd939f4", "sha256": "a76e61e617b2d2d7ec9c4f3cf20a41127ff8186d6396757fe0d1cb9571d089f5" }, "downloads": -1, "filename": "Products.NoDuplicateLogin-2.0.tar.gz", "has_sig": false, "md5_digest": "869de94370a9b859a305c16f4cd939f4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12356, "upload_time": "2015-01-16T23:41:52", "url": "https://files.pythonhosted.org/packages/8b/01/c7062bb5b167f8f7c0a95cfc2f697c4af269c24187b23bed56dfc1e44e7d/Products.NoDuplicateLogin-2.0.tar.gz" } ] }