# Change Log

## v0.4.3 - March 8, 2018 - Minor static token fix

- Fix return type of `random_token()`.

## v0.4.2 - December 15, 2017 - addstatictoken fix

- Fix addstatictoken string handling under Python 3.

## v0.4.1 - August 29, 2017 - Misc fixes

- Improved handling of device persistent identifiers.
- Fix #25: make sure default keys are unicode values.

## v0.4.0 - July 19, 2017 - Update support matrix

- Fix addstatictoken on Django 1.10+.
- Drop support for versions of Django that are past EOL.

## v0.3.14 - May 30, 2017 - addstatictoken fix

- Update addstatictoken command for current Django versions.

## v0.3.13 - April 11, 2017 - Pickle compatibility

- Allow verified users to be pickled.

## v0.3.12 - April 2, 2017 - Forward compatibility

- Minor fixes for Django 1.11 and 2.0.

## v0.3.11 - March 8, 2017 - Built-in QR Code support

- #20: Generate HOTP and TOTP otpauth URLs and corresponding QR Codes. To enable this feature, install `django-otp[qrcode]` or just install the qrcode package.
- Support for Python 2.6 and Django 1.4 were dropped in this version (long overdue).

## v0.3.8 - November 27, 2016 - Forward compatbility for Django 2.0

- Treat `is_authenticated` and `is_anonymous` as properties in Django 1.10 and later.
- Add explict on_delete behavior for all foreign keys.

## v0.3.7 - September 24, 2016 - Convenience API

- Added a convenience API for verifying TOTP tokens: `django_otp.oath.TOTP.verify()`.

## v0.3.6 - September 4, 2016 - Django 1.10

- #11: Don’t break the laziness of `request.user`.
- #16: Improved error message for invalid tokens.
- #17: Support the new middleware API in Django 1.10.

## v0.3.5 - April 13, 2016 - Fix default TOTP key

- The default (random) key for a new TOTP device is now forced to a unicode string.

## v0.3.4 - January 10, 2016 - Python 3 cleanup

- All modules include all four Python 3 __future__ imports for consistency.
- Migrations no longer have byte strings in them.

## v0.3.3 - October 15, 2015 - Django 1.9

- Fix the addstatictoken management command under Django 1.9.

## v0.3.2 - October 11, 2015 - Django 1.8

- Stop importing models into the root of the package.
- Use ModelAdmin.raw_id_fields for foreign keys to users.
- General cleanup and compatibility with Django 1.9a1.

## v0.3.1 - April 3, 2015 - Django 1.8

- Add support for the new app registry, when available.
- Add Django 1.8 to the test matrix and fix a few test bugs.

## v0.3.0 - February 7, 2015 - Support Django migrations

- All plugins now have both Django and South migrations. Please see the upgrade notes for details on upgrading from previous versions.

## v0.2.7 - April 26, 2014 - Fix for Custom user models with South

- Updated the otp_totp South migrations to support custom user models. Thanks to https://bitbucket.org/robirichter.

## v0.2.6 - April 18, 2014 - Fix for Python 3.2 with South

- Removed South-generated unicode string literals.

## v0.2.4 - April 15, 2014 - TOTP plugin fix (migration warning)

- Per the RFC, `TOTPDevice` will no longer verify the same token twice.
- Cosmetic fixes to the admin login form on Django 1.6.

Warning

This includes a model change in TOTPDevice. If you are upgrading and your project uses South, you should first convert it to South with `manage migrate otp_totp 0001 --fake`. If you’re not using South, you will need to generate and run the appropriate SQL manually.

## v0.2.3 - March 3, 2014 - Fix pickling

- OTPMiddleware no longer interferes with pickling request.user.

## v0.2.2 - December 31, 2013 - Require Django 1.4.2

- Update Django requirement to 1.4.2, the first version with django.utils.six.

## v0.2.1 - November 19, 2013 - Bug fix

- Fix unicode representation of devices in some exotic scenarios.

## v0.2.0 - November 10, 2013 - Django 1.6

- Now supports Django 1.4 to 1.6 on Python 2.6, 2.7, 3.2, and 3.3. This is the first release for Python 3.

## v0.1.8 - August 20, 2013 - user_has_device API

- Add `django_otp.user_has_device()` to detect whether a user has any devices configured. This change supports a fix in django-otp-agents 0.1.4.

## v0.1.7 - July 3, 2013 - Decorator improvement

- Add if_configured argument to `otp_required()`.

## v0.1.6 - May 9, 2013 - Unit test improvements

- Major unit test cleanup. Tests should pass or be skipped under all supported versions of Django, with or without custom users and timzeone support.

## v0.1.5 - May 8, 2013 - OTPAdminSite improvement

- OTPAdminSite now selects an apporpriate login template automatically, based on the current Django version. Django versions 1.3 to 1.5 are currently supported.
- Unit test cleanup.

## v0.1.3 - March 10, 2013 - Django 1.5 compatibility

- Add support for custom user models in Django 1.5.
- Stop using `Device.objects`: Django doesn’t allow access to an abstract model’s manager any more.

## v0.1.2 - October 8, 2012 - Bug fix

- Fix an exception when an empty login form is submitted.

## v0.1.0 - August 20, 2012 - Initial Release

Initial release.