Compare commits
	
		
			45 Commits
		
	
	
		
			version/20
			...
			sources/ld
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 57a38c93fc | |||
| 93b9dae178 | |||
| 589c123dc1 | |||
| a4d9f08095 | |||
| d856e403f8 | |||
| c80116475b | |||
| 2997382df2 | |||
| 65e48907d3 | |||
| 1c4848ed8f | |||
| 64f7fa62dd | |||
| 16abaa8016 | |||
| 4cc4a3e4b8 | |||
| 8abe1f61ea | |||
| 6712095d7e | |||
| 5ab308bfd7 | |||
| 8b93fbcc69 | |||
| f641670139 | |||
| 80af26ef50 | |||
| 64ce170882 | |||
| b6171aa1a4 | |||
| 087582abbd | |||
| 6b6d88b81b | |||
| 55e5d36df5 | |||
| fc43e841c9 | |||
| 895ed6fbdc | |||
| f3965261c5 | |||
| 34ee6dc2b7 | |||
| 55fe4b0bc0 | |||
| 8d745609f9 | |||
| 55edb10da0 | |||
| 66e4b3af36 | |||
| d44fc7790e | |||
| 291972628a | |||
| 019221c433 | |||
| b99fa9f8f8 | |||
| 5bde2772c3 | |||
| 10884a7770 | |||
| e858d09d28 | |||
| 856717395e | |||
| b7793200de | |||
| bcc0323523 | |||
| 643c1f5bbf | |||
| 1fca246839 | |||
| b73e68a94c | |||
| f9d3c4c9a7 | 
| @ -1,5 +1,5 @@ | |||||||
| [bumpversion] | [bumpversion] | ||||||
| current_version = 2024.4.1 | current_version = 2024.4.0 | ||||||
| tag = True | tag = True | ||||||
| commit = True | commit = True | ||||||
| parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)(?:-(?P<rc_t>[a-zA-Z-]+)(?P<rc_n>[1-9]\\d*))? | parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)(?:-(?P<rc_t>[a-zA-Z-]+)(?P<rc_n>[1-9]\\d*))? | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								.github/workflows/ci-main.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/ci-main.yml
									
									
									
									
										vendored
									
									
								
							| @ -130,7 +130,7 @@ jobs: | |||||||
|       - name: Setup authentik env |       - name: Setup authentik env | ||||||
|         uses: ./.github/actions/setup |         uses: ./.github/actions/setup | ||||||
|       - name: Create k8s Kind Cluster |       - name: Create k8s Kind Cluster | ||||||
|         uses: helm/kind-action@v1.9.0 |         uses: helm/kind-action@v1.10.0 | ||||||
|       - name: run integration |       - name: run integration | ||||||
|         run: | |         run: | | ||||||
|           poetry run coverage run manage.py test tests/integration |           poetry run coverage run manage.py test tests/integration | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								.github/workflows/ci-outpost.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/ci-outpost.yml
									
									
									
									
										vendored
									
									
								
							| @ -29,7 +29,7 @@ jobs: | |||||||
|       - name: Generate API |       - name: Generate API | ||||||
|         run: make gen-client-go |         run: make gen-client-go | ||||||
|       - name: golangci-lint |       - name: golangci-lint | ||||||
|         uses: golangci/golangci-lint-action@v4 |         uses: golangci/golangci-lint-action@v5 | ||||||
|         with: |         with: | ||||||
|           version: v1.54.2 |           version: v1.54.2 | ||||||
|           args: --timeout 5000s --verbose |           args: --timeout 5000s --verbose | ||||||
|  | |||||||
| @ -2,7 +2,7 @@ | |||||||
|  |  | ||||||
| from os import environ | from os import environ | ||||||
|  |  | ||||||
| __version__ = "2024.4.1" | __version__ = "2024.4.0" | ||||||
| ENV_GIT_HASH_KEY = "GIT_BUILD_HASH" | ENV_GIT_HASH_KEY = "GIT_BUILD_HASH" | ||||||
|  |  | ||||||
|  |  | ||||||
|  | |||||||
| @ -153,7 +153,7 @@ class Migration(migrations.Migration): | |||||||
|                 ( |                 ( | ||||||
|                     "object_uniqueness_field", |                     "object_uniqueness_field", | ||||||
|                     models.TextField( |                     models.TextField( | ||||||
|                         default="objectSid", help_text="Field which contains a unique Identifier." |                         default="entryDN", help_text="Field which contains a unique Identifier." | ||||||
|                     ), |                     ), | ||||||
|                 ), |                 ), | ||||||
|                 ("sync_groups", models.BooleanField(default=True)), |                 ("sync_groups", models.BooleanField(default=True)), | ||||||
|  | |||||||
| @ -88,7 +88,7 @@ class LDAPSource(Source): | |||||||
|         help_text=_("Consider Objects matching this filter to be Groups."), |         help_text=_("Consider Objects matching this filter to be Groups."), | ||||||
|     ) |     ) | ||||||
|     object_uniqueness_field = models.TextField( |     object_uniqueness_field = models.TextField( | ||||||
|         default="objectSid", help_text=_("Field which contains a unique Identifier.") |         default="entryDN", help_text=_("Field which contains a unique Identifier.") | ||||||
|     ) |     ) | ||||||
|  |  | ||||||
|     property_mappings_group = models.ManyToManyField( |     property_mappings_group = models.ManyToManyField( | ||||||
|  | |||||||
| @ -47,6 +47,15 @@ class BaseLDAPSynchronizer: | |||||||
|         """UI name for the type of object this class synchronizes""" |         """UI name for the type of object this class synchronizes""" | ||||||
|         raise NotImplementedError |         raise NotImplementedError | ||||||
|  |  | ||||||
|  |     def get_unique_identifier(self, ldap_object: dict) -> str | None: | ||||||
|  |         """Get unique identifier""" | ||||||
|  |         attributes = ldap_object.get("attributes", {}) | ||||||
|  |         if self._source.object_uniqueness_field in attributes: | ||||||
|  |             return flatten(attributes[self._source.object_uniqueness_field]) | ||||||
|  |         if self._source.object_uniqueness_field in ldap_object: | ||||||
|  |             return flatten(ldap_object.get(self._source.object_uniqueness_field)) | ||||||
|  |         return None | ||||||
|  |  | ||||||
|     def sync_full(self): |     def sync_full(self): | ||||||
|         """Run full sync, this function should only be used in tests""" |         """Run full sync, this function should only be used in tests""" | ||||||
|         if not settings.TEST:  # noqa |         if not settings.TEST:  # noqa | ||||||
| @ -134,20 +143,22 @@ class BaseLDAPSynchronizer: | |||||||
|                 cookie = None |                 cookie = None | ||||||
|             yield self._connection.response |             yield self._connection.response | ||||||
|  |  | ||||||
|     def build_user_properties(self, user_dn: str, **kwargs) -> dict[str, Any]: |     def build_user_properties(self, user_dn: str, uniq: str, **kwargs) -> dict[str, Any]: | ||||||
|         """Build attributes for User object based on property mappings.""" |         """Build attributes for User object based on property mappings.""" | ||||||
|         props = self._build_object_properties(user_dn, self._source.property_mappings, **kwargs) |         props = self._build_object_properties( | ||||||
|  |             user_dn, self._source.property_mappings, uniq, **kwargs | ||||||
|  |         ) | ||||||
|         props.setdefault("path", self._source.get_user_path()) |         props.setdefault("path", self._source.get_user_path()) | ||||||
|         return props |         return props | ||||||
|  |  | ||||||
|     def build_group_properties(self, group_dn: str, **kwargs) -> dict[str, Any]: |     def build_group_properties(self, group_dn: str, uniq: str, **kwargs) -> dict[str, Any]: | ||||||
|         """Build attributes for Group object based on property mappings.""" |         """Build attributes for Group object based on property mappings.""" | ||||||
|         return self._build_object_properties( |         return self._build_object_properties( | ||||||
|             group_dn, self._source.property_mappings_group, **kwargs |             group_dn, self._source.property_mappings_group, uniq, **kwargs | ||||||
|         ) |         ) | ||||||
|  |  | ||||||
|     def _build_object_properties( |     def _build_object_properties( | ||||||
|         self, object_dn: str, mappings: QuerySet, **kwargs |         self, object_dn: str, mappings: QuerySet, uniq: str, **kwargs | ||||||
|     ) -> dict[str, dict[Any, Any]]: |     ) -> dict[str, dict[Any, Any]]: | ||||||
|         properties = {"attributes": {}} |         properties = {"attributes": {}} | ||||||
|         for mapping in mappings.all().select_subclasses(): |         for mapping in mappings.all().select_subclasses(): | ||||||
| @ -180,10 +191,7 @@ class BaseLDAPSynchronizer: | |||||||
|                 ).save() |                 ).save() | ||||||
|                 self._logger.warning("Mapping failed to evaluate", exc=exc, mapping=mapping) |                 self._logger.warning("Mapping failed to evaluate", exc=exc, mapping=mapping) | ||||||
|                 continue |                 continue | ||||||
|         if self._source.object_uniqueness_field in kwargs: |         properties["attributes"][LDAP_UNIQUENESS] = uniq | ||||||
|             properties["attributes"][LDAP_UNIQUENESS] = flatten( |  | ||||||
|                 kwargs.get(self._source.object_uniqueness_field) |  | ||||||
|             ) |  | ||||||
|         properties["attributes"][LDAP_DISTINGUISHED_NAME] = object_dn |         properties["attributes"][LDAP_DISTINGUISHED_NAME] = object_dn | ||||||
|         return properties |         return properties | ||||||
|  |  | ||||||
|  | |||||||
| @ -41,16 +41,16 @@ class GroupLDAPSynchronizer(BaseLDAPSynchronizer): | |||||||
|                 continue |                 continue | ||||||
|             attributes = group.get("attributes", {}) |             attributes = group.get("attributes", {}) | ||||||
|             group_dn = flatten(flatten(group.get("entryDN", group.get("dn")))) |             group_dn = flatten(flatten(group.get("entryDN", group.get("dn")))) | ||||||
|             if self._source.object_uniqueness_field not in attributes: |             uniq = self.get_unique_identifier(group) | ||||||
|  |             if not uniq: | ||||||
|                 self.message( |                 self.message( | ||||||
|                     f"Cannot find uniqueness field in attributes: '{group_dn}'", |                     f"Cannot find uniqueness field in attributes: '{group_dn}'", | ||||||
|                     attributes=attributes.keys(), |                     attributes=attributes.keys(), | ||||||
|                     dn=group_dn, |                     dn=group_dn, | ||||||
|                 ) |                 ) | ||||||
|                 continue |                 continue | ||||||
|             uniq = flatten(attributes[self._source.object_uniqueness_field]) |  | ||||||
|             try: |             try: | ||||||
|                 defaults = self.build_group_properties(group_dn, **attributes) |                 defaults = self.build_group_properties(group_dn, uniq, **attributes) | ||||||
|                 defaults["parent"] = self._source.sync_parent_group |                 defaults["parent"] = self._source.sync_parent_group | ||||||
|                 if "name" not in defaults: |                 if "name" not in defaults: | ||||||
|                     raise IntegrityError("Name was not set by propertymappings") |                     raise IntegrityError("Name was not set by propertymappings") | ||||||
|  | |||||||
| @ -4,7 +4,7 @@ from collections.abc import Generator | |||||||
| from typing import Any | from typing import Any | ||||||
|  |  | ||||||
| from django.db.models import Q | from django.db.models import Q | ||||||
| from ldap3 import SUBTREE | from ldap3 import ALL_ATTRIBUTES, ALL_OPERATIONAL_ATTRIBUTES, SUBTREE | ||||||
|  |  | ||||||
| from authentik.core.models import Group, User | from authentik.core.models import Group, User | ||||||
| from authentik.sources.ldap.auth import LDAP_DISTINGUISHED_NAME | from authentik.sources.ldap.auth import LDAP_DISTINGUISHED_NAME | ||||||
| @ -33,11 +33,7 @@ class MembershipLDAPSynchronizer(BaseLDAPSynchronizer): | |||||||
|             search_base=self.base_dn_groups, |             search_base=self.base_dn_groups, | ||||||
|             search_filter=self._source.group_object_filter, |             search_filter=self._source.group_object_filter, | ||||||
|             search_scope=SUBTREE, |             search_scope=SUBTREE, | ||||||
|             attributes=[ |             attributes=[ALL_ATTRIBUTES, ALL_OPERATIONAL_ATTRIBUTES], | ||||||
|                 self._source.group_membership_field, |  | ||||||
|                 self._source.object_uniqueness_field, |  | ||||||
|                 LDAP_DISTINGUISHED_NAME, |  | ||||||
|             ], |  | ||||||
|             **kwargs, |             **kwargs, | ||||||
|         ) |         ) | ||||||
|  |  | ||||||
| @ -80,7 +76,7 @@ class MembershipLDAPSynchronizer(BaseLDAPSynchronizer): | |||||||
|     def get_group(self, group_dict: dict[str, Any]) -> Group | None: |     def get_group(self, group_dict: dict[str, Any]) -> Group | None: | ||||||
|         """Check if we fetched the group already, and if not cache it for later""" |         """Check if we fetched the group already, and if not cache it for later""" | ||||||
|         group_dn = group_dict.get("attributes", {}).get(LDAP_DISTINGUISHED_NAME, []) |         group_dn = group_dict.get("attributes", {}).get(LDAP_DISTINGUISHED_NAME, []) | ||||||
|         group_uniq = group_dict.get("attributes", {}).get(self._source.object_uniqueness_field, []) |         group_uniq = self.get_unique_identifier(group_dict) | ||||||
|         # group_uniq might be a single string or an array with (hopefully) a single string |         # group_uniq might be a single string or an array with (hopefully) a single string | ||||||
|         if isinstance(group_uniq, list): |         if isinstance(group_uniq, list): | ||||||
|             if len(group_uniq) < 1: |             if len(group_uniq) < 1: | ||||||
|  | |||||||
| @ -43,16 +43,16 @@ class UserLDAPSynchronizer(BaseLDAPSynchronizer): | |||||||
|                 continue |                 continue | ||||||
|             attributes = user.get("attributes", {}) |             attributes = user.get("attributes", {}) | ||||||
|             user_dn = flatten(user.get("entryDN", user.get("dn"))) |             user_dn = flatten(user.get("entryDN", user.get("dn"))) | ||||||
|             if self._source.object_uniqueness_field not in attributes: |             uniq = self.get_unique_identifier(user) | ||||||
|  |             if not uniq: | ||||||
|                 self.message( |                 self.message( | ||||||
|                     f"Cannot find uniqueness field in attributes: '{user_dn}'", |                     f"Cannot find uniqueness field in attributes: '{user_dn}'", | ||||||
|                     attributes=attributes.keys(), |                     attributes=attributes.keys(), | ||||||
|                     dn=user_dn, |                     dn=user_dn, | ||||||
|                 ) |                 ) | ||||||
|                 continue |                 continue | ||||||
|             uniq = flatten(attributes[self._source.object_uniqueness_field]) |  | ||||||
|             try: |             try: | ||||||
|                 defaults = self.build_user_properties(user_dn, **attributes) |                 defaults = self.build_user_properties(user_dn, uniq, **attributes) | ||||||
|                 self._logger.debug("Writing user with attributes", **defaults) |                 self._logger.debug("Writing user with attributes", **defaults) | ||||||
|                 if "username" not in defaults: |                 if "username" not in defaults: | ||||||
|                     raise IntegrityError("Username was not set by propertymappings") |                     raise IntegrityError("Username was not set by propertymappings") | ||||||
|  | |||||||
| @ -41,7 +41,7 @@ def mock_ad_connection(password: str) -> Connection: | |||||||
|     connection.strategy.add_entry( |     connection.strategy.add_entry( | ||||||
|         "cn=group2,ou=groups,dc=goauthentik,dc=io", |         "cn=group2,ou=groups,dc=goauthentik,dc=io", | ||||||
|         { |         { | ||||||
|             "name": "test-group", |             "name": "test-group2", | ||||||
|             "objectClass": "group", |             "objectClass": "group", | ||||||
|             "distinguishedName": "cn=group2,ou=groups,dc=goauthentik,dc=io", |             "distinguishedName": "cn=group2,ou=groups,dc=goauthentik,dc=io", | ||||||
|         }, |         }, | ||||||
| @ -61,18 +61,6 @@ def mock_ad_connection(password: str) -> Connection: | |||||||
|             ), |             ), | ||||||
|         }, |         }, | ||||||
|     ) |     ) | ||||||
|     # User without SID |  | ||||||
|     connection.strategy.add_entry( |  | ||||||
|         "cn=user1,ou=users,dc=goauthentik,dc=io", |  | ||||||
|         { |  | ||||||
|             "userPassword": "test1111", |  | ||||||
|             "sAMAccountName": "user2_sn", |  | ||||||
|             "name": "user1_sn", |  | ||||||
|             "revision": 0, |  | ||||||
|             "objectClass": "person", |  | ||||||
|             "distinguishedName": "cn=user1,ou=users,dc=goauthentik,dc=io", |  | ||||||
|         }, |  | ||||||
|     ) |  | ||||||
|     # Duplicate users |     # Duplicate users | ||||||
|     connection.strategy.add_entry( |     connection.strategy.add_entry( | ||||||
|         "cn=user2,ou=users,dc=goauthentik,dc=io", |         "cn=user2,ou=users,dc=goauthentik,dc=io", | ||||||
| @ -87,7 +75,7 @@ def mock_ad_connection(password: str) -> Connection: | |||||||
|         }, |         }, | ||||||
|     ) |     ) | ||||||
|     connection.strategy.add_entry( |     connection.strategy.add_entry( | ||||||
|         "cn=user3,ou=users,dc=goauthentik,dc=io", |         "cn=user2,ou=users,dc=goauthentik,dc=io", | ||||||
|         { |         { | ||||||
|             "userPassword": "test2222", |             "userPassword": "test2222", | ||||||
|             "sAMAccountName": "user2_sn", |             "sAMAccountName": "user2_sn", | ||||||
| @ -95,7 +83,7 @@ def mock_ad_connection(password: str) -> Connection: | |||||||
|             "revision": 0, |             "revision": 0, | ||||||
|             "objectSid": "unique-test2222", |             "objectSid": "unique-test2222", | ||||||
|             "objectClass": "person", |             "objectClass": "person", | ||||||
|             "distinguishedName": "cn=user3,ou=users,dc=goauthentik,dc=io", |             "distinguishedName": "cn=user2,ou=users,dc=goauthentik,dc=io", | ||||||
|         }, |         }, | ||||||
|     ) |     ) | ||||||
|     connection.bind() |     connection.bind() | ||||||
|  | |||||||
| @ -108,12 +108,7 @@ class LDAPSyncTests(TestCase): | |||||||
|         user = User.objects.create( |         user = User.objects.create( | ||||||
|             username="user0_sn", |             username="user0_sn", | ||||||
|             attributes={ |             attributes={ | ||||||
|                 "ldap_uniq": ( |                 "ldap_uniq": "cn=user0,ou=foo,ou=users,dc=goauthentik,dc=io", | ||||||
|                     "S-117-6648368-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-" |  | ||||||
|                     "0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-" |  | ||||||
|                     "0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-" |  | ||||||
|                     "0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0" |  | ||||||
|                 ), |  | ||||||
|                 "foo": "bar", |                 "foo": "bar", | ||||||
|             }, |             }, | ||||||
|         ) |         ) | ||||||
|  | |||||||
| @ -2,11 +2,9 @@ from django.db.models import Model | |||||||
| from django.db.models.signals import pre_delete, pre_save | from django.db.models.signals import pre_delete, pre_save | ||||||
| from django.dispatch import receiver | from django.dispatch import receiver | ||||||
|  |  | ||||||
| from authentik.core.models import USER_PATH_SYSTEM_PREFIX, Token, TokenIntents, User, UserTypes | from authentik.core.models import Token, TokenIntents, User, UserTypes | ||||||
| from authentik.sources.scim.models import SCIMSource | from authentik.sources.scim.models import SCIMSource | ||||||
|  |  | ||||||
| USER_PATH_SOURCE_SCIM = USER_PATH_SYSTEM_PREFIX + "/sources/scim" |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @receiver(pre_save, sender=SCIMSource) | @receiver(pre_save, sender=SCIMSource) | ||||||
| def scim_source_pre_save(sender: type[Model], instance: SCIMSource, **_): | def scim_source_pre_save(sender: type[Model], instance: SCIMSource, **_): | ||||||
| @ -18,7 +16,6 @@ def scim_source_pre_save(sender: type[Model], instance: SCIMSource, **_): | |||||||
|         username=identifier, |         username=identifier, | ||||||
|         name=f"SCIM Source {instance.name} Service-Account", |         name=f"SCIM Source {instance.name} Service-Account", | ||||||
|         type=UserTypes.INTERNAL_SERVICE_ACCOUNT, |         type=UserTypes.INTERNAL_SERVICE_ACCOUNT, | ||||||
|         path=USER_PATH_SOURCE_SCIM, |  | ||||||
|     ) |     ) | ||||||
|     token = Token.objects.create( |     token = Token.objects.create( | ||||||
|         user=user, |         user=user, | ||||||
|  | |||||||
| @ -2,7 +2,7 @@ | |||||||
|     "$schema": "http://json-schema.org/draft-07/schema", |     "$schema": "http://json-schema.org/draft-07/schema", | ||||||
|     "$id": "https://goauthentik.io/blueprints/schema.json", |     "$id": "https://goauthentik.io/blueprints/schema.json", | ||||||
|     "type": "object", |     "type": "object", | ||||||
|     "title": "authentik 2024.4.1 Blueprint schema", |     "title": "authentik 2024.4.0 Blueprint schema", | ||||||
|     "required": [ |     "required": [ | ||||||
|         "version", |         "version", | ||||||
|         "entries" |         "entries" | ||||||
|  | |||||||
| @ -32,7 +32,7 @@ services: | |||||||
|     volumes: |     volumes: | ||||||
|       - redis:/data |       - redis:/data | ||||||
|   server: |   server: | ||||||
|     image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2024.4.1} |     image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2024.4.0} | ||||||
|     restart: unless-stopped |     restart: unless-stopped | ||||||
|     command: server |     command: server | ||||||
|     environment: |     environment: | ||||||
| @ -53,7 +53,7 @@ services: | |||||||
|       - postgresql |       - postgresql | ||||||
|       - redis |       - redis | ||||||
|   worker: |   worker: | ||||||
|     image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2024.4.1} |     image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2024.4.0} | ||||||
|     restart: unless-stopped |     restart: unless-stopped | ||||||
|     command: worker |     command: worker | ||||||
|     environment: |     environment: | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								go.mod
									
									
									
									
									
								
							| @ -28,7 +28,7 @@ require ( | |||||||
| 	github.com/spf13/cobra v1.8.0 | 	github.com/spf13/cobra v1.8.0 | ||||||
| 	github.com/stretchr/testify v1.9.0 | 	github.com/stretchr/testify v1.9.0 | ||||||
| 	github.com/wwt/guac v1.3.2 | 	github.com/wwt/guac v1.3.2 | ||||||
| 	goauthentik.io/api/v3 v3.2024023.2 | 	goauthentik.io/api/v3 v3.2024040.1 | ||||||
| 	golang.org/x/exp v0.0.0-20230210204819-062eb4c674ab | 	golang.org/x/exp v0.0.0-20230210204819-062eb4c674ab | ||||||
| 	golang.org/x/oauth2 v0.19.0 | 	golang.org/x/oauth2 v0.19.0 | ||||||
| 	golang.org/x/sync v0.7.0 | 	golang.org/x/sync v0.7.0 | ||||||
|  | |||||||
							
								
								
									
										4
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								go.sum
									
									
									
									
									
								
							| @ -294,8 +294,8 @@ go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y | |||||||
| go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU= | go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU= | ||||||
| go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= | go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= | ||||||
| go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4= | go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4= | ||||||
| goauthentik.io/api/v3 v3.2024023.2 h1:lSVaZAKTpsDhtw11wnkGjPalkDzv9H2VKEJllBi2aXs= | goauthentik.io/api/v3 v3.2024040.1 h1:0Mp8XLYuscQEWVTR2lNk74WLKDpOVHX0mlbvbvcC6fw= | ||||||
| goauthentik.io/api/v3 v3.2024023.2/go.mod h1:zz+mEZg8rY/7eEjkMGWJ2DnGqk+zqxuybGCGrR2O4Kw= | goauthentik.io/api/v3 v3.2024040.1/go.mod h1:zz+mEZg8rY/7eEjkMGWJ2DnGqk+zqxuybGCGrR2O4Kw= | ||||||
| golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= | golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= | ||||||
| golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= | golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= | ||||||
| golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= | golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= | ||||||
|  | |||||||
| @ -29,4 +29,4 @@ func UserAgent() string { | |||||||
| 	return fmt.Sprintf("authentik@%s", FullVersion()) | 	return fmt.Sprintf("authentik@%s", FullVersion()) | ||||||
| } | } | ||||||
|  |  | ||||||
| const VERSION = "2024.4.1" | const VERSION = "2024.4.0" | ||||||
|  | |||||||
| @ -3,6 +3,7 @@ | |||||||
| import authentik. This is done by the dockerfile.""" | import authentik. This is done by the dockerfile.""" | ||||||
| from sys import exit as sysexit | from sys import exit as sysexit | ||||||
| from time import sleep | from time import sleep | ||||||
|  | from urllib.parse import quote_plus | ||||||
|  |  | ||||||
| from psycopg import OperationalError, connect | from psycopg import OperationalError, connect | ||||||
| from redis import Redis | from redis import Redis | ||||||
| @ -34,7 +35,7 @@ def check_postgres(): | |||||||
|  |  | ||||||
|  |  | ||||||
| def check_redis(): | def check_redis(): | ||||||
|     url = CONFIG.get("cache.url") or redis_url(CONFIG.get("redis.db")) |     url = redis_url(CONFIG.get("redis.db")) | ||||||
|     while True: |     while True: | ||||||
|         try: |         try: | ||||||
|             redis = Redis.from_url(url) |             redis = Redis.from_url(url) | ||||||
| @ -42,7 +43,10 @@ def check_redis(): | |||||||
|             break |             break | ||||||
|         except RedisError as exc: |         except RedisError as exc: | ||||||
|             sleep(1) |             sleep(1) | ||||||
|             CONFIG.log("info", f"Redis Connection failed, retrying... ({exc})") |             sanitized_url = url.replace(quote_plus(CONFIG.get("redis.password")), "******") | ||||||
|  |             CONFIG.log( | ||||||
|  |                 "info", f"Redis Connection failed, retrying... ({exc})", redis_url=sanitized_url | ||||||
|  |             ) | ||||||
|     CONFIG.log("info", "Redis Connection successful") |     CONFIG.log("info", "Redis Connection successful") | ||||||
|  |  | ||||||
|  |  | ||||||
|  | |||||||
							
								
								
									
										3205
									
								
								locale/ru/LC_MESSAGES/django.po
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3205
									
								
								locale/ru/LC_MESSAGES/django.po
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										368
									
								
								poetry.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										368
									
								
								poetry.lock
									
									
									
										generated
									
									
									
								
							| @ -392,33 +392,33 @@ files = [ | |||||||
|  |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "black" | name = "black" | ||||||
| version = "24.4.0" | version = "24.4.1" | ||||||
| description = "The uncompromising code formatter." | description = "The uncompromising code formatter." | ||||||
| optional = false | optional = false | ||||||
| python-versions = ">=3.8" | python-versions = ">=3.8" | ||||||
| files = [ | files = [ | ||||||
|     {file = "black-24.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6ad001a9ddd9b8dfd1b434d566be39b1cd502802c8d38bbb1ba612afda2ef436"}, |     {file = "black-24.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1f7749fd0d97ff9415975a1432fac7df89bf13c3833cea079e55fa004d5f28c0"}, | ||||||
|     {file = "black-24.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e3a3a092b8b756c643fe45f4624dbd5a389f770a4ac294cf4d0fce6af86addaf"}, |     {file = "black-24.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:859f3cc5d2051adadf8fd504a01e02b0fd866d7549fff54bc9202d524d2e8bd7"}, | ||||||
|     {file = "black-24.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dae79397f367ac8d7adb6c779813328f6d690943f64b32983e896bcccd18cbad"}, |     {file = "black-24.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59271c9c29dfa97f7fda51f56c7809b3f78e72fd8d2205189bbd23022a0618b6"}, | ||||||
|     {file = "black-24.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:71d998b73c957444fb7c52096c3843875f4b6b47a54972598741fe9a7f737fcb"}, |     {file = "black-24.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:5ed9c34cba223149b5a0144951a0f33d65507cf82c5449cb3c35fe4b515fea9a"}, | ||||||
|     {file = "black-24.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8e5537f456a22cf5cfcb2707803431d2feeb82ab3748ade280d6ccd0b40ed2e8"}, |     {file = "black-24.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9dae3ae59d6f2dc93700fd5034a3115434686e66fd6e63d4dcaa48d19880f2b0"}, | ||||||
|     {file = "black-24.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:64e60a7edd71fd542a10a9643bf369bfd2644de95ec71e86790b063aa02ff745"}, |     {file = "black-24.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5f8698974a81af83283eb47644f2711b5261138d6d9180c863fce673cbe04b13"}, | ||||||
|     {file = "black-24.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5cd5b4f76056cecce3e69b0d4c228326d2595f506797f40b9233424e2524c070"}, |     {file = "black-24.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f404b6e77043b23d0321fb7772522b876b6de737ad3cb97d6b156638d68ce81"}, | ||||||
|     {file = "black-24.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:64578cf99b6b46a6301bc28bdb89f9d6f9b592b1c5837818a177c98525dbe397"}, |     {file = "black-24.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:c94e52b766477bdcd010b872ba0714d5458536dc9d0734eff6583ba7266ffd89"}, | ||||||
|     {file = "black-24.4.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f95cece33329dc4aa3b0e1a771c41075812e46cf3d6e3f1dfe3d91ff09826ed2"}, |     {file = "black-24.4.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:962d9e953872cdb83b97bb737ad47244ce2938054dc946685a4cad98520dab38"}, | ||||||
|     {file = "black-24.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4396ca365a4310beef84d446ca5016f671b10f07abdba3e4e4304218d2c71d33"}, |     {file = "black-24.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b1d8e3b2486b7dd522b1ab2ba1ec4907f0aa8f5e10a33c4271fb331d1d10b70c"}, | ||||||
|     {file = "black-24.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44d99dfdf37a2a00a6f7a8dcbd19edf361d056ee51093b2445de7ca09adac965"}, |     {file = "black-24.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed77e214b785148f57e43ca425b6e0850165144aa727d66ac604e56a70bb7825"}, | ||||||
|     {file = "black-24.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:21f9407063ec71c5580b8ad975653c66508d6a9f57bd008bb8691d273705adcd"}, |     {file = "black-24.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:4ef4764437d7eba8386689cd06e1fb5341ee0ae2e9e22582b21178782de7ed94"}, | ||||||
|     {file = "black-24.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:652e55bb722ca026299eb74e53880ee2315b181dfdd44dca98e43448620ddec1"}, |     {file = "black-24.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:92b183f8eef5baf7b20a513abcf982ad616f544f593f6688bb2850d2982911f1"}, | ||||||
|     {file = "black-24.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7f2966b9b2b3b7104fca9d75b2ee856fe3fdd7ed9e47c753a4bb1a675f2caab8"}, |     {file = "black-24.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:945abd7b3572add997757c94295bb3e73c6ffaf3366b1f26cb2356a4bffd1dc3"}, | ||||||
|     {file = "black-24.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bb9ca06e556a09f7f7177bc7cb604e5ed2d2df1e9119e4f7d2f1f7071c32e5d"}, |     {file = "black-24.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db5154b9e5b478031371d8bc41ff37b33855fa223a6cfba456c9b73fb96f77d4"}, | ||||||
|     {file = "black-24.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:d4e71cdebdc8efeb6deaf5f2deb28325f8614d48426bed118ecc2dcaefb9ebf3"}, |     {file = "black-24.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:afc84c33c1a9aaf3d73140cee776b4ddf73ff429ffe6b7c56dc1c9c10725856d"}, | ||||||
|     {file = "black-24.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6644f97a7ef6f401a150cca551a1ff97e03c25d8519ee0bbc9b0058772882665"}, |     {file = "black-24.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0889f4eb8b3bdf8b189e41a71cf0dbb8141a98346cd1a2695dea5995d416e940"}, | ||||||
|     {file = "black-24.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:75a2d0b4f5eb81f7eebc31f788f9830a6ce10a68c91fbe0fade34fff7a2836e6"}, |     {file = "black-24.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5bb0143f175db45a55227eefd63e90849d96c266330ba31719e9667d0d5ec3b9"}, | ||||||
|     {file = "black-24.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb949f56a63c5e134dfdca12091e98ffb5fd446293ebae123d10fc1abad00b9e"}, |     {file = "black-24.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:713a04a78e78f28ef7e8df7a16fe075670ea164860fcef3885e4f3dffc0184b3"}, | ||||||
|     {file = "black-24.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:7852b05d02b5b9a8c893ab95863ef8986e4dda29af80bbbda94d7aee1abf8702"}, |     {file = "black-24.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:171959bc879637a8cdbc53dc3fddae2a83e151937a28cf605fd175ce61e0e94a"}, | ||||||
|     {file = "black-24.4.0-py3-none-any.whl", hash = "sha256:74eb9b5420e26b42c00a3ff470dc0cd144b80a766128b1771d07643165e08d0e"}, |     {file = "black-24.4.1-py3-none-any.whl", hash = "sha256:ecbab810604fe02c70b3a08afd39beb599f7cc9afd13e81f5336014133b4fe35"}, | ||||||
|     {file = "black-24.4.0.tar.gz", hash = "sha256:f07b69fda20578367eaebbd670ff8fc653ab181e1ff95d84497f9fa20e7d0641"}, |     {file = "black-24.4.1.tar.gz", hash = "sha256:5241612dc8cad5b6fd47432b8bd04db80e07cfbc53bb69e9ae18985063bcb8dd"}, | ||||||
| ] | ] | ||||||
|  |  | ||||||
| [package.dependencies] | [package.dependencies] | ||||||
| @ -920,63 +920,63 @@ files = [ | |||||||
|  |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "coverage" | name = "coverage" | ||||||
| version = "7.4.4" | version = "7.5.0" | ||||||
| description = "Code coverage measurement for Python" | description = "Code coverage measurement for Python" | ||||||
| optional = false | optional = false | ||||||
| python-versions = ">=3.8" | python-versions = ">=3.8" | ||||||
| files = [ | files = [ | ||||||
|     {file = "coverage-7.4.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e0be5efd5127542ef31f165de269f77560d6cdef525fffa446de6f7e9186cfb2"}, |     {file = "coverage-7.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:432949a32c3e3f820af808db1833d6d1631664d53dd3ce487aa25d574e18ad1c"}, | ||||||
|     {file = "coverage-7.4.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ccd341521be3d1b3daeb41960ae94a5e87abe2f46f17224ba5d6f2b8398016cf"}, |     {file = "coverage-7.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2bd7065249703cbeb6d4ce679c734bef0ee69baa7bff9724361ada04a15b7e3b"}, | ||||||
|     {file = "coverage-7.4.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09fa497a8ab37784fbb20ab699c246053ac294d13fc7eb40ec007a5043ec91f8"}, |     {file = "coverage-7.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbfe6389c5522b99768a93d89aca52ef92310a96b99782973b9d11e80511f932"}, | ||||||
|     {file = "coverage-7.4.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b1a93009cb80730c9bca5d6d4665494b725b6e8e157c1cb7f2db5b4b122ea562"}, |     {file = "coverage-7.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:39793731182c4be939b4be0cdecde074b833f6171313cf53481f869937129ed3"}, | ||||||
|     {file = "coverage-7.4.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:690db6517f09336559dc0b5f55342df62370a48f5469fabf502db2c6d1cffcd2"}, |     {file = "coverage-7.5.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85a5dbe1ba1bf38d6c63b6d2c42132d45cbee6d9f0c51b52c59aa4afba057517"}, | ||||||
|     {file = "coverage-7.4.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:09c3255458533cb76ef55da8cc49ffab9e33f083739c8bd4f58e79fecfe288f7"}, |     {file = "coverage-7.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:357754dcdfd811462a725e7501a9b4556388e8ecf66e79df6f4b988fa3d0b39a"}, | ||||||
|     {file = "coverage-7.4.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8ce1415194b4a6bd0cdcc3a1dfbf58b63f910dcb7330fe15bdff542c56949f87"}, |     {file = "coverage-7.5.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a81eb64feded34f40c8986869a2f764f0fe2db58c0530d3a4afbcde50f314880"}, | ||||||
|     {file = "coverage-7.4.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b91cbc4b195444e7e258ba27ac33769c41b94967919f10037e6355e998af255c"}, |     {file = "coverage-7.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:51431d0abbed3a868e967f8257c5faf283d41ec882f58413cf295a389bb22e58"}, | ||||||
|     {file = "coverage-7.4.4-cp310-cp310-win32.whl", hash = "sha256:598825b51b81c808cb6f078dcb972f96af96b078faa47af7dfcdf282835baa8d"}, |     {file = "coverage-7.5.0-cp310-cp310-win32.whl", hash = "sha256:f609ebcb0242d84b7adeee2b06c11a2ddaec5464d21888b2c8255f5fd6a98ae4"}, | ||||||
|     {file = "coverage-7.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:09ef9199ed6653989ebbcaacc9b62b514bb63ea2f90256e71fea3ed74bd8ff6f"}, |     {file = "coverage-7.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:6782cd6216fab5a83216cc39f13ebe30adfac2fa72688c5a4d8d180cd52e8f6a"}, | ||||||
|     {file = "coverage-7.4.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0f9f50e7ef2a71e2fae92774c99170eb8304e3fdf9c8c3c7ae9bab3e7229c5cf"}, |     {file = "coverage-7.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e768d870801f68c74c2b669fc909839660180c366501d4cc4b87efd6b0eee375"}, | ||||||
|     {file = "coverage-7.4.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:623512f8ba53c422fcfb2ce68362c97945095b864cda94a92edbaf5994201083"}, |     {file = "coverage-7.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:84921b10aeb2dd453247fd10de22907984eaf80901b578a5cf0bb1e279a587cb"}, | ||||||
|     {file = "coverage-7.4.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0513b9508b93da4e1716744ef6ebc507aff016ba115ffe8ecff744d1322a7b63"}, |     {file = "coverage-7.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:710c62b6e35a9a766b99b15cdc56d5aeda0914edae8bb467e9c355f75d14ee95"}, | ||||||
|     {file = "coverage-7.4.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40209e141059b9370a2657c9b15607815359ab3ef9918f0196b6fccce8d3230f"}, |     {file = "coverage-7.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c379cdd3efc0658e652a14112d51a7668f6bfca7445c5a10dee7eabecabba19d"}, | ||||||
|     {file = "coverage-7.4.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a2b2b78c78293782fd3767d53e6474582f62443d0504b1554370bde86cc8227"}, |     {file = "coverage-7.5.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fea9d3ca80bcf17edb2c08a4704259dadac196fe5e9274067e7a20511fad1743"}, | ||||||
|     {file = "coverage-7.4.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:73bfb9c09951125d06ee473bed216e2c3742f530fc5acc1383883125de76d9cd"}, |     {file = "coverage-7.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:41327143c5b1d715f5f98a397608f90ab9ebba606ae4e6f3389c2145410c52b1"}, | ||||||
|     {file = "coverage-7.4.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:1f384c3cc76aeedce208643697fb3e8437604b512255de6d18dae3f27655a384"}, |     {file = "coverage-7.5.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:565b2e82d0968c977e0b0f7cbf25fd06d78d4856289abc79694c8edcce6eb2de"}, | ||||||
|     {file = "coverage-7.4.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:54eb8d1bf7cacfbf2a3186019bcf01d11c666bd495ed18717162f7eb1e9dd00b"}, |     {file = "coverage-7.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cf3539007202ebfe03923128fedfdd245db5860a36810136ad95a564a2fdffff"}, | ||||||
|     {file = "coverage-7.4.4-cp311-cp311-win32.whl", hash = "sha256:cac99918c7bba15302a2d81f0312c08054a3359eaa1929c7e4b26ebe41e9b286"}, |     {file = "coverage-7.5.0-cp311-cp311-win32.whl", hash = "sha256:bf0b4b8d9caa8d64df838e0f8dcf68fb570c5733b726d1494b87f3da85db3a2d"}, | ||||||
|     {file = "coverage-7.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:b14706df8b2de49869ae03a5ccbc211f4041750cd4a66f698df89d44f4bd30ec"}, |     {file = "coverage-7.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:9c6384cc90e37cfb60435bbbe0488444e54b98700f727f16f64d8bfda0b84656"}, | ||||||
|     {file = "coverage-7.4.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:201bef2eea65e0e9c56343115ba3814e896afe6d36ffd37bab783261db430f76"}, |     {file = "coverage-7.5.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fed7a72d54bd52f4aeb6c6e951f363903bd7d70bc1cad64dd1f087980d309ab9"}, | ||||||
|     {file = "coverage-7.4.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:41c9c5f3de16b903b610d09650e5e27adbfa7f500302718c9ffd1c12cf9d6818"}, |     {file = "coverage-7.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cbe6581fcff7c8e262eb574244f81f5faaea539e712a058e6707a9d272fe5b64"}, | ||||||
|     {file = "coverage-7.4.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d898fe162d26929b5960e4e138651f7427048e72c853607f2b200909794ed978"}, |     {file = "coverage-7.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad97ec0da94b378e593ef532b980c15e377df9b9608c7c6da3506953182398af"}, | ||||||
|     {file = "coverage-7.4.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ea79bb50e805cd6ac058dfa3b5c8f6c040cb87fe83de10845857f5535d1db70"}, |     {file = "coverage-7.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd4bacd62aa2f1a1627352fe68885d6ee694bdaebb16038b6e680f2924a9b2cc"}, | ||||||
|     {file = "coverage-7.4.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce4b94265ca988c3f8e479e741693d143026632672e3ff924f25fab50518dd51"}, |     {file = "coverage-7.5.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:adf032b6c105881f9d77fa17d9eebe0ad1f9bfb2ad25777811f97c5362aa07f2"}, | ||||||
|     {file = "coverage-7.4.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:00838a35b882694afda09f85e469c96367daa3f3f2b097d846a7216993d37f4c"}, |     {file = "coverage-7.5.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4ba01d9ba112b55bfa4b24808ec431197bb34f09f66f7cb4fd0258ff9d3711b1"}, | ||||||
|     {file = "coverage-7.4.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:fdfafb32984684eb03c2d83e1e51f64f0906b11e64482df3c5db936ce3839d48"}, |     {file = "coverage-7.5.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:f0bfe42523893c188e9616d853c47685e1c575fe25f737adf473d0405dcfa7eb"}, | ||||||
|     {file = "coverage-7.4.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:69eb372f7e2ece89f14751fbcbe470295d73ed41ecd37ca36ed2eb47512a6ab9"}, |     {file = "coverage-7.5.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a9a7ef30a1b02547c1b23fa9a5564f03c9982fc71eb2ecb7f98c96d7a0db5cf2"}, | ||||||
|     {file = "coverage-7.4.4-cp312-cp312-win32.whl", hash = "sha256:137eb07173141545e07403cca94ab625cc1cc6bc4c1e97b6e3846270e7e1fea0"}, |     {file = "coverage-7.5.0-cp312-cp312-win32.whl", hash = "sha256:3c2b77f295edb9fcdb6a250f83e6481c679335ca7e6e4a955e4290350f2d22a4"}, | ||||||
|     {file = "coverage-7.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:d71eec7d83298f1af3326ce0ff1d0ea83c7cb98f72b577097f9083b20bdaf05e"}, |     {file = "coverage-7.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:427e1e627b0963ac02d7c8730ca6d935df10280d230508c0ba059505e9233475"}, | ||||||
|     {file = "coverage-7.4.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d5ae728ff3b5401cc320d792866987e7e7e880e6ebd24433b70a33b643bb0384"}, |     {file = "coverage-7.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9dd88fce54abbdbf4c42fb1fea0e498973d07816f24c0e27a1ecaf91883ce69e"}, | ||||||
|     {file = "coverage-7.4.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cc4f1358cb0c78edef3ed237ef2c86056206bb8d9140e73b6b89fbcfcbdd40e1"}, |     {file = "coverage-7.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a898c11dca8f8c97b467138004a30133974aacd572818c383596f8d5b2eb04a9"}, | ||||||
|     {file = "coverage-7.4.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8130a2aa2acb8788e0b56938786c33c7c98562697bf9f4c7d6e8e5e3a0501e4a"}, |     {file = "coverage-7.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07dfdd492d645eea1bd70fb1d6febdcf47db178b0d99161d8e4eed18e7f62fe7"}, | ||||||
|     {file = "coverage-7.4.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf271892d13e43bc2b51e6908ec9a6a5094a4df1d8af0bfc360088ee6c684409"}, |     {file = "coverage-7.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3d117890b6eee85887b1eed41eefe2e598ad6e40523d9f94c4c4b213258e4a4"}, | ||||||
|     {file = "coverage-7.4.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a4cdc86d54b5da0df6d3d3a2f0b710949286094c3a6700c21e9015932b81447e"}, |     {file = "coverage-7.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6afd2e84e7da40fe23ca588379f815fb6dbbb1b757c883935ed11647205111cb"}, | ||||||
|     {file = "coverage-7.4.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ae71e7ddb7a413dd60052e90528f2f65270aad4b509563af6d03d53e979feafd"}, |     {file = "coverage-7.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a9960dd1891b2ddf13a7fe45339cd59ecee3abb6b8326d8b932d0c5da208104f"}, | ||||||
|     {file = "coverage-7.4.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:38dd60d7bf242c4ed5b38e094baf6401faa114fc09e9e6632374388a404f98e7"}, |     {file = "coverage-7.5.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ced268e82af993d7801a9db2dbc1d2322e786c5dc76295d8e89473d46c6b84d4"}, | ||||||
|     {file = "coverage-7.4.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:aa5b1c1bfc28384f1f53b69a023d789f72b2e0ab1b3787aae16992a7ca21056c"}, |     {file = "coverage-7.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e7c211f25777746d468d76f11719e64acb40eed410d81c26cefac641975beb88"}, | ||||||
|     {file = "coverage-7.4.4-cp38-cp38-win32.whl", hash = "sha256:dfa8fe35a0bb90382837b238fff375de15f0dcdb9ae68ff85f7a63649c98527e"}, |     {file = "coverage-7.5.0-cp38-cp38-win32.whl", hash = "sha256:262fffc1f6c1a26125d5d573e1ec379285a3723363f3bd9c83923c9593a2ac25"}, | ||||||
|     {file = "coverage-7.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:b2991665420a803495e0b90a79233c1433d6ed77ef282e8e152a324bbbc5e0c8"}, |     {file = "coverage-7.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:eed462b4541c540d63ab57b3fc69e7d8c84d5957668854ee4e408b50e92ce26a"}, | ||||||
|     {file = "coverage-7.4.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3b799445b9f7ee8bf299cfaed6f5b226c0037b74886a4e11515e569b36fe310d"}, |     {file = "coverage-7.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d0194d654e360b3e6cc9b774e83235bae6b9b2cac3be09040880bb0e8a88f4a1"}, | ||||||
|     {file = "coverage-7.4.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b4d33f418f46362995f1e9d4f3a35a1b6322cb959c31d88ae56b0298e1c22357"}, |     {file = "coverage-7.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:33c020d3322662e74bc507fb11488773a96894aa82a622c35a5a28673c0c26f5"}, | ||||||
|     {file = "coverage-7.4.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aadacf9a2f407a4688d700e4ebab33a7e2e408f2ca04dbf4aef17585389eff3e"}, |     {file = "coverage-7.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cbdf2cae14a06827bec50bd58e49249452d211d9caddd8bd80e35b53cb04631"}, | ||||||
|     {file = "coverage-7.4.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c95949560050d04d46b919301826525597f07b33beba6187d04fa64d47ac82e"}, |     {file = "coverage-7.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3235d7c781232e525b0761730e052388a01548bd7f67d0067a253887c6e8df46"}, | ||||||
|     {file = "coverage-7.4.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff7687ca3d7028d8a5f0ebae95a6e4827c5616b31a4ee1192bdfde697db110d4"}, |     {file = "coverage-7.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2de4e546f0ec4b2787d625e0b16b78e99c3e21bc1722b4977c0dddf11ca84e"}, | ||||||
|     {file = "coverage-7.4.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5fc1de20b2d4a061b3df27ab9b7c7111e9a710f10dc2b84d33a4ab25065994ec"}, |     {file = "coverage-7.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4d0e206259b73af35c4ec1319fd04003776e11e859936658cb6ceffdeba0f5be"}, | ||||||
|     {file = "coverage-7.4.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c74880fc64d4958159fbd537a091d2a585448a8f8508bf248d72112723974cbd"}, |     {file = "coverage-7.5.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2055c4fb9a6ff624253d432aa471a37202cd8f458c033d6d989be4499aed037b"}, | ||||||
|     {file = "coverage-7.4.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:742a76a12aa45b44d236815d282b03cfb1de3b4323f3e4ec933acfae08e54ade"}, |     {file = "coverage-7.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:075299460948cd12722a970c7eae43d25d37989da682997687b34ae6b87c0ef0"}, | ||||||
|     {file = "coverage-7.4.4-cp39-cp39-win32.whl", hash = "sha256:d89d7b2974cae412400e88f35d86af72208e1ede1a541954af5d944a8ba46c57"}, |     {file = "coverage-7.5.0-cp39-cp39-win32.whl", hash = "sha256:280132aada3bc2f0fac939a5771db4fbb84f245cb35b94fae4994d4c1f80dae7"}, | ||||||
|     {file = "coverage-7.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:9ca28a302acb19b6af89e90f33ee3e1906961f94b54ea37de6737b7ca9d8827c"}, |     {file = "coverage-7.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:c58536f6892559e030e6924896a44098bc1290663ea12532c78cef71d0df8493"}, | ||||||
|     {file = "coverage-7.4.4-pp38.pp39.pp310-none-any.whl", hash = "sha256:b2c5edc4ac10a7ef6605a966c58929ec6c1bd0917fb8c15cb3363f65aa40e677"}, |     {file = "coverage-7.5.0-pp38.pp39.pp310-none-any.whl", hash = "sha256:2b57780b51084d5223eee7b59f0d4911c31c16ee5aa12737c7a02455829ff067"}, | ||||||
|     {file = "coverage-7.4.4.tar.gz", hash = "sha256:c901df83d097649e257e803be22592aedfd5182f07b3cc87d640bbb9afd50f49"}, |     {file = "coverage-7.5.0.tar.gz", hash = "sha256:cf62d17310f34084c59c01e027259076479128d11e4661bb6c9acb38c5e19bb8"}, | ||||||
| ] | ] | ||||||
|  |  | ||||||
| [package.extras] | [package.extras] | ||||||
| @ -1470,13 +1470,13 @@ tornado = ">=5.0.0,<7.0.0" | |||||||
|  |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "freezegun" | name = "freezegun" | ||||||
| version = "1.4.0" | version = "1.5.0" | ||||||
| description = "Let your Python tests travel through time" | description = "Let your Python tests travel through time" | ||||||
| optional = false | optional = false | ||||||
| python-versions = ">=3.7" | python-versions = ">=3.7" | ||||||
| files = [ | files = [ | ||||||
|     {file = "freezegun-1.4.0-py3-none-any.whl", hash = "sha256:55e0fc3c84ebf0a96a5aa23ff8b53d70246479e9a68863f1fcac5a3e52f19dd6"}, |     {file = "freezegun-1.5.0-py3-none-any.whl", hash = "sha256:ec3f4ba030e34eb6cf7e1e257308aee2c60c3d038ff35996d7475760c9ff3719"}, | ||||||
|     {file = "freezegun-1.4.0.tar.gz", hash = "sha256:10939b0ba0ff5adaecf3b06a5c2f73071d9678e507c5eaedb23c761d56ac774b"}, |     {file = "freezegun-1.5.0.tar.gz", hash = "sha256:200a64359b363aa3653d8aac289584078386c7c3da77339d257e46a01fb5c77c"}, | ||||||
| ] | ] | ||||||
|  |  | ||||||
| [package.dependencies] | [package.dependencies] | ||||||
| @ -2868,19 +2868,19 @@ files = [ | |||||||
|  |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "pydantic" | name = "pydantic" | ||||||
| version = "2.7.0" | version = "2.7.1" | ||||||
| description = "Data validation using Python type hints" | description = "Data validation using Python type hints" | ||||||
| optional = false | optional = false | ||||||
| python-versions = ">=3.8" | python-versions = ">=3.8" | ||||||
| files = [ | files = [ | ||||||
|     {file = "pydantic-2.7.0-py3-none-any.whl", hash = "sha256:9dee74a271705f14f9a1567671d144a851c675b072736f0a7b2608fd9e495352"}, |     {file = "pydantic-2.7.1-py3-none-any.whl", hash = "sha256:e029badca45266732a9a79898a15ae2e8b14840b1eabbb25844be28f0b33f3d5"}, | ||||||
|     {file = "pydantic-2.7.0.tar.gz", hash = "sha256:b5ecdd42262ca2462e2624793551e80911a1e989f462910bb81aef974b4bb383"}, |     {file = "pydantic-2.7.1.tar.gz", hash = "sha256:e9dbb5eada8abe4d9ae5f46b9939aead650cd2b68f249bb3a8139dbe125803cc"}, | ||||||
| ] | ] | ||||||
|  |  | ||||||
| [package.dependencies] | [package.dependencies] | ||||||
| annotated-types = ">=0.4.0" | annotated-types = ">=0.4.0" | ||||||
| email-validator = {version = ">=2.0.0", optional = true, markers = "extra == \"email\""} | email-validator = {version = ">=2.0.0", optional = true, markers = "extra == \"email\""} | ||||||
| pydantic-core = "2.18.1" | pydantic-core = "2.18.2" | ||||||
| typing-extensions = ">=4.6.1" | typing-extensions = ">=4.6.1" | ||||||
|  |  | ||||||
| [package.extras] | [package.extras] | ||||||
| @ -2888,90 +2888,90 @@ email = ["email-validator (>=2.0.0)"] | |||||||
|  |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "pydantic-core" | name = "pydantic-core" | ||||||
| version = "2.18.1" | version = "2.18.2" | ||||||
| description = "Core functionality for Pydantic validation and serialization" | description = "Core functionality for Pydantic validation and serialization" | ||||||
| optional = false | optional = false | ||||||
| python-versions = ">=3.8" | python-versions = ">=3.8" | ||||||
| files = [ | files = [ | ||||||
|     {file = "pydantic_core-2.18.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:ee9cf33e7fe14243f5ca6977658eb7d1042caaa66847daacbd2117adb258b226"}, |     {file = "pydantic_core-2.18.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:9e08e867b306f525802df7cd16c44ff5ebbe747ff0ca6cf3fde7f36c05a59a81"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6b7bbb97d82659ac8b37450c60ff2e9f97e4eb0f8a8a3645a5568b9334b08b50"}, |     {file = "pydantic_core-2.18.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f0a21cbaa69900cbe1a2e7cad2aa74ac3cf21b10c3efb0fa0b80305274c0e8a2"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df4249b579e75094f7e9bb4bd28231acf55e308bf686b952f43100a5a0be394c"}, |     {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0680b1f1f11fda801397de52c36ce38ef1c1dc841a0927a94f226dea29c3ae3d"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d0491006a6ad20507aec2be72e7831a42efc93193d2402018007ff827dc62926"}, |     {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:95b9d5e72481d3780ba3442eac863eae92ae43a5f3adb5b4d0a1de89d42bb250"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ae80f72bb7a3e397ab37b53a2b49c62cc5496412e71bc4f1277620a7ce3f52b"}, |     {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fcf5cd9c4b655ad666ca332b9a081112cd7a58a8b5a6ca7a3104bc950f2038"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:58aca931bef83217fca7a390e0486ae327c4af9c3e941adb75f8772f8eeb03a1"}, |     {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b5155ff768083cb1d62f3e143b49a8a3432e6789a3abee8acd005c3c7af1c74"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1be91ad664fc9245404a789d60cba1e91c26b1454ba136d2a1bf0c2ac0c0505a"}, |     {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:553ef617b6836fc7e4df130bb851e32fe357ce36336d897fd6646d6058d980af"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:667880321e916a8920ef49f5d50e7983792cf59f3b6079f3c9dac2b88a311d17"}, |     {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b89ed9eb7d616ef5714e5590e6cf7f23b02d0d539767d33561e3675d6f9e3857"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f7054fdc556f5421f01e39cbb767d5ec5c1139ea98c3e5b350e02e62201740c7"}, |     {file = "pydantic_core-2.18.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:75f7e9488238e920ab6204399ded280dc4c307d034f3924cd7f90a38b1829563"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:030e4f9516f9947f38179249778709a460a3adb516bf39b5eb9066fcfe43d0e6"}, |     {file = "pydantic_core-2.18.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ef26c9e94a8c04a1b2924149a9cb081836913818e55681722d7f29af88fe7b38"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp310-none-win32.whl", hash = "sha256:2e91711e36e229978d92642bfc3546333a9127ecebb3f2761372e096395fc649"}, |     {file = "pydantic_core-2.18.2-cp310-none-win32.whl", hash = "sha256:182245ff6b0039e82b6bb585ed55a64d7c81c560715d1bad0cbad6dfa07b4027"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp310-none-win_amd64.whl", hash = "sha256:9a29726f91c6cb390b3c2338f0df5cd3e216ad7a938762d11c994bb37552edb0"}, |     {file = "pydantic_core-2.18.2-cp310-none-win_amd64.whl", hash = "sha256:e23ec367a948b6d812301afc1b13f8094ab7b2c280af66ef450efc357d2ae543"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:9ece8a49696669d483d206b4474c367852c44815fca23ac4e48b72b339807f80"}, |     {file = "pydantic_core-2.18.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:219da3f096d50a157f33645a1cf31c0ad1fe829a92181dd1311022f986e5fbe3"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7a5d83efc109ceddb99abd2c1316298ced2adb4570410defe766851a804fcd5b"}, |     {file = "pydantic_core-2.18.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cc1cfd88a64e012b74e94cd00bbe0f9c6df57049c97f02bb07d39e9c852e19a4"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f7973c381283783cd1043a8c8f61ea5ce7a3a58b0369f0ee0ee975eaf2f2a1b"}, |     {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05b7133a6e6aeb8df37d6f413f7705a37ab4031597f64ab56384c94d98fa0e90"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:54c7375c62190a7845091f521add19b0f026bcf6ae674bdb89f296972272e86d"}, |     {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:224c421235f6102e8737032483f43c1a8cfb1d2f45740c44166219599358c2cd"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd63cec4e26e790b70544ae5cc48d11b515b09e05fdd5eff12e3195f54b8a586"}, |     {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b14d82cdb934e99dda6d9d60dc84a24379820176cc4a0d123f88df319ae9c150"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:561cf62c8a3498406495cfc49eee086ed2bb186d08bcc65812b75fda42c38294"}, |     {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2728b01246a3bba6de144f9e3115b532ee44bd6cf39795194fb75491824a1413"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68717c38a68e37af87c4da20e08f3e27d7e4212e99e96c3d875fbf3f4812abfc"}, |     {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:470b94480bb5ee929f5acba6995251ada5e059a5ef3e0dfc63cca287283ebfa6"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2d5728e93d28a3c63ee513d9ffbac9c5989de8c76e049dbcb5bfe4b923a9739d"}, |     {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:997abc4df705d1295a42f95b4eec4950a37ad8ae46d913caeee117b6b198811c"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f0f17814c505f07806e22b28856c59ac80cee7dd0fbb152aed273e116378f519"}, |     {file = "pydantic_core-2.18.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:75250dbc5290e3f1a0f4618db35e51a165186f9034eff158f3d490b3fed9f8a0"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d816f44a51ba5175394bc6c7879ca0bd2be560b2c9e9f3411ef3a4cbe644c2e9"}, |     {file = "pydantic_core-2.18.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4456f2dca97c425231d7315737d45239b2b51a50dc2b6f0c2bb181fce6207664"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp311-none-win32.whl", hash = "sha256:09f03dfc0ef8c22622eaa8608caa4a1e189cfb83ce847045eca34f690895eccb"}, |     {file = "pydantic_core-2.18.2-cp311-none-win32.whl", hash = "sha256:269322dcc3d8bdb69f054681edff86276b2ff972447863cf34c8b860f5188e2e"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp311-none-win_amd64.whl", hash = "sha256:27f1009dc292f3b7ca77feb3571c537276b9aad5dd4efb471ac88a8bd09024e9"}, |     {file = "pydantic_core-2.18.2-cp311-none-win_amd64.whl", hash = "sha256:800d60565aec896f25bc3cfa56d2277d52d5182af08162f7954f938c06dc4ee3"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp311-none-win_arm64.whl", hash = "sha256:48dd883db92e92519201f2b01cafa881e5f7125666141a49ffba8b9facc072b0"}, |     {file = "pydantic_core-2.18.2-cp311-none-win_arm64.whl", hash = "sha256:1404c69d6a676245199767ba4f633cce5f4ad4181f9d0ccb0577e1f66cf4c46d"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:b6b0e4912030c6f28bcb72b9ebe4989d6dc2eebcd2a9cdc35fefc38052dd4fe8"}, |     {file = "pydantic_core-2.18.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:fb2bd7be70c0fe4dfd32c951bc813d9fe6ebcbfdd15a07527796c8204bd36242"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f3202a429fe825b699c57892d4371c74cc3456d8d71b7f35d6028c96dfecad31"}, |     {file = "pydantic_core-2.18.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6132dd3bd52838acddca05a72aafb6eab6536aa145e923bb50f45e78b7251043"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3982b0a32d0a88b3907e4b0dc36809fda477f0757c59a505d4e9b455f384b8b"}, |     {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d904828195733c183d20a54230c0df0eb46ec746ea1a666730787353e87182"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:25595ac311f20e5324d1941909b0d12933f1fd2171075fcff763e90f43e92a0d"}, |     {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c9bd70772c720142be1020eac55f8143a34ec9f82d75a8e7a07852023e46617f"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:14fe73881cf8e4cbdaded8ca0aa671635b597e42447fec7060d0868b52d074e6"}, |     {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2b8ed04b3582771764538f7ee7001b02e1170223cf9b75dff0bc698fadb00cf3"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca976884ce34070799e4dfc6fbd68cb1d181db1eefe4a3a94798ddfb34b8867f"}, |     {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e6dac87ddb34aaec85f873d737e9d06a3555a1cc1a8e0c44b7f8d5daeb89d86f"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:684d840d2c9ec5de9cb397fcb3f36d5ebb6fa0d94734f9886032dd796c1ead06"}, |     {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ca4ae5a27ad7a4ee5170aebce1574b375de390bc01284f87b18d43a3984df72"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:54764c083bbe0264f0f746cefcded6cb08fbbaaf1ad1d78fb8a4c30cff999a90"}, |     {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:886eec03591b7cf058467a70a87733b35f44707bd86cf64a615584fd72488b7c"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:201713f2f462e5c015b343e86e68bd8a530a4f76609b33d8f0ec65d2b921712a"}, |     {file = "pydantic_core-2.18.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ca7b0c1f1c983e064caa85f3792dd2fe3526b3505378874afa84baf662e12241"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fd1a9edb9dd9d79fbeac1ea1f9a8dd527a6113b18d2e9bcc0d541d308dae639b"}, |     {file = "pydantic_core-2.18.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4b4356d3538c3649337df4074e81b85f0616b79731fe22dd11b99499b2ebbdf3"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp312-none-win32.whl", hash = "sha256:d5e6b7155b8197b329dc787356cfd2684c9d6a6b1a197f6bbf45f5555a98d411"}, |     {file = "pydantic_core-2.18.2-cp312-none-win32.whl", hash = "sha256:8b172601454f2d7701121bbec3425dd71efcb787a027edf49724c9cefc14c038"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp312-none-win_amd64.whl", hash = "sha256:9376d83d686ec62e8b19c0ac3bf8d28d8a5981d0df290196fb6ef24d8a26f0d6"}, |     {file = "pydantic_core-2.18.2-cp312-none-win_amd64.whl", hash = "sha256:b1bd7e47b1558ea872bd16c8502c414f9e90dcf12f1395129d7bb42a09a95438"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp312-none-win_arm64.whl", hash = "sha256:c562b49c96906b4029b5685075fe1ebd3b5cc2601dfa0b9e16c2c09d6cbce048"}, |     {file = "pydantic_core-2.18.2-cp312-none-win_arm64.whl", hash = "sha256:98758d627ff397e752bc339272c14c98199c613f922d4a384ddc07526c86a2ec"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:3e352f0191d99fe617371096845070dee295444979efb8f27ad941227de6ad09"}, |     {file = "pydantic_core-2.18.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:9fdad8e35f278b2c3eb77cbdc5c0a49dada440657bf738d6905ce106dc1de439"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c0295d52b012cbe0d3059b1dba99159c3be55e632aae1999ab74ae2bd86a33d7"}, |     {file = "pydantic_core-2.18.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1d90c3265ae107f91a4f279f4d6f6f1d4907ac76c6868b27dc7fb33688cfb347"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56823a92075780582d1ffd4489a2e61d56fd3ebb4b40b713d63f96dd92d28144"}, |     {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:390193c770399861d8df9670fb0d1874f330c79caaca4642332df7c682bf6b91"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dd3f79e17b56741b5177bcc36307750d50ea0698df6aa82f69c7db32d968c1c2"}, |     {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:82d5d4d78e4448683cb467897fe24e2b74bb7b973a541ea1dcfec1d3cbce39fb"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38a5024de321d672a132b1834a66eeb7931959c59964b777e8f32dbe9523f6b1"}, |     {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4774f3184d2ef3e14e8693194f661dea5a4d6ca4e3dc8e39786d33a94865cefd"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2ce426ee691319d4767748c8e0895cfc56593d725594e415f274059bcf3cb76"}, |     {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d4d938ec0adf5167cb335acb25a4ee69a8107e4984f8fbd2e897021d9e4ca21b"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2adaeea59849ec0939af5c5d476935f2bab4b7f0335b0110f0f069a41024278e"}, |     {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0e8b1be28239fc64a88a8189d1df7fad8be8c1ae47fcc33e43d4be15f99cc70"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9b6431559676a1079eac0f52d6d0721fb8e3c5ba43c37bc537c8c83724031feb"}, |     {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:868649da93e5a3d5eacc2b5b3b9235c98ccdbfd443832f31e075f54419e1b96b"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:85233abb44bc18d16e72dc05bf13848a36f363f83757541f1a97db2f8d58cfd9"}, |     {file = "pydantic_core-2.18.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:78363590ef93d5d226ba21a90a03ea89a20738ee5b7da83d771d283fd8a56761"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:641a018af4fe48be57a2b3d7a1f0f5dbca07c1d00951d3d7463f0ac9dac66622"}, |     {file = "pydantic_core-2.18.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:852e966fbd035a6468fc0a3496589b45e2208ec7ca95c26470a54daed82a0788"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp38-none-win32.whl", hash = "sha256:63d7523cd95d2fde0d28dc42968ac731b5bb1e516cc56b93a50ab293f4daeaad"}, |     {file = "pydantic_core-2.18.2-cp38-none-win32.whl", hash = "sha256:6a46e22a707e7ad4484ac9ee9f290f9d501df45954184e23fc29408dfad61350"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp38-none-win_amd64.whl", hash = "sha256:907a4d7720abfcb1c81619863efd47c8a85d26a257a2dbebdb87c3b847df0278"}, |     {file = "pydantic_core-2.18.2-cp38-none-win_amd64.whl", hash = "sha256:d91cb5ea8b11607cc757675051f61b3d93f15eca3cefb3e6c704a5d6e8440f4e"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:aad17e462f42ddbef5984d70c40bfc4146c322a2da79715932cd8976317054de"}, |     {file = "pydantic_core-2.18.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:ae0a8a797a5e56c053610fa7be147993fe50960fa43609ff2a9552b0e07013e8"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:94b9769ba435b598b547c762184bcfc4783d0d4c7771b04a3b45775c3589ca44"}, |     {file = "pydantic_core-2.18.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:042473b6280246b1dbf530559246f6842b56119c2926d1e52b631bdc46075f2a"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:80e0e57cc704a52fb1b48f16d5b2c8818da087dbee6f98d9bf19546930dc64b5"}, |     {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a388a77e629b9ec814c1b1e6b3b595fe521d2cdc625fcca26fbc2d44c816804"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:76b86e24039c35280ceee6dce7e62945eb93a5175d43689ba98360ab31eebc4a"}, |     {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e25add29b8f3b233ae90ccef2d902d0ae0432eb0d45370fe315d1a5cf231004b"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12a05db5013ec0ca4a32cc6433f53faa2a014ec364031408540ba858c2172bb0"}, |     {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f459a5ce8434614dfd39bbebf1041952ae01da6bed9855008cb33b875cb024c0"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:250ae39445cb5475e483a36b1061af1bc233de3e9ad0f4f76a71b66231b07f88"}, |     {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eff2de745698eb46eeb51193a9f41d67d834d50e424aef27df2fcdee1b153845"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a32204489259786a923e02990249c65b0f17235073149d0033efcebe80095570"}, |     {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8309f67285bdfe65c372ea3722b7a5642680f3dba538566340a9d36e920b5f0"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6395a4435fa26519fd96fdccb77e9d00ddae9dd6c742309bd0b5610609ad7fb2"}, |     {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f93a8a2e3938ff656a7c1bc57193b1319960ac015b6e87d76c76bf14fe0244b4"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2533ad2883f001efa72f3d0e733fb846710c3af6dcdd544fe5bf14fa5fe2d7db"}, |     {file = "pydantic_core-2.18.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:22057013c8c1e272eb8d0eebc796701167d8377441ec894a8fed1af64a0bf399"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b560b72ed4816aee52783c66854d96157fd8175631f01ef58e894cc57c84f0f6"}, |     {file = "pydantic_core-2.18.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cfeecd1ac6cc1fb2692c3d5110781c965aabd4ec5d32799773ca7b1456ac636b"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp39-none-win32.whl", hash = "sha256:582cf2cead97c9e382a7f4d3b744cf0ef1a6e815e44d3aa81af3ad98762f5a9b"}, |     {file = "pydantic_core-2.18.2-cp39-none-win32.whl", hash = "sha256:0d69b4c2f6bb3e130dba60d34c0845ba31b69babdd3f78f7c0c8fae5021a253e"}, | ||||||
|     {file = "pydantic_core-2.18.1-cp39-none-win_amd64.whl", hash = "sha256:ca71d501629d1fa50ea7fa3b08ba884fe10cefc559f5c6c8dfe9036c16e8ae89"}, |     {file = "pydantic_core-2.18.2-cp39-none-win_amd64.whl", hash = "sha256:d9319e499827271b09b4e411905b24a426b8fb69464dfa1696258f53a3334641"}, | ||||||
|     {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e178e5b66a06ec5bf51668ec0d4ac8cfb2bdcb553b2c207d58148340efd00143"}, |     {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a1874c6dd4113308bd0eb568418e6114b252afe44319ead2b4081e9b9521fe75"}, | ||||||
|     {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:72722ce529a76a4637a60be18bd789d8fb871e84472490ed7ddff62d5fed620d"}, |     {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:ccdd111c03bfd3666bd2472b674c6899550e09e9f298954cfc896ab92b5b0e6d"}, | ||||||
|     {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fe0c1ce5b129455e43f941f7a46f61f3d3861e571f2905d55cdbb8b5c6f5e2c"}, |     {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e18609ceaa6eed63753037fc06ebb16041d17d28199ae5aba0052c51449650a9"}, | ||||||
|     {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4284c621f06a72ce2cb55f74ea3150113d926a6eb78ab38340c08f770eb9b4d"}, |     {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e5c584d357c4e2baf0ff7baf44f4994be121e16a2c88918a5817331fc7599d7"}, | ||||||
|     {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a0c3e718f4e064efde68092d9d974e39572c14e56726ecfaeebbe6544521f47"}, |     {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:43f0f463cf89ace478de71a318b1b4f05ebc456a9b9300d027b4b57c1a2064fb"}, | ||||||
|     {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:2027493cc44c23b598cfaf200936110433d9caa84e2c6cf487a83999638a96ac"}, |     {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:e1b395e58b10b73b07b7cf740d728dd4ff9365ac46c18751bf8b3d8cca8f625a"}, | ||||||
|     {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:76909849d1a6bffa5a07742294f3fa1d357dc917cb1fe7b470afbc3a7579d539"}, |     {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:0098300eebb1c837271d3d1a2cd2911e7c11b396eac9661655ee524a7f10587b"}, | ||||||
|     {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ee7ccc7fb7e921d767f853b47814c3048c7de536663e82fbc37f5eb0d532224b"}, |     {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:36789b70d613fbac0a25bb07ab3d9dba4d2e38af609c020cf4d888d165ee0bf3"}, | ||||||
|     {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ee2794111c188548a4547eccc73a6a8527fe2af6cf25e1a4ebda2fd01cdd2e60"}, |     {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3f9a801e7c8f1ef8718da265bba008fa121243dfe37c1cea17840b0944dfd72c"}, | ||||||
|     {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a139fe9f298dc097349fb4f28c8b81cc7a202dbfba66af0e14be5cfca4ef7ce5"}, |     {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:3a6515ebc6e69d85502b4951d89131ca4e036078ea35533bb76327f8424531ce"}, | ||||||
|     {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d074b07a10c391fc5bbdcb37b2f16f20fcd9e51e10d01652ab298c0d07908ee2"}, |     {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20aca1e2298c56ececfd8ed159ae4dde2df0781988c97ef77d5c16ff4bd5b400"}, | ||||||
|     {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c69567ddbac186e8c0aadc1f324a60a564cfe25e43ef2ce81bcc4b8c3abffbae"}, |     {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:223ee893d77a310a0391dca6df00f70bbc2f36a71a895cecd9a0e762dc37b349"}, | ||||||
|     {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:baf1c7b78cddb5af00971ad5294a4583188bda1495b13760d9f03c9483bb6203"}, |     {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2334ce8c673ee93a1d6a65bd90327588387ba073c17e61bf19b4fd97d688d63c"}, | ||||||
|     {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:2684a94fdfd1b146ff10689c6e4e815f6a01141781c493b97342cdc5b06f4d5d"}, |     {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:cbca948f2d14b09d20268cda7b0367723d79063f26c4ffc523af9042cad95592"}, | ||||||
|     {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:73c1bc8a86a5c9e8721a088df234265317692d0b5cd9e86e975ce3bc3db62a59"}, |     {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:b3ef08e20ec49e02d5c6717a91bb5af9b20f1805583cb0adfe9ba2c6b505b5ae"}, | ||||||
|     {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:e60defc3c15defb70bb38dd605ff7e0fae5f6c9c7cbfe0ad7868582cb7e844a6"}, |     {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c6fdc8627910eed0c01aed6a390a252fe3ea6d472ee70fdde56273f198938374"}, | ||||||
|     {file = "pydantic_core-2.18.1.tar.gz", hash = "sha256:de9d3e8717560eb05e28739d1b35e4eac2e458553a52a301e51352a7ffc86a35"}, |     {file = "pydantic_core-2.18.2.tar.gz", hash = "sha256:2e29d20810dfc3043ee13ac7d9e25105799817683348823f305ab3f349b9386e"}, | ||||||
| ] | ] | ||||||
|  |  | ||||||
| [package.dependencies] | [package.dependencies] | ||||||
| @ -3527,28 +3527,28 @@ pyasn1 = ">=0.1.3" | |||||||
|  |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "ruff" | name = "ruff" | ||||||
| version = "0.4.0" | version = "0.4.1" | ||||||
| description = "An extremely fast Python linter and code formatter, written in Rust." | description = "An extremely fast Python linter and code formatter, written in Rust." | ||||||
| optional = false | optional = false | ||||||
| python-versions = ">=3.7" | python-versions = ">=3.7" | ||||||
| files = [ | files = [ | ||||||
|     {file = "ruff-0.4.0-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:70b8c620cf2212744eabd6d69c4f839f2be0d8880d27beaeb0adb6aa0b316aa8"}, |     {file = "ruff-0.4.1-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:2d9ef6231e3fbdc0b8c72404a1a0c46fd0dcea84efca83beb4681c318ea6a953"}, | ||||||
|     {file = "ruff-0.4.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:cfa3e3ff53be05a8c5570c1585ea1e089f6b399ca99fcb78598d4a8234f248db"}, |     {file = "ruff-0.4.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:9485f54a7189e6f7433e0058cf8581bee45c31a25cd69009d2a040d1bd4bfaef"}, | ||||||
|     {file = "ruff-0.4.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5616cca501d1d16b932b7e607d7e1fd1b8c8c51d6ee484b7940fc1adc5bea541"}, |     {file = "ruff-0.4.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2921ac03ce1383e360e8a95442ffb0d757a6a7ddd9a5be68561a671e0e5807e"}, | ||||||
|     {file = "ruff-0.4.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:46eff08dd480b5d9b540846159fe134d70e3c45a3c913c600047cbf7f0e4e308"}, |     {file = "ruff-0.4.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eec8d185fe193ad053eda3a6be23069e0c8ba8c5d20bc5ace6e3b9e37d246d3f"}, | ||||||
|     {file = "ruff-0.4.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2d546f511431fff2b17adcf7110f3b2c2c0c8d33b0e10e5fd27fd340bc617efc"}, |     {file = "ruff-0.4.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:baa27d9d72a94574d250f42b7640b3bd2edc4c58ac8ac2778a8c82374bb27984"}, | ||||||
|     {file = "ruff-0.4.0-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:c7b6b6b38e216036284c5779b6aa14acbf5664e3b5872533219cf93daf40ddfb"}, |     {file = "ruff-0.4.1-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:f1ee41580bff1a651339eb3337c20c12f4037f6110a36ae4a2d864c52e5ef954"}, | ||||||
|     {file = "ruff-0.4.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5e1cf8b064bb2a6b4922af7274fe2dffcb552d96ba716b2fbe5e2c970ed7de18"}, |     {file = "ruff-0.4.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0926cefb57fc5fced629603fbd1a23d458b25418681d96823992ba975f050c2b"}, | ||||||
|     {file = "ruff-0.4.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9911c9046b94253e1fa844c0192bb764b86866a881502dee324686474d498c17"}, |     {file = "ruff-0.4.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2c6e37f2e3cd74496a74af9a4fa67b547ab3ca137688c484749189bf3a686ceb"}, | ||||||
|     {file = "ruff-0.4.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ca7a971c8f1a0b6f5ff4a819c0d1c2619536530bbd5a289af725d8b2ef1013d"}, |     {file = "ruff-0.4.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efd703a5975ac1998c2cc5e9494e13b28f31e66c616b0a76e206de2562e0843c"}, | ||||||
|     {file = "ruff-0.4.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:752e0f77f421141dd470a0b1bed4fd8f763aebabe32c80ed3580f740ef4ba807"}, |     {file = "ruff-0.4.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:b92f03b4aa9fa23e1799b40f15f8b95cdc418782a567d6c43def65e1bbb7f1cf"}, | ||||||
|     {file = "ruff-0.4.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:84f2a5dd8f33964d826c5377e094f7ce11e55e432cd42d3bf64efe4384224a03"}, |     {file = "ruff-0.4.1-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:1c859f294f8633889e7d77de228b203eb0e9a03071b72b5989d89a0cf98ee262"}, | ||||||
|     {file = "ruff-0.4.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:0b20e7db4a672495320a8a18149b7febf4e4f97509a4657367144569ce0915fd"}, |     {file = "ruff-0.4.1-py3-none-musllinux_1_2_i686.whl", hash = "sha256:b34510141e393519a47f2d7b8216fec747ea1f2c81e85f076e9f2910588d4b64"}, | ||||||
|     {file = "ruff-0.4.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:0b0eddd339e24dc4f7719b1cde4967f6b6bc0ad948cc183711ba8910f14aeafe"}, |     {file = "ruff-0.4.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:6e68d248ed688b9d69fd4d18737edcbb79c98b251bba5a2b031ce2470224bdf9"}, | ||||||
|     {file = "ruff-0.4.0-py3-none-win32.whl", hash = "sha256:e70befd488271a2c28c80bd427f73d8855dd222fc549fa1e9967d287c5cfe781"}, |     {file = "ruff-0.4.1-py3-none-win32.whl", hash = "sha256:b90506f3d6d1f41f43f9b7b5ff845aeefabed6d2494307bc7b178360a8805252"}, | ||||||
|     {file = "ruff-0.4.0-py3-none-win_amd64.whl", hash = "sha256:8584b9361900997ccf8d7aaa4dc4ab43e258a853ca7189d98ac929dc9ee50875"}, |     {file = "ruff-0.4.1-py3-none-win_amd64.whl", hash = "sha256:c7d391e5936af5c9e252743d767c564670dc3889aff460d35c518ee76e4b26d7"}, | ||||||
|     {file = "ruff-0.4.0-py3-none-win_arm64.whl", hash = "sha256:fea4ec813c965e40af29ee627a1579ee1d827d77e81d54b85bdd7b42d1540cdd"}, |     {file = "ruff-0.4.1-py3-none-win_arm64.whl", hash = "sha256:a1eaf03d87e6a7cd5e661d36d8c6e874693cb9bc3049d110bc9a97b350680c43"}, | ||||||
|     {file = "ruff-0.4.0.tar.gz", hash = "sha256:7457308d9ebf00d6a1c9a26aa755e477787a636c90b823f91cd7d4bea9e89260"}, |     {file = "ruff-0.4.1.tar.gz", hash = "sha256:d592116cdbb65f8b1b7e2a2b48297eb865f6bdc20641879aa9d7b9c11d86db79"}, | ||||||
| ] | ] | ||||||
|  |  | ||||||
| [[package]] | [[package]] | ||||||
| @ -3587,13 +3587,13 @@ django-query = ["django (>=3.2)"] | |||||||
|  |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "selenium" | name = "selenium" | ||||||
| version = "4.19.0" | version = "4.20.0" | ||||||
| description = "" | description = "" | ||||||
| optional = false | optional = false | ||||||
| python-versions = ">=3.8" | python-versions = ">=3.8" | ||||||
| files = [ | files = [ | ||||||
|     {file = "selenium-4.19.0-py3-none-any.whl", hash = "sha256:5b4f49240d61e687a73f7968ae2517d403882aae3550eae2a229c745e619f1d9"}, |     {file = "selenium-4.20.0-py3-none-any.whl", hash = "sha256:b1d0c33b38ca27d0499183e48e1dd09ff26973481f5d3ef2983073813ae6588d"}, | ||||||
|     {file = "selenium-4.19.0.tar.gz", hash = "sha256:d9dfd6d0b021d71d0a48b865fe7746490ba82b81e9c87b212360006629eb1853"}, |     {file = "selenium-4.20.0.tar.gz", hash = "sha256:0bd564ee166980d419a8aaf4ac00289bc152afcf2eadca5efe8c8e36711853fd"}, | ||||||
| ] | ] | ||||||
|  |  | ||||||
| [package.dependencies] | [package.dependencies] | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| [tool.poetry] | [tool.poetry] | ||||||
| name = "authentik" | name = "authentik" | ||||||
| version = "2024.4.1" | version = "2024.4.0" | ||||||
| description = "" | description = "" | ||||||
| authors = ["authentik Team <hello@goauthentik.io>"] | authors = ["authentik Team <hello@goauthentik.io>"] | ||||||
|  |  | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| openapi: 3.0.3 | openapi: 3.0.3 | ||||||
| info: | info: | ||||||
|   title: authentik |   title: authentik | ||||||
|   version: 2024.4.1 |   version: 2024.4.0 | ||||||
|   description: Making authentication simple. |   description: Making authentication simple. | ||||||
|   contact: |   contact: | ||||||
|     email: hello@goauthentik.io |     email: hello@goauthentik.io | ||||||
|  | |||||||
							
								
								
									
										138
									
								
								tests/wdio/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										138
									
								
								tests/wdio/package-lock.json
									
									
									
										generated
									
									
									
								
							| @ -12,10 +12,10 @@ | |||||||
|                 "@trivago/prettier-plugin-sort-imports": "^4.3.0", |                 "@trivago/prettier-plugin-sort-imports": "^4.3.0", | ||||||
|                 "@typescript-eslint/eslint-plugin": "^7.5.0", |                 "@typescript-eslint/eslint-plugin": "^7.5.0", | ||||||
|                 "@typescript-eslint/parser": "^7.5.0", |                 "@typescript-eslint/parser": "^7.5.0", | ||||||
|                 "@wdio/cli": "^8.36.0", |                 "@wdio/cli": "^8.36.1", | ||||||
|                 "@wdio/local-runner": "^8.36.0", |                 "@wdio/local-runner": "^8.36.1", | ||||||
|                 "@wdio/mocha-framework": "^8.36.0", |                 "@wdio/mocha-framework": "^8.36.1", | ||||||
|                 "@wdio/spec-reporter": "^8.36.0", |                 "@wdio/spec-reporter": "^8.36.1", | ||||||
|                 "eslint": "^8.57.0", |                 "eslint": "^8.57.0", | ||||||
|                 "eslint-config-google": "^0.14.0", |                 "eslint-config-google": "^0.14.0", | ||||||
|                 "eslint-plugin-sonarjs": "^0.25.1", |                 "eslint-plugin-sonarjs": "^0.25.1", | ||||||
| @ -1189,19 +1189,19 @@ | |||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|         "node_modules/@wdio/cli": { |         "node_modules/@wdio/cli": { | ||||||
|             "version": "8.36.0", |             "version": "8.36.1", | ||||||
|             "resolved": "https://registry.npmjs.org/@wdio/cli/-/cli-8.36.0.tgz", |             "resolved": "https://registry.npmjs.org/@wdio/cli/-/cli-8.36.1.tgz", | ||||||
|             "integrity": "sha512-B8iEwz9DRzHquPihT74nKUzN9s+rCd1TkBp+JGmdgm7pJqiWTe4FORrzaxWjdiCO78jbYK9LgaMORpCcAzjwIA==", |             "integrity": "sha512-LZBZiwcvvv5P0HuRXt8IV09UiFT5dnDr1Ag5u2roJL2D7l8wDHHa70PXw9MmlbrnyFCUN3hO7FQVUi9MAsDbDQ==", | ||||||
|             "dev": true, |             "dev": true, | ||||||
|             "dependencies": { |             "dependencies": { | ||||||
|                 "@types/node": "^20.1.1", |                 "@types/node": "^20.1.1", | ||||||
|                 "@vitest/snapshot": "^1.2.1", |                 "@vitest/snapshot": "^1.2.1", | ||||||
|                 "@wdio/config": "8.36.0", |                 "@wdio/config": "8.36.1", | ||||||
|                 "@wdio/globals": "8.36.0", |                 "@wdio/globals": "8.36.1", | ||||||
|                 "@wdio/logger": "8.28.0", |                 "@wdio/logger": "8.28.0", | ||||||
|                 "@wdio/protocols": "8.32.0", |                 "@wdio/protocols": "8.32.0", | ||||||
|                 "@wdio/types": "8.36.0", |                 "@wdio/types": "8.36.1", | ||||||
|                 "@wdio/utils": "8.36.0", |                 "@wdio/utils": "8.36.1", | ||||||
|                 "async-exit-hook": "^2.0.1", |                 "async-exit-hook": "^2.0.1", | ||||||
|                 "chalk": "^5.2.0", |                 "chalk": "^5.2.0", | ||||||
|                 "chokidar": "^3.5.3", |                 "chokidar": "^3.5.3", | ||||||
| @ -1216,7 +1216,7 @@ | |||||||
|                 "lodash.union": "^4.6.0", |                 "lodash.union": "^4.6.0", | ||||||
|                 "read-pkg-up": "10.0.0", |                 "read-pkg-up": "10.0.0", | ||||||
|                 "recursive-readdir": "^2.2.3", |                 "recursive-readdir": "^2.2.3", | ||||||
|                 "webdriverio": "8.36.0", |                 "webdriverio": "8.36.1", | ||||||
|                 "yargs": "^17.7.2" |                 "yargs": "^17.7.2" | ||||||
|             }, |             }, | ||||||
|             "bin": { |             "bin": { | ||||||
| @ -1239,14 +1239,14 @@ | |||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|         "node_modules/@wdio/config": { |         "node_modules/@wdio/config": { | ||||||
|             "version": "8.36.0", |             "version": "8.36.1", | ||||||
|             "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.36.0.tgz", |             "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.36.1.tgz", | ||||||
|             "integrity": "sha512-sAbqnx/G+OsrMquIncFXjM4U0/E0ULMP0jDHZND75r0e1DYYCHmyacrvIHu3Jyxinl9f6+4XQdev6vqdTqPdNg==", |             "integrity": "sha512-yCENnym0CrYuLKMJ3fv00WkjCR8QpPqVohGBkq5FvZOZpVJEpoG86Q8l4HtyRnd6ggMTKCA1vTQ/myhbPmZmaQ==", | ||||||
|             "dev": true, |             "dev": true, | ||||||
|             "dependencies": { |             "dependencies": { | ||||||
|                 "@wdio/logger": "8.28.0", |                 "@wdio/logger": "8.28.0", | ||||||
|                 "@wdio/types": "8.36.0", |                 "@wdio/types": "8.36.1", | ||||||
|                 "@wdio/utils": "8.36.0", |                 "@wdio/utils": "8.36.1", | ||||||
|                 "decamelize": "^6.0.0", |                 "decamelize": "^6.0.0", | ||||||
|                 "deepmerge-ts": "^5.0.0", |                 "deepmerge-ts": "^5.0.0", | ||||||
|                 "glob": "^10.2.2", |                 "glob": "^10.2.2", | ||||||
| @ -1257,29 +1257,29 @@ | |||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|         "node_modules/@wdio/globals": { |         "node_modules/@wdio/globals": { | ||||||
|             "version": "8.36.0", |             "version": "8.36.1", | ||||||
|             "resolved": "https://registry.npmjs.org/@wdio/globals/-/globals-8.36.0.tgz", |             "resolved": "https://registry.npmjs.org/@wdio/globals/-/globals-8.36.1.tgz", | ||||||
|             "integrity": "sha512-vqMq1hR+iF0lqMNJpk9z+QB9l/QfL1DbvOfNhPtQ13NgctfNg42ffuhEObbzTLQN0MftcnPBu6O3pai79y8bUA==", |             "integrity": "sha512-Qpj6gZCRNxqdVkTwYyi4JdeYO4tLSUj3Ti6yxO0v9A4IRaKW1tS29KUcGgjL9CFSBKAOi2zRY8vvFz1u6ewxtQ==", | ||||||
|             "dev": true, |             "dev": true, | ||||||
|             "engines": { |             "engines": { | ||||||
|                 "node": "^16.13 || >=18" |                 "node": "^16.13 || >=18" | ||||||
|             }, |             }, | ||||||
|             "optionalDependencies": { |             "optionalDependencies": { | ||||||
|                 "expect-webdriverio": "^4.11.2", |                 "expect-webdriverio": "^4.11.2", | ||||||
|                 "webdriverio": "8.36.0" |                 "webdriverio": "8.36.1" | ||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|         "node_modules/@wdio/local-runner": { |         "node_modules/@wdio/local-runner": { | ||||||
|             "version": "8.36.0", |             "version": "8.36.1", | ||||||
|             "resolved": "https://registry.npmjs.org/@wdio/local-runner/-/local-runner-8.36.0.tgz", |             "resolved": "https://registry.npmjs.org/@wdio/local-runner/-/local-runner-8.36.1.tgz", | ||||||
|             "integrity": "sha512-MIzbWcXgRQGQQK4H5N39/JFoikOg5cu34l1U6rgw74D6hO79L4RwBg2Oo4TJJYgHUL/4RbVwyeLdb5WDTdluTQ==", |             "integrity": "sha512-FYsTzbNGRnrniOsLWrZO7+DLecAS9W75AIzFZQVQxruiDFkGmKY5OV6gsuvMlasaqAQXW1s+w29bqrLY4DxdEw==", | ||||||
|             "dev": true, |             "dev": true, | ||||||
|             "dependencies": { |             "dependencies": { | ||||||
|                 "@types/node": "^20.1.0", |                 "@types/node": "^20.1.0", | ||||||
|                 "@wdio/logger": "8.28.0", |                 "@wdio/logger": "8.28.0", | ||||||
|                 "@wdio/repl": "8.24.12", |                 "@wdio/repl": "8.24.12", | ||||||
|                 "@wdio/runner": "8.36.0", |                 "@wdio/runner": "8.36.1", | ||||||
|                 "@wdio/types": "8.36.0", |                 "@wdio/types": "8.36.1", | ||||||
|                 "async-exit-hook": "^2.0.1", |                 "async-exit-hook": "^2.0.1", | ||||||
|                 "split2": "^4.1.0", |                 "split2": "^4.1.0", | ||||||
|                 "stream-buffers": "^3.0.2" |                 "stream-buffers": "^3.0.2" | ||||||
| @ -1316,16 +1316,16 @@ | |||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|         "node_modules/@wdio/mocha-framework": { |         "node_modules/@wdio/mocha-framework": { | ||||||
|             "version": "8.36.0", |             "version": "8.36.1", | ||||||
|             "resolved": "https://registry.npmjs.org/@wdio/mocha-framework/-/mocha-framework-8.36.0.tgz", |             "resolved": "https://registry.npmjs.org/@wdio/mocha-framework/-/mocha-framework-8.36.1.tgz", | ||||||
|             "integrity": "sha512-5wZgh1apbSKTtgGwvd//L4kxdaXe30AQ3y9YeJD+OuAJUTYFRjTpMS13bO3pX518imQeB8HCm4aUc2kxs7J81Q==", |             "integrity": "sha512-G0h5AeneMNtoh9CcVQ82OCKj0axxUOEotEcInDu8V6UJbUywNJVL/bdTMKdaq5i84Hnc+s1LUKmLvN95F+lHGA==", | ||||||
|             "dev": true, |             "dev": true, | ||||||
|             "dependencies": { |             "dependencies": { | ||||||
|                 "@types/mocha": "^10.0.0", |                 "@types/mocha": "^10.0.0", | ||||||
|                 "@types/node": "^20.1.0", |                 "@types/node": "^20.1.0", | ||||||
|                 "@wdio/logger": "8.28.0", |                 "@wdio/logger": "8.28.0", | ||||||
|                 "@wdio/types": "8.36.0", |                 "@wdio/types": "8.36.1", | ||||||
|                 "@wdio/utils": "8.36.0", |                 "@wdio/utils": "8.36.1", | ||||||
|                 "mocha": "^10.0.0" |                 "mocha": "^10.0.0" | ||||||
|             }, |             }, | ||||||
|             "engines": { |             "engines": { | ||||||
| @ -1351,14 +1351,14 @@ | |||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|         "node_modules/@wdio/reporter": { |         "node_modules/@wdio/reporter": { | ||||||
|             "version": "8.36.0", |             "version": "8.36.1", | ||||||
|             "resolved": "https://registry.npmjs.org/@wdio/reporter/-/reporter-8.36.0.tgz", |             "resolved": "https://registry.npmjs.org/@wdio/reporter/-/reporter-8.36.1.tgz", | ||||||
|             "integrity": "sha512-pkAxqiMC+ljmksOKlK9g6y2NRvrdQiKtxD11rsMwJ6CH4kVDSGIvENw7u3kxg7Qwp0j1rCKf5Hp51npqKQgeDQ==", |             "integrity": "sha512-HcXr9XKq/6kPC9nexMRXIc/ft3Lvp0yCaW5tps01Axus9wbi5ysLHi2z5sB84F2YdpM+aRf7Lac56xkc4Jldeg==", | ||||||
|             "dev": true, |             "dev": true, | ||||||
|             "dependencies": { |             "dependencies": { | ||||||
|                 "@types/node": "^20.1.0", |                 "@types/node": "^20.1.0", | ||||||
|                 "@wdio/logger": "8.28.0", |                 "@wdio/logger": "8.28.0", | ||||||
|                 "@wdio/types": "8.36.0", |                 "@wdio/types": "8.36.1", | ||||||
|                 "diff": "^5.0.0", |                 "diff": "^5.0.0", | ||||||
|                 "object-inspect": "^1.12.0" |                 "object-inspect": "^1.12.0" | ||||||
|             }, |             }, | ||||||
| @ -1367,35 +1367,35 @@ | |||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|         "node_modules/@wdio/runner": { |         "node_modules/@wdio/runner": { | ||||||
|             "version": "8.36.0", |             "version": "8.36.1", | ||||||
|             "resolved": "https://registry.npmjs.org/@wdio/runner/-/runner-8.36.0.tgz", |             "resolved": "https://registry.npmjs.org/@wdio/runner/-/runner-8.36.1.tgz", | ||||||
|             "integrity": "sha512-M2ZDL0gmR2VvVMchi3Pkonva6Gn6eFh6IwVCpT0np7zioaqOksy3IM7Aki8kPKKS88Osip5dAfoKIrY7JpHovA==", |             "integrity": "sha512-bLkxQ46MLEbzIf30adl2nyz8kxED/V0IjcQASm0VKfNmsG8LOf7iOIz+udOF4GkMoF++5JuONA5abUsyLvwatg==", | ||||||
|             "dev": true, |             "dev": true, | ||||||
|             "dependencies": { |             "dependencies": { | ||||||
|                 "@types/node": "^20.11.28", |                 "@types/node": "^20.11.28", | ||||||
|                 "@wdio/config": "8.36.0", |                 "@wdio/config": "8.36.1", | ||||||
|                 "@wdio/globals": "8.36.0", |                 "@wdio/globals": "8.36.1", | ||||||
|                 "@wdio/logger": "8.28.0", |                 "@wdio/logger": "8.28.0", | ||||||
|                 "@wdio/types": "8.36.0", |                 "@wdio/types": "8.36.1", | ||||||
|                 "@wdio/utils": "8.36.0", |                 "@wdio/utils": "8.36.1", | ||||||
|                 "deepmerge-ts": "^5.1.0", |                 "deepmerge-ts": "^5.1.0", | ||||||
|                 "expect-webdriverio": "^4.12.0", |                 "expect-webdriverio": "^4.12.0", | ||||||
|                 "gaze": "^1.1.3", |                 "gaze": "^1.1.3", | ||||||
|                 "webdriver": "8.36.0", |                 "webdriver": "8.36.1", | ||||||
|                 "webdriverio": "8.36.0" |                 "webdriverio": "8.36.1" | ||||||
|             }, |             }, | ||||||
|             "engines": { |             "engines": { | ||||||
|                 "node": "^16.13 || >=18" |                 "node": "^16.13 || >=18" | ||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|         "node_modules/@wdio/spec-reporter": { |         "node_modules/@wdio/spec-reporter": { | ||||||
|             "version": "8.36.0", |             "version": "8.36.1", | ||||||
|             "resolved": "https://registry.npmjs.org/@wdio/spec-reporter/-/spec-reporter-8.36.0.tgz", |             "resolved": "https://registry.npmjs.org/@wdio/spec-reporter/-/spec-reporter-8.36.1.tgz", | ||||||
|             "integrity": "sha512-GVOiWqVYvzoAo4/4hNVxvyVWVoHyEmAywYhkykyJGL05YpO0oDOZY2kINPePEX5Z+nIsXsiKPmtsGGqWsfQwTw==", |             "integrity": "sha512-VgAd8VQCfwKYz4A3BPDUYNIQxXhRSTaVNbmDzSlYfo5Jekygk7fz0LRFYBpJ69l7eQH0P5nzEyF92oW/rvE3VA==", | ||||||
|             "dev": true, |             "dev": true, | ||||||
|             "dependencies": { |             "dependencies": { | ||||||
|                 "@wdio/reporter": "8.36.0", |                 "@wdio/reporter": "8.36.1", | ||||||
|                 "@wdio/types": "8.36.0", |                 "@wdio/types": "8.36.1", | ||||||
|                 "chalk": "^5.1.2", |                 "chalk": "^5.1.2", | ||||||
|                 "easy-table": "^1.2.0", |                 "easy-table": "^1.2.0", | ||||||
|                 "pretty-ms": "^7.0.0" |                 "pretty-ms": "^7.0.0" | ||||||
| @ -1417,9 +1417,9 @@ | |||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|         "node_modules/@wdio/types": { |         "node_modules/@wdio/types": { | ||||||
|             "version": "8.36.0", |             "version": "8.36.1", | ||||||
|             "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.36.0.tgz", |             "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.36.1.tgz", | ||||||
|             "integrity": "sha512-0hw/PaJHqDrbIMvU08w3oMDGg89udSkqWF2hFlGAjOc20quRrhn0F1L+NhFpYdezeRKz5gpgTDIqaQs9RWKq1A==", |             "integrity": "sha512-kKtyJbypasKo/VQuJ6dTQQwFtHE9qoygjoCZjrQCLGraRSjOEiqZHPR0497wbeCvcgHIYyImbmcylqZNGUE0CQ==", | ||||||
|             "dev": true, |             "dev": true, | ||||||
|             "dependencies": { |             "dependencies": { | ||||||
|                 "@types/node": "^20.1.0" |                 "@types/node": "^20.1.0" | ||||||
| @ -1429,14 +1429,14 @@ | |||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|         "node_modules/@wdio/utils": { |         "node_modules/@wdio/utils": { | ||||||
|             "version": "8.36.0", |             "version": "8.36.1", | ||||||
|             "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.36.0.tgz", |             "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.36.1.tgz", | ||||||
|             "integrity": "sha512-3VAbavN206qkvm6lITtOtTgscFChax7shzqHjUNln+QWMRyELtT81iw32ux2ld+Bg3F60LAmhbGodu0lJH7k2w==", |             "integrity": "sha512-xmgPHU11/o9n2FeRmDFkPRC0okiwA1i2xOcR2c3aSpuk99XkAm9RaMn/6u9LFaqsCpgaVxazcYEGSceO7U4hZA==", | ||||||
|             "dev": true, |             "dev": true, | ||||||
|             "dependencies": { |             "dependencies": { | ||||||
|                 "@puppeteer/browsers": "^1.6.0", |                 "@puppeteer/browsers": "^1.6.0", | ||||||
|                 "@wdio/logger": "8.28.0", |                 "@wdio/logger": "8.28.0", | ||||||
|                 "@wdio/types": "8.36.0", |                 "@wdio/types": "8.36.1", | ||||||
|                 "decamelize": "^6.0.0", |                 "decamelize": "^6.0.0", | ||||||
|                 "deepmerge-ts": "^5.1.0", |                 "deepmerge-ts": "^5.1.0", | ||||||
|                 "edgedriver": "^5.3.5", |                 "edgedriver": "^5.3.5", | ||||||
| @ -8886,18 +8886,18 @@ | |||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|         "node_modules/webdriver": { |         "node_modules/webdriver": { | ||||||
|             "version": "8.36.0", |             "version": "8.36.1", | ||||||
|             "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-8.36.0.tgz", |             "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-8.36.1.tgz", | ||||||
|             "integrity": "sha512-6fmZI1+OCGbhuGMLBLvA7m9TJvHU1Cyzxqd8rGzIyb8hocR53yh/olfOL1BPcjU1NXmKuU1BePSGF+yiKajiEA==", |             "integrity": "sha512-547RivYCHStVqtiGQBBcABAkzJbPnAWsxpXGzmj5KL+TOM2JF41N2iQRtUxXqr0jme1Nzzye7WS7Y7iSnK6i1g==", | ||||||
|             "dev": true, |             "dev": true, | ||||||
|             "dependencies": { |             "dependencies": { | ||||||
|                 "@types/node": "^20.1.0", |                 "@types/node": "^20.1.0", | ||||||
|                 "@types/ws": "^8.5.3", |                 "@types/ws": "^8.5.3", | ||||||
|                 "@wdio/config": "8.36.0", |                 "@wdio/config": "8.36.1", | ||||||
|                 "@wdio/logger": "8.28.0", |                 "@wdio/logger": "8.28.0", | ||||||
|                 "@wdio/protocols": "8.32.0", |                 "@wdio/protocols": "8.32.0", | ||||||
|                 "@wdio/types": "8.36.0", |                 "@wdio/types": "8.36.1", | ||||||
|                 "@wdio/utils": "8.36.0", |                 "@wdio/utils": "8.36.1", | ||||||
|                 "deepmerge-ts": "^5.1.0", |                 "deepmerge-ts": "^5.1.0", | ||||||
|                 "got": "^12.6.1", |                 "got": "^12.6.1", | ||||||
|                 "ky": "^0.33.0", |                 "ky": "^0.33.0", | ||||||
| @ -8908,18 +8908,18 @@ | |||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|         "node_modules/webdriverio": { |         "node_modules/webdriverio": { | ||||||
|             "version": "8.36.0", |             "version": "8.36.1", | ||||||
|             "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-8.36.0.tgz", |             "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-8.36.1.tgz", | ||||||
|             "integrity": "sha512-4WnEI+OxslHpfSnDXuADaR6bL1M7QxBUEF1mTN56AroOCJelyPvt94yRhszwQnLcJJB2OLn49eUz8M4yBCB51w==", |             "integrity": "sha512-vzE09oFQeMbOYJ/75jZ13sDIljzC3HH7uoUJKAMAEtyrn/bu1F9Sg/4IDEsvQaRD3pz3ae6SkRld33lcQk6HJA==", | ||||||
|             "dev": true, |             "dev": true, | ||||||
|             "dependencies": { |             "dependencies": { | ||||||
|                 "@types/node": "^20.1.0", |                 "@types/node": "^20.1.0", | ||||||
|                 "@wdio/config": "8.36.0", |                 "@wdio/config": "8.36.1", | ||||||
|                 "@wdio/logger": "8.28.0", |                 "@wdio/logger": "8.28.0", | ||||||
|                 "@wdio/protocols": "8.32.0", |                 "@wdio/protocols": "8.32.0", | ||||||
|                 "@wdio/repl": "8.24.12", |                 "@wdio/repl": "8.24.12", | ||||||
|                 "@wdio/types": "8.36.0", |                 "@wdio/types": "8.36.1", | ||||||
|                 "@wdio/utils": "8.36.0", |                 "@wdio/utils": "8.36.1", | ||||||
|                 "archiver": "^7.0.0", |                 "archiver": "^7.0.0", | ||||||
|                 "aria-query": "^5.0.0", |                 "aria-query": "^5.0.0", | ||||||
|                 "css-shorthand-properties": "^1.1.1", |                 "css-shorthand-properties": "^1.1.1", | ||||||
| @ -8936,7 +8936,7 @@ | |||||||
|                 "resq": "^1.9.1", |                 "resq": "^1.9.1", | ||||||
|                 "rgb2hex": "0.2.5", |                 "rgb2hex": "0.2.5", | ||||||
|                 "serialize-error": "^11.0.1", |                 "serialize-error": "^11.0.1", | ||||||
|                 "webdriver": "8.36.0" |                 "webdriver": "8.36.1" | ||||||
|             }, |             }, | ||||||
|             "engines": { |             "engines": { | ||||||
|                 "node": "^16.13 || >=18" |                 "node": "^16.13 || >=18" | ||||||
|  | |||||||
| @ -6,10 +6,10 @@ | |||||||
|         "@trivago/prettier-plugin-sort-imports": "^4.3.0", |         "@trivago/prettier-plugin-sort-imports": "^4.3.0", | ||||||
|         "@typescript-eslint/eslint-plugin": "^7.5.0", |         "@typescript-eslint/eslint-plugin": "^7.5.0", | ||||||
|         "@typescript-eslint/parser": "^7.5.0", |         "@typescript-eslint/parser": "^7.5.0", | ||||||
|         "@wdio/cli": "^8.36.0", |         "@wdio/cli": "^8.36.1", | ||||||
|         "@wdio/local-runner": "^8.36.0", |         "@wdio/local-runner": "^8.36.1", | ||||||
|         "@wdio/mocha-framework": "^8.36.0", |         "@wdio/mocha-framework": "^8.36.1", | ||||||
|         "@wdio/spec-reporter": "^8.36.0", |         "@wdio/spec-reporter": "^8.36.1", | ||||||
|         "eslint": "^8.57.0", |         "eslint": "^8.57.0", | ||||||
|         "eslint-config-google": "^0.14.0", |         "eslint-config-google": "^0.14.0", | ||||||
|         "eslint-plugin-sonarjs": "^0.25.1", |         "eslint-plugin-sonarjs": "^0.25.1", | ||||||
|  | |||||||
							
								
								
									
										2402
									
								
								web/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2402
									
								
								web/package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -38,7 +38,7 @@ | |||||||
|         "@codemirror/theme-one-dark": "^6.1.2", |         "@codemirror/theme-one-dark": "^6.1.2", | ||||||
|         "@formatjs/intl-listformat": "^7.5.5", |         "@formatjs/intl-listformat": "^7.5.5", | ||||||
|         "@fortawesome/fontawesome-free": "^6.5.2", |         "@fortawesome/fontawesome-free": "^6.5.2", | ||||||
|         "@goauthentik/api": "^2024.2.3-1713441634", |         "@goauthentik/api": "^2024.4.0-1713978791", | ||||||
|         "@lit-labs/task": "^3.1.0", |         "@lit-labs/task": "^3.1.0", | ||||||
|         "@lit/context": "^1.1.1", |         "@lit/context": "^1.1.1", | ||||||
|         "@lit/localize": "^0.12.1", |         "@lit/localize": "^0.12.1", | ||||||
| @ -46,7 +46,7 @@ | |||||||
|         "@open-wc/lit-helpers": "^0.7.0", |         "@open-wc/lit-helpers": "^0.7.0", | ||||||
|         "@patternfly/elements": "^3.0.1", |         "@patternfly/elements": "^3.0.1", | ||||||
|         "@patternfly/patternfly": "^4.224.2", |         "@patternfly/patternfly": "^4.224.2", | ||||||
|         "@sentry/browser": "^7.111.0", |         "@sentry/browser": "^7.112.2", | ||||||
|         "@webcomponents/webcomponentsjs": "^2.8.0", |         "@webcomponents/webcomponentsjs": "^2.8.0", | ||||||
|         "base64-js": "^1.5.1", |         "base64-js": "^1.5.1", | ||||||
|         "chart.js": "^4.4.2", |         "chart.js": "^4.4.2", | ||||||
| @ -81,13 +81,13 @@ | |||||||
|         "@lit/localize-tools": "^0.7.2", |         "@lit/localize-tools": "^0.7.2", | ||||||
|         "@rollup/plugin-replace": "^5.0.5", |         "@rollup/plugin-replace": "^5.0.5", | ||||||
|         "@spotlightjs/spotlight": "^1.2.17", |         "@spotlightjs/spotlight": "^1.2.17", | ||||||
|         "@storybook/addon-essentials": "^8.0.8", |         "@storybook/addon-essentials": "^8.0.9", | ||||||
|         "@storybook/addon-links": "^8.0.8", |         "@storybook/addon-links": "^8.0.9", | ||||||
|         "@storybook/api": "^7.6.17", |         "@storybook/api": "^7.6.17", | ||||||
|         "@storybook/blocks": "^8.0.8", |         "@storybook/blocks": "^8.0.8", | ||||||
|         "@storybook/manager-api": "^8.0.8", |         "@storybook/manager-api": "^8.0.9", | ||||||
|         "@storybook/web-components": "^8.0.8", |         "@storybook/web-components": "^8.0.9", | ||||||
|         "@storybook/web-components-vite": "^8.0.8", |         "@storybook/web-components-vite": "^8.0.9", | ||||||
|         "@trivago/prettier-plugin-sort-imports": "^4.3.0", |         "@trivago/prettier-plugin-sort-imports": "^4.3.0", | ||||||
|         "@types/chart.js": "^2.9.41", |         "@types/chart.js": "^2.9.41", | ||||||
|         "@types/codemirror": "5.60.15", |         "@types/codemirror": "5.60.15", | ||||||
| @ -117,7 +117,7 @@ | |||||||
|         "react-dom": "^18.2.0", |         "react-dom": "^18.2.0", | ||||||
|         "rollup-plugin-modify": "^3.0.0", |         "rollup-plugin-modify": "^3.0.0", | ||||||
|         "rollup-plugin-postcss-lit": "^2.1.0", |         "rollup-plugin-postcss-lit": "^2.1.0", | ||||||
|         "storybook": "^8.0.8", |         "storybook": "^8.0.9", | ||||||
|         "storybook-addon-mock": "^5.0.0", |         "storybook-addon-mock": "^5.0.0", | ||||||
|         "ts-lit-plugin": "^2.0.2", |         "ts-lit-plugin": "^2.0.2", | ||||||
|         "tslib": "^2.6.2", |         "tslib": "^2.6.2", | ||||||
| @ -129,9 +129,9 @@ | |||||||
|         "@esbuild/darwin-arm64": "^0.20.1", |         "@esbuild/darwin-arm64": "^0.20.1", | ||||||
|         "@esbuild/linux-amd64": "^0.18.11", |         "@esbuild/linux-amd64": "^0.18.11", | ||||||
|         "@esbuild/linux-arm64": "^0.20.1", |         "@esbuild/linux-arm64": "^0.20.1", | ||||||
|         "@rollup/rollup-darwin-arm64": "4.14.3", |         "@rollup/rollup-darwin-arm64": "4.16.4", | ||||||
|         "@rollup/rollup-linux-arm64-gnu": "4.14.3", |         "@rollup/rollup-linux-arm64-gnu": "4.16.4", | ||||||
|         "@rollup/rollup-linux-x64-gnu": "4.14.3" |         "@rollup/rollup-linux-x64-gnu": "4.16.4" | ||||||
|     }, |     }, | ||||||
|     "engines": { |     "engines": { | ||||||
|         "node": ">=20" |         "node": ">=20" | ||||||
|  | |||||||
| @ -470,7 +470,7 @@ export class LDAPSourceForm extends BaseSourceForm<LDAPSource> { | |||||||
|                     > |                     > | ||||||
|                         <input |                         <input | ||||||
|                             type="text" |                             type="text" | ||||||
|                             value="${this.instance?.objectUniquenessField || "objectSid"}" |                             value="${this.instance?.objectUniquenessField || "entryDN"}" | ||||||
|                             class="pf-c-form-control" |                             class="pf-c-form-control" | ||||||
|                             required |                             required | ||||||
|                         /> |                         /> | ||||||
|  | |||||||
| @ -128,14 +128,6 @@ export class UserForm extends ModelForm<User, number> { | |||||||
|                                 "Service accounts should be used for machine-to-machine authentication or other automations.", |                                 "Service accounts should be used for machine-to-machine authentication or other automations.", | ||||||
|                             )}`, |                             )}`, | ||||||
|                         }, |                         }, | ||||||
|                         { |  | ||||||
|                             label: "Internal Service account", |  | ||||||
|                             value: UserTypeEnum.InternalServiceAccount, |  | ||||||
|                             disabled: true, |  | ||||||
|                             description: html`${msg( |  | ||||||
|                                 "Internal Service accounts are created and managed by authentik and cannot be created manually.", |  | ||||||
|                             )}`, |  | ||||||
|                         }, |  | ||||||
|                     ]} |                     ]} | ||||||
|                     .value=${this.instance?.type} |                     .value=${this.instance?.type} | ||||||
|                 > |                 > | ||||||
|  | |||||||
| @ -3,7 +3,7 @@ export const SUCCESS_CLASS = "pf-m-success"; | |||||||
| export const ERROR_CLASS = "pf-m-danger"; | export const ERROR_CLASS = "pf-m-danger"; | ||||||
| export const PROGRESS_CLASS = "pf-m-in-progress"; | export const PROGRESS_CLASS = "pf-m-in-progress"; | ||||||
| export const CURRENT_CLASS = "pf-m-current"; | export const CURRENT_CLASS = "pf-m-current"; | ||||||
| export const VERSION = "2024.4.1"; | export const VERSION = "2024.4.0"; | ||||||
| export const TITLE_DEFAULT = "authentik"; | export const TITLE_DEFAULT = "authentik"; | ||||||
| export const ROUTE_SEPARATOR = ";"; | export const ROUTE_SEPARATOR = ";"; | ||||||
|  |  | ||||||
|  | |||||||
| @ -187,9 +187,6 @@ input[type="date"]::-webkit-calendar-picker-indicator { | |||||||
| .pf-c-select__menu-item.pf-m-focus { | .pf-c-select__menu-item.pf-m-focus { | ||||||
|     --pf-c-select__menu-item--focus--BackgroundColor: var(--ak-dark-background-light-ish); |     --pf-c-select__menu-item--focus--BackgroundColor: var(--ak-dark-background-light-ish); | ||||||
| } | } | ||||||
| .pf-c-button:disabled { |  | ||||||
|     color: var(--ak-dark-background-lighter); |  | ||||||
| } |  | ||||||
| .pf-c-button.pf-m-plain:hover { | .pf-c-button.pf-m-plain:hover { | ||||||
|     color: var(--ak-dark-foreground); |     color: var(--ak-dark-foreground); | ||||||
| } | } | ||||||
|  | |||||||
| @ -18,7 +18,7 @@ export function me(): Promise<SessionUser> { | |||||||
|                 if (!user.user.settings || !("locale" in user.user.settings)) { |                 if (!user.user.settings || !("locale" in user.user.settings)) { | ||||||
|                     return user; |                     return user; | ||||||
|                 } |                 } | ||||||
|                 const locale: string | undefined = user.user.settings.locale; |                 const locale = user.user.settings.locale; | ||||||
|                 if (locale && locale !== "") { |                 if (locale && locale !== "") { | ||||||
|                     console.debug( |                     console.debug( | ||||||
|                         `authentik/locale: Activating user's configured locale '${locale}'`, |                         `authentik/locale: Activating user's configured locale '${locale}'`, | ||||||
|  | |||||||
| @ -1,23 +1,22 @@ | |||||||
| import { EVENT_REFRESH } from "@goauthentik/authentik/common/constants"; | import { EVENT_REFRESH } from "@goauthentik/authentik/common/constants"; | ||||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||||
| import { authentikBrandContext } from "@goauthentik/elements/AuthentikContexts"; | import { authentikBrandContext } from "@goauthentik/elements/AuthentikContexts"; | ||||||
|  | import type { ReactiveElementHost } from "@goauthentik/elements/types.js"; | ||||||
|  |  | ||||||
| import { ContextProvider } from "@lit/context"; | import { ContextProvider } from "@lit/context"; | ||||||
| import { ReactiveController, ReactiveControllerHost } from "lit"; | import type { ReactiveController } from "lit"; | ||||||
|  |  | ||||||
| import type { CurrentBrand } from "@goauthentik/api"; | import type { CurrentBrand } from "@goauthentik/api"; | ||||||
| import { CoreApi } from "@goauthentik/api"; | import { CoreApi } from "@goauthentik/api"; | ||||||
|  |  | ||||||
| import type { AkInterface } from "./Interface"; | import type { AkInterface } from "./Interface"; | ||||||
|  |  | ||||||
| type ReactiveElementHost = Partial<ReactiveControllerHost> & AkInterface; |  | ||||||
|  |  | ||||||
| export class BrandContextController implements ReactiveController { | export class BrandContextController implements ReactiveController { | ||||||
|     host!: ReactiveElementHost; |     host!: ReactiveElementHost<AkInterface>; | ||||||
|  |  | ||||||
|     context!: ContextProvider<{ __context__: CurrentBrand | undefined }>; |     context!: ContextProvider<{ __context__: CurrentBrand | undefined }>; | ||||||
|  |  | ||||||
|     constructor(host: ReactiveElementHost) { |     constructor(host: ReactiveElementHost<AkInterface>) { | ||||||
|         this.host = host; |         this.host = host; | ||||||
|         this.context = new ContextProvider(this.host, { |         this.context = new ContextProvider(this.host, { | ||||||
|             context: authentikBrandContext, |             context: authentikBrandContext, | ||||||
|  | |||||||
| @ -2,23 +2,22 @@ import { EVENT_REFRESH } from "@goauthentik/authentik/common/constants"; | |||||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||||
| import { globalAK } from "@goauthentik/common/global"; | import { globalAK } from "@goauthentik/common/global"; | ||||||
| import { authentikConfigContext } from "@goauthentik/elements/AuthentikContexts"; | import { authentikConfigContext } from "@goauthentik/elements/AuthentikContexts"; | ||||||
|  | import type { ReactiveElementHost } from "@goauthentik/elements/types.js"; | ||||||
|  |  | ||||||
| import { ContextProvider } from "@lit/context"; | import { ContextProvider } from "@lit/context"; | ||||||
| import { ReactiveController, ReactiveControllerHost } from "lit"; | import type { ReactiveController } from "lit"; | ||||||
|  |  | ||||||
| import type { Config } from "@goauthentik/api"; | import type { Config } from "@goauthentik/api"; | ||||||
| import { RootApi } from "@goauthentik/api"; | import { RootApi } from "@goauthentik/api"; | ||||||
|  |  | ||||||
| import type { AkInterface } from "./Interface"; | import type { AkInterface } from "./Interface"; | ||||||
|  |  | ||||||
| type ReactiveElementHost = Partial<ReactiveControllerHost> & AkInterface; |  | ||||||
|  |  | ||||||
| export class ConfigContextController implements ReactiveController { | export class ConfigContextController implements ReactiveController { | ||||||
|     host!: ReactiveElementHost; |     host!: ReactiveElementHost<AkInterface>; | ||||||
|  |  | ||||||
|     context!: ContextProvider<{ __context__: Config | undefined }>; |     context!: ContextProvider<{ __context__: Config | undefined }>; | ||||||
|  |  | ||||||
|     constructor(host: ReactiveElementHost) { |     constructor(host: ReactiveElementHost<AkInterface>) { | ||||||
|         this.host = host; |         this.host = host; | ||||||
|         this.context = new ContextProvider(this.host, { |         this.context = new ContextProvider(this.host, { | ||||||
|             context: authentikConfigContext, |             context: authentikConfigContext, | ||||||
|  | |||||||
| @ -1,23 +1,22 @@ | |||||||
| import { EVENT_REFRESH_ENTERPRISE } from "@goauthentik/authentik/common/constants"; | import { EVENT_REFRESH_ENTERPRISE } from "@goauthentik/authentik/common/constants"; | ||||||
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; | ||||||
| import { authentikEnterpriseContext } from "@goauthentik/elements/AuthentikContexts"; | import { authentikEnterpriseContext } from "@goauthentik/elements/AuthentikContexts"; | ||||||
|  | import type { ReactiveElementHost } from "@goauthentik/elements/types.js"; | ||||||
|  |  | ||||||
| import { ContextProvider } from "@lit/context"; | import { ContextProvider } from "@lit/context"; | ||||||
| import { ReactiveController, ReactiveControllerHost } from "lit"; | import type { ReactiveController } from "lit"; | ||||||
|  |  | ||||||
| import type { LicenseSummary } from "@goauthentik/api"; | import type { LicenseSummary } from "@goauthentik/api"; | ||||||
| import { EnterpriseApi } from "@goauthentik/api"; | import { EnterpriseApi } from "@goauthentik/api"; | ||||||
|  |  | ||||||
| import type { AkEnterpriseInterface } from "./Interface"; | import type { AkEnterpriseInterface } from "./Interface"; | ||||||
|  |  | ||||||
| type ReactiveElementHost = Partial<ReactiveControllerHost> & AkEnterpriseInterface; |  | ||||||
|  |  | ||||||
| export class EnterpriseContextController implements ReactiveController { | export class EnterpriseContextController implements ReactiveController { | ||||||
|     host!: ReactiveElementHost; |     host!: ReactiveElementHost<AkEnterpriseInterface>; | ||||||
|  |  | ||||||
|     context!: ContextProvider<{ __context__: LicenseSummary | undefined }>; |     context!: ContextProvider<{ __context__: LicenseSummary | undefined }>; | ||||||
|  |  | ||||||
|     constructor(host: ReactiveElementHost) { |     constructor(host: ReactiveElementHost<AkEnterpriseInterface>) { | ||||||
|         this.host = host; |         this.host = host; | ||||||
|         this.context = new ContextProvider(this.host, { |         this.context = new ContextProvider(this.host, { | ||||||
|             context: authentikEnterpriseContext, |             context: authentikEnterpriseContext, | ||||||
|  | |||||||
| @ -1,13 +1,11 @@ | |||||||
| import { authentikConfigContext } from "@goauthentik/elements/AuthentikContexts"; | import { authentikConfigContext } from "@goauthentik/elements/AuthentikContexts"; | ||||||
|  | import type { Constructor } from "@goauthentik/elements/types.js"; | ||||||
|  |  | ||||||
| import { consume } from "@lit/context"; | import { consume } from "@lit/context"; | ||||||
| import type { LitElement } from "lit"; | import type { LitElement } from "lit"; | ||||||
|  |  | ||||||
| import type { Config } from "@goauthentik/api"; | import type { Config } from "@goauthentik/api"; | ||||||
|  |  | ||||||
| // eslint-disable-next-line @typescript-eslint/no-explicit-any |  | ||||||
| type Constructor<T = object> = new (...args: any[]) => T; |  | ||||||
|  |  | ||||||
| export function WithAuthentikConfig<T extends Constructor<LitElement>>( | export function WithAuthentikConfig<T extends Constructor<LitElement>>( | ||||||
|     superclass: T, |     superclass: T, | ||||||
|     subscribe = true, |     subscribe = true, | ||||||
|  | |||||||
| @ -1,14 +1,12 @@ | |||||||
| import { authentikBrandContext } from "@goauthentik/elements/AuthentikContexts"; | import { authentikBrandContext } from "@goauthentik/elements/AuthentikContexts"; | ||||||
|  | import type { AbstractConstructor } from "@goauthentik/elements/types.js"; | ||||||
|  |  | ||||||
| import { consume } from "@lit/context"; | import { consume } from "@lit/context"; | ||||||
| import type { LitElement } from "lit"; | import type { LitElement } from "lit"; | ||||||
|  |  | ||||||
| import type { CurrentBrand } from "@goauthentik/api"; | import type { CurrentBrand } from "@goauthentik/api"; | ||||||
|  |  | ||||||
| // eslint-disable-next-line @typescript-eslint/no-explicit-any | export function WithBrandConfig<T extends AbstractConstructor<LitElement>>( | ||||||
| type Constructor<T = object> = abstract new (...args: any[]) => T; |  | ||||||
|  |  | ||||||
| export function WithBrandConfig<T extends Constructor<LitElement>>( |  | ||||||
|     superclass: T, |     superclass: T, | ||||||
|     subscribe = true, |     subscribe = true, | ||||||
| ) { | ) { | ||||||
|  | |||||||
| @ -1,4 +1,5 @@ | |||||||
| import { authentikConfigContext } from "@goauthentik/elements/AuthentikContexts"; | import { authentikConfigContext } from "@goauthentik/elements/AuthentikContexts"; | ||||||
|  | import type { AbstractConstructor } from "@goauthentik/elements/types.js"; | ||||||
|  |  | ||||||
| import { consume } from "@lit/context"; | import { consume } from "@lit/context"; | ||||||
| import type { LitElement } from "lit"; | import type { LitElement } from "lit"; | ||||||
| @ -6,9 +7,6 @@ import type { LitElement } from "lit"; | |||||||
| import { CapabilitiesEnum } from "@goauthentik/api"; | import { CapabilitiesEnum } from "@goauthentik/api"; | ||||||
| import { Config } from "@goauthentik/api"; | import { Config } from "@goauthentik/api"; | ||||||
|  |  | ||||||
| // eslint-disable-next-line @typescript-eslint/no-explicit-any |  | ||||||
| type Constructor<T = object> = abstract new (...args: any[]) => T; |  | ||||||
|  |  | ||||||
| // Using a unique, lexically scoped, and locally static symbol as the field name for the context | // Using a unique, lexically scoped, and locally static symbol as the field name for the context | ||||||
| // means that it's inaccessible to any child class looking for it. It's one of the strongest privacy | // means that it's inaccessible to any child class looking for it. It's one of the strongest privacy | ||||||
| // guarantees in JavaScript. | // guarantees in JavaScript. | ||||||
| @ -45,7 +43,7 @@ class WCC { | |||||||
|  * |  * | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| export function WithCapabilitiesConfig<T extends Constructor<LitElement>>( | export function WithCapabilitiesConfig<T extends AbstractConstructor<LitElement>>( | ||||||
|     superclass: T, |     superclass: T, | ||||||
|     subscribe = true, |     subscribe = true, | ||||||
| ) { | ) { | ||||||
|  | |||||||
| @ -1,13 +1,11 @@ | |||||||
| import { authentikEnterpriseContext } from "@goauthentik/elements/AuthentikContexts"; | import { authentikEnterpriseContext } from "@goauthentik/elements/AuthentikContexts"; | ||||||
|  | import { Constructor } from "@goauthentik/elements/types.js"; | ||||||
|  |  | ||||||
| import { consume } from "@lit/context"; | import { consume } from "@lit/context"; | ||||||
| import type { LitElement } from "lit"; | import type { LitElement } from "lit"; | ||||||
|  |  | ||||||
| import type { LicenseSummary } from "@goauthentik/api"; | import type { LicenseSummary } from "@goauthentik/api"; | ||||||
|  |  | ||||||
| // eslint-disable-next-line @typescript-eslint/no-explicit-any |  | ||||||
| type Constructor<T = object> = abstract new (...args: any[]) => T; |  | ||||||
|  |  | ||||||
| export function WithLicenseSummary<T extends Constructor<LitElement>>( | export function WithLicenseSummary<T extends Constructor<LitElement>>( | ||||||
|     superclass: T, |     superclass: T, | ||||||
|     subscribe = true, |     subscribe = true, | ||||||
|  | |||||||
| @ -2,7 +2,7 @@ import { EVENT_LOCALE_CHANGE, EVENT_LOCALE_REQUEST } from "@goauthentik/common/c | |||||||
| import { customEvent } from "@goauthentik/elements/utils/customEvents"; | import { customEvent } from "@goauthentik/elements/utils/customEvents"; | ||||||
|  |  | ||||||
| import { LitElement, html } from "lit"; | import { LitElement, html } from "lit"; | ||||||
| import { customElement, property } from "lit/decorators.js"; | import { customElement, property, state } from "lit/decorators.js"; | ||||||
|  |  | ||||||
| import { WithBrandConfig } from "../Interface/brandProvider"; | import { WithBrandConfig } from "../Interface/brandProvider"; | ||||||
| import { initializeLocalization } from "./configureLocale"; | import { initializeLocalization } from "./configureLocale"; | ||||||
| @ -38,6 +38,9 @@ export class LocaleContext extends LocaleContextBase { | |||||||
|  |  | ||||||
|     setLocale: LocaleSetter; |     setLocale: LocaleSetter; | ||||||
|  |  | ||||||
|  |     @state() | ||||||
|  |     userLocale = ""; | ||||||
|  |  | ||||||
|     constructor(code = DEFAULT_LOCALE) { |     constructor(code = DEFAULT_LOCALE) { | ||||||
|         super(); |         super(); | ||||||
|         this.notifyApplication = this.notifyApplication.bind(this); |         this.notifyApplication = this.notifyApplication.bind(this); | ||||||
| @ -56,22 +59,30 @@ export class LocaleContext extends LocaleContextBase { | |||||||
|  |  | ||||||
|     connectedCallback() { |     connectedCallback() { | ||||||
|         super.connectedCallback(); |         super.connectedCallback(); | ||||||
|  |         // Commenting out until we can come up with a better way of separating the | ||||||
|  |         // "request user identity" with the session expiration heartbeat. | ||||||
|  |         /* | ||||||
|  |             new CoreApi(DEFAULT_CONFIG) | ||||||
|  |                 .coreUsersMeRetrieve() | ||||||
|  |                 .then((user) => (this.userLocale = user?.user?.settings?.locale ?? "")) | ||||||
|  |                 .catch(() => {}); | ||||||
|  |         */ | ||||||
|         this.updateLocale(); |         this.updateLocale(); | ||||||
|         window.addEventListener(EVENT_LOCALE_REQUEST, this.updateLocaleHandler as EventListener); |         window.addEventListener(EVENT_LOCALE_REQUEST, this.updateLocaleHandler); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     disconnectedCallback() { |     disconnectedCallback() { | ||||||
|         window.removeEventListener(EVENT_LOCALE_REQUEST, this.updateLocaleHandler as EventListener); |         window.removeEventListener(EVENT_LOCALE_REQUEST, this.updateLocaleHandler); | ||||||
|         super.disconnectedCallback(); |         super.disconnectedCallback(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     updateLocaleHandler(ev: CustomEvent<{ locale: string }>) { |     updateLocaleHandler(_ev: Event) { | ||||||
|         console.debug("authentik/locale: Locale update request received."); |         console.debug("authentik/locale: Locale update request received."); | ||||||
|         this.updateLocale(ev.detail.locale); |         this.updateLocale(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     updateLocale(requestedLocale: string | undefined = undefined) { |     updateLocale() { | ||||||
|         const localeRequest = autoDetectLanguage(requestedLocale, this.brand?.defaultLocale); |         const localeRequest = autoDetectLanguage(this.userLocale, this.brand?.defaultLocale); | ||||||
|         const locale = getBestMatchLocale(localeRequest); |         const locale = getBestMatchLocale(localeRequest); | ||||||
|         if (!locale) { |         if (!locale) { | ||||||
|             console.warn(`authentik/locale: failed to find locale for code ${localeRequest}`); |             console.warn(`authentik/locale: failed to find locale for code ${localeRequest}`); | ||||||
|  | |||||||
| @ -16,7 +16,6 @@ export interface RadioOption<T> { | |||||||
|     description?: TemplateResult; |     description?: TemplateResult; | ||||||
|     default?: boolean; |     default?: boolean; | ||||||
|     value: T; |     value: T; | ||||||
|     disabled?: boolean; |  | ||||||
| } | } | ||||||
|  |  | ||||||
| @customElement("ak-radio") | @customElement("ak-radio") | ||||||
| @ -78,9 +77,6 @@ export class Radio<T> extends CustomEmitterElement(AKElement) { | |||||||
|             // This is a controlled input. Stop the native event from escaping or affecting the |             // This is a controlled input. Stop the native event from escaping or affecting the | ||||||
|             // value.  We'll do that ourselves. |             // value.  We'll do that ourselves. | ||||||
|             ev.stopPropagation(); |             ev.stopPropagation(); | ||||||
|             if (option.disabled) { |  | ||||||
|                 return; |  | ||||||
|             } |  | ||||||
|             this.value = option.value; |             this.value = option.value; | ||||||
|             this.dispatchCustomEvent("change", { value: option.value }); |             this.dispatchCustomEvent("change", { value: option.value }); | ||||||
|             this.dispatchCustomEvent("input", { value: option.value }); |             this.dispatchCustomEvent("input", { value: option.value }); | ||||||
| @ -97,7 +93,6 @@ export class Radio<T> extends CustomEmitterElement(AKElement) { | |||||||
|                 name="${this.name}" |                 name="${this.name}" | ||||||
|                 id=${elId} |                 id=${elId} | ||||||
|                 .checked=${option.value === this.value} |                 .checked=${option.value === this.value} | ||||||
|                 .disabled=${option.disabled} |  | ||||||
|             /> |             /> | ||||||
|             <label class="pf-c-radio__label" for=${elId}>${option.label}</label> |             <label class="pf-c-radio__label" for=${elId}>${option.label}</label> | ||||||
|             ${option.description |             ${option.description | ||||||
|  | |||||||
							
								
								
									
										11
									
								
								web/src/elements/types.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								web/src/elements/types.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,11 @@ | |||||||
|  | import { AKElement } from "@goauthentik/elements/Base"; | ||||||
|  |  | ||||||
|  | import { ReactiveControllerHost } from "lit"; | ||||||
|  |  | ||||||
|  | export type ReactiveElementHost<T = AKElement> = Partial<ReactiveControllerHost> & T; | ||||||
|  |  | ||||||
|  | // eslint-disable-next-line @typescript-eslint/no-explicit-any | ||||||
|  | export type Constructor<T = object> = new (...args: any[]) => T; | ||||||
|  |  | ||||||
|  | // eslint-disable-next-line @typescript-eslint/no-explicit-any | ||||||
|  | export type AbstractConstructor<T = object> = abstract new (...args: any[]) => T; | ||||||
| @ -6534,6 +6534,12 @@ Bindings to groups/users are checked against the user of the event.</source> | |||||||
| </trans-unit> | </trans-unit> | ||||||
| <trans-unit id="sc1673c93148583ba"> | <trans-unit id="sc1673c93148583ba"> | ||||||
|   <source>Request failed. Please try again later.</source> |   <source>Request failed. Please try again later.</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s85be1f5e7a0fa3b1"> | ||||||
|  |   <source>Available Roles</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="sa59d53ee922c08b5"> | ||||||
|  |   <source>Selected Roles</source> | ||||||
| </trans-unit> | </trans-unit> | ||||||
|     </body> |     </body> | ||||||
|   </file> |   </file> | ||||||
|  | |||||||
| @ -6803,6 +6803,12 @@ Bindings to groups/users are checked against the user of the event.</source> | |||||||
| </trans-unit> | </trans-unit> | ||||||
| <trans-unit id="sc1673c93148583ba"> | <trans-unit id="sc1673c93148583ba"> | ||||||
|   <source>Request failed. Please try again later.</source> |   <source>Request failed. Please try again later.</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s85be1f5e7a0fa3b1"> | ||||||
|  |   <source>Available Roles</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="sa59d53ee922c08b5"> | ||||||
|  |   <source>Selected Roles</source> | ||||||
| </trans-unit> | </trans-unit> | ||||||
|     </body> |     </body> | ||||||
|   </file> |   </file> | ||||||
|  | |||||||
| @ -6451,6 +6451,12 @@ Bindings to groups/users are checked against the user of the event.</source> | |||||||
| </trans-unit> | </trans-unit> | ||||||
| <trans-unit id="sc1673c93148583ba"> | <trans-unit id="sc1673c93148583ba"> | ||||||
|   <source>Request failed. Please try again later.</source> |   <source>Request failed. Please try again later.</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s85be1f5e7a0fa3b1"> | ||||||
|  |   <source>Available Roles</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="sa59d53ee922c08b5"> | ||||||
|  |   <source>Selected Roles</source> | ||||||
| </trans-unit> | </trans-unit> | ||||||
|     </body> |     </body> | ||||||
|   </file> |   </file> | ||||||
|  | |||||||
| @ -8599,6 +8599,12 @@ Les liaisons avec les groupes/utilisateurs sont vérifiées par rapport à l'uti | |||||||
| </trans-unit> | </trans-unit> | ||||||
| <trans-unit id="sc1673c93148583ba"> | <trans-unit id="sc1673c93148583ba"> | ||||||
|   <source>Request failed. Please try again later.</source> |   <source>Request failed. Please try again later.</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s85be1f5e7a0fa3b1"> | ||||||
|  |   <source>Available Roles</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="sa59d53ee922c08b5"> | ||||||
|  |   <source>Selected Roles</source> | ||||||
| </trans-unit> | </trans-unit> | ||||||
|     </body> |     </body> | ||||||
|   </file> |   </file> | ||||||
|  | |||||||
| @ -8389,6 +8389,12 @@ Bindings to groups/users are checked against the user of the event.</source> | |||||||
| </trans-unit> | </trans-unit> | ||||||
| <trans-unit id="sc1673c93148583ba"> | <trans-unit id="sc1673c93148583ba"> | ||||||
|   <source>Request failed. Please try again later.</source> |   <source>Request failed. Please try again later.</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s85be1f5e7a0fa3b1"> | ||||||
|  |   <source>Available Roles</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="sa59d53ee922c08b5"> | ||||||
|  |   <source>Selected Roles</source> | ||||||
| </trans-unit> | </trans-unit> | ||||||
|     </body> |     </body> | ||||||
|   </file> |   </file> | ||||||
|  | |||||||
| @ -8233,6 +8233,12 @@ Bindingen naar groepen/gebruikers worden gecontroleerd tegen de gebruiker van de | |||||||
| </trans-unit> | </trans-unit> | ||||||
| <trans-unit id="sc1673c93148583ba"> | <trans-unit id="sc1673c93148583ba"> | ||||||
|   <source>Request failed. Please try again later.</source> |   <source>Request failed. Please try again later.</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s85be1f5e7a0fa3b1"> | ||||||
|  |   <source>Available Roles</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="sa59d53ee922c08b5"> | ||||||
|  |   <source>Selected Roles</source> | ||||||
| </trans-unit> | </trans-unit> | ||||||
|     </body> |     </body> | ||||||
|   </file> |   </file> | ||||||
|  | |||||||
| @ -6655,6 +6655,12 @@ Bindings to groups/users are checked against the user of the event.</source> | |||||||
| </trans-unit> | </trans-unit> | ||||||
| <trans-unit id="sc1673c93148583ba"> | <trans-unit id="sc1673c93148583ba"> | ||||||
|   <source>Request failed. Please try again later.</source> |   <source>Request failed. Please try again later.</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s85be1f5e7a0fa3b1"> | ||||||
|  |   <source>Available Roles</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="sa59d53ee922c08b5"> | ||||||
|  |   <source>Selected Roles</source> | ||||||
| </trans-unit> | </trans-unit> | ||||||
|     </body> |     </body> | ||||||
|   </file> |   </file> | ||||||
|  | |||||||
| @ -8505,4 +8505,10 @@ Bindings to groups/users are checked against the user of the event.</source> | |||||||
| <trans-unit id="sc1673c93148583ba"> | <trans-unit id="sc1673c93148583ba"> | ||||||
|   <source>Request failed. Please try again later.</source> |   <source>Request failed. Please try again later.</source> | ||||||
| </trans-unit> | </trans-unit> | ||||||
|  | <trans-unit id="s85be1f5e7a0fa3b1"> | ||||||
|  |   <source>Available Roles</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="sa59d53ee922c08b5"> | ||||||
|  |   <source>Selected Roles</source> | ||||||
|  | </trans-unit> | ||||||
| </body></file></xliff> | </body></file></xliff> | ||||||
|  | |||||||
| @ -6444,6 +6444,12 @@ Bindings to groups/users are checked against the user of the event.</source> | |||||||
| </trans-unit> | </trans-unit> | ||||||
| <trans-unit id="sc1673c93148583ba"> | <trans-unit id="sc1673c93148583ba"> | ||||||
|   <source>Request failed. Please try again later.</source> |   <source>Request failed. Please try again later.</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s85be1f5e7a0fa3b1"> | ||||||
|  |   <source>Available Roles</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="sa59d53ee922c08b5"> | ||||||
|  |   <source>Selected Roles</source> | ||||||
| </trans-unit> | </trans-unit> | ||||||
|     </body> |     </body> | ||||||
|   </file> |   </file> | ||||||
|  | |||||||
| @ -5362,6 +5362,12 @@ Bindings to groups/users are checked against the user of the event.</source> | |||||||
| <trans-unit id="sc1673c93148583ba"> | <trans-unit id="sc1673c93148583ba"> | ||||||
|   <source>Request failed. Please try again later.</source> |   <source>Request failed. Please try again later.</source> | ||||||
| </trans-unit> | </trans-unit> | ||||||
|  | <trans-unit id="s85be1f5e7a0fa3b1"> | ||||||
|  |   <source>Available Roles</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="sa59d53ee922c08b5"> | ||||||
|  |   <source>Selected Roles</source> | ||||||
|  | </trans-unit> | ||||||
| </body> | </body> | ||||||
| </file> | </file> | ||||||
| </xliff> | </xliff> | ||||||
|  | |||||||
| @ -8601,6 +8601,15 @@ Bindings to groups/users are checked against the user of the event.</source> | |||||||
| </trans-unit> | </trans-unit> | ||||||
| <trans-unit id="sc1673c93148583ba"> | <trans-unit id="sc1673c93148583ba"> | ||||||
|   <source>Request failed. Please try again later.</source> |   <source>Request failed. Please try again later.</source> | ||||||
|  |   <target>请求失败。请稍后重试。</target> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s85be1f5e7a0fa3b1"> | ||||||
|  |   <source>Available Roles</source> | ||||||
|  |   <target>可用角色</target> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="sa59d53ee922c08b5"> | ||||||
|  |   <source>Selected Roles</source> | ||||||
|  |   <target>已选角色</target> | ||||||
| </trans-unit> | </trans-unit> | ||||||
|     </body> |     </body> | ||||||
|   </file> |   </file> | ||||||
|  | |||||||
| @ -6492,6 +6492,12 @@ Bindings to groups/users are checked against the user of the event.</source> | |||||||
| </trans-unit> | </trans-unit> | ||||||
| <trans-unit id="sc1673c93148583ba"> | <trans-unit id="sc1673c93148583ba"> | ||||||
|   <source>Request failed. Please try again later.</source> |   <source>Request failed. Please try again later.</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s85be1f5e7a0fa3b1"> | ||||||
|  |   <source>Available Roles</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="sa59d53ee922c08b5"> | ||||||
|  |   <source>Selected Roles</source> | ||||||
| </trans-unit> | </trans-unit> | ||||||
|     </body> |     </body> | ||||||
|   </file> |   </file> | ||||||
|  | |||||||
| @ -8598,6 +8598,18 @@ Bindings to groups/users are checked against the user of the event.</source> | |||||||
| <trans-unit id="s30d6ff9e15e0a40a"> | <trans-unit id="s30d6ff9e15e0a40a"> | ||||||
|   <source>Verifying...</source> |   <source>Verifying...</source> | ||||||
|   <target>正在验证...</target> |   <target>正在验证...</target> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="sc1673c93148583ba"> | ||||||
|  |   <source>Request failed. Please try again later.</source> | ||||||
|  |   <target>请求失败。请稍后重试。</target> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s85be1f5e7a0fa3b1"> | ||||||
|  |   <source>Available Roles</source> | ||||||
|  |   <target>可用角色</target> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="sa59d53ee922c08b5"> | ||||||
|  |   <source>Selected Roles</source> | ||||||
|  |   <target>已选角色</target> | ||||||
| </trans-unit> | </trans-unit> | ||||||
|     </body> |     </body> | ||||||
|   </file> |   </file> | ||||||
|  | |||||||
| @ -8350,6 +8350,12 @@ Bindings to groups/users are checked against the user of the event.</source> | |||||||
| </trans-unit> | </trans-unit> | ||||||
| <trans-unit id="sc1673c93148583ba"> | <trans-unit id="sc1673c93148583ba"> | ||||||
|   <source>Request failed. Please try again later.</source> |   <source>Request failed. Please try again later.</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="s85be1f5e7a0fa3b1"> | ||||||
|  |   <source>Available Roles</source> | ||||||
|  | </trans-unit> | ||||||
|  | <trans-unit id="sa59d53ee922c08b5"> | ||||||
|  |   <source>Selected Roles</source> | ||||||
| </trans-unit> | </trans-unit> | ||||||
|     </body> |     </body> | ||||||
|   </file> |   </file> | ||||||
|  | |||||||
| @ -203,19 +203,6 @@ helm upgrade authentik authentik/authentik -f values.yaml --version ^2024.4 | |||||||
| -   web: spell customization with a Z (#8596) | -   web: spell customization with a Z (#8596) | ||||||
| -   web: upgrade to lit 3 (#8781) | -   web: upgrade to lit 3 (#8781) | ||||||
|  |  | ||||||
| ## Fixed in 2024.4.1 |  | ||||||
|  |  | ||||||
| -   core: fix logic for token expiration (cherry-pick #9426) (#9428) |  | ||||||
| -   lifecycle: always try custom redis URL (cherry-pick #9441) (#9458) |  | ||||||
| -   sources/oauth: ensure all UI sources return a valid source (cherry-pick #9401) (#9406) |  | ||||||
| -   sources/scim: fix service account user path (cherry-pick #9463) (#9470) |  | ||||||
| -   stages/identification: don't check source component (cherry-pick #9410) (#9420) |  | ||||||
| -   web/admin: fix disabled button color with dark theme (cherry-pick #9465) (#9468) |  | ||||||
| -   web/admin: show user internal service account as disabled (cherry-pick #9464) (#9467) |  | ||||||
| -   web/common: fix locale detection for user-set locale (cherry-pick #9436) (#9439) |  | ||||||
| -   web: Add resolved and integrity fields back to package-lock.json (cherry-pick #9419) (#9421) |  | ||||||
| -   web: markdown: display markdown even when frontmatter is missing (cherry-pick #9404) (#9405) |  | ||||||
|  |  | ||||||
| ## API Changes | ## API Changes | ||||||
|  |  | ||||||
| #### What's New | #### What's New | ||||||
|  | |||||||
							
								
								
									
										8
									
								
								website/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										8
									
								
								website/package-lock.json
									
									
									
										generated
									
									
									
								
							| @ -16,7 +16,7 @@ | |||||||
|                 "@docusaurus/theme-common": "^3.2.1", |                 "@docusaurus/theme-common": "^3.2.1", | ||||||
|                 "@docusaurus/theme-mermaid": "^3.2.1", |                 "@docusaurus/theme-mermaid": "^3.2.1", | ||||||
|                 "@mdx-js/react": "^3.0.1", |                 "@mdx-js/react": "^3.0.1", | ||||||
|                 "clsx": "^2.1.0", |                 "clsx": "^2.1.1", | ||||||
|                 "disqus-react": "^1.1.5", |                 "disqus-react": "^1.1.5", | ||||||
|                 "postcss": "^8.4.38", |                 "postcss": "^8.4.38", | ||||||
|                 "prism-react-renderer": "^2.3.1", |                 "prism-react-renderer": "^2.3.1", | ||||||
| @ -5160,9 +5160,9 @@ | |||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|         "node_modules/clsx": { |         "node_modules/clsx": { | ||||||
|             "version": "2.1.0", |             "version": "2.1.1", | ||||||
|             "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz", |             "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", | ||||||
|             "integrity": "sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==", |             "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", | ||||||
|             "engines": { |             "engines": { | ||||||
|                 "node": ">=6" |                 "node": ">=6" | ||||||
|             } |             } | ||||||
|  | |||||||
| @ -23,7 +23,7 @@ | |||||||
|         "@docusaurus/theme-common": "^3.2.1", |         "@docusaurus/theme-common": "^3.2.1", | ||||||
|         "@docusaurus/theme-mermaid": "^3.2.1", |         "@docusaurus/theme-mermaid": "^3.2.1", | ||||||
|         "@mdx-js/react": "^3.0.1", |         "@mdx-js/react": "^3.0.1", | ||||||
|         "clsx": "^2.1.0", |         "clsx": "^2.1.1", | ||||||
|         "disqus-react": "^1.1.5", |         "disqus-react": "^1.1.5", | ||||||
|         "postcss": "^8.4.38", |         "postcss": "^8.4.38", | ||||||
|         "prism-react-renderer": "^2.3.1", |         "prism-react-renderer": "^2.3.1", | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	