Commit graph

423 commits

Author SHA1 Message Date
Aleksi Häkli
e24f0453bb
Remove reduntant AccessLog.trusted flag
All attempts that are logged are marked as trusted
and no other attempts are created in the code,
so having a flag that also uses a database index
is redundant and unnecessary.

Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-03-13 16:07:25 +02:00
Aleksi Häkli
7f9f98cedb
Fix invalid error code format for Axes
Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-03-13 15:48:40 +02:00
Aleksi Häkli
9df4f858ed
Add tests for cool off thresholds
Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-03-09 21:49:45 +02:00
Aleksi Häkli
180f2b85d6
Use django-appconf to 1.0.3+
New Django deprecates six usage and the new
django-appconf version offers six internally,
being compatible with new Django versions.

Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-03-09 21:49:45 +02:00
Aleksi Häkli
b46e7cce01
Drop Python 3.5 support
Most of our users are already running on Python 3.6+
and dropping 3.5 and below in a future oriented release
allows us to focus on implementing more readable codebases.

Fixes #417

Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-03-09 21:49:45 +02:00
Aleksi Häkli
3bece1aaaa
Set Axes request attributes in middleware
Fixes #415

Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-03-03 22:13:13 +02:00
Aleksi Häkli
488cd04856
Use LocMemCache in the development setup
Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-02-26 16:49:35 +02:00
Aleksi Häkli
62c9dc73e7
Fix cache test parametrization
Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-02-26 16:39:58 +02:00
Aleksi Häkli
8df219e976
Add public API documentation on the handler class
Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-02-26 13:04:35 +02:00
Aleksi Häkli
7d9265cd3c
Add check test for missing case branch
Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-02-26 12:45:37 +02:00
Aleksi Häkli
ff6cb8bffd
Move utils to helpers module
In order to offer backwards compatible import path for the
axes.utils.reset function it has to have a separate
implementation that can be imported independently from
the axes.helpers functions that are used by the
AxesBaseHandler implementation.

Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-02-25 22:54:40 +02:00
Aleksi Häkli
8b3c5e7b5a
Refactor cache checks
Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-02-25 21:05:18 +02:00
Aleksi Häkli
677d4c48f4
Improve documentation
- Add information on handlers
- Document configuration options and precedences
- Restructure documentation for better readability

Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-02-25 17:04:03 +02:00
Aleksi Häkli
1ab8d89869
Fix bug in missing cache backends
Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-02-25 16:45:56 +02:00
Aleksi Häkli
13b807d647
Add dummy handler implementation
A handler is always loaded if Axes is active,
and the dummy handler is intended for use when
the user wishes to use either the middleware
or authentication backends but does not want
Axes to handle or emit signals from
authentication events.

Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-02-24 22:37:23 +02:00
Aleksi Häkli
7564603d9b
Clean up cache handler implementation
Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-02-24 22:17:01 +02:00
Aleksi Häkli
d4c2603ed7
Add six imports for Django master compatibility
Implement forwards compatibility for missing
django.utils.six package imports on Django 2.2

Relates to django-compressor/django-appconf#44
and can be removed after django-appconf
has received a new release which deprecates
the use of the integrated Django six library

Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-02-24 15:46:30 +02:00
Aleksi Häkli
46fc538193
Add cache handler and refactor tests
Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-02-23 20:19:37 +02:00
Aleksi Häkli
ccace29270
Clean up handler naming and documentation
Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-02-22 20:13:20 +02:00
Aleksi Häkli
42f8c86997
Improve handler design
Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-02-22 19:56:05 +02:00
Aleksi Häkli
864bfe3f00
Clean up database handler code and queries
Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-02-22 19:56:03 +02:00
Aleksi Häkli
fadf8be191
Improve login failure database updates
Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-02-22 19:56:01 +02:00
Aleksi Häkli
e69d479f6a
Refactor handlers to a more pluggable format
- Define a base handler API with method signatures
- Move proxy handler to a separate path for importability
- Implement a database handler with clean external dependencies
- Change the authentication backend and decorators to use the authentication backend

This enables clean pluggable authentication backend definitions that users
can override and specialize with e.g. cached handlers in their own packages.

Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-02-22 19:55:57 +02:00
Aleksi Häkli
aec59a97bc
Fix mypy errors in the utils module
Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-02-22 19:55:50 +02:00
Aleksi Häkli
a0b672be6e
Cleanup imports
Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-02-22 19:55:49 +02:00
Aleksi Häkli
f8949ce984
Add configurable client IP attribute on requests
Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-02-22 19:55:47 +02:00
Aleksi Häkli
b07a513b30
Cleanup for utils
Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-02-22 19:55:45 +02:00
Aleksi Häkli
a4c4ba6fb7
Refactor utils and attempts internal API
Clean up internal implementations and tests while keeping the
APIs as similar as possible where feasible.

The goal of this change is to not change any documented
or stable APIs that might be in use by users, but to improve
the internal implementations for maintainability and usability.

Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-02-22 19:55:41 +02:00
Aleksi Häkli
bc24d12975
Add support for string type AXES_USERNAME_CALLABLE
Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-02-22 19:55:39 +02:00
Aleksi Häkli
97410a7b06
Clean up old test code
Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-02-22 19:55:37 +02:00
Aleksi Häkli
9b0f664dcd
Remove redundant comment
Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-02-22 19:55:34 +02:00
Aleksi Häkli
8b4c522f5b
Rename Axes appconfig startup method to initialize
Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-02-22 19:55:22 +02:00
Aleksi Häkli
d1eb64679b
Add support for reconfiguring handlers in tests
Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-02-22 19:55:17 +02:00
Aleksi Häkli
b120fc6fde
Remove redundant AccessAttempt.failures property
Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-02-22 19:55:10 +02:00
Aleksi Häkli
5a78d41828
Fix buggy test case and improve test speed
- Cool off time was overly long on a number of test
- Cool off time on test was fetched with the wrong method
  resulting in bugs on non-integer second cool off values

Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-02-22 07:58:28 +02:00
Aleksi Häkli
c17db16253
Use pytest for test runner
Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-02-20 23:05:21 +02:00
Aleksi Häkli
6d83901031
Refactor attempt and handler implementations
Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-02-13 20:39:44 +02:00
Aleksi Häkli
820ecca236
Add missing test case for disabled lockouts
Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-02-13 20:22:16 +02:00
Aleksi Häkli
09fe330957
Fix test compatibility on Python 3.5
Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-02-13 19:02:10 +02:00
Aleksi Häkli
cd56631865
Refactor attempts and add NEVER_LOCKOUT_GET flag
- Move cache and cool off utility functions to the axes.utils module
- Clean up axes.attempts duplicate code in attempt and cache calculations
- Add stable implementation for AccessAttempt attribute calculation
  in the axes.attempts.get_filter_kwargs function

Fixes #398

Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-02-13 18:20:04 +02:00
Aleksi Häkli
77103c42fe
Add type annotations to utils module 2019-02-13 14:06:55 +02:00
Aleksi Häkli
42fe9c15fa
Unify import styling to use from ... imports 2019-02-13 14:05:24 +02:00
Aleksi Häkli
8c73eed726
Introduce gradual typing with mypy 2019-02-13 01:14:26 +02:00
Aleksi Häkli
911de8f347
Refactor is_user_lockable
Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-02-13 00:58:17 +02:00
Aleksi Häkli
c3e471a211
Improve handler tests 2019-02-13 00:04:50 +02:00
Aleksi Häkli
6240b20793
Clean up utils tests for get_client_username 2019-02-12 23:44:35 +02:00
Aleksi Häkli
df83adb059
Run more comprehensive prospector checks
Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-02-12 23:33:18 +02:00
Aleksi Häkli
40a0eae647
Improve tests
Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-02-12 23:22:52 +02:00
Aleksi Häkli
a926e74f5d
Add check for empty tuple in get_client_str
Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-02-12 23:11:37 +02:00
Aleksi Häkli
1b1771d164
Rename CommonAccess to better name
Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
2019-02-12 23:11:18 +02:00