django4-saml-idp 1.4.0
SAML 2.0 IdP for Django
License: MIT

# dj-saml-idp

This is a fork of `deforestg/dj-saml-idp` which is a fork of `mobify/dj-saml-idp` 
that is distributed independently as `django4-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 supports Django 1.9+ through 4.1.3.

# 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.8 in `/venv38`

These environments may be used for development and interactive testing.

To build and run the container, to get a bash prompt:
```bash
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`:

```bash
$ . /venv38/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/ django_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


# Release History

## 1.4.0 (2022-11-16)

* Fork to https://github.com/bctiemann/dj-saml-idp
* Support Django 3.2.16 and 4.1.3

## 1.3.2 (2021-01-14)

* Fork to http://github.com/deforestg/dj-saml-idp
* Support Django 2.2

## 1.0.0 (2019-11-06)

* Refactor development and test environment
* Support Python 3

## 0.22.0 (2016-05-26)

* Allow a `redirect_to` parameter to be passed to the logout view to redirect
  the user to after succesful logout instead of showing the logout page.
* Introduce logging through `structlog` and provide more informative logging
  out put to make SAML flows easier to debug. Log messages are all logged under
  the `saml2idp` logger now.
* Adding a new-style processor that carries a `name` attribute which allows
  custom templates for each processor during the SSO process. Custom templates
  are optional and will default to the same templates as before. The change is
  backwards compatible and handles old-style processors as previously.


## 0.21.2 (2016-04-18)

* Switched from `django.utils.importlib` to Python's standard `importlib` to
  work with Django 1.9.
* Update the test setup to run tests against Django 1.9 in addition to all
  other versions of Django.