/django3-saml-idp

Authenticate users for your Django web app against a SAML 2.0 Identity Provider.

Primary LanguagePythonMIT LicenseMIT

dj-saml-idp

This started as a fork of novapost/django-saml2-idp, distributed independently as dj-saml-idp.

The original project is at https://github.com/guitarmanvt/django-saml2-idp

dj-saml-idp implements the Identity Provider (IDP) side of the SAML 2.0 protocol and makes user authentication available to external applications.

This package only supports Django 1.9+. At this time, it's only been tested with Django 1.9 & 1.11

Development And Testing

The package uses a Docker container to support both development and tests. The container creates virtual environments for different Python versions as below:

  • Python 2.7 in /venv27
  • Python 3.7 in /venv37

These environments may be used for development and interactive testing.

To build and run the container, to get a bash prompt:

docker build -t dj-saml-idp:latest .
docker-compose run --service-ports test

To support use of IDEs (such as PyCharm) for development, the container can also run SSHD; run the command docker/run_sshd.sh at a bash prompt in the container. In the commands above, the --service-ports option is only needed if you intend to run sshd in the container.

The test runner is pytest. For release tests, we use tox to run the tests against different versions of Python and Django. The tests can be run inside the Docker container using tox:

$ . /venv37/bin/activate
$ tox

Release

First of all, create a new version of the package. We use bumpversion_ to handle updating all version strings, committing the changes and creating a new git tag automatically. To bump the package version use the following command with whichever part of the semantic version you'd like to update::

$ bumpversion (major|minor|patch)

for instance for a minor update, use (which should be the most common case)::

$ bumpversion minor

You need the PyPI credentials for the mobify account to be able to release a new version and the build script is expecting it defined as an environment variable:

$ export PYPI_PASSWORD=supersecretpassword

Releasing a new version to PyPI is very simple. The first thing you need to do is make sure that all the test are passing and that the version in saml2idp/__init__.py is the one that you'd like to create on PyPI.

With that done, all you need to do is run the following commands::

$ rm -rf build/ dist/ dj_saml_idp.egg-info
$ make release

This will cleanup the build/ and dist/ directories, build a source package and a Python wheel. Both will then be uploaded to PyPI.

License

Distributed under the MIT License.

.. _novapost/django-saml2-idp: https://github.com/novapost/django-saml2-idp .. _MIT License: https://github.com/mobify/dj-saml-idp/blob/master/LICENSE .. _wheel: http://wheel.readthedocs.org/en/latest/ .. _bumpversion: https://github.com/peritus/bumpversion