{ "info": { "author": "Mathieu Hinderyckx", "author_email": "mathieu.hinderyckx@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Framework :: Django", "Framework :: Django :: 2.0", "Framework :: Django :: 2.1", "Intended Audience :: Developers", "Intended Audience :: Information Technology", "License :: OSI Approved :: Apache Software License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: Dynamic Content", "Topic :: Internet :: WWW/HTTP :: WSGI", "Topic :: Security", "Topic :: Software Development :: Libraries :: Application Frameworks", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "djangosaml2idp\n===============\n\n\n.. image:: https://img.shields.io/pypi/v/djangosaml2idp.svg\n :scale: 100%\n :target: https://pypi.python.org/pypi/djangosaml2idp\n :alt: PyPi\n\n.. image:: https://img.shields.io/badge/python-2.7%2C3.7%2B-blue.svg\n :scale: 100%\n :target: https://www.python.org/\n :alt: Python\n\n.. image:: https://img.shields.io/badge/Django-1.11%2C%202.0%2B-blue.svg\n :scale: 100%\n :target: https://www.djangoproject.com/\n :alt: Django\n\n.. image:: https://readthedocs.org/projects/djangosaml2idp/badge/?version=latest\n :scale: 100%\n :target: https://djangosaml2idp.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation Status\n\n.. image:: https://img.shields.io/badge/License-Apache%202.0-blue.svg\n :scale: 100%\n :target: https://www.apache.org/licenses/LICENSE-2.0\n :alt: Apache 2.0 License\n\n\ndjangosaml2idp implements the Identity Provider side of the SAML2 protocol for Django.\nIt builds on top of `PySAML2 `_, and is production-ready.\n\nPackage version 0.3.3 was the last Python 2 / Django 1.8-1.11 compatible release. Versions starting from 0.4.0 are for Python 3 and Django 2.x.\n\nAny contributions, feature requests, proposals, ideas ... are welcome! See the `CONTRIBUTING document `_ for some info.\n\nInstallation\n============\n\nPySAML2 uses `XML Security Library `_ binary to sign SAML assertions, so you need to install\nit either through your operating system package or by compiling the source code. It doesn't matter where the final executable is installed because\nyou will need to set the full path to it in the configuration stage. XmlSec is available (at least) for Debian, OSX and Alpine Linux.\n\nNow you can install the djangosaml2idp package using pip. This will also install PySAML2 and its dependencies automatically::\n\n pip install djangosaml2idp\n\n\nConfiguration & Usage\n=====================\n\nThe first thing you need to do is add ``djangosaml2idp`` to the list of installed apps::\n\n INSTALLED_APPS = (\n 'django.contrib.admin',\n 'djangosaml2idp',\n ...\n )\n\nNow include ``djangosaml2idp`` in your project by adding it in the url config::\n\n from django.conf.urls import url, include\n from django.contrib import admin\n\n urlpatterns = [\n url(r'^idp/', include('djangosaml2idp.urls')),\n url(r'^admin/', admin.site.urls),\n ...\n ]\n\nIn your Django settings, configure your IdP. Configuration follows the `PySAML2 configuration `_. The IdP from the example project looks like this::\n\n ...\n import saml2\n from saml2.saml import NAMEID_FORMAT_EMAILADDRESS, NAMEID_FORMAT_UNSPECIFIED\n from saml2.sigver import get_xmlsec_binary\n\n LOGIN_URL = '/login/'\n BASE_URL = 'http://localhost:9000/idp'\n\n SAML_IDP_CONFIG = {\n 'debug' : DEBUG,\n 'xmlsec_binary': get_xmlsec_binary(['/opt/local/bin', '/usr/bin/xmlsec1']),\n 'entityid': '%s/metadata' % BASE_URL,\n 'description': 'Example IdP setup',\n\n 'service': {\n 'idp': {\n 'name': 'Django localhost IdP',\n 'endpoints': {\n 'single_sign_on_service': [\n ('%s/sso/post' % BASE_URL, saml2.BINDING_HTTP_POST),\n ('%s/sso/redirect' % BASE_URL, saml2.BINDING_HTTP_REDIRECT),\n ],\n },\n 'name_id_format': [NAMEID_FORMAT_EMAILADDRESS, NAMEID_FORMAT_UNSPECIFIED],\n 'sign_response': True,\n 'sign_assertion': True,\n },\n },\n\n 'metadata': {\n 'local': [os.path.join(os.path.join(os.path.join(BASE_DIR, 'idp'), 'saml2_config'), 'sp_metadata.xml')],\n },\n # Signing\n 'key_file': BASE_DIR + '/certificates/private.key',\n 'cert_file': BASE_DIR + '/certificates/public.cert',\n # Encryption\n 'encryption_keypairs': [{\n 'key_file': BASE_DIR + '/certificates/private.key',\n 'cert_file': BASE_DIR + '/certificates/public.cert',\n }],\n 'valid_for': 365 * 24,\n }\n\n\nNotice the configuration requires a private key and public certificate to be available on the filesystem in order to sign and encrypt messages.\n\n\nYou also have to define a mapping for each SP you talk to::\n\n ...\n SAML_IDP_SPCONFIG = {\n 'http://localhost:8000/saml2/metadata/': {\n 'processor': 'djangosaml2idp.processors.BaseProcessor',\n 'attribute_mapping': {\n # DJANGO: SAML\n 'email': 'email',\n 'first_name': 'first_name',\n 'last_name': 'last_name',\n 'is_staff': 'is_staff',\n 'is_superuser': 'is_superuser',\n }\n }\n }\n\n\nThat's all for the IdP configuration. Assuming you run the Django development server on localhost:8000, you can get its metadata by visiting http://localhost:8000/idp/metadata/.\nUse this metadata xml to configure your SP. Place the metadata xml from that SP in the location specified in the config dict (sp_metadata.xml in the example above).\n\nFurther optional configuration options\n======================================\n\nIn the ``SAML_IDP_SPCONFIG`` setting you can define a ``processor``, its value being a string with dotted path to a class.\nThis is a hook to customize some access control checks. By default, the included `BaseProcessor` is used, which allows every user to login on the IdP.\nYou can customize this behaviour by subclassing the `BaseProcessor` and overriding its `has_access(self, request)` method. This method should return true or false, depending if the user has permission to log in for the SP / IdP.\nThe processor has the SP entity ID available as `self._entity_id`, and received the request (with an authenticated request.user on it) as parameter to the `has_access` function.\nThis way, you should have the necessary flexibility to perform whatever checks you need.\nAn example `processor subclass `_ can be found in the IdP of the included example.\n\nWithout custom setting, users will be identified by the ``USERNAME_FIELD`` property on the user Model you use. By Django defaults this will be the username.\nYou can customize which field is used for the identifier by adding ``SAML_IDP_DJANGO_USERNAME_FIELD`` to your settings with as value the attribute to use on your user instance.\n\nCustomizing error handling\n==========================\n\ndjangosaml2idp renders a very basic error page if it encounters an error, indicating an error occured, which error, and possibly an extra message.\nThe HTTP status code is also set if possible depending on which error occured.\nYou can customize this by using the ``SAML_IDP_ERROR_VIEW_CLASS`` setting. Set this to a dotted import path to your custom (class based) view in order to use that one.\nIf you subclass the provided `djangosaml2idp.error_views.SamlIDPErrorView`, you have the following variables available for use in the template:\n\nexception_type\n the class of the exception that occurred\n\nexception_msg\n the message from the exception (by doing `str(exception)`)\n\nextra_message\n if no specific exception given, a message indicating something went wrong, or an additional message next to the `exception_msg`\n\nThe simplest override is to subclass the `SamlIDPErrorView` and only using your own error template.\nYou can use any Class-Based-View for this; it's not necessary to subclass the builtin error view.\nThe example project contains a ready to use example of this; uncomment the `SAML_IDP_ERROR_VIEW_CLASS` setting and it will use a custom view with custom template.\n\n\nMulti Factor Authentication support\n===================================\n\nThere are three main components to adding multiple factor support.\n\n\n1. Subclass djangosaml2idp.processors.BaseProcessor as outlined above. You will need to override the `enable_multifactor()` method to check whether or not multifactor should be enabled for a user. (If it should allways be enabled for all users simply hard code to True). By default it unconditionally returns False and no multifactor is enforced.\n\n2. Sublass the `djangosaml2idp.views.ProcessMultiFactorView` view to make the appropriate calls for your environment. Implement your custom verification logic in the `multifactor_is_valid` method: this could call a helper script, an internal SMS triggering service, a data source only the IdP can access or an external second factor provider (e.g. Symantec VIP). By default this view will log that it was called then redirect.\n\n3. Update your urls.py and add an override for name='saml_multi_factor' - ensure it comes before importing the djangosaml2idp urls file so your custom view is used instead of the built-in one.\n\n\nRunning the test suite\n======================\nInstall the dev dependencies in ``requirements-dev.txt``::\n\n pip install -r requirements-dev.txt\n\nRun ``py.test`` from the project root::\n\n py.test\n\n\n\nExample project\n---------------\nThe directory ``example_project`` contains a barebone demo setup to demonstrate the login-logout functionality.\nIt consists of a Service Provider implemented with `djangosaml2 `_ and an Identity Provider using ``djangosaml2idp``.\nThe readme in that folder contains more information on how to run it.\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/OTA-Insight/djangosaml2idp/", "keywords": "django,pysaml2,sso,saml2,federated authentication,authentication,idp", "license": "Apache Software License 2.0", "maintainer": "Mathieu Hinderyckx", "maintainer_email": "", "name": "djangosaml2idp", "package_url": "https://pypi.org/project/djangosaml2idp/", "platform": "", "project_url": "https://pypi.org/project/djangosaml2idp/", "project_urls": { "Homepage": "https://github.com/OTA-Insight/djangosaml2idp/" }, "release_url": "https://pypi.org/project/djangosaml2idp/0.5.0/", "requires_dist": [ "django (>=2.0)", "pysaml2 (>=4.5.0)" ], "requires_python": "", "summary": "SAML 2.0 Identity Provider for Django", "version": "0.5.0" }, "last_serial": 4687436, "releases": { "0.1.10": [ { "comment_text": "", "digests": { "md5": "f1e40fef6e22f372af750fc53453bda5", "sha256": "59b54486e6dbd701acd57f5aaa5538983db266871c46c17656ee418ea565fac9" }, "downloads": -1, "filename": "djangosaml2idp-0.1.10-py2.7.egg", "has_sig": false, "md5_digest": "f1e40fef6e22f372af750fc53453bda5", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 9176, "upload_time": "2017-03-12T23:07:13", "url": "https://files.pythonhosted.org/packages/e0/22/933b63cd4c7afb61e4774a97fed90da437eb258af42e6cd35538650ef528/djangosaml2idp-0.1.10-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "7d36eeb4c246598c32fa946a68893e20", "sha256": "7b4e16f8826ebf6610d43368b396cad30ef9d6d20ccc2cbf9162c736fa493412" }, "downloads": -1, "filename": "djangosaml2idp-0.1.10-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7d36eeb4c246598c32fa946a68893e20", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 5322, "upload_time": "2017-03-12T23:07:08", "url": "https://files.pythonhosted.org/packages/04/43/aacd6b88b4edf0632488b8f4a6e9b87096856cae416d5da77e05ddcff979/djangosaml2idp-0.1.10-py2.py3-none-any.whl" } ], "0.1.20": [ { "comment_text": "", "digests": { "md5": "15a88d2859a77ad16fd483dc86c64717", "sha256": "7bc3bcbb2f164ea524ef291801d85f25eeb4fb850f671c243e1e061267e84b71" }, "downloads": -1, "filename": "djangosaml2idp-0.1.20-py2.7.egg", "has_sig": false, "md5_digest": "15a88d2859a77ad16fd483dc86c64717", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 8938, "upload_time": "2017-03-12T23:07:15", "url": "https://files.pythonhosted.org/packages/49/d0/cf5591ea78768da0b6ae943c80d3b94e98f5b1aad1f875a44fe232f17d8d/djangosaml2idp-0.1.20-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "94c10ce9ed18f44224a732d9c9d2156b", "sha256": "42d75ce6b9f173898c1019a08799fe1e8d4b6fa4ea9c3c60d6cf3c64cc89dd7f" }, "downloads": -1, "filename": "djangosaml2idp-0.1.20-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "94c10ce9ed18f44224a732d9c9d2156b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8404, "upload_time": "2017-03-12T23:07:10", "url": "https://files.pythonhosted.org/packages/fd/ee/d36e1b259079903b0942cd1afbc814fce5c53a1ee58c55b89e6c8469e92c/djangosaml2idp-0.1.20-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "56dda4771f6a5c27d4edbce59c44c2d4", "sha256": "0083a1d6b82e0393c922b966720eb14d9fa32cecdba7236793e9b5c7560f3620" }, "downloads": -1, "filename": "djangosaml2idp-0.1.20.tar.gz", "has_sig": false, "md5_digest": "56dda4771f6a5c27d4edbce59c44c2d4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6002, "upload_time": "2017-03-12T23:07:17", "url": "https://files.pythonhosted.org/packages/38/14/b57b7558d4382c8401278e06fac8f11e021578b070f9d2f232f43bd6e3d8/djangosaml2idp-0.1.20.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "97f32bc987babe18955a3364fecbb5de", "sha256": "4ed85d74638bd38b380272a86367b74049775dc490b45c7aa93221c1230fd9a2" }, "downloads": -1, "filename": "djangosaml2idp-0.2.0-py2.7.egg", "has_sig": false, "md5_digest": "97f32bc987babe18955a3364fecbb5de", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 10029, "upload_time": "2017-03-13T23:44:21", "url": "https://files.pythonhosted.org/packages/d1/02/d7e515006262479bc2eb2e3874141eddc89f430fd7d7540ef4c0939f5380/djangosaml2idp-0.2.0-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "6d0ee904ff229d577dfca43b2b2b2243", "sha256": "1f38cf869c3f11542c2ca744b2a9fdb9912bc7ecfb1f0b8764a536bfd9732c9d" }, "downloads": -1, "filename": "djangosaml2idp-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6d0ee904ff229d577dfca43b2b2b2243", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10377, "upload_time": "2017-03-13T23:44:19", "url": "https://files.pythonhosted.org/packages/ed/cf/20dbd65d441a1145c6a7ab294e54481afa8027c7215d6cc7fbb8acec9c8b/djangosaml2idp-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ade647a48e6b4f55709e4ecb4983d1a4", "sha256": "f290fca9a8a868933a852b90f2ae6fe5d78d1a4aa84173259a735d9ca99ce947" }, "downloads": -1, "filename": "djangosaml2idp-0.2.0.tar.gz", "has_sig": false, "md5_digest": "ade647a48e6b4f55709e4ecb4983d1a4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6861, "upload_time": "2017-03-13T23:44:23", "url": "https://files.pythonhosted.org/packages/91/45/0ced1baa98a179d969f374fdf96d444fe46676a45fc03706191ba7533063/djangosaml2idp-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "23d9059f987f53bbcb7267c4d59de01d", "sha256": "0bf63e2df273fb9313db4d51d7742c524ab7496b6f98133f39cde17f6b8c2b5e" }, "downloads": -1, "filename": "djangosaml2idp-0.2.1-py2.7.egg", "has_sig": false, "md5_digest": "23d9059f987f53bbcb7267c4d59de01d", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 10863, "upload_time": "2017-03-14T23:01:42", "url": "https://files.pythonhosted.org/packages/13/19/355a6ca0d5db17898401f3906bdf6c081ce1f022b8f01f8ba6d753da24d1/djangosaml2idp-0.2.1-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "f61f5fc8cda7cc72ab10d0facc78dd6f", "sha256": "fa3eec9566e78800b31406b43ceb2ffda6c0591bff251b95568e14366fc8ab95" }, "downloads": -1, "filename": "djangosaml2idp-0.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f61f5fc8cda7cc72ab10d0facc78dd6f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10742, "upload_time": "2017-03-14T23:01:40", "url": "https://files.pythonhosted.org/packages/4f/a7/38a3b89a2963fe677ff28539a8dcb0edc08c31d4f09876d7c65053344630/djangosaml2idp-0.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1fad37873cd6f8c21d0e14b1bf8c21c5", "sha256": "974bcb0e111d008ed2b1c9931ed4ff105b28b8991e4e3b76dc81b1875252d648" }, "downloads": -1, "filename": "djangosaml2idp-0.2.1.tar.gz", "has_sig": false, "md5_digest": "1fad37873cd6f8c21d0e14b1bf8c21c5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7063, "upload_time": "2017-03-14T23:01:45", "url": "https://files.pythonhosted.org/packages/0a/a2/5f67a4c43916e42d1d51381f678294eecb51ebdabdeb58867d058c802960/djangosaml2idp-0.2.1.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "06bd05caf4cb880cd668d9bee5c83439", "sha256": "56e8adaedec582239cd4595ef7c2b2cebf65457a12da825ff656b8368a523638" }, "downloads": -1, "filename": "djangosaml2idp-0.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "06bd05caf4cb880cd668d9bee5c83439", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11749, "upload_time": "2017-04-07T12:36:27", "url": "https://files.pythonhosted.org/packages/50/ac/1a4ecbbc4083861c1122c141bcacf1b80a8421f8c8bc65825e6f8fd9c649/djangosaml2idp-0.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "34dcad0144676d2d40618795c1bb9f3c", "sha256": "b1fb6db75e4534195e45672b3dc1d5fbae8e9ad01e34141f858887f535bad056" }, "downloads": -1, "filename": "djangosaml2idp-0.3.0.tar.gz", "has_sig": false, "md5_digest": "34dcad0144676d2d40618795c1bb9f3c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7636, "upload_time": "2017-04-07T12:36:32", "url": "https://files.pythonhosted.org/packages/ef/cd/db2a91310c55a9332b90d2fca9db03efef3d54aa78de2d6b322d749e3853/djangosaml2idp-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "3554504c114d87172a177e34ca456f31", "sha256": "4a13ba14ef0d76226334dffaa248adb03015176bbc9d09acd4bb62eeb3e0aa77" }, "downloads": -1, "filename": "djangosaml2idp-0.3.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3554504c114d87172a177e34ca456f31", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11752, "upload_time": "2017-04-07T13:36:10", "url": "https://files.pythonhosted.org/packages/c5/fb/dbcd72fb4eb06cde7ef0b6e427c17479f4bd30031ee838d2cd0329c55b66/djangosaml2idp-0.3.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f7c640256cbfed1595b53a34e8b49766", "sha256": "ec284225195e6ad095bc60878d578d448c3685a788e19b6e727bc342d643fffa" }, "downloads": -1, "filename": "djangosaml2idp-0.3.1.tar.gz", "has_sig": false, "md5_digest": "f7c640256cbfed1595b53a34e8b49766", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7633, "upload_time": "2017-04-07T13:36:12", "url": "https://files.pythonhosted.org/packages/20/f3/def085af3d0e7ed905b0be67d9991bf064f68de944ac34c4b7f22de0dba9/djangosaml2idp-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "8ffcabf74c1c37b56b76f6a98316ba42", "sha256": "a6b5d36d69965028ca875a9c6e45e8a90639466cbc376faac05da2d2e3e92639" }, "downloads": -1, "filename": "djangosaml2idp-0.3.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8ffcabf74c1c37b56b76f6a98316ba42", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11754, "upload_time": "2017-04-14T14:07:17", "url": "https://files.pythonhosted.org/packages/7d/f2/362f86ea5cf95db67ed4a43ca9bcfeaf7b28f620166d3a9fe7aeb512c5b3/djangosaml2idp-0.3.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9a185b9df525d9c486cd5fa3f73c6f0b", "sha256": "1f07e50168662d73f64417893e5185fd6d04f60c00be41284671df2a52e85c73" }, "downloads": -1, "filename": "djangosaml2idp-0.3.2.tar.gz", "has_sig": false, "md5_digest": "9a185b9df525d9c486cd5fa3f73c6f0b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7630, "upload_time": "2017-04-14T14:07:19", "url": "https://files.pythonhosted.org/packages/80/2c/1f5c2996b681e3b05ed66ff6b0016121558ca15b3c94d2fde11f038ed326/djangosaml2idp-0.3.2.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "455eae0c6d67e80c59de949028fe1544", "sha256": "e63d1689ae4357bc235c91d349abd57c63f36144695314b3d23444ae33f9935b" }, "downloads": -1, "filename": "djangosaml2idp-0.3.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "455eae0c6d67e80c59de949028fe1544", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11560, "upload_time": "2017-04-18T10:17:14", "url": "https://files.pythonhosted.org/packages/bc/9b/53f059b4c8714eea1f42ac953c9179392c3c6823abe2b80d3f7584752a73/djangosaml2idp-0.3.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "426fe5293ad21230824aad5c5d5aaa93", "sha256": "aa9207bd3f526f4d602439606988d7a6bc3a38e69dbe2484963c021db6222d50" }, "downloads": -1, "filename": "djangosaml2idp-0.3.3.tar.gz", "has_sig": false, "md5_digest": "426fe5293ad21230824aad5c5d5aaa93", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7498, "upload_time": "2017-04-18T10:17:16", "url": "https://files.pythonhosted.org/packages/8d/10/24b6fa20a33573a5f75d112ccc6c133d3e5284698efb0b808547aa792216/djangosaml2idp-0.3.3.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "1f9f6bf6c428df806e54c820bfd9e90d", "sha256": "1a1beaa15824ef751c136472cc1f6687a5a363933c028a089efc47c3796fd784" }, "downloads": -1, "filename": "djangosaml2idp-0.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1f9f6bf6c428df806e54c820bfd9e90d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9475, "upload_time": "2018-08-08T21:31:48", "url": "https://files.pythonhosted.org/packages/24/62/bbddea79013456850bcf2be6d93741082888c574a16ed4061e6beb56b7a0/djangosaml2idp-0.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9b7bc0d7885bf7325f60135500af910d", "sha256": "ec84750de9a6845b30e552b95f7cc1b3509b04f8dba4a27020e4ddac5088d4b7" }, "downloads": -1, "filename": "djangosaml2idp-0.4.0-py3.6.egg", "has_sig": false, "md5_digest": "9b7bc0d7885bf7325f60135500af910d", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 13261, "upload_time": "2018-08-08T21:31:49", "url": "https://files.pythonhosted.org/packages/a1/1a/690ba7e938d6bccd9b1b0833131a2d3bbe6d76c0dbc8b630606320ea88fc/djangosaml2idp-0.4.0-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "aefa39dfd08859658f8f0507c4a54889", "sha256": "01b29e406baa702cd3b265a884dd1085eb830a09b7c82c613f1574e2bbe58aba" }, "downloads": -1, "filename": "djangosaml2idp-0.4.0.tar.gz", "has_sig": false, "md5_digest": "aefa39dfd08859658f8f0507c4a54889", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11109, "upload_time": "2018-08-08T21:31:50", "url": "https://files.pythonhosted.org/packages/8c/71/e29037558901c35762c05966ae899b57286bbca1b043e01b8e26de7bc21e/djangosaml2idp-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "7cb1a45927706de738cf1581968576ab", "sha256": "c8c595e0afa3ba7151de81cbbc3034526695feaa628a800a0dd245aa474ec95d" }, "downloads": -1, "filename": "djangosaml2idp-0.4.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7cb1a45927706de738cf1581968576ab", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9813, "upload_time": "2018-08-09T20:44:04", "url": "https://files.pythonhosted.org/packages/a3/64/1f1941043a10cd02ccc9e27e43826d944e37b199421480b333724b542b99/djangosaml2idp-0.4.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "78ba7dde0566662e8c43e28e0cf56f22", "sha256": "5b93bf2b68c73620600ba1b0bd45a444e668af9aafce94b97a878a9baebcd70f" }, "downloads": -1, "filename": "djangosaml2idp-0.4.1.tar.gz", "has_sig": false, "md5_digest": "78ba7dde0566662e8c43e28e0cf56f22", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11412, "upload_time": "2018-08-09T20:44:06", "url": "https://files.pythonhosted.org/packages/8a/02/bc4f1039fe74eed05fbdec966ef5866417ffa93f3ffde440499d5cc98b10/djangosaml2idp-0.4.1.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "fb9a5b989a56b70b5a0a8e006fa3a9b4", "sha256": "c0e27e30f5c1dfec3dcb1f8057ae40e3b1ffae3f1c93960800a5721063360081" }, "downloads": -1, "filename": "djangosaml2idp-0.4.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "fb9a5b989a56b70b5a0a8e006fa3a9b4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14700, "upload_time": "2018-08-15T14:21:06", "url": "https://files.pythonhosted.org/packages/28/ec/06cfff371a4413273c048f5e1e6b0712537e4309bb22e748cf9761a56c97/djangosaml2idp-0.4.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "98b100eec5508d92a0d615d987908b03", "sha256": "e5f21dbca5104ead23f6945153eb77df58ad2bdd7f8a8470eeda5ff0c4cdd2c8" }, "downloads": -1, "filename": "djangosaml2idp-0.4.2-py3.6.egg", "has_sig": false, "md5_digest": "98b100eec5508d92a0d615d987908b03", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 18383, "upload_time": "2018-08-15T14:21:07", "url": "https://files.pythonhosted.org/packages/05/a3/53502c8956be6e8a57e2ecf2ecacbd942f43423efdf51ccbb5d6c2154d7f/djangosaml2idp-0.4.2-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "a62659288a7da5f201f96bc2f71e1ba9", "sha256": "d694135746378c60e508fd9a10c069dbfc1039935e72debb95abbe6086325ed2" }, "downloads": -1, "filename": "djangosaml2idp-0.4.2.tar.gz", "has_sig": false, "md5_digest": "a62659288a7da5f201f96bc2f71e1ba9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16220, "upload_time": "2018-08-15T14:21:09", "url": "https://files.pythonhosted.org/packages/fa/a4/4b708b61d0761a65b2ff1fb9dac7b456dac83baab64912f57d7124ff2d66/djangosaml2idp-0.4.2.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "5e8880458041507f1ab77e23250a0be0", "sha256": "1a400bde85de41fb14748a4b8c0ef19b6e5504a98e36e2ad983c90f9aaa3700c" }, "downloads": -1, "filename": "djangosaml2idp-0.5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5e8880458041507f1ab77e23250a0be0", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15639, "upload_time": "2019-01-12T00:29:06", "url": "https://files.pythonhosted.org/packages/da/87/a495d657caa5c0e5a9c10abf7688bbcc82a5a9aea6e7d1183ac649c87ca4/djangosaml2idp-0.5.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "049c4810bbd4e6c7f5ccfc8061ba75ff", "sha256": "46690796a106fc7757f4f8c3b3e762d4fd9e12ef02d7d23f1b2143c01b50510d" }, "downloads": -1, "filename": "djangosaml2idp-0.5.0.tar.gz", "has_sig": false, "md5_digest": "049c4810bbd4e6c7f5ccfc8061ba75ff", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17887, "upload_time": "2019-01-12T00:29:08", "url": "https://files.pythonhosted.org/packages/91/77/0751f9d5117d518ef503d66c5147d84debb1e1b4d8f0362e13a1a5a2e403/djangosaml2idp-0.5.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "5e8880458041507f1ab77e23250a0be0", "sha256": "1a400bde85de41fb14748a4b8c0ef19b6e5504a98e36e2ad983c90f9aaa3700c" }, "downloads": -1, "filename": "djangosaml2idp-0.5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5e8880458041507f1ab77e23250a0be0", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15639, "upload_time": "2019-01-12T00:29:06", "url": "https://files.pythonhosted.org/packages/da/87/a495d657caa5c0e5a9c10abf7688bbcc82a5a9aea6e7d1183ac649c87ca4/djangosaml2idp-0.5.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "049c4810bbd4e6c7f5ccfc8061ba75ff", "sha256": "46690796a106fc7757f4f8c3b3e762d4fd9e12ef02d7d23f1b2143c01b50510d" }, "downloads": -1, "filename": "djangosaml2idp-0.5.0.tar.gz", "has_sig": false, "md5_digest": "049c4810bbd4e6c7f5ccfc8061ba75ff", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17887, "upload_time": "2019-01-12T00:29:08", "url": "https://files.pythonhosted.org/packages/91/77/0751f9d5117d518ef503d66c5147d84debb1e1b4d8f0362e13a1a5a2e403/djangosaml2idp-0.5.0.tar.gz" } ] }