Metadata-Version: 1.1
Name: kleides_dssoclient
Version: 0.8
Summary: Kleides Discourse SSO client for Django
Home-page: https://github.com/ossobv/kleides-dssoclient
Author: Walter Doekes, OSSO B.V.
Author-email: wjdoekes+kleides@osso.nl
License: GPLv3+
Description: |KLEIDES| Kleides Discourse SSO client
        ======================================
        
        *Discourse Single-Sign-on (DSSO) provider client* to connect your
        *Django* project to a *Discourse Single-Sign-On provider server*.
        
        See: https://meta.discourse.org/t/official-single-sign-on-for-discourse-sso/
        
        Example usage:
        
        * Add ``kleides_dssoclient`` to ``INSTALLED_APPS``.
        
        * Create a custom ``DssoLoginBackend``, for example::
        
            from kleides_dssoclient.backends import DssoLoginBackend
        
            class MyProjectDssoLoginBackend(DssoLoginBackend):
                """
                DssoLoginBackend that rejects anyone without is_superuser, and that
                sets all mapped variables on the newly created User object.
                """
                def authenticate(self, dsso_mapping):
                    """
                    Check that user is a superuser and pass along to DssoLoginBackend.
                    """
                    if dsso_mapping.get('is_superuser') not in ('True', 'true', '1'):
                        return None
        
                    return super(MyProjectDssoLoginBackend, self).authenticate(
                        dsso_mapping)
        
                def configure_user(self, user, dsso_mapping):
                    """
                    We expect username, email, is_superuser in the dsso_mapping.
                    """
                    user = (
                        super(MyProjectDssoLoginBackend, self)
                        .configure_user(user, dsso_mapping))
        
                    user.email = dsso_mapping.get('email', '')
                    is_superuser = (
                        dsso_mapping.get('is_superuser') in ('True', 'true', '1'))
                    user.is_staff = is_superuser
                    user.is_superuser = is_superuser
        
                    user.save()
                    return user
        
        * Add this to the *Django* ``settings``::
        
            AUTHENTICATION_BACKENDS = (  # the only backend needed
                'myproject.backends.MyProjectDssoLoginBackend',
            )
            MIDDLEWARE_CLASSES += (
                'kleides_dssoclient.middleware.DssoLoginMiddleware',
            )
            KLEIDES_DSSO_ENDPOINT = 'https://DSSOSERVER/sso/'
            KLEIDES_DSSO_SHARED_KEY = 'oh-sso-very-very-secret'
        
        
        .. |KLEIDES| image:: assets/kleides-icon.png
            :alt: Kleides
        
        
        
        Changes
        -------
        
        v0.8 - *2020-09-28*
        ~~~~~~~~~~~~~~~~~~~
        
        - Allow using the Dsso backend as a mixin.
        
        v0.7 - *2019-07-16*
        ~~~~~~~~~~~~~~~~~~~
        
        - Allow bypassing the middleware by setting KLEIDES_DSSO_ENDPOINT to None.
        
        
        v0.6 - *2019-03-06*
        ~~~~~~~~~~~~~~~~~~~
        
        - Add ``request`` arg to ``DssoLoginBackend`` for Django 2.1.
        
        
        v0.5 - *2019-03-06*
        ~~~~~~~~~~~~~~~~~~~
        
        - Add logging to help investigate problems.
        
        
        v0.3 - *2018-12-18*
        ~~~~~~~~~~~~~~~~~~~
        
        - Add support for Django 1.10 style middleware.
        - Check Django version for is_authenticated usage.
        
        
        v0.2 - *2018-11-19*
        ~~~~~~~~~~~~~~~~~~~
        
        - Replace ``sso_mapping`` with ``dsso_mapping`` in authenticate argument list.
        
        
        v0.1 - *2018-11-16*
        ~~~~~~~~~~~~~~~~~~~
        
        - Initial release.
        
Platform: linux
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Web Environment
Classifier: Framework :: Django
Classifier: Framework :: Django :: 2.2
Classifier: Framework :: Django :: 3.0
Classifier: Framework :: Django :: 3.1
Classifier: Intended Audience :: System Administrators
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Topic :: System :: Systems Administration :: Authentication/Directory
