# Change Log

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](http://keepachangelog.com/)
and this project adheres to [Semantic Versioning](http://semver.org/).

<!--
   PRs should document their user-visible changes (if any) in the
   Unreleased section, uncommenting the header as necessary.
-->

<!-- ## Unreleased -->
<!-- ### Changed -->
<!-- ### Added -->
<!-- ### Removed -->
<!-- ### Fixed -->


## [0.8.3] - 2019-02-09
### Added
* pyramid extensions can now accept `session_provider_callable` not only as a path to callable but
  also as plain callable object
* tests for pyramid extensions
### Changed
* fixed deprecated usage of `set_request_property` (thanks Francis Charette Migneault)

## [0.8.2] - 2018-11-08
### Fixed
* Fixed migrations under Mysql 8.x

## [0.8.0] [0.8.1] - 2018-09-28
### Changed
* [Breaking] Most of deprecated model methods got removed, please use services instead
* [Breaking] ziggurat_model_init has now explicit order of model classes set

## [0.7.3] - 2018-02-19
### Changed
* Use pbkdf2_sha256 by default (bcypt hashes will work and will be migrated on first login for users)

**Important**

By default `check_password` will migrate your existing bcrypt hashes to pbkdf2_sha256, if you want to keep bcrypt,
you can either pass `passwordmanager_schemes` list to `ziggurat_model_init` or use your own passwordmanager.


## [0.7.2] - 2018-02-17
### Changed
* Fixed some minor issues that resulted in bad migrations when someone used `autogenerate in alembic`
* Added a way to read sqlalchemy.url from environment variable (thanks René Jochum)


## [0.7.1] - 2017-02-19
### Changed
* fixed tree ordering for nested elements
* fixed `perm_by_group_and_perm_name` method


## [0.7.0] - 2016-11-25
### Added
* Introduced ResourceTreeService for nested resource management
  (currently only PostgreSQL support is implemented)
* lots of new tests
### Changed
* added deprecation warnings
* [breaking] code reorganization that might break existing code
* [breaking] _ziggurat_services is now a list


2016-07-05
----------
* Release: 0.6.8
* use importlib for imports to avoid issues with unicode passed to __import__()

2016-05-05
----------
* Release: 0.6.6/0.6.7
* increased field sizes for external identity tokens, permission names
  and username
* perm name is checked to be lowercase in all databases, not only
  for postgresql

2016-04-27
----------
* Release: 0.6.5
* got rid of all unicode warnings generated by sqlalchemy and start to use
  unicode for all strings
* user.resources_with_possible_perms() passes resource_types properly

2016-04-19
----------
* Release: 0.6.3/0.6.4
* extended functionality of `populate_obj` function of Base class
* minor bugfix for mysql

**BACKWARDS INCOMPATIBLE CHANGES**

* external_identities.local_user_name column is dropped and replaced with
  local_user_id


2015-11-13
----------
* Release: 0.6.2
* replace cryptacular with passlib


2015-09-19
----------
* Release: 0.6.1
* some fixes for ext.pyramid not-working completly with service related changes

2015-08-03
----------
* Release: 0.6.0
* models are decoupled from services that interact with models
  (all model querying methods now live in services)

**BACKWARDS INCOMPATIBLE CHANGES**

* import related changes:
    * ziggurat_foundations.models doesn't import all the models anymore
      every model now lives in separate file
    * permission related functions now live in permissions module


2015-06-15
----------
* Release: 0.5.6
* user model gains security date column
* minor bugfixes

2015-06-07
----------
* Release: 0.5.5
* added persist(), delete(), base_query() methods to Base model

2015-04-27
----------
* Release: 0.5.3
* resource.groups_for_perm() returns groups/permissions for single resource

2015-04-24
----------
* Release: 0.5.2
* resource.users_for_perm() now accepts `limit_group_permissions` param that
  that makes it return just group with perm name instead tuples including every
  user/perm pairs


2015-04-23
----------
* Release: 0.5.1
* Group.resources_with_possible_perms() added

2015-04-17
----------
* Release: 0.5
* Now uses detailed permissions
* BACKWARDS INCOMPATIBLE API CHANGES
    * ResourceMixin.users_for_perm() accepts additional parameters group_ids, and user_ids
      to limit the amount of results if needed
    * User.permissions, Resource.perms_for_user, Resource.direct_perms_for_user,
      Resource.group_perms_for_user, Resource.users_for_perm_detailed, Resource.users_for_perm
      now return list of detailed PermissionTuple's instead simple [id, perm_name] pairs
      this will break your application
      You can use ziggurat_foundations.utils.permission_to_04_acls() to convert
      the new tuples to pre 0.5 format


2015-02-18
----------
* Release: 0.4.3
* Added a way to filter on resource types in UserMixin.resources_with_perms()
* Made User.resources dynamic relationship

2014-08-25
----------
* Second Alpha Release 0.4
* Move to paginate from webhelpers.paginate
* Users can now log in via username or email address
* Python 3 compatibale after moving away from webhelpers.paginate


2012-11-28
----------
* First Alpha Release 0.3 - This release should have a fairly stable API
* Hundreds of small and big changes - based on all great feedback we are now
  using surrogate pkeys instead of natural pkeys for most models.
  As result of this few methods started accepting id's instead usernames,
  so consider yourself warned that this release might be bw. incompatible a bit
  with your application
* At this point all tests should pass on mysql, postgresql, sqlite


2012-06-26
----------

* added some indexes to resource owners
* previous revision ID: 3cfc41c4a5f0

2012-06-25
----------

* dropped groups.id column
* previous revision ID: 53927300c277

2012-06-05
----------

* shrinked integer sized on primary keys
* previous revision ID: 54d08f9adc8c

2012-05-27 version 0.2 First public release
-------------------------------------------

* added proper alembic(pre 0.3.3 trunk) support for multiple alembic migrations via separate versioning table
* please do manual stamp for CURRENT revision ID: 54d08f9adc8c
* changes for first public pypi release
* Possible backwards incompatibility: Remove cache keyword cruft


2012-05-25
----------

* Possible backwards incompatibility: Remove invalidate keyword cruft

2012-03-10
----------

* Add registration date to user model, changed last_login_date to no-timezone type (this seem trivial enough to not faciliate schema change)
* previous revision ID: 2d472fe79b95

2012-02-19
----------
* Made external identity fields bigger
* previous revision ID: 264049f80948

2012-02-13
----------
* Bumped alembic machinery to 0.2
* Enabled developers to set their own custom password managers
* added ordering column for resources in tree
* Stubs for tree traversal
* previous revision ID:  46a9c4fb9560

2011-12-20
----------
* Made hash fields bigger
* previous revision ID: 5c84d7260c5

2011-11-15
----------
* Added ExternalIdentityMixin - for storing information about user profiles connected to 3rd party identites like facebook/twitter/google/github etc.
* previous revision ID: 24ab8d11f014

2011-11-03
----------
* added alembic migration support
* previous revision ID: 2bb1ba973f0b

2011-08-14
----------
* resource.users_for_perm(),  resource.direct_perms_for_user() and resource.group_perms_for_user() return tuple (user/group_name,perm_name) now

.. hint::
    What "previous revision ID" means?
    If you are updating the package that never was stamped with
    alembic you may need to stamp the database manually with following revision id,
    from this point onwards you will be able to update schemas automaticly.
    Alembic 0.3.3+ (or current trunk for 2012-05-27) is required for this to function properly
