gallegonovato
|
6ec282c98f
|
Translated using Weblate (Spanish)
Currently translated at 100.0% (332 of 332 strings)
Translation: Canaille/Canaille
Translate-URL: https://hosted.weblate.org/projects/canaille/canaille/es/
|
2023-06-23 23:50:19 +02:00 |
|
Éloi Rivard
|
9b75f4d302
|
Translated using Weblate (French)
Currently translated at 100.0% (332 of 332 strings)
Translation: Canaille/Canaille
Translate-URL: https://hosted.weblate.org/projects/canaille/canaille/fr/
|
2023-06-22 21:19:13 +02:00 |
|
Hosted Weblate
|
5388454177
|
Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.
Translation: Canaille/Canaille
Translate-URL: https://hosted.weblate.org/projects/canaille/canaille/
|
2023-06-22 21:19:13 +02:00 |
|
Éloi Rivard
|
1e58abfa34
|
Translated using Weblate (French)
Currently translated at 98.7% (328 of 332 strings)
Translation: Canaille/Canaille
Translate-URL: https://hosted.weblate.org/projects/canaille/canaille/fr/
|
2023-06-22 21:19:13 +02:00 |
|
Hosted Weblate
|
f20a1020dd
|
Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.
Translation: Canaille/Canaille
Translate-URL: https://hosted.weblate.org/projects/canaille/canaille/
|
2023-06-22 21:19:13 +02:00 |
|
Éloi Rivard
|
0342e30ec0
|
Fixed strings inadvertently refactored
|
2023-06-22 18:12:54 +02:00 |
|
Éloi Rivard
|
51825be678
|
Updated translations
|
2023-06-22 18:02:22 +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
|
42730f72d3
|
Fixed email unicity check
|
2023-06-22 16:41:35 +02:00 |
|
Éloi Rivard
|
fb90b6effd
|
Jinja rendering macro calls uniformization
|
2023-06-22 15:51:53 +02:00 |
|
Éloi Rivard
|
c12ceca741
|
Forgotten phone_number plurals in configuration
|
2023-06-22 15:45:24 +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
|
14ec6e9c9e
|
ldap backend avoid to store empty values
|
2023-06-22 13:27:43 +02:00 |
|
Éloi Rivard
|
d65dbfbe96
|
listify utility
|
2023-06-22 13:09:44 +02:00 |
|
Éloi Rivard
|
ec02aa0ad9
|
Force OIDC Clients contact field to be a valid email.
|
2023-06-22 11:39:50 +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
|
caf434a1fc
|
debug template variable is available everywhere
|
2023-06-20 14:22:19 +02:00 |
|
Éloi Rivard
|
40594190d3
|
Display error description on debug environments
|
2023-06-20 14:14:35 +02:00 |
|
Éloi Rivard
|
485a0c2ff1
|
render_field macro passes kwargs to its submethods
|
2023-06-20 09:33:36 +02:00 |
|
Éloi Rivard
|
e9f17b26d6
|
form HTML macro refactoring
|
2023-06-19 18:10:14 +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 |
|
Denise
|
d553d23ef3
|
Merge branch canaille:main into main
|
2023-06-12 13:36:07 +00:00 |
|
Éloi Rivard
|
23e9e7e71a
|
Renamed Backend in BaseBackend
|
2023-06-05 18:10:37 +02:00 |
|
Denise Bitca
|
c89bb48499
|
fix up style, attempt at fixing registration redirection bug
|
2023-06-05 10:38:24 +02:00 |
|
Denise Bitca
|
12a1119f99
|
fix up style
|
2023-06-05 10:37:19 +02:00 |
|
Denise
|
db72597cc0
|
Merge branch canaille:main into main
|
2023-06-05 07:34:49 +00:00 |
|
Éloi Rivard
|
e5ba0a8c86
|
compatibility bugfix for flask 2.3
|
2023-06-03 13:42:23 +02:00 |
|
Éloi Rivard
|
bc8b918bd1
|
OIDC keypair generation fix
|
2023-06-01 17:41:17 +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
|
f112583b09
|
Translated using Weblate (French)
Currently translated at 100.0% (328 of 328 strings)
Translation: Canaille/Canaille
Translate-URL: https://hosted.weblate.org/projects/canaille/canaille/fr/
|
2023-05-31 21:28:17 +02:00 |
|
gallegonovato
|
2aae49508f
|
Translated using Weblate (Spanish)
Currently translated at 100.0% (328 of 328 strings)
Translation: Canaille/Canaille
Translate-URL: https://hosted.weblate.org/projects/canaille/canaille/es/
|
2023-05-31 21:28:17 +02:00 |
|
Hosted Weblate
|
111cfab48b
|
Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.
Translation: Canaille/Canaille
Translate-URL: https://hosted.weblate.org/projects/canaille/canaille/
|
2023-05-30 09:44:22 +02:00 |
|
Éloi Rivard
|
e20fb23e6f
|
typo 'successfuly' -> 'successfully'
|
2023-05-30 09:44:11 +02:00 |
|
Ettore Atalan
|
d1dad1c505
|
Translated using Weblate (German)
Currently translated at 22.8% (75 of 328 strings)
Translation: Canaille/Canaille
Translate-URL: https://hosted.weblate.org/projects/canaille/canaille/de/
|
2023-05-29 17:50:48 +02:00 |
|
gallegonovato
|
7dbababb8d
|
Translated using Weblate (Spanish)
Currently translated at 100.0% (328 of 328 strings)
Translation: Canaille/Canaille
Translate-URL: https://hosted.weblate.org/projects/canaille/canaille/es/
|
2023-05-29 17:50:47 +02:00 |
|
Denise Bitca
|
4beee2adcb
|
add(#1, #2, #4, #7): implemented registration within canaille
|
2023-05-29 15:58:30 +02:00 |
|
Denise Bitca
|
212358aaf3
|
add(#5): add method to send a "continue registration" email
|
2023-05-29 15:54:47 +02:00 |
|
Denise Bitca
|
49a7a70cc3
|
Merge branch 'main' of gitlab.com:yaal/canaille
|
2023-05-29 13:58:44 +02:00 |
|
Éloi Rivard
|
cc4b11a113
|
Translated using Weblate (French)
Currently translated at 100.0% (328 of 328 strings)
Translation: Canaille/Canaille
Translate-URL: https://hosted.weblate.org/projects/canaille/canaille/fr/
|
2023-05-27 16:50:18 +02:00 |
|
Éloi Rivard
|
38ee26db83
|
refactored User locking mechanism
|
2023-05-26 17:48:50 +02:00 |
|
Hosted Weblate
|
e64c759151
|
Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.
Translation: Canaille/Canaille
Translate-URL: https://hosted.weblate.org/projects/canaille/canaille/
|
2023-05-26 15:31:38 +02:00 |
|
Éloi Rivard
|
c140a624d0
|
Updated translations
|
2023-05-26 15:31:28 +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
|
77d3a1a656
|
Do not event attempt to add oauth schema if present
|
2023-05-24 16:59:36 +02:00 |
|
Éloi Rivard
|
8b68a862bf
|
Profile settings edition redirects to the same page
|
2023-05-24 14:12:32 +02:00 |
|
Éloi Rivard
|
a92542cd81
|
Moved models specificities in the backend module
|
2023-05-20 21:24:14 +02:00 |
|
Éloi Rivard
|
a9f9eab5a4
|
password minimum length is not a magic constant anymore
|
2023-05-20 20:46:39 +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
|
e110c4851b
|
Backend singleton logic moved to backend.Backend
|
2023-05-20 18:39:49 +02:00 |
|
Éloi Rivard
|
6f637b8129
|
Refactored the unit test backend fixtures
|
2023-05-20 17:17:46 +02:00 |
|
Éloi Rivard
|
30282e633b
|
The LDAP Backend is now a class
|
2023-05-20 12:08:04 +02:00 |
|
Éloi Rivard
|
4f9dac8782
|
Tests the model mechanism
|
2023-05-17 18:19:05 +02:00 |
|
Éloi Rivard
|
4d64b3fcba
|
Removed useless import in jinja templates
|
2023-05-17 16:21:00 +02:00 |
|
Éloi Rivard
|
0c5a559bba
|
Ensures User.formatted_name is correctly formatted when parts are missing
|
2023-05-17 16:18:35 +02:00 |
|
Éloi Rivard
|
be78b50e97
|
Removed User.authenticate method
|
2023-05-17 12:48:14 +02:00 |
|
Éloi Rivard
|
2f924c4b7e
|
Fixes calls to the Consent.oauthClient and Consent.oauthSubject attributes
|
2023-05-17 12:07:52 +02:00 |
|
Éloi Rivard
|
7503ac772f
|
Fixes calls to the LDAP 'Client.dn' attribute
|
2023-05-17 12:03:55 +02:00 |
|
Éloi Rivard
|
d66619a01c
|
OIDC lifetimes are not casted to string anymore
|
2023-05-17 09:29:32 +02:00 |
|
Éloi Rivard
|
b4014cfd73
|
Use explicit attributes in Consent.get
|
2023-05-17 09:19:15 +02:00 |
|
Éloi Rivard
|
572ef585a0
|
Escape strings in the authorization details view
|
2023-05-17 08:55:00 +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
|
a7013f2360
|
Explicited OIDC authorization admin variable
|
2023-05-16 22:28:34 +02:00 |
|
Éloi Rivard
|
00b5997a61
|
Avoid calls to LDAPUser.may and LDAPUser.must
|
2023-05-16 22:18:38 +02:00 |
|
Éloi Rivard
|
28e7d1c662
|
LDAPObject __getattr__ filters None values
|
2023-05-16 16:05:09 +02:00 |
|
Éloi Rivard
|
01c1ae4eef
|
Rename LDAPObject.attrs to state
|
2023-05-16 15:48:05 +02:00 |
|
Éloi Rivard
|
8998fe9b62
|
Explicit arguments when using Model.get
|
2023-05-16 11:29:40 +02:00 |
|
Éloi Rivard
|
26dc4d425c
|
Display password recovery button on OIDC login page
|
2023-05-15 18:06:22 +02:00 |
|
Ettore Atalan
|
5b7aec0959
|
Translated using Weblate (German)
Currently translated at 14.0% (44 of 314 strings)
Translation: Canaille/Canaille
Translate-URL: https://hosted.weblate.org/projects/canaille/canaille/de/
|
2023-05-15 01:49:24 +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
|
ad388d2fac
|
Fixes a call to the LDAP 'cn' attribute
|
2023-05-12 20:36:38 +02:00 |
|
Éloi Rivard
|
8f8ac5f31b
|
Fixes a call to the LDAP 'uid' attribute
|
2023-05-12 19:53:06 +02:00 |
|
Éloi Rivard
|
6c5053afb1
|
Fixes a call to a LDAP named attribute, again
|
2023-05-12 18:51:50 +02:00 |
|
Éloi Rivard
|
534e0a507b
|
Fixes a call to a LDAP named attribute
|
2023-05-12 18:45:32 +02:00 |
|
Éloi Rivard
|
c09b2b5321
|
Implemented LDAPObject __delattr__
|
2023-05-11 23:34:10 +02:00 |
|
Éloi Rivard
|
ca1ea9ca92
|
Removed unused code
|
2023-05-11 23:29:34 +02:00 |
|
Éloi Rivard
|
9480e43ad9
|
Removed LDAPObject __getitem__ and __setitem__ methods
|
2023-05-11 23:08:39 +02:00 |
|
Éloi Rivard
|
df60821e29
|
Rename LDAPObject.attribute_table to attributes
|
2023-05-11 16:55:33 +02:00 |
|
Éloi Rivard
|
1167d336d9
|
fixes wrong attribute name in impersonate page flash message
|
2023-05-11 16:50:06 +02:00 |
|
Éloi Rivard
|
88179b23b8
|
fix non-generic model attribute calls
|
2023-05-11 16:02:32 +02:00 |
|
Denise Bitca
|
d067ca4220
|
refactor(#55): removed debug print call
|
2023-05-08 11:48:49 +02:00 |
|
Denise Bitca
|
518548bb74
|
add(#55): added signup and onboarding routes in account route file
|
2023-05-08 11:47:23 +02:00 |
|
Denise Bitca
|
7537390fea
|
add(#55): added join and onboarding forms
|
2023-05-08 11:44:21 +02:00 |
|
Denise Bitca
|
544f7f8c64
|
add(#55): onboarding template for sign-in / sign-up
|
2023-05-08 11:43:19 +02:00 |
|
Éloi Rivard
|
9e6a1b85f1
|
Avoid setting 'None' in claims when they are empty
|
2023-05-05 13:28:02 +02:00 |
|
Éloi Rivard
|
6e6d15fec1
|
Fixed password initialization mail recipients
|
2023-05-05 10:53:48 +02:00 |
|
Éloi Rivard
|
6148d8d682
|
Updated to htmx 1.9.2
|
2023-05-05 10:43:01 +02:00 |
|
Éloi Rivard
|
00b13c95ad
|
refer to 'groups' instead of ldap 'memberof' in the group edition page
|
2023-05-02 17:08:42 +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
|
4883548dc5
|
Translated using Weblate (French)
Currently translated at 100.0% (314 of 314 strings)
Translation: Canaille/Canaille
Translate-URL: https://hosted.weblate.org/projects/canaille/canaille/fr/
|
2023-04-28 19:52:42 +02:00 |
|
Éloi Rivard
|
0a500407b6
|
submit buttons wording
|
2023-04-27 19:26:05 +02:00 |
|
Éloi Rivard
|
0234c5945a
|
User.logout excepts IndexError in case of invalid sessions
|
2023-04-18 20:36:48 +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
|
571c04de66
|
Fixed toml inline tables
|
2023-04-15 13:08:24 +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
|
39c5a6fb16
|
htmx 1.9.0
|
2023-04-13 14:44:38 +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
|
8b0dbf2d55
|
Catch bare exceptions in populate commands instead of ldap specific exceptions
|
2023-04-09 23:56:06 +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
|
08f8bfbfdb
|
Moved user and group management in the core submodule
|
2023-04-09 13:34:38 +02:00 |
|
Éloi Rivard
|
ac64f034f3
|
Moves some functions from mails.py to utils/mails.py
|
2023-04-09 13:16:32 +02:00 |
|
Éloi Rivard
|
e0256db017
|
Moved oidc blueprints in a dedicated file
|
2023-04-09 11:31:23 +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
|
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
|
706d50449a
|
Split the User.get method
|
2023-04-07 21:24:09 +02:00 |
|
Éloi Rivard
|
0d96073b90
|
Removed the 'filter' argument from the User model
|
2023-04-07 20:49:30 +02:00 |
|
Éloi Rivard
|
18075dd849
|
Removed the 'conn' argument when it is not needed
|
2023-04-07 20:43:46 +02:00 |
|
Éloi Rivard
|
db3a4a74ff
|
Renamed user attributes to match SCIM naming convention
|
2023-04-07 20:12:24 +02:00 |
|
Éloi Rivard
|
ff87975601
|
Datetime without timezones are stored as UTC in LDAP
|
2023-04-07 20:08:31 +02:00 |
|
Éloi Rivard
|
98089a21d7
|
Preconsent page empty state
|
2023-04-07 18:31:04 +02:00 |
|
Éloi Rivard
|
01e0e3d3f5
|
Fixed avatar update with htmx
|
2023-04-07 18:05:06 +02:00 |
|
Éloi Rivard
|
dfd77d82f1
|
Revert hyperlink style
|
2023-04-05 14:27:27 +02:00 |
|
Éloi Rivard
|
cb09667090
|
Bumped to fomanticui 2.9.2
|
2023-04-05 14:23:40 +02:00 |
|
Éloi Rivard
|
344559b483
|
Fixed style CI
|
2023-04-04 10:57:50 +02:00 |
|
Éloi Rivard
|
3b1497c972
|
Merge branch 'ux' into 'main'
Dark theme improvement
See merge request yaal/canaille!121
|
2023-04-04 08:53:16 +00:00 |
|
Brunelie Lauret
|
d5e2183304
|
improving dark theme
|
2023-04-04 10:18:43 +02:00 |
|
Éloi Rivard
|
3458f94fd3
|
Disable pagination form dynamic validation
|
2023-04-04 09:43:56 +02:00 |
|
Brunelie Lauret
|
a704e090d0
|
dark theme improvement
|
2023-04-03 10:10:13 +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
|
81e80b8a59
|
Translated using Weblate (French)
Currently translated at 100.0% (314 of 314 strings)
Translation: Canaille/Canaille
Translate-URL: https://hosted.weblate.org/projects/canaille/canaille/fr/
|
2023-03-31 15:40:42 +02:00 |
|
gallegonovato
|
2eb9cd7db0
|
Translated using Weblate (Spanish)
Currently translated at 100.0% (314 of 314 strings)
Translation: Canaille/Canaille
Translate-URL: https://hosted.weblate.org/projects/canaille/canaille/es/
|
2023-03-31 15:40:42 +02:00 |
|
Éloi Rivard
|
1f1bb353e0
|
Dynamic form validation with htmx
|
2023-03-30 23:22:58 +02:00 |
|
Éloi Rivard
|
c5e33e30ca
|
Reload UX JS on htmx events
|
2023-03-30 21:16:22 +02:00 |
|
Éloi Rivard
|
2fb0085d7b
|
OIDC client form renaming
|
2023-03-30 00:40:25 +02:00 |
|
Éloi Rivard
|
f1f5c81ada
|
Form macro input classes cleanups
|
2023-03-29 23:29:38 +02:00 |
|
Hosted Weblate
|
a2da437ded
|
Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.
Translation: Canaille/Canaille
Translate-URL: https://hosted.weblate.org/projects/canaille/canaille/
|
2023-03-29 23:01:15 +02:00 |
|
Éloi Rivard
|
f7e2195494
|
Translated using Weblate (French)
Currently translated at 100.0% (313 of 313 strings)
Translation: Canaille/Canaille
Translate-URL: https://hosted.weblate.org/projects/canaille/canaille/fr/
|
2023-03-29 23:01:14 +02:00 |
|
Éloi Rivard
|
2e6ec739e7
|
User number field wording
|
2023-03-29 23:01:02 +02:00 |
|
Éloi Rivard
|
43c6d02ca6
|
Avoid double crsf HTML input in admin test mail form
|
2023-03-29 22:43:52 +02:00 |
|
Éloi Rivard
|
78a129d494
|
Forms validate URIs
|
2023-03-29 21:33:47 +02:00 |
|
Hosted Weblate
|
d94721d244
|
Update translation files
Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.
Translation: Canaille/Canaille
Translate-URL: https://hosted.weblate.org/projects/canaille/canaille/
|
2023-03-29 19:42:38 +02:00 |
|
Éloi Rivard
|
e6ecfcfecd
|
Unique email form validator wording
|
2023-03-29 19:34:17 +02:00 |
|