{ "info": { "author": "Walter Doekes, OSSO B.V.", "author_email": "wjdoekes+kleides@osso.nl", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Web Environment", "Framework :: Django", "Framework :: Django :: 2.1", "Intended Audience :: System Administrators", "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", "Operating System :: POSIX :: Linux", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: System :: Systems Administration :: Authentication/Directory" ], "description": "Kleides Discourse SSO client\n============================\n\n*Discourse Single-Sign-on (DSSO) provider client* to connect your\n*Django* project to a *Discourse Single-Sign-On provider server*.\n\nSee: https://meta.discourse.org/t/official-single-sign-on-for-discourse-sso/\n\nExample usage:\n\n* Add ``kleides_dssoclient`` to ``INSTALLED_APPS``.\n\n* Create a custom ``DssoLoginBackend``, for example::\n\n from kleides_dssoclient.backends import DssoLoginBackend\n\n class MyProjectDssoLoginBackend(DssoLoginBackend):\n \"\"\"\n DssoLoginBackend that rejects anyone without is_superuser, and that\n sets all mapped variables on the newly created User object.\n \"\"\"\n def authenticate(self, dsso_mapping):\n \"\"\"\n Check that user is a superuser and pass along to DssoLoginBackend.\n \"\"\"\n if dsso_mapping.get('is_superuser') not in ('True', 'true', '1'):\n return None\n\n return super(MyProjectDssoLoginBackend, self).authenticate(\n dsso_mapping)\n\n def configure_user(self, user, dsso_mapping):\n \"\"\"\n We expect username, email, is_superuser in the dsso_mapping.\n \"\"\"\n user = (\n super(MyProjectDssoLoginBackend, self)\n .configure_user(user, dsso_mapping))\n\n user.email = dsso_mapping.get('email', '')\n is_superuser = (\n dsso_mapping.get('is_superuser') in ('True', 'true', '1'))\n user.is_staff = is_superuser\n user.is_superuser = is_superuser\n\n user.save()\n return user\n\n* Add this to the *Django* ``settings``::\n\n AUTHENTICATION_BACKENDS = ( # the only backend needed\n 'myproject.backends.MyProjectDssoLoginBackend',\n )\n MIDDLEWARE_CLASSES += (\n 'kleides_dssoclient.middleware.DssoLoginMiddleware',\n )\n KLEIDES_DSSO_ENDPOINT = 'https://DSSOSERVER/sso/'\n KLEIDES_DSSO_SHARED_KEY = 'oh-sso-very-very-secret'\n\n\n\nChanges\n-------\n\nv0.7 - *2019-07-16*\n~~~~~~~~~~~~~~~~~~~\n\n- Allow bypassing the middleware by setting KLEIDES_DSSO_ENDPOINT to None.\n\n\nv0.6 - *2019-03-06*\n~~~~~~~~~~~~~~~~~~~\n\n- Add ``request`` arg to ``DssoLoginBackend`` for Django 2.1.\n\n\nv0.5 - *2019-03-06*\n~~~~~~~~~~~~~~~~~~~\n\n- Add logging to help investigate problems.\n\n\nv0.3 - *2018-12-18*\n~~~~~~~~~~~~~~~~~~~\n\n- Add support for Django 1.10 style middleware.\n- Check Django version for is_authenticated usage.\n\n\nv0.2 - *2018-11-19*\n~~~~~~~~~~~~~~~~~~~\n\n- Replace ``sso_mapping`` with ``dsso_mapping`` in authenticate argument list.\n\n\nv0.1 - *2018-11-16*\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": "https://github.com/ossobv/kleides-dssoclient", "keywords": "", "license": "GPLv3+", "maintainer": "", "maintainer_email": "", "name": "kleides-dssoclient", "package_url": "https://pypi.org/project/kleides-dssoclient/", "platform": "linux", "project_url": "https://pypi.org/project/kleides-dssoclient/", "project_urls": { "Homepage": "https://github.com/ossobv/kleides-dssoclient" }, "release_url": "https://pypi.org/project/kleides-dssoclient/0.7/", "requires_dist": null, "requires_python": "", "summary": "Kleides Discourse SSO client for Django", "version": "0.7" }, "last_serial": 5541607, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "548b09cbd9a5770b123a718b1c0a5861", "sha256": "2693bbbcdf03b1195e0affb806c0c6b342998ba494c03df1c56ecb3fc22db36a" }, "downloads": -1, "filename": "kleides_dssoclient-0.1.tar.gz", "has_sig": false, "md5_digest": "548b09cbd9a5770b123a718b1c0a5861", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18940, "upload_time": "2018-11-16T15:55:45", "url": "https://files.pythonhosted.org/packages/65/5d/b6aff478d56a4736ec088e798f706c0ab88d534386ce4ceba1a6774391b4/kleides_dssoclient-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "3d6b50bd700d127a0a4d178689051ecd", "sha256": "36fee8ac00bb1307f46b4e2e2088ffdc8d21c189ccc8dee1d08a4d61cf3a6b9e" }, "downloads": -1, "filename": "kleides_dssoclient-0.2.tar.gz", "has_sig": false, "md5_digest": "3d6b50bd700d127a0a4d178689051ecd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18648, "upload_time": "2018-11-19T09:29:36", "url": "https://files.pythonhosted.org/packages/78/bb/4dcb327196e58d129846f989deabd0fcfff3b302afa5879d8168f7d22043/kleides_dssoclient-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "de89cade75a78236dfe79b8bc668a918", "sha256": "8e18c3bb8de15798bfe6f9a687a04566cdf21935197b4f2d17ddd7f92c9be76e" }, "downloads": -1, "filename": "kleides_dssoclient-0.3.tar.gz", "has_sig": false, "md5_digest": "de89cade75a78236dfe79b8bc668a918", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19124, "upload_time": "2018-12-19T12:36:27", "url": "https://files.pythonhosted.org/packages/fc/89/c57b25873e42855e325717a1ad18d5325c02200ef33375e2e38a73437566/kleides_dssoclient-0.3.tar.gz" } ], "0.6": [ { "comment_text": "", "digests": { "md5": "93c47f167a00a07db947aa12d6f90c0e", "sha256": "8023689d1e09403abc4bc1fde834b70b510df305d9a9f7e2272e5da0afb70949" }, "downloads": -1, "filename": "kleides_dssoclient-0.6.tar.gz", "has_sig": false, "md5_digest": "93c47f167a00a07db947aa12d6f90c0e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19173, "upload_time": "2019-03-06T14:00:11", "url": "https://files.pythonhosted.org/packages/95/e4/b0ffc01b3d8faba7ca54e48d9b238c1ee9515f94d7a4fc350709189de36f/kleides_dssoclient-0.6.tar.gz" } ], "0.7": [ { "comment_text": "", "digests": { "md5": "d02a218c1b89fac851d82f63c595b93e", "sha256": "39037cc45c1dc0fc993c20157997ec65da25c9bf0d3868a40d2a692a985b6eb7" }, "downloads": -1, "filename": "kleides_dssoclient-0.7.tar.gz", "has_sig": false, "md5_digest": "d02a218c1b89fac851d82f63c595b93e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19678, "upload_time": "2019-07-16T16:43:55", "url": "https://files.pythonhosted.org/packages/73/e9/0bfebd723d0f4f30c948cbfbb53502001b4091e1e26dc9555e00c7f1e7bb/kleides_dssoclient-0.7.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "d02a218c1b89fac851d82f63c595b93e", "sha256": "39037cc45c1dc0fc993c20157997ec65da25c9bf0d3868a40d2a692a985b6eb7" }, "downloads": -1, "filename": "kleides_dssoclient-0.7.tar.gz", "has_sig": false, "md5_digest": "d02a218c1b89fac851d82f63c595b93e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19678, "upload_time": "2019-07-16T16:43:55", "url": "https://files.pythonhosted.org/packages/73/e9/0bfebd723d0f4f30c948cbfbb53502001b4091e1e26dc9555e00c7f1e7bb/kleides_dssoclient-0.7.tar.gz" } ] }