Éloi Rivard
a3908883e3
tests: use canaille.test domain instead of localhost
2023-12-14 20:07:49 +01:00
Éloi Rivard
c563646bfe
tests: dynamic smtp configuration
2023-12-14 20:04:18 +01:00
Éloi Rivard
f08c452a03
tests: mail testing refactoring
2023-12-14 19:27:37 +01:00
Éloi Rivard
3b46d6af61
tests: remove pytest-flask dependency
2023-12-14 16:28:46 +01:00
Éloi Rivard
066aed7735
feat: convert the png in webp
2023-12-01 22:09:54 +01:00
Éloi Rivard
a7e574f754
feat: use sqlalchemy-utils PasswordType to store and hash user passwords
2023-12-01 09:29:59 +01:00
Éloi Rivard
969f3e980c
fix: password comparision was too permissive on login
2023-11-28 18:10:47 +01:00
Éloi Rivard
aa07059357
fix: password and initalization emails were only sent to the preferred user email address
2023-11-28 17:59:50 +01:00
Éloi Rivard
98e8aa9b39
fix: only the first password letter was used
2023-11-28 15:51:14 +01:00
Éloi Rivard
27639081f0
feat: implement sqlalchemy backend
...
Co-authored-by: Loan Robert <loan@yaal.coop>
2023-11-24 13:57:46 +01:00
Éloi Rivard
e6cf6ad7bd
tests: backport tests from sqlachemy branch
2023-11-24 12:10:17 +01:00
Éloi Rivard
02c8f0b177
refactor: Backend.install calls uniformization
2023-11-24 11:13:17 +01:00
Éloi Rivard
ed73916fa7
tests: add missing __init__.py
2023-11-24 10:14:44 +01:00
Éloi Rivard
79533acc4b
tests: fix backend assignation for tests
2023-11-24 10:10:36 +01:00
Éloi Rivard
c19199b7a7
tests: use lists of strings for Token.scope and AuthorizationCode.scope
2023-11-23 22:07:42 +01:00
Éloi Rivard
7494800e57
fix: OIDC client 'client_secret_expires_at' claim must be 0, not None
2023-11-23 09:15:40 +01:00
Éloi Rivard
79e547fc10
refactor: OIDC token scopes are stored as lists
2023-11-22 16:36:42 +01:00
Éloi Rivard
fd77bd5637
refactor: OIDC authorization codes scopes are stored as lists
2023-11-22 16:30:38 +01:00
Éloi Rivard
97546452e9
tests: fix user password cardinality
2023-11-22 14:49:51 +01:00
Éloi Rivard
fd8a5ace74
tests: fix user attribute cardinalities
2023-11-22 14:47:48 +01:00
Éloi Rivard
b6cfa1517c
refactor: form model attributes coercion
2023-11-22 11:30:30 +01:00
Éloi Rivard
e6225671f9
tests: additional assertions on invitation tests
2023-11-21 18:52:53 +01:00
Éloi Rivard
3a39fc191a
refactor: remove models __delattr__ methods
2023-11-21 14:57:28 +01:00
Éloi Rivard
8b3802dc3a
tests: add tests for fuzzy search on multiple model attributes
2023-11-21 14:27:57 +01:00
Éloi Rivard
1fd8af2cf4
refactor: models attributes cardinality is closer to SCIM models
2023-11-17 21:21:25 +01:00
Éloi Rivard
0569950c47
tests: fix end session error message test
2023-11-16 17:49:33 +01:00
Éloi Rivard
09673fdf4d
tests: fix UTCDatetime form field unit tests during light saving
2023-11-16 17:42:04 +01:00
Éloi Rivard
40b868cfee
tests: multiple emails and phone_numbers
2023-10-02 21:58:46 +02:00
Éloi Rivard
88dcf94750
Revert "tests: domain is localhost.local"
...
This reverts commit 44aed27719
.
2023-10-01 15:42:16 +02:00
Éloi Rivard
44aed27719
tests: domain is localhost.local
2023-09-20 09:54:17 +02:00
Éloi Rivard
a2fb88fb05
tests: fix CI
2023-09-15 18:01:17 +02:00
Éloi Rivard
46c795b3b5
refactor: only load oidc module if OIDC is configured
2023-09-15 17:56:23 +02:00
Éloi Rivard
a7b3d4be88
feat: user login redirections
...
if users login during the authorization phase, they
get redirected to the authorization page afterwards
2023-09-01 09:12:40 +02:00
Éloi Rivard
8be771e41d
tests: fix CI
2023-08-31 22:44:06 +02:00
Éloi Rivard
21ea0238b5
OIDC jwks endpoint do not return empty kid claim
2023-08-26 19:59:44 +02:00
Éloi Rivard
553595c5ed
doc: model documentation
2023-08-17 16:11:24 +02:00
Éloi Rivard
588ec8792e
Implement a dummy inmemory backend
2023-08-17 12:33:45 +02:00
Éloi Rivard
2909357b9c
fix: typo
2023-08-16 17:34:53 +02:00
Éloi Rivard
6ede3b75cb
tests: disable javascript in template rendering
2023-08-16 17:33:59 +02:00
Éloi Rivard
39a5eafd71
tests: fix a variable in ldap tests
2023-08-16 16:55:21 +02:00
Éloi Rivard
ccaba0b9d5
feat: registration email admin debug page
2023-08-15 17:00:38 +02:00
Éloi Rivard
5a9df64f68
feat: implement registration process
2023-08-15 16:31:44 +02:00
Éloi Rivard
e55b56419d
refactor: extract auth.py from account.py
2023-08-14 16:15:41 +02:00
Éloi Rivard
d27aab8651
refactor: the core module has its own main blueprint
2023-08-14 13:52:24 +02:00
Éloi Rivard
c895366684
refactor: store user profile in g.user
2023-08-13 22:08:28 +02:00
Éloi Rivard
1f9d148c0d
chore: bump to python-slapd 0.1.4
2023-08-13 16:06:16 +02:00
Éloi Rivard
fd24c704c0
feat: implement email verification
2023-08-06 11:58:16 +02:00
Éloi Rivard
8fe8494587
feat: validate phone numbers
2023-08-03 19:08:34 +02:00
Éloi Rivard
9940a98188
refactor: profile button action renaming
2023-07-30 23:08:29 +02:00
Éloi Rivard
97c6a3ea38
tests: adds a fixture that automatically compiles babel catalogs
2023-07-25 09:56:23 +02:00
Éloi Rivard
1352752db8
refactor: utilities for form field readonliness
2023-07-24 18:07:35 +02:00
Éloi Rivard
59bc6e18d7
Merge branch 'issue-158-modals' into 'main'
...
modals are HTML pages instead of JS elements
See merge request yaal/canaille!144
2023-07-18 16:39:35 +00:00
Éloi Rivard
b4908d5e57
modals are HTML pages instead of JS elements
...
This will help providing the very same user experience for users with
and without javascript. We will still be able to re-enable javascript
modals in the future, but this should be done from the ground up, HTML
first and javascript after.
2023-07-18 18:34:10 +02:00
Éloi Rivard
a631946cb5
remove unnecessary application context in unit tests
2023-07-18 16:34:32 +02:00
Éloi Rivard
54abdaea3b
Dynamic model registration
2023-07-12 12:34:00 +02:00
Éloi Rivard
fd66f86a72
USER_FILTER is parsed with jinja
2023-07-04 18:34:16 +02:00
Éloi Rivard
1a0a8096eb
Enable jinja2 strict mode in unit tests
2023-07-01 19:56:13 +02:00
Éloi Rivard
4f42798e39
Refactored keypair management
2023-07-01 19:06:26 +02:00
Éloi Rivard
f686121f0d
Wording
2023-06-30 18:12:14 +02:00
Éloi Rivard
021c1b3d11
Pagination pluralization
2023-06-30 18:12:13 +02:00
Éloi Rivard
7ff2360174
send reset emails to all the user emails
2023-06-29 17:47:01 +02:00
Éloi Rivard
7bce9b9a74
ldap backend: make sure to escape special chars in object identifiers
2023-06-29 15:55:39 +02:00
Éloi Rivard
3ecb8b4722
Implements a flask Group converter
2023-06-29 15:55:39 +02:00
Éloi Rivard
f504bb3a66
Implements a flask User converter
2023-06-29 15:55:39 +02:00
Éloi Rivard
e4e49da44a
Renamed configuration entries
...
- USER_ID_ATTRIBUTE is now USER_RDN
- GROUP_ID_ATTRIBUTE is now GROUP_RDN
2023-06-29 15:55:39 +02:00
Éloi Rivard
57af18d557
Use a unique identifier to indentify users in URLS
...
Previously we used the uid since we supposed this value was always
valid, but some users user the mail attribute as the User RDN in their
OpenLDAP installation, and do not have a uuid.
2023-06-29 15:55:39 +02:00
Éloi Rivard
4551dc3f60
Add unit test for user with different RDN
2023-06-29 15:55:39 +02:00
Éloi Rivard
4eda4f6c99
inline validation keep the profile indicator icons
2023-06-28 15:42:35 +02:00
Éloi Rivard
45ec950f5f
Fixed FieldList readonly state
2023-06-28 13:26:15 +02:00
Éloi Rivard
7b9e97f5e4
Defer and clean up JS scripts
2023-06-26 18:00:58 +02:00
Éloi Rivard
c091ca19cf
Removed html5shiv
2023-06-26 17:48:25 +02:00
Éloi Rivard
0342e30ec0
Fixed strings inadvertently refactored
2023-06-22 18:12:54 +02:00
Éloi Rivard
b7e1590510
User emails and phone numbers are now multiple
2023-06-22 17:55:26 +02:00
Éloi Rivard
8617fc0f2b
Implement multiple fields
2023-06-22 16:56:44 +02:00
Éloi Rivard
361fda0386
Renamed User.phone_number in User.phone_numbers
2023-06-22 15:33:03 +02:00
Éloi Rivard
b5bd497d0e
Implemented User.preferred_email
2023-06-22 15:24:13 +02:00
Éloi Rivard
371f806695
Renamed User.email in User.emails
2023-06-22 15:15:46 +02:00
Éloi Rivard
0cbac78624
htmx: return a 400 error when a request sends an invalid form
2023-06-21 15:59:28 +02:00
Éloi Rivard
8061042e46
client admin test refactoring
2023-06-20 09:32:43 +02:00
Éloi Rivard
a9d9d43152
Configuration entries can be loaded from files.
...
Co-authored-by: Sofi <sofi+git@mailbox.org>
2023-06-15 18:38:37 +02:00
Éloi Rivard
23e9e7e71a
Renamed Backend in BaseBackend
2023-06-05 18:10:37 +02:00
Éloi Rivard
14ccb69762
backend fixture is parametrizable
2023-06-03 23:39:38 +02:00
Éloi Rivard
422af73b89
moved slapd_server in the ldap unit tests module
2023-06-03 23:39:38 +02:00
Éloi Rivard
e3aede6645
Fixed a unit test control value
2023-06-03 23:38:45 +02:00
Éloi Rivard
fa7c68ff5b
Moved CustomSlapdObject class into the ldap test module
2023-06-03 18:35:59 +02:00
Éloi Rivard
c7f23e845c
datetime-local input fields are transformed in UTC server-side
2023-06-01 13:53:32 +02:00
Éloi Rivard
e20fb23e6f
typo 'successfuly' -> 'successfully'
2023-05-30 09:44:11 +02:00
Éloi Rivard
38ee26db83
refactored User locking mechanism
2023-05-26 17:48:50 +02:00
Éloi Rivard
17c2f7a5cd
Implemented LDAP ppolicy support.
2023-05-26 15:23:43 +02:00
Éloi Rivard
d8158d6a72
Use ruff linter
2023-05-25 13:37:58 +02:00
Éloi Rivard
8ed10da81e
Removed duplicate test
2023-05-24 14:10:45 +02:00
Éloi Rivard
a92542cd81
Moved models specificities in the backend module
2023-05-20 21:24:14 +02:00
Éloi Rivard
fd493fb8d0
check command unit test looks for a invalid SMTP server instead of a invalid LDAP server
2023-05-20 20:11:19 +02:00
Éloi Rivard
c75108344b
Moved login placeholder mechanism in the backend module
2023-05-20 20:07:40 +02:00
Éloi Rivard
033d436878
Moved LDAP schema installation in the ldap backend module
2023-05-20 20:04:23 +02:00
Éloi Rivard
c1d1706007
Moved every model import to canaille.models
2023-05-20 20:02:00 +02:00
Éloi Rivard
0b3362f4c5
Remove useless calls to slapd_server fixture
2023-05-20 18:28:31 +02:00
Éloi Rivard
6f637b8129
Refactored the unit test backend fixtures
2023-05-20 17:17:46 +02:00
Éloi Rivard
475a6d153c
add pytest-flask dependency
2023-05-20 16:42:35 +02:00
Éloi Rivard
30282e633b
The LDAP Backend is now a class
2023-05-20 12:08:04 +02:00
Éloi Rivard
8c33649872
Avoid direct call to ldap in logging unit tests
2023-05-19 19:35:10 +02:00
Éloi Rivard
2b0b5a5213
Avoid direct call to ldap in configuration unit tests
2023-05-19 19:28:56 +02:00
Éloi Rivard
d2bb1aebeb
Additional User unit tests
2023-05-18 16:43:23 +02:00
Éloi Rivard
7b76d8f003
Model unit test fix
2023-05-18 16:35:14 +02:00
Éloi Rivard
4f9dac8782
Tests the model mechanism
2023-05-17 18:19:05 +02:00
Éloi Rivard
61f2280f34
unit test explicit object reloading
2023-05-17 16:23:54 +02:00
Éloi Rivard
77c5d7ac7a
Improved account unit tests
2023-05-17 16:20:37 +02:00
Éloi Rivard
d66619a01c
OIDC lifetimes are not casted to string anymore
2023-05-17 09:29:32 +02:00
Éloi Rivard
b346b0db8a
Use generic Consent.consent_id instead of LDAP Consent.cn attribute
2023-05-17 08:54:13 +02:00
Éloi Rivard
00b5997a61
Avoid calls to LDAPUser.may and LDAPUser.must
2023-05-16 22:18:38 +02:00
Éloi Rivard
5836a0bd61
Use generic 'formatted_name' attribute instead of LDAP 'name'
2023-05-16 18:01:48 +02:00
Éloi Rivard
28e7d1c662
LDAPObject __getattr__ filters None values
2023-05-16 16:05:09 +02:00
Éloi Rivard
8998fe9b62
Explicit arguments when using Model.get
2023-05-16 11:29:40 +02:00
Éloi Rivard
8162bd3e24
Fixes calls to the LDAP 'Group.member' attribute
2023-05-13 00:24:24 +02:00
Éloi Rivard
bace94b1f5
Explicit Group.get attributes
2023-05-13 00:19:32 +02:00
Éloi Rivard
1695331772
Fixes a call to the LDAP 'jpegPhoto' attribute
2023-05-12 20:02:19 +02:00
Éloi Rivard
65013403a1
Fixes a call to the LDAP 'userPassword' attribute
2023-05-12 20:00:13 +02:00
Éloi Rivard
6c5053afb1
Fixes a call to a LDAP named attribute, again
2023-05-12 18:51:50 +02:00
Éloi Rivard
02b553b9db
remove unnecessary step in the password reset unit test
2023-05-11 16:27:13 +02:00
Éloi Rivard
88179b23b8
fix non-generic model attribute calls
2023-05-11 16:02:32 +02:00
Éloi Rivard
abf9a23ac8
unit tests: only use user_name to authenticate users
2023-05-11 15:33:34 +02:00
Éloi Rivard
6e6d15fec1
Fixed password initialization mail recipients
2023-05-05 10:53:48 +02:00
Éloi Rivard
e8e6060c74
ACL group filter can be simple group name instead of full dn
2023-05-02 16:25:00 +02:00
Éloi Rivard
fa62c16768
Moved canaille.ldap_backend to canaille.backends.ldap
2023-04-18 20:22:55 +02:00
Éloi Rivard
c4676ec572
Update User group when save
is called
2023-04-17 18:43:43 +02:00
Éloi Rivard
edb64cbfe1
ACL filters are no more LDAP filters but user attribute mappings.
2023-04-14 19:53:16 +02:00
Éloi Rivard
4bfbeccc1c
Fixed empty models attributes registration
2023-04-13 18:02:20 +02:00
Éloi Rivard
850d274157
Flaskutil tests avoid to use ldap configuration options
2023-04-10 23:08:09 +02:00
Éloi Rivard
0376a3bab8
Cleartext password in unit tests
2023-04-10 21:42:14 +02:00
Éloi Rivard
e2b96af1ee
Moved LDAP configuration entry to BACKENDS.LDAP
2023-04-10 20:31:54 +02:00
Éloi Rivard
cc45ed4be9
OIDC.JWT.MAPPING configuration option is really optional
2023-04-10 20:09:47 +02:00
Éloi Rivard
7cd078bf81
Correctly read OIDC dynamic registration config entries
2023-04-10 19:28:26 +02:00
Éloi Rivard
61f5d25f2f
Creates a OIDC configuration section for all the OIDC related entries
2023-04-10 16:24:43 +02:00
Éloi Rivard
65efece01e
Renamed LDAPObject.initialize in LDAPObject.install
2023-04-09 23:17:24 +02:00
Éloi Rivard
83f67331d3
Split commands in their dedicated modules
2023-04-09 21:58:11 +02:00
Éloi Rivard
79f12b1d0a
'app' submodule
2023-04-09 15:52:55 +02:00
Éloi Rivard
855747a79f
Ensure command return codes are tested
2023-04-09 15:47:47 +02:00
Éloi Rivard
a38ef06356
Re-organized commands tests
2023-04-09 14:35:58 +02:00
Éloi Rivard
08f8bfbfdb
Moved user and group management in the core submodule
2023-04-09 13:34:38 +02:00
Éloi Rivard
4c454f6de4
Removed unused imports
2023-04-09 02:13:34 +02:00
Éloi Rivard
01ed1d8013
Avoid to explicitly call User.load_groups
2023-04-09 00:14:51 +02:00
Éloi Rivard
c8b76dc845
Use LDAPObject.reload in tests instead of LDAPObject.get
2023-04-08 21:36:21 +02:00
Éloi Rivard
b413344385
Properly delete users in ldap unit tests
2023-04-08 20:14:30 +02:00
Éloi Rivard
e738faf52b
Group methods refactoring
2023-04-08 00:33:42 +02:00
Éloi Rivard
52f7276527
Explicitly use User.formatted_name instead of User.name
2023-04-07 22:45:42 +02:00
Éloi Rivard
087ec1ef58
Fixed remaining ldap attribute calls
2023-04-07 22:38:01 +02:00
Éloi Rivard
706d50449a
Split the User.get method
2023-04-07 21:24:09 +02:00
Éloi Rivard
1a079fcd45
Added a group deletion test
2023-04-07 21:14:26 +02:00
Éloi Rivard
db3a4a74ff
Renamed user attributes to match SCIM naming convention
2023-04-07 20:12:24 +02:00
Éloi Rivard
92ab563489
Fixes wtforms validator translations
2023-04-02 13:30:51 +02:00
Éloi Rivard
d53fdde986
Refactored utils
2023-04-02 00:32:27 +02:00
Éloi Rivard
1f1bb353e0
Dynamic form validation with htmx
2023-03-30 23:22:58 +02:00
Éloi Rivard
2fb0085d7b
OIDC client form renaming
2023-03-30 00:40:25 +02:00
Éloi Rivard
78a129d494
Forms validate URIs
2023-03-29 21:33:47 +02:00
Éloi Rivard
b82852d788
Fixed the CI
2023-03-29 19:46:05 +02:00
Éloi Rivard
f97dc3b2c6
CSRF protection everywhere
2023-03-28 20:30:29 +02:00
Éloi Rivard
98df762666
Fixed user uid and email unicity at creation
2023-03-27 23:16:32 +02:00
Éloi Rivard
7e0e0d6068
Profile edition refactoring
2023-03-22 08:52:00 +01:00
Éloi Rivard
bacbb9a3bb
Avoid to display flash messages twice when impersonating or sending a password initialization mail
2023-03-21 22:01:32 +01:00
Éloi Rivard
dd394391c8
Added last_modified and etag headers on the user photos
2023-03-18 01:29:04 +01:00
Éloi Rivard
61940844e6
Properly handle LDAP date timezones
2023-03-18 00:39:32 +01:00
Éloi Rivard
8e84b016da
Organization field support
2023-03-17 17:36:23 +01:00
Éloi Rivard
24f0417460
Split the profile page in two
2023-03-16 18:45:35 +01:00
Éloi Rivard
0f93029d2a
Split the consent page in two
2023-03-16 18:45:35 +01:00
Éloi Rivard
69c67345c2
Introduced a submenu
2023-03-16 18:45:34 +01:00
Éloi Rivard
5aad527454
Unit tests use WebTest .mustcontain method when possible
2023-03-16 16:25:14 +01:00
Éloi Rivard
94af1744ba
pre-commit update
2023-03-14 12:08:37 +01:00
Éloi Rivard
6474d39fac
Removes useless tests initializations
2023-03-12 20:18:49 +01:00
Éloi Rivard
fb1c6446fa
Users can only search other users based on the fields they can read or write
2023-03-12 19:04:39 +01:00
Éloi Rivard
2c4c3fb37e
Title edition support
2023-03-11 22:34:29 +01:00
Éloi Rivard
4170242073
Address edition support (but not in the OIDC claims yet)
2023-03-11 20:12:50 +01:00
Éloi Rivard
822988536d
LDAPObject can have several objectClass
2023-03-11 19:46:12 +01:00
Éloi Rivard
048cbd2d59
Group test refactoring
2023-03-11 19:12:58 +01:00
Éloi Rivard
402e60325c
departmentNumber edition support #129
2023-03-11 12:55:03 +01:00
Éloi Rivard
3406428f13
Renamed group attributes to match SCIM naming convention
2023-03-11 12:54:27 +01:00
Éloi Rivard
971cf317c9
Used 'id' instead of 'dn'
2023-03-10 18:14:15 +01:00
Éloi Rivard
e802e3d5e2
Consent cn alias
2023-03-10 00:38:16 +01:00
Éloi Rivard
3d37073f18
Fixed unit tests
2023-03-09 20:58:45 +01:00
Éloi Rivard
46a346a0d0
Table search implementation
2023-03-09 19:31:59 +01:00
Éloi Rivard
fbf449edd6
LDAPObject fuzzy search
2023-03-09 19:31:59 +01:00
Éloi Rivard
091270df53
LDAPObject pagination performance improvements
...
Creates a LDAPObjectQuery class that is returned by LDAPObject.filter
This avoids to create objects for each ldap result, but only for the
asked slice. It also store the whole results length so `len` calls are
a bit faster.
2023-03-09 19:31:59 +01:00
Éloi Rivard
e5d968d4f5
Every list of items is paginated server-side.
2023-03-09 19:31:59 +01:00
Éloi Rivard
36cc47e40d
Moved jinja macros in their own directory
2023-03-09 18:10:28 +01:00
Éloi Rivard
681c311d05
Forgotten password test improvement
...
Search for error messages in flashes instead of directly in the HTML.
2023-03-09 18:10:28 +01:00
Éloi Rivard
990c624c32
Save one LDAP connection when calling save()
2023-03-09 13:00:17 +01:00
Éloi Rivard
d0f6c341f3
LDAPObject refactoring
2023-03-09 01:14:07 +01:00
Éloi Rivard
53581404ab
LDAPObject dn attributes are automatically initialized
2023-03-08 23:53:53 +01:00
Éloi Rivard
d201d6f617
Lazy conversion of LDAP to python format for LDAPObject attributes
2023-03-08 18:54:27 +01:00
Éloi Rivard
7e42467bfc
Renamed LDAPObject.rdn in LDAPObject.rdn_attribute
2023-03-08 18:50:33 +01:00
Éloi Rivard
5d9a41f18b
Delayed LDAPObject may and must initialization
2023-03-08 00:53:27 +01:00
Éloi Rivard
c5b11d2fb3
Merge LDAPObject.all and LDAPObject.filter in LDAPObject.query
2023-03-07 17:58:27 +01:00
Éloi Rivard
cc65d78719
Renames LDAPObject.ldap in LDAPObject.ldap_connection
2023-03-07 17:55:32 +01:00
Éloi Rivard
a368b36d9c
Better populate test cleaning
2023-03-07 17:27:31 +01:00
Éloi Rivard
d345218557
Updated to flask-babel 3
2023-03-01 15:32:40 +01:00
Éloi Rivard
a57c86cc2c
SMTP SSL fixes
2023-02-28 10:07:08 +01:00
Éloi Rivard
9d3cd71164
Explicit form names in unit tests
2023-02-26 22:23:57 +01:00
Éloi Rivard
2c2797fbad
A populate command can be used to fill the database with random users generated with faker.
2023-02-26 19:48:07 +01:00
Éloi Rivard
b850f51ef0
Tests ensures users created during the test are deleted in the end
2023-02-26 19:47:27 +01:00
Éloi Rivard
7458868f77
Pre-consented clients are displayed in the user consent list, and their consents can be revoked.
2023-02-14 21:56:47 +01:00
Éloi Rivard
d551b1ab35
Revoked consents can be restored
2023-02-14 19:05:43 +01:00