From ca0a4cb34f78d1b3ac400f4fc9e5c3eb7d8a2690 Mon Sep 17 00:00:00 2001 From: Jens Langhammer Date: Sat, 10 May 2025 17:06:14 +0200 Subject: [PATCH] move more stuff out of lib Signed-off-by: Jens Langhammer --- authentik/admin/tests/test_api.py | 2 +- authentik/api/tests/test_auth.py | 2 +- authentik/blueprints/models.py | 4 +- authentik/blueprints/tests/test_models.py | 2 +- authentik/blueprints/tests/test_v1.py | 2 +- .../tests/test_v1_conditional_fields.py | 2 +- .../blueprints/tests/test_v1_conditions.py | 2 +- authentik/blueprints/tests/test_v1_rbac.py | 2 +- authentik/blueprints/tests/test_v1_state.py | 2 +- authentik/blueprints/tests/test_v1_tasks.py | 2 +- authentik/blueprints/v1/common.py | 4 +- authentik/blueprints/v1/importer.py | 4 +- authentik/blueprints/v1/oci.py | 4 +- authentik/brands/tests.py | 2 +- authentik/common/exceptions.py | 7 ++ authentik/common/expression/evaluator.py | 2 +- authentik/common/expression/exceptions.py | 4 +- authentik/common/oauth/errors.py | 4 +- authentik/common/saml/exceptions.py | 4 +- authentik/{lib => common/saml}/xml.py | 0 authentik/common/sync/outgoing/exceptions.py | 4 +- authentik/core/expression/exceptions.py | 4 +- ...3_1737_squashed_0016_auto_20201202_2234.py | 2 +- authentik/core/models.py | 2 +- .../tests/test_application_entitlements.py | 2 +- authentik/core/tests/test_applications_api.py | 2 +- authentik/core/tests/test_groups.py | 2 +- authentik/core/tests/test_groups_api.py | 2 +- authentik/core/tests/test_property_mapping.py | 2 +- .../core/tests/test_property_mapping_api.py | 2 +- .../core/tests/test_source_flow_manager.py | 2 +- ..._source_flow_manager_group_update_stage.py | 2 +- .../tests/test_source_property_mappings.py | 2 +- authentik/core/tests/test_tasks.py | 2 +- authentik/core/tests/test_token_api.py | 2 +- .../test_transactional_applications_api.py | 2 +- authentik/core/tests/test_users_api.py | 2 +- authentik/core/tests/utils.py | 2 +- authentik/crypto/apps.py | 2 +- authentik/{lib => crypto}/generators.py | 0 authentik/crypto/tests.py | 2 +- authentik/enterprise/audit/tests.py | 2 +- .../unique_password/tests/test_flows.py | 2 +- .../unique_password/tests/test_stages.py | 2 +- .../google_workspace/tests/test_groups.py | 2 +- .../google_workspace/tests/test_users.py | 2 +- .../microsoft_entra/tests/test_groups.py | 2 +- .../microsoft_entra/tests/test_users.py | 2 +- .../providers/ssf/tests/test_config.py | 2 +- .../providers/ssf/tests/test_jwks.py | 2 +- .../providers/ssf/tests/test_signals.py | 2 +- .../providers/ssf/tests/test_stream.py | 2 +- authentik/enterprise/stages/source/tests.py | 2 +- authentik/enterprise/tests/test_license.py | 2 +- authentik/enterprise/tests/test_read_only.py | 2 +- authentik/events/middleware.py | 4 +- authentik/events/models.py | 4 +- authentik/events/tests/test_api.py | 2 +- authentik/events/tests/test_event.py | 2 +- authentik/events/tests/test_middleware.py | 2 +- authentik/events/tests/test_notifications.py | 2 +- authentik/events/tests/test_tasks.py | 2 +- authentik/events/tests/test_transports.py | 2 +- authentik/flows/exceptions.py | 10 +- authentik/flows/tests/test_api.py | 2 +- authentik/flows/tests/test_executor.py | 2 +- authentik/flows/tests/test_inspector.py | 2 +- authentik/flows/tests/test_planner.py | 2 +- authentik/flows/tests/test_views_helper.py | 2 +- authentik/flows/views/executor.py | 4 +- authentik/lib/tests/test_evaluator.py | 2 +- authentik/lib/tests/test_sentry.py | 4 +- authentik/outposts/controllers/base.py | 4 +- .../outposts/controllers/k8s/triggers.py | 4 +- authentik/outposts/models.py | 4 +- authentik/outposts/tests/test_api.py | 2 +- .../outposts/tests/test_controller_k8s.py | 2 +- authentik/policies/exceptions.py | 6 +- authentik/policies/expression/tests.py | 2 +- authentik/policies/geoip/exceptions.py | 4 +- .../policies/password/tests/test_flows.py | 2 +- .../policies/password/tests/test_hibp.py | 2 +- .../policies/password/tests/test_policy.py | 2 +- .../policies/password/tests/test_zxcvbn.py | 2 +- authentik/policies/reputation/tests.py | 2 +- authentik/policies/tests/test_engine.py | 2 +- authentik/policies/tests/test_process.py | 2 +- authentik/policies/views.py | 4 +- authentik/providers/ldap/tests/test_api.py | 2 +- authentik/providers/oauth2/id_token.py | 2 +- .../oauth2/migrations/0001_initial.py | 6 +- .../oauth2/migrations/0013_devicetoken.py | 8 +- ...014_alter_refreshtoken_options_and_more.py | 4 +- authentik/providers/oauth2/models.py | 2 +- authentik/providers/oauth2/tests/test_api.py | 2 +- .../providers/oauth2/tests/test_authorize.py | 2 +- .../oauth2/tests/test_device_backchannel.py | 2 +- .../oauth2/tests/test_device_init.py | 2 +- .../providers/oauth2/tests/test_introspect.py | 2 +- authentik/providers/oauth2/tests/test_jwks.py | 2 +- .../providers/oauth2/tests/test_revoke.py | 2 +- .../providers/oauth2/tests/test_token.py | 2 +- .../tests/test_token_cc_jwt_provider.py | 2 +- .../oauth2/tests/test_token_cc_jwt_source.py | 2 +- .../oauth2/tests/test_token_device.py | 2 +- .../providers/oauth2/tests/test_token_pkce.py | 2 +- .../providers/oauth2/tests/test_userinfo.py | 2 +- authentik/providers/proxy/tests.py | 2 +- authentik/providers/rac/tests/test_api.py | 2 +- .../providers/rac/tests/test_endpoints_api.py | 2 +- authentik/providers/rac/tests/test_models.py | 2 +- authentik/providers/rac/tests/test_views.py | 2 +- .../radius/migrations/0001_initial.py | 4 +- authentik/providers/radius/models.py | 2 +- authentik/providers/saml/exceptions.py | 4 +- .../saml/processors/authn_request_parser.py | 2 +- authentik/providers/saml/tests/test_api.py | 2 +- .../saml/tests/test_auth_n_request.py | 4 +- .../providers/saml/tests/test_metadata.py | 4 +- authentik/providers/saml/tests/test_schema.py | 2 +- authentik/providers/scim/tests/test_client.py | 2 +- authentik/providers/scim/tests/test_group.py | 2 +- .../providers/scim/tests/test_membership.py | 2 +- authentik/providers/scim/tests/test_user.py | 2 +- authentik/rbac/tests/test_api.py | 2 +- .../rbac/tests/test_api_assigned_by_roles.py | 2 +- .../rbac/tests/test_api_assigned_by_users.py | 2 +- authentik/rbac/tests/test_api_filters.py | 2 +- .../rbac/tests/test_api_permissions_roles.py | 2 +- .../rbac/tests/test_api_permissions_users.py | 2 +- authentik/rbac/tests/test_decorators.py | 2 +- .../rbac/tests/test_initial_permissions.py | 2 +- authentik/rbac/tests/test_roles.py | 2 +- authentik/root/celery.py | 2 +- authentik/{lib => root}/sentry.py | 96 +++++++++---------- authentik/root/settings.py | 2 +- authentik/root/test_runner.py | 2 +- authentik/sources/kerberos/auth.py | 2 +- authentik/sources/kerberos/tests/test_auth.py | 2 +- authentik/sources/kerberos/tests/test_sync.py | 2 +- authentik/sources/ldap/tests/test_api.py | 2 +- authentik/sources/ldap/tests/test_auth.py | 2 +- authentik/sources/ldap/tests/test_password.py | 2 +- authentik/sources/ldap/tests/test_sync.py | 2 +- authentik/sources/oauth/exceptions.py | 4 +- authentik/sources/oauth/tests/test_client.py | 2 +- .../oauth/tests/test_property_mappings.py | 2 +- .../sources/oauth/tests/test_type_apple.py | 2 +- .../sources/oauth/tests/test_type_github.py | 2 +- .../sources/oauth/tests/test_type_openid.py | 2 +- authentik/sources/oauth/types/twitter.py | 2 +- .../sources/plex/migrations/0001_initial.py | 4 +- authentik/sources/plex/models.py | 2 +- authentik/sources/plex/tests.py | 2 +- authentik/sources/saml/tests/test_metadata.py | 4 +- .../saml/tests/test_property_mappings.py | 2 +- authentik/sources/saml/tests/test_response.py | 2 +- authentik/sources/saml/tests/test_views.py | 2 +- authentik/sources/scim/errors.py | 4 +- authentik/sources/scim/tests/test_auth.py | 2 +- .../sources/scim/tests/test_resource_types.py | 2 +- authentik/sources/scim/tests/test_schemas.py | 2 +- .../tests/test_service_provider_config.py | 2 +- authentik/sources/scim/tests/test_signals.py | 2 +- authentik/sources/scim/tests/test_users.py | 2 +- authentik/stages/authenticator/tests.py | 2 +- authentik/stages/authenticator_duo/tests.py | 2 +- authentik/stages/authenticator_sms/tests.py | 2 +- .../stages/authenticator_static/stage.py | 2 +- .../stages/authenticator_static/tests.py | 2 +- .../authenticator_validate/tests/test_duo.py | 2 +- .../tests/test_email.py | 2 +- .../authenticator_validate/tests/test_sms.py | 2 +- .../tests/test_stage.py | 2 +- .../authenticator_validate/tests/test_totp.py | 2 +- .../tests/test_webauthn.py | 2 +- .../stages/authenticator_webauthn/tests.py | 2 +- authentik/stages/consent/tests.py | 2 +- authentik/stages/dummy/stage.py | 4 +- authentik/stages/email/tests/test_sending.py | 2 +- authentik/stages/email/tests/test_stage.py | 2 +- authentik/stages/identification/tests.py | 2 +- authentik/stages/password/tests.py | 2 +- authentik/stages/prompt/api.py | 2 +- authentik/stages/prompt/tests.py | 2 +- authentik/stages/redirect/tests.py | 2 +- authentik/stages/user_login/middleware.py | 4 +- authentik/stages/user_login/tests.py | 2 +- authentik/stages/user_write/tests.py | 2 +- authentik/tenants/tests/test_api.py | 2 +- authentik/tenants/tests/test_domain.py | 2 +- authentik/tenants/tests/test_recovery.py | 2 +- authentik/tenants/tests/test_settings.py | 2 +- scripts/generate_config.py | 2 +- tests/e2e/test_flows_recovery.py | 2 +- tests/e2e/test_flows_stage_setup.py | 2 +- tests/e2e/test_provider_ldap.py | 2 +- tests/e2e/test_provider_oauth2_github.py | 2 +- tests/e2e/test_provider_oauth2_grafana.py | 2 +- tests/e2e/test_provider_oidc.py | 2 +- tests/e2e/test_provider_oidc_implicit.py | 2 +- tests/e2e/test_provider_proxy.py | 2 +- tests/e2e/test_provider_proxy_forward.py | 2 +- tests/e2e/test_provider_radius.py | 2 +- tests/e2e/test_source_ldap_samba.py | 2 +- tests/e2e/test_source_oauth_oauth1.py | 2 +- tests/e2e/test_source_oauth_oauth2.py | 2 +- tests/e2e/test_source_saml.py | 2 +- tests/e2e/test_source_scim.py | 2 +- tests/e2e/utils.py | 2 +- 210 files changed, 302 insertions(+), 293 deletions(-) create mode 100644 authentik/common/exceptions.py rename authentik/{lib => common/saml}/xml.py (100%) rename authentik/{lib => crypto}/generators.py (100%) rename authentik/{lib => root}/sentry.py (79%) diff --git a/authentik/admin/tests/test_api.py b/authentik/admin/tests/test_api.py index ed6656470a..d746f1ec55 100644 --- a/authentik/admin/tests/test_api.py +++ b/authentik/admin/tests/test_api.py @@ -8,7 +8,7 @@ from django.urls import reverse from authentik import __version__ from authentik.blueprints.tests import reconcile_app from authentik.core.models import Group, User -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id class TestAdminAPI(TestCase): diff --git a/authentik/api/tests/test_auth.py b/authentik/api/tests/test_auth.py index ce5e4299be..cccec2fdd4 100644 --- a/authentik/api/tests/test_auth.py +++ b/authentik/api/tests/test_auth.py @@ -11,7 +11,7 @@ from authentik.api.authentication import bearer_auth from authentik.common.oauth.constants import SCOPE_AUTHENTIK_API from authentik.core.models import Token, TokenIntents from authentik.core.tests.utils import create_test_admin_user, create_test_flow -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.providers.oauth2.models import AccessToken, OAuth2Provider diff --git a/authentik/blueprints/models.py b/authentik/blueprints/models.py index a3abcba59f..8cc1cffbe3 100644 --- a/authentik/blueprints/models.py +++ b/authentik/blueprints/models.py @@ -10,14 +10,14 @@ from rest_framework.serializers import Serializer from structlog import get_logger from authentik.blueprints.v1.oci import OCI_PREFIX, BlueprintOCIClient, OCIException +from authentik.common.exceptions import NotReportedException from authentik.lib.config import CONFIG from authentik.lib.models import CreatedUpdatedModel, SerializerModel -from authentik.lib.sentry import SentryIgnoredException LOGGER = get_logger() -class BlueprintRetrievalFailed(SentryIgnoredException): +class BlueprintRetrievalFailed(NotReportedException): """Error raised when we are unable to fetch the blueprint contents, whether it be HTTP files not being accessible or local files not being readable""" diff --git a/authentik/blueprints/tests/test_models.py b/authentik/blueprints/tests/test_models.py index a2ceac828b..d3d46c2ca0 100644 --- a/authentik/blueprints/tests/test_models.py +++ b/authentik/blueprints/tests/test_models.py @@ -3,7 +3,7 @@ from django.test import TestCase from authentik.blueprints.models import BlueprintInstance, BlueprintRetrievalFailed -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id class TestModels(TestCase): diff --git a/authentik/blueprints/tests/test_v1.py b/authentik/blueprints/tests/test_v1.py index a001ba2100..c822d850a3 100644 --- a/authentik/blueprints/tests/test_v1.py +++ b/authentik/blueprints/tests/test_v1.py @@ -7,8 +7,8 @@ from django.test import TransactionTestCase from authentik.blueprints.v1.exporter import FlowExporter from authentik.blueprints.v1.importer import Importer, transaction_rollback from authentik.core.models import Group +from authentik.crypto.generators import generate_id from authentik.flows.models import Flow, FlowDesignation, FlowStageBinding -from authentik.lib.generators import generate_id from authentik.lib.tests.utils import load_fixture from authentik.policies.expression.models import ExpressionPolicy from authentik.policies.models import PolicyBinding diff --git a/authentik/blueprints/tests/test_v1_conditional_fields.py b/authentik/blueprints/tests/test_v1_conditional_fields.py index d260e9599b..5c484eead3 100644 --- a/authentik/blueprints/tests/test_v1_conditional_fields.py +++ b/authentik/blueprints/tests/test_v1_conditional_fields.py @@ -5,8 +5,8 @@ from django.test import TransactionTestCase from authentik.blueprints.v1.importer import Importer from authentik.core.models import Application, Token, User from authentik.core.tests.utils import create_test_admin_user +from authentik.crypto.generators import generate_id from authentik.flows.models import Flow -from authentik.lib.generators import generate_id from authentik.lib.tests.utils import load_fixture from authentik.sources.oauth.models import OAuthSource diff --git a/authentik/blueprints/tests/test_v1_conditions.py b/authentik/blueprints/tests/test_v1_conditions.py index 8dd79563e1..538ed57a4e 100644 --- a/authentik/blueprints/tests/test_v1_conditions.py +++ b/authentik/blueprints/tests/test_v1_conditions.py @@ -3,8 +3,8 @@ from django.test import TransactionTestCase from authentik.blueprints.v1.importer import Importer +from authentik.crypto.generators import generate_id from authentik.flows.models import Flow -from authentik.lib.generators import generate_id from authentik.lib.tests.utils import load_fixture diff --git a/authentik/blueprints/tests/test_v1_rbac.py b/authentik/blueprints/tests/test_v1_rbac.py index 87784a7e95..8cd8552a4b 100644 --- a/authentik/blueprints/tests/test_v1_rbac.py +++ b/authentik/blueprints/tests/test_v1_rbac.py @@ -5,8 +5,8 @@ from guardian.shortcuts import get_perms from authentik.blueprints.v1.importer import Importer from authentik.core.models import User +from authentik.crypto.generators import generate_id from authentik.flows.models import Flow -from authentik.lib.generators import generate_id from authentik.lib.tests.utils import load_fixture from authentik.rbac.models import Role diff --git a/authentik/blueprints/tests/test_v1_state.py b/authentik/blueprints/tests/test_v1_state.py index 96a2d0f602..f8f8fb9a90 100644 --- a/authentik/blueprints/tests/test_v1_state.py +++ b/authentik/blueprints/tests/test_v1_state.py @@ -3,8 +3,8 @@ from django.test import TransactionTestCase from authentik.blueprints.v1.importer import Importer +from authentik.crypto.generators import generate_id from authentik.flows.models import Flow -from authentik.lib.generators import generate_id from authentik.lib.tests.utils import load_fixture diff --git a/authentik/blueprints/tests/test_v1_tasks.py b/authentik/blueprints/tests/test_v1_tasks.py index b1d201419d..9a12be37fb 100644 --- a/authentik/blueprints/tests/test_v1_tasks.py +++ b/authentik/blueprints/tests/test_v1_tasks.py @@ -8,8 +8,8 @@ from yaml import dump from authentik.blueprints.models import BlueprintInstance, BlueprintInstanceStatus from authentik.blueprints.v1.tasks import apply_blueprint, blueprints_discovery, blueprints_find +from authentik.crypto.generators import generate_id from authentik.lib.config import CONFIG -from authentik.lib.generators import generate_id TMP = mkdtemp("authentik-blueprints") diff --git a/authentik/blueprints/v1/common.py b/authentik/blueprints/v1/common.py index 6d0e70594b..68fd11fa62 100644 --- a/authentik/blueprints/v1/common.py +++ b/authentik/blueprints/v1/common.py @@ -19,8 +19,8 @@ from rest_framework.fields import Field from rest_framework.serializers import Serializer from yaml import SafeDumper, SafeLoader, ScalarNode, SequenceNode +from authentik.common.exceptions import NotReportedException from authentik.lib.models import SerializerModel -from authentik.lib.sentry import SentryIgnoredException from authentik.policies.models import PolicyBindingModel @@ -661,7 +661,7 @@ class BlueprintLoader(SafeLoader): self.add_constructor("!AtIndex", AtIndex) -class EntryInvalidError(SentryIgnoredException): +class EntryInvalidError(NotReportedException): """Error raised when an entry is invalid""" entry_model: str | None diff --git a/authentik/blueprints/v1/importer.py b/authentik/blueprints/v1/importer.py index 1b2ce79602..2a730544e7 100644 --- a/authentik/blueprints/v1/importer.py +++ b/authentik/blueprints/v1/importer.py @@ -28,12 +28,12 @@ from authentik.blueprints.v1.common import ( EntryInvalidError, ) from authentik.blueprints.v1.meta.registry import BaseMetaModel, registry +from authentik.common.exceptions import NotReportedException from authentik.core.models import User from authentik.enterprise.license import LicenseKey from authentik.events.logs import LogEvent, capture_logs from authentik.events.utils import cleanse_dict from authentik.lib.models import SerializerModel, excluded_models -from authentik.lib.sentry import SentryIgnoredException from authentik.lib.utils.reflection import get_apps from authentik.rbac.models import Role @@ -47,7 +47,7 @@ def is_model_allowed(model: type[Model]) -> bool: return model not in excluded_models() and issubclass(model, SerializerModel | BaseMetaModel) -class DoRollback(SentryIgnoredException): +class DoRollback(NotReportedException): """Exception to trigger a rollback""" diff --git a/authentik/blueprints/v1/oci.py b/authentik/blueprints/v1/oci.py index 6a22c4037f..1b85745081 100644 --- a/authentik/blueprints/v1/oci.py +++ b/authentik/blueprints/v1/oci.py @@ -16,14 +16,14 @@ from requests.exceptions import RequestException from structlog import get_logger from structlog.stdlib import BoundLogger -from authentik.lib.sentry import SentryIgnoredException +from authentik.common.exceptions import NotReportedException from authentik.lib.utils.http import authentik_user_agent OCI_MEDIA_TYPE = "application/vnd.goauthentik.blueprint.v1+yaml" OCI_PREFIX = "oci://" -class OCIException(SentryIgnoredException): +class OCIException(NotReportedException): """OCI-related errors""" diff --git a/authentik/brands/tests.py b/authentik/brands/tests.py index e320340565..826dc496cd 100644 --- a/authentik/brands/tests.py +++ b/authentik/brands/tests.py @@ -7,7 +7,7 @@ from authentik.brands.api import Themes from authentik.brands.models import Brand from authentik.core.models import Application from authentik.core.tests.utils import create_test_admin_user, create_test_brand -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.providers.oauth2.models import OAuth2Provider from authentik.providers.saml.models import SAMLProvider diff --git a/authentik/common/exceptions.py b/authentik/common/exceptions.py new file mode 100644 index 0000000000..c111da86e8 --- /dev/null +++ b/authentik/common/exceptions.py @@ -0,0 +1,7 @@ +class AuthentikException(Exception): + """Base class for authentik exceptions""" + + +class NotReportedException(AuthentikException): + """Exception base class for all errors that are suppressed, + and not sent to any kind of monitoring.""" diff --git a/authentik/common/expression/evaluator.py b/authentik/common/expression/evaluator.py index 2b67cd08fe..6341b0a36d 100644 --- a/authentik/common/expression/evaluator.py +++ b/authentik/common/expression/evaluator.py @@ -19,7 +19,7 @@ from sentry_sdk.tracing import Span from structlog.stdlib import get_logger from authentik.common.expression.exceptions import ControlFlowException -from authentik.core.models import AuthenticatedSession, User +from authentik.core.models import User from authentik.events.models import Event from authentik.lib.utils.http import get_http_session from authentik.lib.utils.time import timedelta_from_string diff --git a/authentik/common/expression/exceptions.py b/authentik/common/expression/exceptions.py index dea2001e1c..c1c9456eea 100644 --- a/authentik/common/expression/exceptions.py +++ b/authentik/common/expression/exceptions.py @@ -1,6 +1,6 @@ -from authentik.lib.sentry import SentryIgnoredException +from authentik.common.exceptions import NotReportedException -class ControlFlowException(SentryIgnoredException): +class ControlFlowException(NotReportedException): """Exceptions used to control the flow from exceptions, not reported as a warning/ error in logs""" diff --git a/authentik/common/oauth/errors.py b/authentik/common/oauth/errors.py index 479eae16f2..4de31ee9f2 100644 --- a/authentik/common/oauth/errors.py +++ b/authentik/common/oauth/errors.py @@ -4,13 +4,13 @@ from urllib.parse import quote, urlparse from django.http import HttpRequest, HttpResponse, HttpResponseRedirect +from authentik.common.exceptions import NotReportedException from authentik.events.models import Event, EventAction -from authentik.lib.sentry import SentryIgnoredException from authentik.lib.views import bad_request_message from authentik.providers.oauth2.models import GrantTypes, RedirectURI -class OAuth2Error(SentryIgnoredException): +class OAuth2Error(NotReportedException): """Base class for all OAuth2 Errors""" error: str diff --git a/authentik/common/saml/exceptions.py b/authentik/common/saml/exceptions.py index 45534e07f9..accb2b2bdf 100644 --- a/authentik/common/saml/exceptions.py +++ b/authentik/common/saml/exceptions.py @@ -1,9 +1,9 @@ """authentik saml source exceptions""" -from authentik.lib.sentry import SentryIgnoredException +from authentik.common.exceptions import NotReportedException -class SAMLException(SentryIgnoredException): +class SAMLException(NotReportedException): """Base SAML Exception""" diff --git a/authentik/lib/xml.py b/authentik/common/saml/xml.py similarity index 100% rename from authentik/lib/xml.py rename to authentik/common/saml/xml.py diff --git a/authentik/common/sync/outgoing/exceptions.py b/authentik/common/sync/outgoing/exceptions.py index 133a4904bf..fcba154220 100644 --- a/authentik/common/sync/outgoing/exceptions.py +++ b/authentik/common/sync/outgoing/exceptions.py @@ -1,7 +1,7 @@ -from authentik.lib.sentry import SentryIgnoredException +from authentik.common.exceptions import NotReportedException -class BaseSyncException(SentryIgnoredException): +class BaseSyncException(NotReportedException): """Base class for all sync exceptions""" diff --git a/authentik/core/expression/exceptions.py b/authentik/core/expression/exceptions.py index 07e178f1d0..a71a5bee8a 100644 --- a/authentik/core/expression/exceptions.py +++ b/authentik/core/expression/exceptions.py @@ -1,10 +1,10 @@ """authentik core exceptions""" +from authentik.common.exceptions import NotReportedException from authentik.common.expression.exceptions import ControlFlowException -from authentik.lib.sentry import SentryIgnoredException -class PropertyMappingExpressionException(SentryIgnoredException): +class PropertyMappingExpressionException(NotReportedException): """Error when a PropertyMapping Exception expression could not be parsed or evaluated.""" def __init__(self, exc: Exception, mapping) -> None: diff --git a/authentik/core/migrations/0012_auto_20201003_1737_squashed_0016_auto_20201202_2234.py b/authentik/core/migrations/0012_auto_20201003_1737_squashed_0016_auto_20201202_2234.py index 5b8cb38ab2..b5382ec5b7 100644 --- a/authentik/core/migrations/0012_auto_20201003_1737_squashed_0016_auto_20201202_2234.py +++ b/authentik/core/migrations/0012_auto_20201003_1737_squashed_0016_auto_20201202_2234.py @@ -5,7 +5,7 @@ from django.db import migrations, models from django.db.backends.base.schema import BaseDatabaseSchemaEditor import authentik.core.models -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id def set_default_token_key(apps: Apps, schema_editor: BaseDatabaseSchemaEditor): diff --git a/authentik/core/models.py b/authentik/core/models.py index e1e038550b..04fbb297fe 100644 --- a/authentik/core/models.py +++ b/authentik/core/models.py @@ -29,8 +29,8 @@ from authentik.blueprints.models import ManagedModel from authentik.common.expression.exceptions import ControlFlowException from authentik.core.expression.exceptions import PropertyMappingExpressionException from authentik.core.types import UILoginButton, UserSettingSerializer +from authentik.crypto.generators import generate_id from authentik.lib.avatars import get_avatar -from authentik.lib.generators import generate_id from authentik.lib.merge import MERGE_LIST_UNIQUE from authentik.lib.models import ( CreatedUpdatedModel, diff --git a/authentik/core/tests/test_application_entitlements.py b/authentik/core/tests/test_application_entitlements.py index d26df1e2a2..3a38e28d2e 100644 --- a/authentik/core/tests/test_application_entitlements.py +++ b/authentik/core/tests/test_application_entitlements.py @@ -6,7 +6,7 @@ from rest_framework.test import APITestCase from authentik.core.models import Application, ApplicationEntitlement, Group from authentik.core.tests.utils import create_test_admin_user, create_test_flow, create_test_user -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.policies.dummy.models import DummyPolicy from authentik.policies.models import PolicyBinding from authentik.providers.oauth2.models import OAuth2Provider diff --git a/authentik/core/tests/test_applications_api.py b/authentik/core/tests/test_applications_api.py index 192adc458b..078376e87d 100644 --- a/authentik/core/tests/test_applications_api.py +++ b/authentik/core/tests/test_applications_api.py @@ -9,7 +9,7 @@ from rest_framework.test import APITestCase from authentik.core.models import Application from authentik.core.tests.utils import create_test_admin_user, create_test_flow -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.policies.dummy.models import DummyPolicy from authentik.policies.models import PolicyBinding from authentik.providers.oauth2.models import OAuth2Provider, RedirectURI, RedirectURIMatchingMode diff --git a/authentik/core/tests/test_groups.py b/authentik/core/tests/test_groups.py index fa60e6d8ba..e4f4f07cb3 100644 --- a/authentik/core/tests/test_groups.py +++ b/authentik/core/tests/test_groups.py @@ -3,7 +3,7 @@ from django.test.testcases import TestCase from authentik.core.models import Group, User -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id class TestGroups(TestCase): diff --git a/authentik/core/tests/test_groups_api.py b/authentik/core/tests/test_groups_api.py index 3b8216bfd4..f3a13de379 100644 --- a/authentik/core/tests/test_groups_api.py +++ b/authentik/core/tests/test_groups_api.py @@ -6,7 +6,7 @@ from rest_framework.test import APITestCase from authentik.core.models import Group from authentik.core.tests.utils import create_test_admin_user, create_test_user -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id class TestGroupsAPI(APITestCase): diff --git a/authentik/core/tests/test_property_mapping.py b/authentik/core/tests/test_property_mapping.py index 080facaa1f..60e7b41676 100644 --- a/authentik/core/tests/test_property_mapping.py +++ b/authentik/core/tests/test_property_mapping.py @@ -9,8 +9,8 @@ from authentik.core.expression.exceptions import ( ) from authentik.core.models import PropertyMapping from authentik.core.tests.utils import create_test_admin_user +from authentik.crypto.generators import generate_id from authentik.events.models import Event, EventAction -from authentik.lib.generators import generate_id from authentik.policies.expression.models import ExpressionPolicy diff --git a/authentik/core/tests/test_property_mapping_api.py b/authentik/core/tests/test_property_mapping_api.py index 6afe40a181..d6c969f911 100644 --- a/authentik/core/tests/test_property_mapping_api.py +++ b/authentik/core/tests/test_property_mapping_api.py @@ -9,7 +9,7 @@ from rest_framework.test import APITestCase from authentik.core.api.property_mappings import PropertyMappingSerializer from authentik.core.models import Group, PropertyMapping from authentik.core.tests.utils import create_test_admin_user -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id class TestPropertyMappingAPI(APITestCase): diff --git a/authentik/core/tests/test_source_flow_manager.py b/authentik/core/tests/test_source_flow_manager.py index c9346fce85..48a563d1f9 100644 --- a/authentik/core/tests/test_source_flow_manager.py +++ b/authentik/core/tests/test_source_flow_manager.py @@ -9,9 +9,9 @@ from authentik.core.models import SourceUserMatchingModes, User from authentik.core.sources.flow_manager import Action from authentik.core.sources.stage import PostSourceStage from authentik.core.tests.utils import create_test_flow +from authentik.crypto.generators import generate_id from authentik.flows.planner import FlowPlan from authentik.flows.views.executor import SESSION_KEY_PLAN -from authentik.lib.generators import generate_id from authentik.lib.tests.utils import get_request from authentik.policies.denied import AccessDeniedResponse from authentik.policies.expression.models import ExpressionPolicy diff --git a/authentik/core/tests/test_source_flow_manager_group_update_stage.py b/authentik/core/tests/test_source_flow_manager_group_update_stage.py index edc7d49366..4ec82a3bd6 100644 --- a/authentik/core/tests/test_source_flow_manager_group_update_stage.py +++ b/authentik/core/tests/test_source_flow_manager_group_update_stage.py @@ -5,11 +5,11 @@ from django.test import RequestFactory from authentik.core.models import Group, SourceGroupMatchingModes from authentik.core.sources.flow_manager import PLAN_CONTEXT_SOURCE_GROUPS, GroupUpdateStage from authentik.core.tests.utils import create_test_admin_user, create_test_flow +from authentik.crypto.generators import generate_id from authentik.flows.models import in_memory_stage from authentik.flows.planner import PLAN_CONTEXT_PENDING_USER, PLAN_CONTEXT_SOURCE, FlowPlan from authentik.flows.tests import FlowTestCase from authentik.flows.views.executor import FlowExecutorView -from authentik.lib.generators import generate_id from authentik.sources.oauth.models import GroupOAuthSourceConnection, OAuthSource diff --git a/authentik/core/tests/test_source_property_mappings.py b/authentik/core/tests/test_source_property_mappings.py index 0844e98c2c..629c129221 100644 --- a/authentik/core/tests/test_source_property_mappings.py +++ b/authentik/core/tests/test_source_property_mappings.py @@ -4,7 +4,7 @@ from django.test import TestCase from authentik.core.models import Group, PropertyMapping, Source, User from authentik.core.sources.mapper import SourceMapper -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id class ProxySource(Source): diff --git a/authentik/core/tests/test_tasks.py b/authentik/core/tests/test_tasks.py index 92e83066e4..6a6221171f 100644 --- a/authentik/core/tests/test_tasks.py +++ b/authentik/core/tests/test_tasks.py @@ -18,7 +18,7 @@ from authentik.core.tasks import ( clean_temporary_users, ) from authentik.core.tests.utils import create_test_admin_user -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id class TestTasks(APITestCase): diff --git a/authentik/core/tests/test_token_api.py b/authentik/core/tests/test_token_api.py index 15eda3f53d..846dbddf2e 100644 --- a/authentik/core/tests/test_token_api.py +++ b/authentik/core/tests/test_token_api.py @@ -15,7 +15,7 @@ from authentik.core.models import ( TokenIntents, ) from authentik.core.tests.utils import create_test_admin_user, create_test_user -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id class TestTokenAPI(APITestCase): diff --git a/authentik/core/tests/test_transactional_applications_api.py b/authentik/core/tests/test_transactional_applications_api.py index c6fcfb1946..fad0ffcfe2 100644 --- a/authentik/core/tests/test_transactional_applications_api.py +++ b/authentik/core/tests/test_transactional_applications_api.py @@ -6,7 +6,7 @@ from rest_framework.test import APITestCase from authentik.core.models import Application, Group from authentik.core.tests.utils import create_test_flow, create_test_user -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.policies.models import PolicyBinding from authentik.providers.oauth2.models import OAuth2Provider diff --git a/authentik/core/tests/test_users_api.py b/authentik/core/tests/test_users_api.py index ff5a28bec4..b010d411cf 100644 --- a/authentik/core/tests/test_users_api.py +++ b/authentik/core/tests/test_users_api.py @@ -21,8 +21,8 @@ from authentik.core.tests.utils import ( create_test_flow, create_test_user, ) +from authentik.crypto.generators import generate_id, generate_key from authentik.flows.models import FlowDesignation -from authentik.lib.generators import generate_id, generate_key from authentik.stages.email.models import EmailStage diff --git a/authentik/core/tests/utils.py b/authentik/core/tests/utils.py index 7e66c382f7..00fbeef887 100644 --- a/authentik/core/tests/utils.py +++ b/authentik/core/tests/utils.py @@ -5,9 +5,9 @@ from django.utils.text import slugify from authentik.brands.models import Brand from authentik.core.models import Group, User from authentik.crypto.builder import CertificateBuilder, PrivateKeyAlg +from authentik.crypto.generators import generate_id from authentik.crypto.models import CertificateKeyPair from authentik.flows.models import Flow, FlowDesignation -from authentik.lib.generators import generate_id def create_test_flow( diff --git a/authentik/crypto/apps.py b/authentik/crypto/apps.py index cdb01b3a1b..32b687f912 100644 --- a/authentik/crypto/apps.py +++ b/authentik/crypto/apps.py @@ -3,7 +3,7 @@ from datetime import UTC, datetime from authentik.blueprints.apps import ManagedAppConfig -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id MANAGED_KEY = "goauthentik.io/crypto/jwt-managed" diff --git a/authentik/lib/generators.py b/authentik/crypto/generators.py similarity index 100% rename from authentik/lib/generators.py rename to authentik/crypto/generators.py diff --git a/authentik/crypto/tests.py b/authentik/crypto/tests.py index 0e3c886d11..2cb8b952b9 100644 --- a/authentik/crypto/tests.py +++ b/authentik/crypto/tests.py @@ -14,10 +14,10 @@ from authentik.core.api.used_by import DeleteAction from authentik.core.tests.utils import create_test_admin_user, create_test_cert, create_test_flow from authentik.crypto.api import CertificateKeyPairSerializer from authentik.crypto.builder import CertificateBuilder +from authentik.crypto.generators import generate_id, generate_key from authentik.crypto.models import CertificateKeyPair from authentik.crypto.tasks import MANAGED_DISCOVERED, certificate_discovery from authentik.lib.config import CONFIG -from authentik.lib.generators import generate_id, generate_key from authentik.providers.oauth2.models import OAuth2Provider, RedirectURI, RedirectURIMatchingMode diff --git a/authentik/enterprise/audit/tests.py b/authentik/enterprise/audit/tests.py index 31b6556ef6..4018ae544a 100644 --- a/authentik/enterprise/audit/tests.py +++ b/authentik/enterprise/audit/tests.py @@ -7,9 +7,9 @@ from rest_framework.test import APITestCase from authentik.core.models import Group, User from authentik.core.tests.utils import create_test_admin_user +from authentik.crypto.generators import generate_id from authentik.events.models import Event, EventAction from authentik.events.utils import sanitize_item -from authentik.lib.generators import generate_id class TestEnterpriseAudit(APITestCase): diff --git a/authentik/enterprise/policies/unique_password/tests/test_flows.py b/authentik/enterprise/policies/unique_password/tests/test_flows.py index 2899d1a8b6..f4ba54ca0c 100644 --- a/authentik/enterprise/policies/unique_password/tests/test_flows.py +++ b/authentik/enterprise/policies/unique_password/tests/test_flows.py @@ -4,13 +4,13 @@ from django.contrib.auth.hashers import make_password from django.urls.base import reverse from authentik.core.tests.utils import create_test_flow, create_test_user +from authentik.crypto.generators import generate_id from authentik.enterprise.policies.unique_password.models import ( UniquePasswordPolicy, UserPasswordHistory, ) from authentik.flows.models import FlowDesignation, FlowStageBinding from authentik.flows.tests import FlowTestCase -from authentik.lib.generators import generate_id from authentik.stages.prompt.models import FieldTypes, Prompt, PromptStage diff --git a/authentik/enterprise/policies/unique_password/tests/test_stages.py b/authentik/enterprise/policies/unique_password/tests/test_stages.py index 558c106753..28a58dafbd 100644 --- a/authentik/enterprise/policies/unique_password/tests/test_stages.py +++ b/authentik/enterprise/policies/unique_password/tests/test_stages.py @@ -2,6 +2,7 @@ from django.urls import reverse from authentik.core.models import Group, Source, User from authentik.core.tests.utils import create_test_flow, create_test_user +from authentik.crypto.generators import generate_key from authentik.enterprise.policies.unique_password.models import ( UniquePasswordPolicy, UserPasswordHistory, @@ -11,7 +12,6 @@ from authentik.flows.models import FlowStageBinding from authentik.flows.planner import PLAN_CONTEXT_PENDING_USER, FlowPlan from authentik.flows.tests import FlowTestCase from authentik.flows.views.executor import SESSION_KEY_PLAN -from authentik.lib.generators import generate_key from authentik.policies.models import PolicyBinding, PolicyBindingModel from authentik.stages.prompt.stage import PLAN_CONTEXT_PROMPT from authentik.stages.user_write.models import UserWriteStage diff --git a/authentik/enterprise/providers/google_workspace/tests/test_groups.py b/authentik/enterprise/providers/google_workspace/tests/test_groups.py index 2af29cbc85..212404320d 100644 --- a/authentik/enterprise/providers/google_workspace/tests/test_groups.py +++ b/authentik/enterprise/providers/google_workspace/tests/test_groups.py @@ -8,6 +8,7 @@ from authentik.blueprints.tests import apply_blueprint from authentik.common.sync.outgoing.models import OutgoingSyncDeleteAction from authentik.core.models import Application, Group, User from authentik.core.tests.utils import create_test_user +from authentik.crypto.generators import generate_id from authentik.enterprise.providers.google_workspace.clients.test_http import MockHTTP from authentik.enterprise.providers.google_workspace.models import ( GoogleWorkspaceProvider, @@ -16,7 +17,6 @@ from authentik.enterprise.providers.google_workspace.models import ( ) from authentik.enterprise.providers.google_workspace.tasks import google_workspace_sync from authentik.events.models import Event, EventAction -from authentik.lib.generators import generate_id from authentik.lib.tests.utils import load_fixture from authentik.tenants.models import Tenant diff --git a/authentik/enterprise/providers/google_workspace/tests/test_users.py b/authentik/enterprise/providers/google_workspace/tests/test_users.py index 42a0e74b48..e029350cb5 100644 --- a/authentik/enterprise/providers/google_workspace/tests/test_users.py +++ b/authentik/enterprise/providers/google_workspace/tests/test_users.py @@ -8,6 +8,7 @@ from django.test import TestCase from authentik.blueprints.tests import apply_blueprint from authentik.common.sync.outgoing.models import OutgoingSyncDeleteAction from authentik.core.models import Application, Group, User +from authentik.crypto.generators import generate_id from authentik.enterprise.providers.google_workspace.clients.test_http import MockHTTP from authentik.enterprise.providers.google_workspace.models import ( GoogleWorkspaceProvider, @@ -16,7 +17,6 @@ from authentik.enterprise.providers.google_workspace.models import ( ) from authentik.enterprise.providers.google_workspace.tasks import google_workspace_sync from authentik.events.models import Event, EventAction -from authentik.lib.generators import generate_id from authentik.lib.tests.utils import load_fixture from authentik.tenants.models import Tenant diff --git a/authentik/enterprise/providers/microsoft_entra/tests/test_groups.py b/authentik/enterprise/providers/microsoft_entra/tests/test_groups.py index e05a9d9908..1d86eeffa4 100644 --- a/authentik/enterprise/providers/microsoft_entra/tests/test_groups.py +++ b/authentik/enterprise/providers/microsoft_entra/tests/test_groups.py @@ -16,6 +16,7 @@ from authentik.blueprints.tests import apply_blueprint from authentik.common.sync.outgoing.models import OutgoingSyncDeleteAction from authentik.core.models import Application, Group, User from authentik.core.tests.utils import create_test_user +from authentik.crypto.generators import generate_id from authentik.enterprise.providers.microsoft_entra.models import ( MicrosoftEntraProvider, MicrosoftEntraProviderGroup, @@ -24,7 +25,6 @@ from authentik.enterprise.providers.microsoft_entra.models import ( ) from authentik.enterprise.providers.microsoft_entra.tasks import microsoft_entra_sync from authentik.events.models import Event, EventAction -from authentik.lib.generators import generate_id from authentik.tenants.models import Tenant diff --git a/authentik/enterprise/providers/microsoft_entra/tests/test_users.py b/authentik/enterprise/providers/microsoft_entra/tests/test_users.py index 4a51171191..93b88a5ded 100644 --- a/authentik/enterprise/providers/microsoft_entra/tests/test_users.py +++ b/authentik/enterprise/providers/microsoft_entra/tests/test_users.py @@ -16,6 +16,7 @@ from authentik.blueprints.tests import apply_blueprint from authentik.common.sync.outgoing.models import OutgoingSyncDeleteAction from authentik.core.models import Application, Group, User from authentik.core.tests.utils import create_test_admin_user +from authentik.crypto.generators import generate_id from authentik.enterprise.providers.microsoft_entra.models import ( MicrosoftEntraProvider, MicrosoftEntraProviderMapping, @@ -23,7 +24,6 @@ from authentik.enterprise.providers.microsoft_entra.models import ( ) from authentik.enterprise.providers.microsoft_entra.tasks import microsoft_entra_sync from authentik.events.models import Event, EventAction -from authentik.lib.generators import generate_id from authentik.tenants.models import Tenant diff --git a/authentik/enterprise/providers/ssf/tests/test_config.py b/authentik/enterprise/providers/ssf/tests/test_config.py index 4487a00fa3..5d5d2d3559 100644 --- a/authentik/enterprise/providers/ssf/tests/test_config.py +++ b/authentik/enterprise/providers/ssf/tests/test_config.py @@ -5,10 +5,10 @@ from rest_framework.test import APITestCase from authentik.core.models import Application from authentik.core.tests.utils import create_test_cert +from authentik.crypto.generators import generate_id from authentik.enterprise.providers.ssf.models import ( SSFProvider, ) -from authentik.lib.generators import generate_id class TestConfiguration(APITestCase): diff --git a/authentik/enterprise/providers/ssf/tests/test_jwks.py b/authentik/enterprise/providers/ssf/tests/test_jwks.py index c0674535c4..3c4daf7807 100644 --- a/authentik/enterprise/providers/ssf/tests/test_jwks.py +++ b/authentik/enterprise/providers/ssf/tests/test_jwks.py @@ -11,8 +11,8 @@ from jwt import PyJWKSet from authentik.core.models import Application from authentik.core.tests.utils import create_test_cert +from authentik.crypto.generators import generate_id from authentik.enterprise.providers.ssf.models import SSFProvider -from authentik.lib.generators import generate_id class TestJWKS(TestCase): diff --git a/authentik/enterprise/providers/ssf/tests/test_signals.py b/authentik/enterprise/providers/ssf/tests/test_signals.py index 72c5423d3d..ec2be912f6 100644 --- a/authentik/enterprise/providers/ssf/tests/test_signals.py +++ b/authentik/enterprise/providers/ssf/tests/test_signals.py @@ -8,6 +8,7 @@ from authentik.core.tests.utils import ( create_test_cert, create_test_user, ) +from authentik.crypto.generators import generate_id from authentik.enterprise.providers.ssf.models import ( EventTypes, SSFEventStatus, @@ -15,7 +16,6 @@ from authentik.enterprise.providers.ssf.models import ( Stream, StreamEvent, ) -from authentik.lib.generators import generate_id from authentik.policies.models import PolicyBinding from authentik.stages.authenticator_webauthn.models import WebAuthnDevice diff --git a/authentik/enterprise/providers/ssf/tests/test_stream.py b/authentik/enterprise/providers/ssf/tests/test_stream.py index f849561ef4..388a14de14 100644 --- a/authentik/enterprise/providers/ssf/tests/test_stream.py +++ b/authentik/enterprise/providers/ssf/tests/test_stream.py @@ -7,13 +7,13 @@ from rest_framework.test import APITestCase from authentik.core.models import Application from authentik.core.tests.utils import create_test_admin_user, create_test_cert, create_test_flow +from authentik.crypto.generators import generate_id from authentik.enterprise.providers.ssf.models import ( SSFEventStatus, SSFProvider, Stream, StreamEvent, ) -from authentik.lib.generators import generate_id from authentik.providers.oauth2.id_token import IDToken from authentik.providers.oauth2.models import AccessToken, OAuth2Provider diff --git a/authentik/enterprise/stages/source/tests.py b/authentik/enterprise/stages/source/tests.py index 5dc93a59ff..de3159c95a 100644 --- a/authentik/enterprise/stages/source/tests.py +++ b/authentik/enterprise/stages/source/tests.py @@ -3,13 +3,13 @@ from django.urls import reverse from authentik.core.tests.utils import create_test_flow, create_test_user +from authentik.crypto.generators import generate_id from authentik.enterprise.stages.source.models import SourceStage from authentik.enterprise.stages.source.stage import SourceStageFinal from authentik.flows.models import FlowDesignation, FlowStageBinding, FlowToken, in_memory_stage from authentik.flows.planner import PLAN_CONTEXT_IS_RESTORED, FlowPlan from authentik.flows.tests import FlowTestCase from authentik.flows.views.executor import SESSION_KEY_PLAN -from authentik.lib.generators import generate_id from authentik.sources.saml.models import SAMLSource from authentik.stages.identification.models import IdentificationStage, UserFields from authentik.stages.password import BACKEND_INBUILT diff --git a/authentik/enterprise/tests/test_license.py b/authentik/enterprise/tests/test_license.py index c76f141f10..7502f7e2cc 100644 --- a/authentik/enterprise/tests/test_license.py +++ b/authentik/enterprise/tests/test_license.py @@ -8,6 +8,7 @@ from django.test import TestCase from django.utils.timezone import now from rest_framework.exceptions import ValidationError +from authentik.crypto.generators import generate_id from authentik.enterprise.license import LicenseKey from authentik.enterprise.models import ( THRESHOLD_READ_ONLY_WEEKS, @@ -17,7 +18,6 @@ from authentik.enterprise.models import ( LicenseUsage, LicenseUsageStatus, ) -from authentik.lib.generators import generate_id # Valid license expiry expiry_valid = int(mktime((now() + timedelta(days=3000)).timetuple())) diff --git a/authentik/enterprise/tests/test_read_only.py b/authentik/enterprise/tests/test_read_only.py index df6da957c9..1f0bb379b0 100644 --- a/authentik/enterprise/tests/test_read_only.py +++ b/authentik/enterprise/tests/test_read_only.py @@ -7,6 +7,7 @@ from django.urls import reverse from django.utils.timezone import now from authentik.core.tests.utils import create_test_admin_user, create_test_flow, create_test_user +from authentik.crypto.generators import generate_id from authentik.enterprise.license import LicenseKey from authentik.enterprise.models import ( THRESHOLD_READ_ONLY_WEEKS, @@ -20,7 +21,6 @@ from authentik.flows.models import ( FlowStageBinding, ) from authentik.flows.tests import FlowTestCase -from authentik.lib.generators import generate_id from authentik.stages.identification.models import IdentificationStage, UserFields from authentik.stages.password import BACKEND_INBUILT from authentik.stages.password.models import PasswordStage diff --git a/authentik/events/middleware.py b/authentik/events/middleware.py index e311b7051f..f472ed74b4 100644 --- a/authentik/events/middleware.py +++ b/authentik/events/middleware.py @@ -19,8 +19,8 @@ from authentik.core.models import Group, User from authentik.events.models import Event, EventAction, Notification from authentik.events.utils import model_to_dict from authentik.lib.models import excluded_models -from authentik.lib.sentry import before_send from authentik.lib.utils.errors import exception_to_string +from authentik.root.sentry import should_ignore_exception from authentik.stages.authenticator_static.models import StaticToken IGNORED_MODELS = tuple( @@ -173,7 +173,7 @@ class AuditMiddleware: message=exception_to_string(exception), ) thread.run() - elif before_send({}, {"exc_info": (None, exception, None)}) is not None: + elif not should_ignore_exception(exception): thread = EventNewThread( EventAction.SYSTEM_EXCEPTION, request, diff --git a/authentik/events/models.py b/authentik/events/models.py index cf139344e7..6e03aaf8e1 100644 --- a/authentik/events/models.py +++ b/authentik/events/models.py @@ -27,6 +27,7 @@ from structlog.stdlib import get_logger from authentik import get_full_version from authentik.brands.models import Brand from authentik.brands.utils import DEFAULT_BRAND +from authentik.common.exceptions import NotReportedException from authentik.core.middleware import ( SESSION_KEY_IMPERSONATE_ORIGINAL_USER, SESSION_KEY_IMPERSONATE_USER, @@ -46,7 +47,6 @@ from authentik.lib.models import ( SerializerModel, internal_model, ) -from authentik.lib.sentry import SentryIgnoredException from authentik.lib.utils.http import get_http_session from authentik.lib.utils.time import timedelta_from_string from authentik.policies.models import PolicyBindingModel @@ -81,7 +81,7 @@ def django_app_names() -> list[str]: return [x.name for x in apps.app_configs.values()] -class NotificationTransportError(SentryIgnoredException): +class NotificationTransportError(NotReportedException): """Error raised when a notification fails to be delivered""" diff --git a/authentik/events/tests/test_api.py b/authentik/events/tests/test_api.py index 51028c8a8f..766be74bab 100644 --- a/authentik/events/tests/test_api.py +++ b/authentik/events/tests/test_api.py @@ -6,6 +6,7 @@ from django.urls import reverse from rest_framework.test import APITestCase from authentik.core.tests.utils import create_test_admin_user +from authentik.crypto.generators import generate_id from authentik.events.models import ( Event, EventAction, @@ -14,7 +15,6 @@ from authentik.events.models import ( TransportMode, ) from authentik.events.utils import model_to_dict -from authentik.lib.generators import generate_id from authentik.providers.oauth2.models import OAuth2Provider diff --git a/authentik/events/tests/test_event.py b/authentik/events/tests/test_event.py index b40aad7be7..5fa43c760b 100644 --- a/authentik/events/tests/test_event.py +++ b/authentik/events/tests/test_event.py @@ -9,9 +9,9 @@ from guardian.shortcuts import get_anonymous_user from authentik.brands.models import Brand from authentik.core.models import Group +from authentik.crypto.generators import generate_id from authentik.events.models import Event from authentik.flows.views.executor import QS_QUERY -from authentik.lib.generators import generate_id from authentik.policies.dummy.models import DummyPolicy diff --git a/authentik/events/tests/test_middleware.py b/authentik/events/tests/test_middleware.py index a5d721a4f0..e42cc57af9 100644 --- a/authentik/events/tests/test_middleware.py +++ b/authentik/events/tests/test_middleware.py @@ -5,9 +5,9 @@ from rest_framework.test import APITestCase from authentik.core.models import Application, Token, TokenIntents from authentik.core.tests.utils import create_test_admin_user +from authentik.crypto.generators import generate_id from authentik.events.middleware import audit_ignore, audit_overwrite_user from authentik.events.models import Event, EventAction -from authentik.lib.generators import generate_id class TestEventsMiddleware(APITestCase): diff --git a/authentik/events/tests/test_notifications.py b/authentik/events/tests/test_notifications.py index 6fd6050cc5..470bf41f50 100644 --- a/authentik/events/tests/test_notifications.py +++ b/authentik/events/tests/test_notifications.py @@ -6,6 +6,7 @@ from django.urls import reverse from rest_framework.test import APITestCase from authentik.core.models import Group, User +from authentik.crypto.generators import generate_id from authentik.events.models import ( Event, EventAction, @@ -16,7 +17,6 @@ from authentik.events.models import ( NotificationWebhookMapping, TransportMode, ) -from authentik.lib.generators import generate_id from authentik.policies.event_matcher.models import EventMatcherPolicy from authentik.policies.exceptions import PolicyException from authentik.policies.models import PolicyBinding diff --git a/authentik/events/tests/test_tasks.py b/authentik/events/tests/test_tasks.py index 353c11b07f..2ffbf31877 100644 --- a/authentik/events/tests/test_tasks.py +++ b/authentik/events/tests/test_tasks.py @@ -7,10 +7,10 @@ from rest_framework.test import APITestCase from authentik.core.tasks import clean_expired_models from authentik.core.tests.utils import create_test_admin_user +from authentik.crypto.generators import generate_id from authentik.events.models import SystemTask as DBSystemTask from authentik.events.models import TaskStatus from authentik.events.system_tasks import SystemTask -from authentik.lib.generators import generate_id from authentik.root.celery import CELERY_APP diff --git a/authentik/events/tests/test_transports.py b/authentik/events/tests/test_transports.py index f4be8cc429..ac36f4f915 100644 --- a/authentik/events/tests/test_transports.py +++ b/authentik/events/tests/test_transports.py @@ -9,6 +9,7 @@ from requests_mock import Mocker from authentik import get_full_version from authentik.core.tests.utils import create_test_admin_user +from authentik.crypto.generators import generate_id from authentik.events.models import ( Event, Notification, @@ -17,7 +18,6 @@ from authentik.events.models import ( NotificationWebhookMapping, TransportMode, ) -from authentik.lib.generators import generate_id class TestEventTransports(TestCase): diff --git a/authentik/flows/exceptions.py b/authentik/flows/exceptions.py index 81b9793507..4756a704ff 100644 --- a/authentik/flows/exceptions.py +++ b/authentik/flows/exceptions.py @@ -2,11 +2,11 @@ from django.utils.translation import gettext_lazy as _ -from authentik.lib.sentry import SentryIgnoredException +from authentik.common.exceptions import NotReportedException from authentik.policies.types import PolicyResult -class FlowNonApplicableException(SentryIgnoredException): +class FlowNonApplicableException(NotReportedException): """Flow does not apply to current user (denied by policy, or otherwise).""" policy_result: PolicyResult | None = None @@ -19,14 +19,14 @@ class FlowNonApplicableException(SentryIgnoredException): return "\n".join(self.policy_result.messages) -class EmptyFlowException(SentryIgnoredException): +class EmptyFlowException(NotReportedException): """Flow has no stages.""" -class FlowSkipStageException(SentryIgnoredException): +class FlowSkipStageException(NotReportedException): """Exception to skip a stage""" -class StageInvalidException(SentryIgnoredException): +class StageInvalidException(NotReportedException): """Exception can be thrown in a `Challenge` or `ChallengeResponse` serializer's validation to trigger a `executor.stage_invalid()` response""" diff --git a/authentik/flows/tests/test_api.py b/authentik/flows/tests/test_api.py index 4b14817b47..90295dd4f2 100644 --- a/authentik/flows/tests/test_api.py +++ b/authentik/flows/tests/test_api.py @@ -6,9 +6,9 @@ from django.urls import reverse from rest_framework.test import APITestCase from authentik.core.tests.utils import create_test_admin_user, create_test_flow +from authentik.crypto.generators import generate_id from authentik.flows.api.stages import StageSerializer, StageViewSet from authentik.flows.models import Flow, FlowDesignation, FlowStageBinding, Stage -from authentik.lib.generators import generate_id from authentik.policies.dummy.models import DummyPolicy from authentik.policies.models import PolicyBinding from authentik.stages.dummy.models import DummyStage diff --git a/authentik/flows/tests/test_executor.py b/authentik/flows/tests/test_executor.py index f424b2276f..d98db97b2d 100644 --- a/authentik/flows/tests/test_executor.py +++ b/authentik/flows/tests/test_executor.py @@ -9,6 +9,7 @@ from django.urls import reverse from authentik.core.models import Group, User from authentik.core.tests.utils import create_test_flow, create_test_user +from authentik.crypto.generators import generate_id from authentik.flows.markers import ReevaluateMarker, StageMarker from authentik.flows.models import ( FlowDeniedAction, @@ -25,7 +26,6 @@ from authentik.flows.views.executor import ( SESSION_KEY_PLAN, FlowExecutorView, ) -from authentik.lib.generators import generate_id from authentik.policies.dummy.models import DummyPolicy from authentik.policies.models import PolicyBinding from authentik.policies.reputation.models import ReputationPolicy diff --git a/authentik/flows/tests/test_inspector.py b/authentik/flows/tests/test_inspector.py index e1c21d0f3a..af2f7602b3 100644 --- a/authentik/flows/tests/test_inspector.py +++ b/authentik/flows/tests/test_inspector.py @@ -7,8 +7,8 @@ from django.urls.base import reverse from rest_framework.test import APITestCase from authentik.core.tests.utils import create_test_admin_user, create_test_flow +from authentik.crypto.generators import generate_id from authentik.flows.models import FlowDesignation, FlowStageBinding, InvalidResponseAction -from authentik.lib.generators import generate_id from authentik.stages.dummy.models import DummyStage from authentik.stages.identification.models import IdentificationStage, UserFields diff --git a/authentik/flows/tests/test_planner.py b/authentik/flows/tests/test_planner.py index f54fe116e4..1173c822dc 100644 --- a/authentik/flows/tests/test_planner.py +++ b/authentik/flows/tests/test_planner.py @@ -14,6 +14,7 @@ from guardian.shortcuts import get_anonymous_user from authentik.blueprints.tests import reconcile_app from authentik.core.models import User from authentik.core.tests.utils import create_test_admin_user, create_test_flow +from authentik.crypto.generators import generate_id from authentik.flows.exceptions import EmptyFlowException, FlowNonApplicableException from authentik.flows.markers import ReevaluateMarker, StageMarker from authentik.flows.models import ( @@ -29,7 +30,6 @@ from authentik.flows.planner import ( cache_key, ) from authentik.flows.stage import StageView -from authentik.lib.generators import generate_id from authentik.lib.tests.utils import dummy_get_response from authentik.outposts.apps import MANAGED_OUTPOST from authentik.outposts.models import Outpost diff --git a/authentik/flows/tests/test_views_helper.py b/authentik/flows/tests/test_views_helper.py index d5a64d84ae..53ec333828 100644 --- a/authentik/flows/tests/test_views_helper.py +++ b/authentik/flows/tests/test_views_helper.py @@ -5,10 +5,10 @@ from django.urls import reverse from authentik.core.models import Application from authentik.core.tests.utils import create_test_flow +from authentik.crypto.generators import generate_id from authentik.flows.models import Flow, FlowDesignation from authentik.flows.planner import FlowPlan from authentik.flows.views.executor import SESSION_KEY_APPLICATION_PRE, SESSION_KEY_PLAN -from authentik.lib.generators import generate_id from authentik.providers.oauth2.models import OAuth2Provider diff --git a/authentik/flows/views/executor.py b/authentik/flows/views/executor.py index 40dd170b25..4329c68216 100644 --- a/authentik/flows/views/executor.py +++ b/authentik/flows/views/executor.py @@ -23,6 +23,7 @@ from sentry_sdk.api import set_tag from structlog.stdlib import BoundLogger, get_logger from authentik.brands.models import Brand +from authentik.common.exceptions import NotReportedException from authentik.core.models import Application from authentik.events.models import Event, EventAction, cleanse_dict from authentik.flows.apps import HIST_FLOW_EXECUTION_STAGE_TIME @@ -55,7 +56,6 @@ from authentik.flows.planner import ( FlowPlanner, ) from authentik.flows.stage import AccessDeniedStage, StageView -from authentik.lib.sentry import SentryIgnoredException from authentik.lib.utils.errors import exception_to_string from authentik.lib.utils.reflection import all_subclasses, class_to_path from authentik.lib.utils.urls import is_url_absolute, redirect_with_qs @@ -93,7 +93,7 @@ def challenge_response_types(): return mapping -class InvalidStageError(SentryIgnoredException): +class InvalidStageError(NotReportedException): """Error raised when a challenge from a stage is not valid""" diff --git a/authentik/lib/tests/test_evaluator.py b/authentik/lib/tests/test_evaluator.py index 6953f9d1ef..ae48d482b6 100644 --- a/authentik/lib/tests/test_evaluator.py +++ b/authentik/lib/tests/test_evaluator.py @@ -7,8 +7,8 @@ from jwt import decode from authentik.blueprints.tests import apply_blueprint from authentik.common.expression.evaluator import BaseEvaluator from authentik.core.tests.utils import create_test_admin_user, create_test_flow, create_test_user +from authentik.crypto.generators import generate_id from authentik.events.models import Event -from authentik.lib.generators import generate_id from authentik.providers.oauth2.models import OAuth2Provider, ScopeMapping diff --git a/authentik/lib/tests/test_sentry.py b/authentik/lib/tests/test_sentry.py index e54664d7d5..5822efad8c 100644 --- a/authentik/lib/tests/test_sentry.py +++ b/authentik/lib/tests/test_sentry.py @@ -2,7 +2,7 @@ from django.test import TestCase -from authentik.lib.sentry import SentryIgnoredException, before_send +from authentik.common.exceptions import NotReportedException, before_send class TestSentry(TestCase): @@ -10,7 +10,7 @@ class TestSentry(TestCase): def test_error_not_sent(self): """Test SentryIgnoredError not sent""" - self.assertIsNone(before_send({}, {"exc_info": (0, SentryIgnoredException(), 0)})) + self.assertIsNone(before_send({}, {"exc_info": (0, NotReportedException(), 0)})) def test_error_sent(self): """Test error sent""" diff --git a/authentik/outposts/controllers/base.py b/authentik/outposts/controllers/base.py index a7321e01cc..50d2c859f9 100644 --- a/authentik/outposts/controllers/base.py +++ b/authentik/outposts/controllers/base.py @@ -5,9 +5,9 @@ from dataclasses import dataclass from structlog.stdlib import get_logger from authentik import __version__, get_build_hash +from authentik.common.exceptions import NotReportedException from authentik.events.logs import LogEvent, capture_logs from authentik.lib.config import CONFIG -from authentik.lib.sentry import SentryIgnoredException from authentik.outposts.models import ( Outpost, OutpostServiceConnection, @@ -17,7 +17,7 @@ from authentik.outposts.models import ( FIELD_MANAGER = "goauthentik.io" -class ControllerException(SentryIgnoredException): +class ControllerException(NotReportedException): """Exception raised when anything fails during controller run""" diff --git a/authentik/outposts/controllers/k8s/triggers.py b/authentik/outposts/controllers/k8s/triggers.py index f9191a1ff0..418ccd3744 100644 --- a/authentik/outposts/controllers/k8s/triggers.py +++ b/authentik/outposts/controllers/k8s/triggers.py @@ -1,9 +1,9 @@ """exceptions used by the kubernetes reconciler to trigger updates""" -from authentik.lib.sentry import SentryIgnoredException +from authentik.common.exceptions import NotReportedException -class ReconcileTrigger(SentryIgnoredException): +class ReconcileTrigger(NotReportedException): """Base trigger raised by child classes to notify us""" diff --git a/authentik/outposts/models.py b/authentik/outposts/models.py index 4c1c6060cd..d8fa27311e 100644 --- a/authentik/outposts/models.py +++ b/authentik/outposts/models.py @@ -22,6 +22,7 @@ from structlog.stdlib import get_logger from authentik import __version__, get_build_hash from authentik.blueprints.models import ManagedModel from authentik.brands.models import Brand +from authentik.common.exceptions import NotReportedException from authentik.core.models import ( USER_PATH_SYSTEM_PREFIX, Provider, @@ -38,7 +39,6 @@ from authentik.lib.models import ( SerializerModel, internal_model, ) -from authentik.lib.sentry import SentryIgnoredException from authentik.lib.utils.errors import exception_to_string from authentik.outposts.controllers.k8s.utils import get_namespace @@ -49,7 +49,7 @@ LOGGER = get_logger() USER_PATH_OUTPOSTS = USER_PATH_SYSTEM_PREFIX + "/outposts" -class ServiceConnectionInvalid(SentryIgnoredException): +class ServiceConnectionInvalid(NotReportedException): """Exception raised when a Service Connection has invalid parameters""" diff --git a/authentik/outposts/tests/test_api.py b/authentik/outposts/tests/test_api.py index 99b2da915b..8bcce981c8 100644 --- a/authentik/outposts/tests/test_api.py +++ b/authentik/outposts/tests/test_api.py @@ -6,7 +6,7 @@ from rest_framework.test import APITestCase from authentik.blueprints.tests import reconcile_app from authentik.core.models import PropertyMapping from authentik.core.tests.utils import create_test_admin_user, create_test_flow -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.outposts.api.outposts import OutpostSerializer from authentik.outposts.apps import MANAGED_OUTPOST from authentik.outposts.models import Outpost, OutpostType, default_outpost_config diff --git a/authentik/outposts/tests/test_controller_k8s.py b/authentik/outposts/tests/test_controller_k8s.py index cfd116ffe3..e463f17805 100644 --- a/authentik/outposts/tests/test_controller_k8s.py +++ b/authentik/outposts/tests/test_controller_k8s.py @@ -3,7 +3,7 @@ from django.test import TestCase from authentik.blueprints.tests import reconcile_app -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.outposts.apps import MANAGED_OUTPOST from authentik.outposts.controllers.k8s.deployment import DeploymentReconciler from authentik.outposts.controllers.kubernetes import KubernetesController diff --git a/authentik/policies/exceptions.py b/authentik/policies/exceptions.py index 83e97bd318..0f469a33cd 100644 --- a/authentik/policies/exceptions.py +++ b/authentik/policies/exceptions.py @@ -1,13 +1,13 @@ """policy exceptions""" -from authentik.lib.sentry import SentryIgnoredException +from authentik.common.exceptions import NotReportedException -class PolicyEngineException(SentryIgnoredException): +class PolicyEngineException(NotReportedException): """Error raised when a policy engine is configured incorrectly""" -class PolicyException(SentryIgnoredException): +class PolicyException(NotReportedException): """Exception that should be raised during Policy Evaluation, and can be recovered from.""" src_exc: Exception | None = None diff --git a/authentik/policies/expression/tests.py b/authentik/policies/expression/tests.py index ed8fac2c65..367c2f8b76 100644 --- a/authentik/policies/expression/tests.py +++ b/authentik/policies/expression/tests.py @@ -6,7 +6,7 @@ from rest_framework.serializers import ValidationError from rest_framework.test import APITestCase from authentik.core.models import Application -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.policies.exceptions import PolicyException from authentik.policies.expression.api import ExpressionPolicySerializer from authentik.policies.expression.evaluator import PolicyEvaluator diff --git a/authentik/policies/geoip/exceptions.py b/authentik/policies/geoip/exceptions.py index a735902632..bd497aa36c 100644 --- a/authentik/policies/geoip/exceptions.py +++ b/authentik/policies/geoip/exceptions.py @@ -1,5 +1,5 @@ -from authentik.lib.sentry import SentryIgnoredException +from authentik.common.exceptions import NotReportedException -class GeoIPNotFoundException(SentryIgnoredException): +class GeoIPNotFoundException(NotReportedException): """Exception raised when an IP is not found in a GeoIP database""" diff --git a/authentik/policies/password/tests/test_flows.py b/authentik/policies/password/tests/test_flows.py index 1dc18fc9c4..be338e8b4e 100644 --- a/authentik/policies/password/tests/test_flows.py +++ b/authentik/policies/password/tests/test_flows.py @@ -3,9 +3,9 @@ from django.urls.base import reverse from authentik.core.tests.utils import create_test_admin_user, create_test_flow +from authentik.crypto.generators import generate_id from authentik.flows.models import FlowDesignation, FlowStageBinding from authentik.flows.tests import FlowTestCase -from authentik.lib.generators import generate_id from authentik.policies.password.models import PasswordPolicy from authentik.stages.prompt.models import FieldTypes, Prompt, PromptStage diff --git a/authentik/policies/password/tests/test_hibp.py b/authentik/policies/password/tests/test_hibp.py index 03ad652d93..acce4aad76 100644 --- a/authentik/policies/password/tests/test_hibp.py +++ b/authentik/policies/password/tests/test_hibp.py @@ -3,7 +3,7 @@ from django.test import TestCase from guardian.shortcuts import get_anonymous_user -from authentik.lib.generators import generate_key +from authentik.crypto.generators import generate_key from authentik.policies.password.models import PasswordPolicy from authentik.policies.types import PolicyRequest, PolicyResult from authentik.stages.prompt.stage import PLAN_CONTEXT_PROMPT diff --git a/authentik/policies/password/tests/test_policy.py b/authentik/policies/password/tests/test_policy.py index 4e67a7c4a0..f58ceb5554 100644 --- a/authentik/policies/password/tests/test_policy.py +++ b/authentik/policies/password/tests/test_policy.py @@ -3,7 +3,7 @@ from django.test import TestCase from guardian.shortcuts import get_anonymous_user -from authentik.lib.generators import generate_key +from authentik.crypto.generators import generate_key from authentik.policies.password.models import PasswordPolicy from authentik.policies.types import PolicyRequest, PolicyResult diff --git a/authentik/policies/password/tests/test_zxcvbn.py b/authentik/policies/password/tests/test_zxcvbn.py index 71a974eb1d..ef5dae8837 100644 --- a/authentik/policies/password/tests/test_zxcvbn.py +++ b/authentik/policies/password/tests/test_zxcvbn.py @@ -3,7 +3,7 @@ from django.test import TestCase from guardian.shortcuts import get_anonymous_user -from authentik.lib.generators import generate_key +from authentik.crypto.generators import generate_key from authentik.policies.password.models import PasswordPolicy from authentik.policies.types import PolicyRequest, PolicyResult from authentik.stages.prompt.stage import PLAN_CONTEXT_PROMPT diff --git a/authentik/policies/reputation/tests.py b/authentik/policies/reputation/tests.py index 1486d55574..e7b3684f9c 100644 --- a/authentik/policies/reputation/tests.py +++ b/authentik/policies/reputation/tests.py @@ -3,7 +3,7 @@ from django.test import RequestFactory, TestCase from authentik.core.models import User -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.policies.reputation.api import ReputationPolicySerializer from authentik.policies.reputation.models import Reputation, ReputationPolicy from authentik.policies.reputation.signals import update_score diff --git a/authentik/policies/tests/test_engine.py b/authentik/policies/tests/test_engine.py index 89b49ef1cb..2ac2a33881 100644 --- a/authentik/policies/tests/test_engine.py +++ b/authentik/policies/tests/test_engine.py @@ -4,7 +4,7 @@ from django.core.cache import cache from django.test import TestCase from authentik.core.tests.utils import create_test_admin_user -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.policies.dummy.models import DummyPolicy from authentik.policies.engine import PolicyEngine from authentik.policies.exceptions import PolicyEngineException diff --git a/authentik/policies/tests/test_process.py b/authentik/policies/tests/test_process.py index 20e6db9f51..aca0232865 100644 --- a/authentik/policies/tests/test_process.py +++ b/authentik/policies/tests/test_process.py @@ -8,8 +8,8 @@ from django.views.debug import SafeExceptionReporterFilter from guardian.shortcuts import get_anonymous_user from authentik.core.models import Application, Group, User +from authentik.crypto.generators import generate_id from authentik.events.models import Event, EventAction -from authentik.lib.generators import generate_id from authentik.policies.dummy.models import DummyPolicy from authentik.policies.expression.models import ExpressionPolicy from authentik.policies.models import Policy, PolicyBinding diff --git a/authentik/policies/views.py b/authentik/policies/views.py index 23cf1cd51b..38474fdf70 100644 --- a/authentik/policies/views.py +++ b/authentik/policies/views.py @@ -10,9 +10,9 @@ from django.utils.translation import gettext as _ from django.views.generic.base import View from structlog.stdlib import get_logger +from authentik.common.exceptions import NotReportedException from authentik.core.models import Application, Provider, User from authentik.flows.views.executor import SESSION_KEY_APPLICATION_PRE, SESSION_KEY_POST -from authentik.lib.sentry import SentryIgnoredException from authentik.policies.denied import AccessDeniedResponse from authentik.policies.engine import PolicyEngine from authentik.policies.types import PolicyRequest, PolicyResult @@ -20,7 +20,7 @@ from authentik.policies.types import PolicyRequest, PolicyResult LOGGER = get_logger() -class RequestValidationError(SentryIgnoredException): +class RequestValidationError(NotReportedException): """Error raised in pre_permission_check, when a request is invalid.""" response: HttpResponse | None diff --git a/authentik/providers/ldap/tests/test_api.py b/authentik/providers/ldap/tests/test_api.py index 3ecec6dd2c..8b1aeb824e 100644 --- a/authentik/providers/ldap/tests/test_api.py +++ b/authentik/providers/ldap/tests/test_api.py @@ -7,7 +7,7 @@ from rest_framework.test import APITestCase from authentik.core.models import Application from authentik.core.tests.utils import create_test_admin_user, create_test_flow -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.providers.ldap.models import LDAPProvider diff --git a/authentik/providers/oauth2/id_token.py b/authentik/providers/oauth2/id_token.py index c9494a476a..958914f549 100644 --- a/authentik/providers/oauth2/id_token.py +++ b/authentik/providers/oauth2/id_token.py @@ -16,8 +16,8 @@ from authentik.common.oauth.constants import ( AMR_WEBAUTHN, ) from authentik.core.models import default_token_duration +from authentik.crypto.generators import generate_id from authentik.events.signals import get_login_event -from authentik.lib.generators import generate_id from authentik.stages.password.stage import PLAN_CONTEXT_METHOD, PLAN_CONTEXT_METHOD_ARGS if TYPE_CHECKING: diff --git a/authentik/providers/oauth2/migrations/0001_initial.py b/authentik/providers/oauth2/migrations/0001_initial.py index 4b39d4b34a..e63265b2dc 100644 --- a/authentik/providers/oauth2/migrations/0001_initial.py +++ b/authentik/providers/oauth2/migrations/0001_initial.py @@ -5,7 +5,7 @@ from django.conf import settings from django.db import migrations, models import authentik.core.models -import authentik.lib.generators +import authentik.crypto.generators import authentik.lib.utils.time @@ -56,7 +56,7 @@ class Migration(migrations.Migration): ( "client_id", models.CharField( - default=authentik.lib.generators.generate_id, + default=authentik.crypto.generators.generate_id, max_length=255, unique=True, verbose_name="Client ID", @@ -66,7 +66,7 @@ class Migration(migrations.Migration): "client_secret", models.CharField( blank=True, - default=authentik.lib.generators.generate_key, + default=authentik.crypto.generators.generate_key, max_length=255, verbose_name="Client Secret", ), diff --git a/authentik/providers/oauth2/migrations/0013_devicetoken.py b/authentik/providers/oauth2/migrations/0013_devicetoken.py index 6eeb8ef2ab..e6c23a0e61 100644 --- a/authentik/providers/oauth2/migrations/0013_devicetoken.py +++ b/authentik/providers/oauth2/migrations/0013_devicetoken.py @@ -5,7 +5,7 @@ from django.conf import settings from django.db import migrations, models import authentik.core.models -import authentik.lib.generators +import authentik.crypto.generators class Migration(migrations.Migration): @@ -29,10 +29,12 @@ class Migration(migrations.Migration): models.DateTimeField(default=authentik.core.models.default_token_duration), ), ("expiring", models.BooleanField(default=True)), - ("device_code", models.TextField(default=authentik.lib.generators.generate_key)), + ("device_code", models.TextField(default=authentik.crypto.generators.generate_key)), ( "user_code", - models.TextField(default=authentik.lib.generators.generate_code_fixed_length), + models.TextField( + default=authentik.crypto.generators.generate_code_fixed_length + ), ), ("_scope", models.TextField(default="", verbose_name="Scopes")), ( diff --git a/authentik/providers/oauth2/migrations/0014_alter_refreshtoken_options_and_more.py b/authentik/providers/oauth2/migrations/0014_alter_refreshtoken_options_and_more.py index 9a7966c51a..d3e0c42ff4 100644 --- a/authentik/providers/oauth2/migrations/0014_alter_refreshtoken_options_and_more.py +++ b/authentik/providers/oauth2/migrations/0014_alter_refreshtoken_options_and_more.py @@ -5,7 +5,7 @@ from django.conf import settings from django.db import migrations, models import authentik.core.models -import authentik.lib.generators +import authentik.crypto.generators import authentik.lib.utils.time @@ -52,7 +52,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name="refreshtoken", name="token", - field=models.TextField(default=authentik.lib.generators.generate_key), + field=models.TextField(default=authentik.crypto.generators.generate_key), ), migrations.AlterField( model_name="oauth2provider", diff --git a/authentik/providers/oauth2/models.py b/authentik/providers/oauth2/models.py index 90c132fd9b..15f643fc3b 100644 --- a/authentik/providers/oauth2/models.py +++ b/authentik/providers/oauth2/models.py @@ -40,8 +40,8 @@ from authentik.core.models import ( Provider, User, ) +from authentik.crypto.generators import generate_code_fixed_length, generate_id, generate_key from authentik.crypto.models import CertificateKeyPair -from authentik.lib.generators import generate_code_fixed_length, generate_id, generate_key from authentik.lib.models import SerializerModel, internal_model from authentik.lib.utils.time import timedelta_string_validator from authentik.providers.oauth2.id_token import IDToken, SubModes diff --git a/authentik/providers/oauth2/tests/test_api.py b/authentik/providers/oauth2/tests/test_api.py index 47ea8ac8df..02d28787d5 100644 --- a/authentik/providers/oauth2/tests/test_api.py +++ b/authentik/providers/oauth2/tests/test_api.py @@ -10,7 +10,7 @@ from rest_framework.test import APITestCase from authentik.blueprints.tests import apply_blueprint from authentik.core.models import Application from authentik.core.tests.utils import create_test_admin_user, create_test_flow -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.providers.oauth2.models import ( OAuth2Provider, RedirectURI, diff --git a/authentik/providers/oauth2/tests/test_authorize.py b/authentik/providers/oauth2/tests/test_authorize.py index a17a6ed5e1..04c3100c7c 100644 --- a/authentik/providers/oauth2/tests/test_authorize.py +++ b/authentik/providers/oauth2/tests/test_authorize.py @@ -11,8 +11,8 @@ from authentik.common.oauth.constants import TOKEN_TYPE from authentik.common.oauth.errors import AuthorizeError, ClientIdError, RedirectUriError from authentik.core.models import Application from authentik.core.tests.utils import create_test_admin_user, create_test_flow +from authentik.crypto.generators import generate_id from authentik.events.models import Event, EventAction -from authentik.lib.generators import generate_id from authentik.lib.utils.time import timedelta_from_string from authentik.providers.oauth2.models import ( AccessToken, diff --git a/authentik/providers/oauth2/tests/test_device_backchannel.py b/authentik/providers/oauth2/tests/test_device_backchannel.py index 6a30ce0310..edf1996a92 100644 --- a/authentik/providers/oauth2/tests/test_device_backchannel.py +++ b/authentik/providers/oauth2/tests/test_device_backchannel.py @@ -6,7 +6,7 @@ from django.urls import reverse from authentik.core.models import Application from authentik.core.tests.utils import create_test_flow -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.providers.oauth2.models import OAuth2Provider from authentik.providers.oauth2.tests.utils import OAuthTestCase diff --git a/authentik/providers/oauth2/tests/test_device_init.py b/authentik/providers/oauth2/tests/test_device_init.py index 5fdc8bb924..1949f381ac 100644 --- a/authentik/providers/oauth2/tests/test_device_init.py +++ b/authentik/providers/oauth2/tests/test_device_init.py @@ -7,7 +7,7 @@ from rest_framework.test import APIClient from authentik.core.models import Application, Group from authentik.core.tests.utils import create_test_admin_user, create_test_brand, create_test_flow -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.policies.models import PolicyBinding from authentik.providers.oauth2.models import DeviceToken, OAuth2Provider from authentik.providers.oauth2.tests.utils import OAuthTestCase diff --git a/authentik/providers/oauth2/tests/test_introspect.py b/authentik/providers/oauth2/tests/test_introspect.py index d7422ac58b..e0b0e673f6 100644 --- a/authentik/providers/oauth2/tests/test_introspect.py +++ b/authentik/providers/oauth2/tests/test_introspect.py @@ -10,7 +10,7 @@ from django.utils import timezone from authentik.common.oauth.constants import ACR_AUTHENTIK_DEFAULT from authentik.core.models import Application from authentik.core.tests.utils import create_test_admin_user, create_test_cert, create_test_flow -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.providers.oauth2.models import ( AccessToken, IDToken, diff --git a/authentik/providers/oauth2/tests/test_jwks.py b/authentik/providers/oauth2/tests/test_jwks.py index 87723fff9f..2fe397e40e 100644 --- a/authentik/providers/oauth2/tests/test_jwks.py +++ b/authentik/providers/oauth2/tests/test_jwks.py @@ -11,8 +11,8 @@ from jwt import PyJWKSet from authentik.core.models import Application from authentik.core.tests.utils import create_test_cert, create_test_flow from authentik.crypto.builder import PrivateKeyAlg +from authentik.crypto.generators import generate_id from authentik.crypto.models import CertificateKeyPair -from authentik.lib.generators import generate_id from authentik.providers.oauth2.models import OAuth2Provider, RedirectURI, RedirectURIMatchingMode from authentik.providers.oauth2.tests.utils import OAuthTestCase diff --git a/authentik/providers/oauth2/tests/test_revoke.py b/authentik/providers/oauth2/tests/test_revoke.py index dd21c19f39..aaf79548d3 100644 --- a/authentik/providers/oauth2/tests/test_revoke.py +++ b/authentik/providers/oauth2/tests/test_revoke.py @@ -9,7 +9,7 @@ from django.utils import timezone from authentik.core.models import Application, AuthenticatedSession, Session from authentik.core.tests.utils import create_test_admin_user, create_test_cert, create_test_flow -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.providers.oauth2.models import ( AccessToken, ClientTypes, diff --git a/authentik/providers/oauth2/tests/test_token.py b/authentik/providers/oauth2/tests/test_token.py index 5b28cc4327..3b23dc92bf 100644 --- a/authentik/providers/oauth2/tests/test_token.py +++ b/authentik/providers/oauth2/tests/test_token.py @@ -16,8 +16,8 @@ from authentik.common.oauth.constants import ( from authentik.common.oauth.errors import TokenError from authentik.core.models import Application from authentik.core.tests.utils import create_test_admin_user, create_test_flow +from authentik.crypto.generators import generate_id, generate_key from authentik.events.models import Event, EventAction -from authentik.lib.generators import generate_id, generate_key from authentik.providers.oauth2.models import ( AccessToken, AuthorizationCode, diff --git a/authentik/providers/oauth2/tests/test_token_cc_jwt_provider.py b/authentik/providers/oauth2/tests/test_token_cc_jwt_provider.py index 9f37e0a419..69a9e8defa 100644 --- a/authentik/providers/oauth2/tests/test_token_cc_jwt_provider.py +++ b/authentik/providers/oauth2/tests/test_token_cc_jwt_provider.py @@ -18,7 +18,7 @@ from authentik.common.oauth.constants import ( ) from authentik.core.models import Application, Group from authentik.core.tests.utils import create_test_cert, create_test_flow, create_test_user -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.policies.models import PolicyBinding from authentik.providers.oauth2.models import ( AccessToken, diff --git a/authentik/providers/oauth2/tests/test_token_cc_jwt_source.py b/authentik/providers/oauth2/tests/test_token_cc_jwt_source.py index f43b5de12c..0f644f1e0c 100644 --- a/authentik/providers/oauth2/tests/test_token_cc_jwt_source.py +++ b/authentik/providers/oauth2/tests/test_token_cc_jwt_source.py @@ -17,7 +17,7 @@ from authentik.common.oauth.constants import ( ) from authentik.core.models import Application, Group from authentik.core.tests.utils import create_test_cert, create_test_flow -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.policies.models import PolicyBinding from authentik.providers.oauth2.models import ( OAuth2Provider, diff --git a/authentik/providers/oauth2/tests/test_token_device.py b/authentik/providers/oauth2/tests/test_token_device.py index 0a02ffdf7e..75acaafd9a 100644 --- a/authentik/providers/oauth2/tests/test_token_device.py +++ b/authentik/providers/oauth2/tests/test_token_device.py @@ -13,7 +13,7 @@ from authentik.common.oauth.constants import ( ) from authentik.core.models import Application from authentik.core.tests.utils import create_test_admin_user, create_test_cert, create_test_flow -from authentik.lib.generators import generate_code_fixed_length, generate_id +from authentik.crypto.generators import generate_code_fixed_length, generate_id from authentik.providers.oauth2.models import ( AccessToken, DeviceToken, diff --git a/authentik/providers/oauth2/tests/test_token_pkce.py b/authentik/providers/oauth2/tests/test_token_pkce.py index f052055e57..f446c6dbf8 100644 --- a/authentik/providers/oauth2/tests/test_token_pkce.py +++ b/authentik/providers/oauth2/tests/test_token_pkce.py @@ -9,7 +9,7 @@ from django.urls import reverse from authentik.common.oauth.constants import GRANT_TYPE_AUTHORIZATION_CODE from authentik.core.models import Application from authentik.core.tests.utils import create_test_admin_user, create_test_flow -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.providers.oauth2.models import ( AuthorizationCode, OAuth2Provider, diff --git a/authentik/providers/oauth2/tests/test_userinfo.py b/authentik/providers/oauth2/tests/test_userinfo.py index e7cd423266..6079b28ff1 100644 --- a/authentik/providers/oauth2/tests/test_userinfo.py +++ b/authentik/providers/oauth2/tests/test_userinfo.py @@ -9,8 +9,8 @@ from django.utils import timezone from authentik.blueprints.tests import apply_blueprint from authentik.core.models import Application from authentik.core.tests.utils import create_test_admin_user, create_test_cert, create_test_flow +from authentik.crypto.generators import generate_id from authentik.events.models import Event, EventAction -from authentik.lib.generators import generate_id from authentik.providers.oauth2.models import ( AccessToken, IDToken, diff --git a/authentik/providers/proxy/tests.py b/authentik/providers/proxy/tests.py index 08b0a27e16..3e12a9e2d3 100644 --- a/authentik/providers/proxy/tests.py +++ b/authentik/providers/proxy/tests.py @@ -4,7 +4,7 @@ from django.urls import reverse from rest_framework.test import APITestCase from authentik.core.tests.utils import create_test_admin_user, create_test_flow -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.providers.oauth2.models import ClientTypes from authentik.providers.proxy.models import ProxyMode, ProxyProvider diff --git a/authentik/providers/rac/tests/test_api.py b/authentik/providers/rac/tests/test_api.py index c66bb11853..547d49c677 100644 --- a/authentik/providers/rac/tests/test_api.py +++ b/authentik/providers/rac/tests/test_api.py @@ -4,7 +4,7 @@ from django.urls import reverse from rest_framework.test import APITestCase from authentik.core.tests.utils import create_test_admin_user, create_test_flow -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id class TestAPI(APITestCase): diff --git a/authentik/providers/rac/tests/test_endpoints_api.py b/authentik/providers/rac/tests/test_endpoints_api.py index 9a2469bbba..d33fc40b44 100644 --- a/authentik/providers/rac/tests/test_endpoints_api.py +++ b/authentik/providers/rac/tests/test_endpoints_api.py @@ -5,7 +5,7 @@ from rest_framework.test import APITestCase from authentik.core.models import Application from authentik.core.tests.utils import create_test_admin_user -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.policies.dummy.models import DummyPolicy from authentik.policies.models import PolicyBinding from authentik.providers.rac.models import Endpoint, Protocols, RACProvider diff --git a/authentik/providers/rac/tests/test_models.py b/authentik/providers/rac/tests/test_models.py index 67a6678e55..409acbe395 100644 --- a/authentik/providers/rac/tests/test_models.py +++ b/authentik/providers/rac/tests/test_models.py @@ -4,7 +4,7 @@ from django.test import TransactionTestCase from authentik.core.models import Application, AuthenticatedSession, Session from authentik.core.tests.utils import create_test_admin_user -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.providers.rac.models import ( ConnectionToken, Endpoint, diff --git a/authentik/providers/rac/tests/test_views.py b/authentik/providers/rac/tests/test_views.py index 80778d2ebc..02b2a07c05 100644 --- a/authentik/providers/rac/tests/test_views.py +++ b/authentik/providers/rac/tests/test_views.py @@ -7,7 +7,7 @@ from rest_framework.test import APITestCase from authentik.core.models import Application from authentik.core.tests.utils import create_test_admin_user, create_test_flow -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.policies.denied import AccessDeniedResponse from authentik.policies.dummy.models import DummyPolicy from authentik.policies.models import PolicyBinding diff --git a/authentik/providers/radius/migrations/0001_initial.py b/authentik/providers/radius/migrations/0001_initial.py index d1cf7fd430..72c15c3d84 100644 --- a/authentik/providers/radius/migrations/0001_initial.py +++ b/authentik/providers/radius/migrations/0001_initial.py @@ -3,7 +3,7 @@ import django.db.models.deletion from django.db import migrations, models -import authentik.lib.generators +import authentik.crypto.generators class Migration(migrations.Migration): @@ -31,7 +31,7 @@ class Migration(migrations.Migration): ( "shared_secret", models.TextField( - default=authentik.lib.generators.generate_id, + default=authentik.crypto.generators.generate_id, help_text="Shared secret between clients and server to hash packets.", ), ), diff --git a/authentik/providers/radius/models.py b/authentik/providers/radius/models.py index 5557a2f732..7a4a2b1d15 100644 --- a/authentik/providers/radius/models.py +++ b/authentik/providers/radius/models.py @@ -6,7 +6,7 @@ from django.utils.translation import gettext_lazy as _ from rest_framework.serializers import Serializer from authentik.core.models import PropertyMapping, Provider -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.outposts.models import OutpostModel diff --git a/authentik/providers/saml/exceptions.py b/authentik/providers/saml/exceptions.py index 10f87a9724..91c8ebf18a 100644 --- a/authentik/providers/saml/exceptions.py +++ b/authentik/providers/saml/exceptions.py @@ -1,7 +1,7 @@ """authentik SAML IDP Exceptions""" -from authentik.lib.sentry import SentryIgnoredException +from authentik.common.exceptions import NotReportedException -class CannotHandleAssertion(SentryIgnoredException): +class CannotHandleAssertion(NotReportedException): """This processor does not handle this assertion.""" diff --git a/authentik/providers/saml/processors/authn_request_parser.py b/authentik/providers/saml/processors/authn_request_parser.py index 3c48dccc9d..030dde887f 100644 --- a/authentik/providers/saml/processors/authn_request_parser.py +++ b/authentik/providers/saml/processors/authn_request_parser.py @@ -20,7 +20,7 @@ from authentik.common.saml.constants import ( SAML_NAME_ID_FORMAT_UNSPECIFIED, ) from authentik.common.saml.encoding import decode_base64_and_inflate -from authentik.lib.xml import lxml_from_string +from authentik.common.saml.xml import lxml_from_string from authentik.providers.saml.exceptions import CannotHandleAssertion from authentik.providers.saml.models import SAMLProvider diff --git a/authentik/providers/saml/tests/test_api.py b/authentik/providers/saml/tests/test_api.py index e437cd04b7..f711c017d5 100644 --- a/authentik/providers/saml/tests/test_api.py +++ b/authentik/providers/saml/tests/test_api.py @@ -9,8 +9,8 @@ from rest_framework.test import APITestCase from authentik.blueprints.tests import apply_blueprint from authentik.core.models import Application from authentik.core.tests.utils import create_test_admin_user, create_test_cert, create_test_flow +from authentik.crypto.generators import generate_id from authentik.flows.models import FlowDesignation -from authentik.lib.generators import generate_id from authentik.lib.tests.utils import load_fixture from authentik.providers.saml.models import SAMLPropertyMapping, SAMLProvider diff --git a/authentik/providers/saml/tests/test_auth_n_request.py b/authentik/providers/saml/tests/test_auth_n_request.py index f970ff2662..8a6473b2de 100644 --- a/authentik/providers/saml/tests/test_auth_n_request.py +++ b/authentik/providers/saml/tests/test_auth_n_request.py @@ -15,12 +15,12 @@ from authentik.common.saml.constants import ( SAML_NAME_ID_FORMAT_UNSPECIFIED, ) from authentik.common.saml.exceptions import MismatchedRequestID +from authentik.common.saml.xml import lxml_from_string from authentik.core.tests.utils import create_test_admin_user, create_test_cert, create_test_flow +from authentik.crypto.generators import generate_id from authentik.crypto.models import CertificateKeyPair from authentik.events.models import Event, EventAction -from authentik.lib.generators import generate_id from authentik.lib.tests.utils import get_request -from authentik.lib.xml import lxml_from_string from authentik.providers.saml.models import SAMLPropertyMapping, SAMLProvider from authentik.providers.saml.processors.assertion import AssertionProcessor from authentik.providers.saml.processors.authn_request_parser import AuthNRequestParser diff --git a/authentik/providers/saml/tests/test_metadata.py b/authentik/providers/saml/tests/test_metadata.py index 531233be47..78e131fe69 100644 --- a/authentik/providers/saml/tests/test_metadata.py +++ b/authentik/providers/saml/tests/test_metadata.py @@ -6,12 +6,12 @@ from django.test import RequestFactory, TestCase from lxml import etree # nosec from authentik.common.saml.constants import ECDSA_SHA256, NS_MAP, NS_SAML_METADATA +from authentik.common.saml.xml import lxml_from_string from authentik.core.models import Application from authentik.core.tests.utils import create_test_cert, create_test_flow from authentik.crypto.builder import PrivateKeyAlg -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.lib.tests.utils import load_fixture -from authentik.lib.xml import lxml_from_string from authentik.providers.saml.models import SAMLBindings, SAMLPropertyMapping, SAMLProvider from authentik.providers.saml.processors.metadata import MetadataProcessor from authentik.providers.saml.processors.metadata_parser import ServiceProviderMetadataParser diff --git a/authentik/providers/saml/tests/test_schema.py b/authentik/providers/saml/tests/test_schema.py index 4f70541b33..b8ca31e3f5 100644 --- a/authentik/providers/saml/tests/test_schema.py +++ b/authentik/providers/saml/tests/test_schema.py @@ -6,9 +6,9 @@ from django.test import TestCase from lxml import etree # nosec from authentik.blueprints.tests import apply_blueprint +from authentik.common.saml.xml import lxml_from_string from authentik.core.tests.utils import create_test_cert, create_test_flow from authentik.lib.tests.utils import get_request -from authentik.lib.xml import lxml_from_string from authentik.providers.saml.models import SAMLPropertyMapping, SAMLProvider from authentik.providers.saml.processors.assertion import AssertionProcessor from authentik.providers.saml.processors.authn_request_parser import AuthNRequestParser diff --git a/authentik/providers/scim/tests/test_client.py b/authentik/providers/scim/tests/test_client.py index 0d3dd57e51..2c9df03c7d 100644 --- a/authentik/providers/scim/tests/test_client.py +++ b/authentik/providers/scim/tests/test_client.py @@ -5,7 +5,7 @@ from requests_mock import Mocker from authentik.blueprints.tests import apply_blueprint from authentik.core.models import Application -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.providers.scim.clients.base import SCIMClient from authentik.providers.scim.models import SCIMMapping, SCIMProvider from authentik.providers.scim.tasks import scim_sync_all diff --git a/authentik/providers/scim/tests/test_group.py b/authentik/providers/scim/tests/test_group.py index b0b7058f52..077749e461 100644 --- a/authentik/providers/scim/tests/test_group.py +++ b/authentik/providers/scim/tests/test_group.py @@ -8,7 +8,7 @@ from requests_mock import Mocker from authentik.blueprints.tests import apply_blueprint from authentik.core.models import Application, Group, User -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.providers.scim.models import SCIMMapping, SCIMProvider diff --git a/authentik/providers/scim/tests/test_membership.py b/authentik/providers/scim/tests/test_membership.py index 72cac06f0d..6100a6c9e9 100644 --- a/authentik/providers/scim/tests/test_membership.py +++ b/authentik/providers/scim/tests/test_membership.py @@ -6,7 +6,7 @@ from requests_mock import Mocker from authentik.blueprints.tests import apply_blueprint from authentik.common.scim.schema import ServiceProviderConfiguration from authentik.core.models import Application, Group, User -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.providers.scim.models import SCIMMapping, SCIMProvider from authentik.providers.scim.tasks import scim_sync, sync_tasks from authentik.tenants.models import Tenant diff --git a/authentik/providers/scim/tests/test_user.py b/authentik/providers/scim/tests/test_user.py index cc8cd0e5e7..4071accebb 100644 --- a/authentik/providers/scim/tests/test_user.py +++ b/authentik/providers/scim/tests/test_user.py @@ -10,8 +10,8 @@ from requests_mock import Mocker from authentik.blueprints.tests import apply_blueprint from authentik.common.sync.outgoing.base import SAFE_METHODS from authentik.core.models import Application, Group, User +from authentik.crypto.generators import generate_id from authentik.events.models import SystemTask -from authentik.lib.generators import generate_id from authentik.providers.scim.models import SCIMMapping, SCIMProvider from authentik.providers.scim.tasks import scim_sync, sync_tasks from authentik.tenants.models import Tenant diff --git a/authentik/rbac/tests/test_api.py b/authentik/rbac/tests/test_api.py index 5c44fd49e6..be7617b971 100644 --- a/authentik/rbac/tests/test_api.py +++ b/authentik/rbac/tests/test_api.py @@ -5,7 +5,7 @@ from rest_framework.test import APITestCase from authentik.core.models import Group from authentik.core.tests.utils import create_test_admin_user, create_test_user -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.rbac.models import Role diff --git a/authentik/rbac/tests/test_api_assigned_by_roles.py b/authentik/rbac/tests/test_api_assigned_by_roles.py index 3161917834..b010dc61b0 100644 --- a/authentik/rbac/tests/test_api_assigned_by_roles.py +++ b/authentik/rbac/tests/test_api_assigned_by_roles.py @@ -5,7 +5,7 @@ from rest_framework.test import APITestCase from authentik.core.models import Group from authentik.core.tests.utils import create_test_admin_user, create_test_user -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.rbac.api.rbac_assigned_by_roles import RoleAssignedObjectPermissionSerializer from authentik.rbac.models import Role from authentik.stages.invitation.models import Invitation diff --git a/authentik/rbac/tests/test_api_assigned_by_users.py b/authentik/rbac/tests/test_api_assigned_by_users.py index 191bf0f602..166e5c90da 100644 --- a/authentik/rbac/tests/test_api_assigned_by_users.py +++ b/authentik/rbac/tests/test_api_assigned_by_users.py @@ -6,7 +6,7 @@ from rest_framework.test import APITestCase from authentik.core.models import Group, User, UserTypes from authentik.core.tests.utils import create_test_admin_user, create_test_user -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.rbac.api.rbac_assigned_by_users import UserAssignedObjectPermissionSerializer from authentik.rbac.models import Role from authentik.stages.invitation.models import Invitation diff --git a/authentik/rbac/tests/test_api_filters.py b/authentik/rbac/tests/test_api_filters.py index 42d1e13acb..8dd2662efd 100644 --- a/authentik/rbac/tests/test_api_filters.py +++ b/authentik/rbac/tests/test_api_filters.py @@ -5,7 +5,7 @@ from rest_framework.test import APITestCase from authentik.core.models import Group from authentik.core.tests.utils import create_test_admin_user, create_test_user -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.rbac.models import Role from authentik.stages.invitation.api import InvitationSerializer from authentik.stages.invitation.models import Invitation diff --git a/authentik/rbac/tests/test_api_permissions_roles.py b/authentik/rbac/tests/test_api_permissions_roles.py index a849450bd3..8d1efb5f22 100644 --- a/authentik/rbac/tests/test_api_permissions_roles.py +++ b/authentik/rbac/tests/test_api_permissions_roles.py @@ -6,7 +6,7 @@ from rest_framework.test import APITestCase from authentik.core.models import Group from authentik.core.tests.utils import create_test_admin_user, create_test_user -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.rbac.models import Role from authentik.stages.invitation.models import Invitation diff --git a/authentik/rbac/tests/test_api_permissions_users.py b/authentik/rbac/tests/test_api_permissions_users.py index 882a2f6acc..8772980d0f 100644 --- a/authentik/rbac/tests/test_api_permissions_users.py +++ b/authentik/rbac/tests/test_api_permissions_users.py @@ -7,7 +7,7 @@ from rest_framework.test import APITestCase from authentik.core.models import Group from authentik.core.tests.utils import create_test_admin_user, create_test_user -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.rbac.models import Role from authentik.stages.invitation.models import Invitation diff --git a/authentik/rbac/tests/test_decorators.py b/authentik/rbac/tests/test_decorators.py index 974ce97652..473be0b266 100644 --- a/authentik/rbac/tests/test_decorators.py +++ b/authentik/rbac/tests/test_decorators.py @@ -6,7 +6,7 @@ from rest_framework.test import APITestCase from authentik.core.models import Application from authentik.core.tests.utils import create_test_user -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id class TestAPIDecorators(APITestCase): diff --git a/authentik/rbac/tests/test_initial_permissions.py b/authentik/rbac/tests/test_initial_permissions.py index 03945b67bc..576569ed3e 100644 --- a/authentik/rbac/tests/test_initial_permissions.py +++ b/authentik/rbac/tests/test_initial_permissions.py @@ -7,7 +7,7 @@ from rest_framework.test import APITestCase from authentik.core.models import Group from authentik.core.tests.utils import create_test_user -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.rbac.models import InitialPermissions, InitialPermissionsMode, Role from authentik.stages.dummy.models import DummyStage diff --git a/authentik/rbac/tests/test_roles.py b/authentik/rbac/tests/test_roles.py index 76ee8f46ab..9996766f04 100644 --- a/authentik/rbac/tests/test_roles.py +++ b/authentik/rbac/tests/test_roles.py @@ -5,7 +5,7 @@ from rest_framework.test import APITestCase from authentik.core.models import Group, User from authentik.core.tests.utils import create_test_user -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.rbac.models import Role diff --git a/authentik/root/celery.py b/authentik/root/celery.py index 34f9a77560..b1d4699807 100644 --- a/authentik/root/celery.py +++ b/authentik/root/celery.py @@ -29,8 +29,8 @@ from structlog.stdlib import get_logger from tenant_schemas_celery.app import CeleryApp as TenantAwareCeleryApp from authentik import get_full_version -from authentik.lib.sentry import before_send from authentik.lib.utils.errors import exception_to_string +from authentik.root.sentry import before_send # set the default Django settings module for the 'celery' program. os.environ.setdefault("DJANGO_SETTINGS_MODULE", "authentik.root.settings") diff --git a/authentik/lib/sentry.py b/authentik/root/sentry.py similarity index 79% rename from authentik/lib/sentry.py rename to authentik/root/sentry.py index 9f6793df4a..1d768f8ddf 100644 --- a/authentik/lib/sentry.py +++ b/authentik/root/sentry.py @@ -14,6 +14,7 @@ from django_redis.exceptions import ConnectionInterrupted from docker.errors import DockerException from h11 import LocalProtocolError from ldap3.core.exceptions import LDAPException +from psycopg.errors import Error from redis.exceptions import ConnectionError as RedisConnectionError from redis.exceptions import RedisError, ResponseError from rest_framework.exceptions import APIException @@ -31,6 +32,7 @@ from structlog.stdlib import get_logger from websockets.exceptions import WebSocketException from authentik import __version__, get_build_hash +from authentik.common.exceptions import NotReportedException from authentik.lib.config import CONFIG from authentik.lib.utils.http import authentik_user_agent from authentik.lib.utils.reflection import get_env @@ -38,9 +40,47 @@ from authentik.lib.utils.reflection import get_env LOGGER = get_logger() _root_path = CONFIG.get("web.path", "/") - -class SentryIgnoredException(Exception): - """Base Class for all errors that are suppressed, and not sent to sentry.""" +ignored_classes = ( + # Inbuilt types + KeyboardInterrupt, + ConnectionResetError, + OSError, + PermissionError, + # Django Errors + Error, + ImproperlyConfigured, + DatabaseError, + OperationalError, + InternalError, + ProgrammingError, + SuspiciousOperation, + ValidationError, + # Redis errors + RedisConnectionError, + ConnectionInterrupted, + RedisError, + ResponseError, + # websocket errors + ChannelFull, + WebSocketException, + LocalProtocolError, + # rest_framework error + APIException, + # celery errors + WorkerLostError, + CeleryError, + SoftTimeLimitExceeded, + # custom baseclass + NotReportedException, + # ldap errors + LDAPException, + # Docker errors + DockerException, + # End-user errors + Http404, + # AsyncIO + CancelledError, +) class SentryTransport(HttpTransport): @@ -98,56 +138,16 @@ def traces_sampler(sampling_context: dict) -> float: return float(CONFIG.get("error_reporting.sample_rate", 0.1)) +def should_ignore_exception(exc: Exception) -> bool: + return isinstance(exc, ignored_classes) + + def before_send(event: dict, hint: dict) -> dict | None: """Check if error is database error, and ignore if so""" - - from psycopg.errors import Error - - ignored_classes = ( - # Inbuilt types - KeyboardInterrupt, - ConnectionResetError, - OSError, - PermissionError, - # Django Errors - Error, - ImproperlyConfigured, - DatabaseError, - OperationalError, - InternalError, - ProgrammingError, - SuspiciousOperation, - ValidationError, - # Redis errors - RedisConnectionError, - ConnectionInterrupted, - RedisError, - ResponseError, - # websocket errors - ChannelFull, - WebSocketException, - LocalProtocolError, - # rest_framework error - APIException, - # celery errors - WorkerLostError, - CeleryError, - SoftTimeLimitExceeded, - # custom baseclass - SentryIgnoredException, - # ldap errors - LDAPException, - # Docker errors - DockerException, - # End-user errors - Http404, - # AsyncIO - CancelledError, - ) exc_value = None if "exc_info" in hint: _, exc_value, _ = hint["exc_info"] - if isinstance(exc_value, ignored_classes): + if should_ignore_exception(exc_value): LOGGER.debug("dropping exception", exc=exc_value) return None if "logger" in event: diff --git a/authentik/root/settings.py b/authentik/root/settings.py index b9db95553c..959fe49753 100644 --- a/authentik/root/settings.py +++ b/authentik/root/settings.py @@ -12,10 +12,10 @@ from xmlsec import enable_debug_trace from authentik import __version__ from authentik.lib.config import CONFIG, django_db_config, redis_url -from authentik.lib.sentry import sentry_init from authentik.lib.utils.reflection import get_env from authentik.lib.utils.time import timedelta_from_string from authentik.root.logging import get_logger_config, structlog_configure +from authentik.root.sentry import sentry_init from authentik.stages.password import BACKEND_APP_PASSWORD, BACKEND_INBUILT, BACKEND_LDAP BASE_DIR = Path(__file__).absolute().parent.parent.parent diff --git a/authentik/root/test_runner.py b/authentik/root/test_runner.py index 867469d2b0..768a44a618 100644 --- a/authentik/root/test_runner.py +++ b/authentik/root/test_runner.py @@ -9,7 +9,7 @@ from django.conf import settings from django.test.runner import DiscoverRunner from authentik.lib.config import CONFIG -from authentik.lib.sentry import sentry_init +from authentik.root.sentry import sentry_init from authentik.root.signals import post_startup, pre_startup, startup from tests.e2e.utils import get_docker_tag diff --git a/authentik/sources/kerberos/auth.py b/authentik/sources/kerberos/auth.py index 1379e6af33..9295b3a16a 100644 --- a/authentik/sources/kerberos/auth.py +++ b/authentik/sources/kerberos/auth.py @@ -6,7 +6,7 @@ from structlog.stdlib import get_logger from authentik.core.auth import InbuiltBackend from authentik.core.models import User -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.sources.kerberos.models import ( KerberosSource, Krb5ConfContext, diff --git a/authentik/sources/kerberos/tests/test_auth.py b/authentik/sources/kerberos/tests/test_auth.py index a3996d6806..0c641a7446 100644 --- a/authentik/sources/kerberos/tests/test_auth.py +++ b/authentik/sources/kerberos/tests/test_auth.py @@ -3,7 +3,7 @@ from django.contrib.auth.hashers import is_password_usable from authentik.core.models import User -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.sources.kerberos.auth import KerberosBackend from authentik.sources.kerberos.models import KerberosSource, UserKerberosSourceConnection from authentik.sources.kerberos.tests.utils import KerberosTestCase diff --git a/authentik/sources/kerberos/tests/test_sync.py b/authentik/sources/kerberos/tests/test_sync.py index 546478acf2..224d5ef144 100644 --- a/authentik/sources/kerberos/tests/test_sync.py +++ b/authentik/sources/kerberos/tests/test_sync.py @@ -2,7 +2,7 @@ from authentik.blueprints.tests import apply_blueprint from authentik.core.models import User -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.sources.kerberos.models import KerberosSource, KerberosSourcePropertyMapping from authentik.sources.kerberos.sync import KerberosSync from authentik.sources.kerberos.tasks import kerberos_sync_all diff --git a/authentik/sources/ldap/tests/test_api.py b/authentik/sources/ldap/tests/test_api.py index 778d58ad80..9e74c32de5 100644 --- a/authentik/sources/ldap/tests/test_api.py +++ b/authentik/sources/ldap/tests/test_api.py @@ -2,7 +2,7 @@ from rest_framework.test import APITestCase -from authentik.lib.generators import generate_key +from authentik.crypto.generators import generate_key from authentik.sources.ldap.api import LDAPSourceSerializer from authentik.sources.ldap.models import LDAPSource diff --git a/authentik/sources/ldap/tests/test_auth.py b/authentik/sources/ldap/tests/test_auth.py index 6dd06f8917..9fd0df1a13 100644 --- a/authentik/sources/ldap/tests/test_auth.py +++ b/authentik/sources/ldap/tests/test_auth.py @@ -7,7 +7,7 @@ from django.test import TestCase from authentik.blueprints.tests import apply_blueprint from authentik.core.models import User -from authentik.lib.generators import generate_key +from authentik.crypto.generators import generate_key from authentik.sources.ldap.auth import LDAPBackend from authentik.sources.ldap.models import LDAPSource, LDAPSourcePropertyMapping from authentik.sources.ldap.sync.users import UserLDAPSynchronizer diff --git a/authentik/sources/ldap/tests/test_password.py b/authentik/sources/ldap/tests/test_password.py index 94417e31e4..b13c01784a 100644 --- a/authentik/sources/ldap/tests/test_password.py +++ b/authentik/sources/ldap/tests/test_password.py @@ -5,7 +5,7 @@ from unittest.mock import MagicMock, patch from django.test import TestCase from authentik.core.models import User -from authentik.lib.generators import generate_key +from authentik.crypto.generators import generate_key from authentik.sources.ldap.models import LDAPSource, LDAPSourcePropertyMapping from authentik.sources.ldap.password import LDAPPasswordChanger from authentik.sources.ldap.tests.mock_ad import mock_ad_connection diff --git a/authentik/sources/ldap/tests/test_sync.py b/authentik/sources/ldap/tests/test_sync.py index e6bf8e9fac..502af35acb 100644 --- a/authentik/sources/ldap/tests/test_sync.py +++ b/authentik/sources/ldap/tests/test_sync.py @@ -9,9 +9,9 @@ from authentik.blueprints.tests import apply_blueprint from authentik.common.sync.outgoing.exceptions import StopSync from authentik.core.models import Group, User from authentik.core.tests.utils import create_test_admin_user +from authentik.crypto.generators import generate_id, generate_key from authentik.events.models import Event, EventAction, SystemTask from authentik.events.system_tasks import TaskStatus -from authentik.lib.generators import generate_id, generate_key from authentik.lib.utils.reflection import class_to_path from authentik.sources.ldap.models import LDAPSource, LDAPSourcePropertyMapping from authentik.sources.ldap.sync.groups import GroupLDAPSynchronizer diff --git a/authentik/sources/oauth/exceptions.py b/authentik/sources/oauth/exceptions.py index 0798638dfa..8a4b832ea6 100644 --- a/authentik/sources/oauth/exceptions.py +++ b/authentik/sources/oauth/exceptions.py @@ -1,7 +1,7 @@ """OAuth Source Exception""" -from authentik.lib.sentry import SentryIgnoredException +from authentik.common.exceptions import NotReportedException -class OAuthSourceException(SentryIgnoredException): +class OAuthSourceException(NotReportedException): """General Error during OAuth Flow occurred""" diff --git a/authentik/sources/oauth/tests/test_client.py b/authentik/sources/oauth/tests/test_client.py index 0fd46030e5..d6003ac1ae 100644 --- a/authentik/sources/oauth/tests/test_client.py +++ b/authentik/sources/oauth/tests/test_client.py @@ -1,7 +1,7 @@ from django.test import RequestFactory, TestCase from guardian.shortcuts import get_anonymous_user -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.sources.oauth.clients.oauth2 import OAuth2Client from authentik.sources.oauth.models import AuthorizationCodeAuthMethod, OAuthSource from authentik.sources.oauth.types.oidc import OpenIDConnectClient diff --git a/authentik/sources/oauth/tests/test_property_mappings.py b/authentik/sources/oauth/tests/test_property_mappings.py index 47cb8ca2f4..398f5e4461 100644 --- a/authentik/sources/oauth/tests/test_property_mappings.py +++ b/authentik/sources/oauth/tests/test_property_mappings.py @@ -5,7 +5,7 @@ from copy import deepcopy from django.contrib.auth.models import AnonymousUser from django.test import TestCase -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.lib.tests.utils import get_request from authentik.sources.oauth.models import OAuthSource, OAuthSourcePropertyMapping from authentik.sources.oauth.views.callback import OAuthSourceFlowManager diff --git a/authentik/sources/oauth/tests/test_type_apple.py b/authentik/sources/oauth/tests/test_type_apple.py index bfe88d07f0..36d295d77a 100644 --- a/authentik/sources/oauth/tests/test_type_apple.py +++ b/authentik/sources/oauth/tests/test_type_apple.py @@ -3,7 +3,7 @@ from django.test import RequestFactory, TestCase from guardian.shortcuts import get_anonymous_user -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.lib.tests.utils import dummy_get_response from authentik.root.middleware import SessionMiddleware from authentik.sources.oauth.models import OAuthSource diff --git a/authentik/sources/oauth/tests/test_type_github.py b/authentik/sources/oauth/tests/test_type_github.py index 2e7a42231d..e2779fcaf6 100644 --- a/authentik/sources/oauth/tests/test_type_github.py +++ b/authentik/sources/oauth/tests/test_type_github.py @@ -5,7 +5,7 @@ from copy import copy from django.test import RequestFactory, TestCase from requests_mock import Mocker -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.sources.oauth.models import OAuthSource from authentik.sources.oauth.types.github import ( GitHubOAuth2Callback, diff --git a/authentik/sources/oauth/tests/test_type_openid.py b/authentik/sources/oauth/tests/test_type_openid.py index 3b96d5ee04..e5ba1b0348 100644 --- a/authentik/sources/oauth/tests/test_type_openid.py +++ b/authentik/sources/oauth/tests/test_type_openid.py @@ -3,7 +3,7 @@ from django.test import RequestFactory, TestCase from requests_mock import Mocker -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.sources.oauth.models import OAuthSource from authentik.sources.oauth.types.oidc import OpenIDConnectOAuth2Callback, OpenIDConnectType diff --git a/authentik/sources/oauth/types/twitter.py b/authentik/sources/oauth/types/twitter.py index 6d1610fbf9..62172e086e 100644 --- a/authentik/sources/oauth/types/twitter.py +++ b/authentik/sources/oauth/types/twitter.py @@ -2,7 +2,7 @@ from typing import Any -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.sources.oauth.clients.oauth2 import ( SESSION_KEY_OAUTH_PKCE, UserprofileHeaderAuthClient, diff --git a/authentik/sources/plex/migrations/0001_initial.py b/authentik/sources/plex/migrations/0001_initial.py index fd078276e6..1315c90ac7 100644 --- a/authentik/sources/plex/migrations/0001_initial.py +++ b/authentik/sources/plex/migrations/0001_initial.py @@ -4,7 +4,7 @@ import django.contrib.postgres.fields import django.db.models.deletion from django.db import migrations, models -import authentik.lib.generators +import authentik.crypto.generators class Migration(migrations.Migration): @@ -32,7 +32,7 @@ class Migration(migrations.Migration): ( "client_id", models.TextField( - default=authentik.lib.generators.generate_id, + default=authentik.crypto.generators.generate_id, help_text="Client identifier used to talk to Plex.", ), ), diff --git a/authentik/sources/plex/models.py b/authentik/sources/plex/models.py index 3dced6bc50..7ecb66a50b 100644 --- a/authentik/sources/plex/models.py +++ b/authentik/sources/plex/models.py @@ -17,8 +17,8 @@ from authentik.core.models import ( UserSourceConnection, ) from authentik.core.types import UILoginButton, UserSettingSerializer +from authentik.crypto.generators import generate_id from authentik.flows.challenge import Challenge, ChallengeResponse -from authentik.lib.generators import generate_id from authentik.stages.identification.stage import LoginChallengeMixin diff --git a/authentik/sources/plex/tests.py b/authentik/sources/plex/tests.py index 53be3c77ce..f0d4189151 100644 --- a/authentik/sources/plex/tests.py +++ b/authentik/sources/plex/tests.py @@ -4,8 +4,8 @@ from django.test import TestCase from requests.exceptions import RequestException from requests_mock import Mocker +from authentik.crypto.generators import generate_key from authentik.events.models import Event, EventAction -from authentik.lib.generators import generate_key from authentik.sources.plex.models import PlexSource from authentik.sources.plex.plex import PlexAuth from authentik.sources.plex.tasks import check_plex_token_all diff --git a/authentik/sources/saml/tests/test_metadata.py b/authentik/sources/saml/tests/test_metadata.py index 7b6ec29f0c..1277d4b9e6 100644 --- a/authentik/sources/saml/tests/test_metadata.py +++ b/authentik/sources/saml/tests/test_metadata.py @@ -4,9 +4,9 @@ from defusedxml import ElementTree from django.test import RequestFactory, TestCase from lxml import etree # nosec +from authentik.common.saml.xml import lxml_from_string from authentik.core.tests.utils import create_test_cert, create_test_flow -from authentik.lib.generators import generate_id -from authentik.lib.xml import lxml_from_string +from authentik.crypto.generators import generate_id from authentik.sources.saml.models import SAMLSource from authentik.sources.saml.processors.metadata import MetadataProcessor diff --git a/authentik/sources/saml/tests/test_property_mappings.py b/authentik/sources/saml/tests/test_property_mappings.py index 1178e872a4..131d0075f7 100644 --- a/authentik/sources/saml/tests/test_property_mappings.py +++ b/authentik/sources/saml/tests/test_property_mappings.py @@ -8,7 +8,7 @@ from django.test import RequestFactory, TestCase from authentik.common.saml.constants import NS_SAML_ASSERTION from authentik.core.tests.utils import create_test_flow -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.lib.tests.utils import dummy_get_response, load_fixture from authentik.sources.saml.models import SAMLSource, SAMLSourcePropertyMapping from authentik.sources.saml.processors.response import ResponseProcessor diff --git a/authentik/sources/saml/tests/test_response.py b/authentik/sources/saml/tests/test_response.py index c06338d14b..c058b6e99a 100644 --- a/authentik/sources/saml/tests/test_response.py +++ b/authentik/sources/saml/tests/test_response.py @@ -7,8 +7,8 @@ from django.test import RequestFactory, TestCase from authentik.common.saml.exceptions import InvalidEncryption from authentik.core.tests.utils import create_test_cert, create_test_flow +from authentik.crypto.generators import generate_id from authentik.crypto.models import CertificateKeyPair -from authentik.lib.generators import generate_id from authentik.lib.tests.utils import dummy_get_response, load_fixture from authentik.sources.saml.models import SAMLSource from authentik.sources.saml.processors.response import ResponseProcessor diff --git a/authentik/sources/saml/tests/test_views.py b/authentik/sources/saml/tests/test_views.py index 542e6d10d1..3c5ad1e03f 100644 --- a/authentik/sources/saml/tests/test_views.py +++ b/authentik/sources/saml/tests/test_views.py @@ -6,9 +6,9 @@ from django.test import RequestFactory, TestCase from django.urls import reverse from authentik.core.tests.utils import create_test_flow +from authentik.crypto.generators import generate_id from authentik.flows.planner import PLAN_CONTEXT_REDIRECT, FlowPlan from authentik.flows.views.executor import SESSION_KEY_PLAN -from authentik.lib.generators import generate_id from authentik.lib.tests.utils import load_fixture from authentik.sources.saml.models import SAMLSource diff --git a/authentik/sources/scim/errors.py b/authentik/sources/scim/errors.py index 76c3f3a017..a77bcf3bbb 100644 --- a/authentik/sources/scim/errors.py +++ b/authentik/sources/scim/errors.py @@ -1,8 +1,8 @@ """SCIM Errors""" -from authentik.lib.sentry import SentryIgnoredException +from authentik.common.exceptions import NotReportedException -class PatchError(SentryIgnoredException): +class PatchError(NotReportedException): """Error raised within an atomic block when an error happened so nothing is saved""" diff --git a/authentik/sources/scim/tests/test_auth.py b/authentik/sources/scim/tests/test_auth.py index 1fdf41b8bf..87a30fa1ef 100644 --- a/authentik/sources/scim/tests/test_auth.py +++ b/authentik/sources/scim/tests/test_auth.py @@ -5,7 +5,7 @@ from rest_framework.test import APITestCase from authentik.core.models import Token, TokenIntents from authentik.core.tests.utils import create_test_admin_user -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.sources.scim.models import SCIMSource diff --git a/authentik/sources/scim/tests/test_resource_types.py b/authentik/sources/scim/tests/test_resource_types.py index 771a063a91..5171906033 100644 --- a/authentik/sources/scim/tests/test_resource_types.py +++ b/authentik/sources/scim/tests/test_resource_types.py @@ -3,7 +3,7 @@ from django.urls import reverse from rest_framework.test import APITestCase -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.sources.scim.models import SCIMSource diff --git a/authentik/sources/scim/tests/test_schemas.py b/authentik/sources/scim/tests/test_schemas.py index 55b27a779a..7edb3f28af 100644 --- a/authentik/sources/scim/tests/test_schemas.py +++ b/authentik/sources/scim/tests/test_schemas.py @@ -3,7 +3,7 @@ from django.urls import reverse from rest_framework.test import APITestCase -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.sources.scim.models import SCIMSource diff --git a/authentik/sources/scim/tests/test_service_provider_config.py b/authentik/sources/scim/tests/test_service_provider_config.py index f932baee23..51554ae34f 100644 --- a/authentik/sources/scim/tests/test_service_provider_config.py +++ b/authentik/sources/scim/tests/test_service_provider_config.py @@ -3,7 +3,7 @@ from django.urls import reverse from rest_framework.test import APITestCase -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.sources.scim.models import SCIMSource diff --git a/authentik/sources/scim/tests/test_signals.py b/authentik/sources/scim/tests/test_signals.py index f63e94d7cb..9981cb0196 100644 --- a/authentik/sources/scim/tests/test_signals.py +++ b/authentik/sources/scim/tests/test_signals.py @@ -3,7 +3,7 @@ from rest_framework.test import APITestCase from authentik.core.models import Token, User -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.sources.scim.models import SCIMSource diff --git a/authentik/sources/scim/tests/test_users.py b/authentik/sources/scim/tests/test_users.py index 588d435b1b..5adce8705c 100644 --- a/authentik/sources/scim/tests/test_users.py +++ b/authentik/sources/scim/tests/test_users.py @@ -8,8 +8,8 @@ from rest_framework.test import APITestCase from authentik.common.scim.schema import User as SCIMUserSchema from authentik.core.tests.utils import create_test_user +from authentik.crypto.generators import generate_id from authentik.events.models import Event, EventAction -from authentik.lib.generators import generate_id from authentik.sources.scim.models import SCIMSource, SCIMSourcePropertyMapping, SCIMSourceUser from authentik.sources.scim.views.v2.base import SCIM_CONTENT_TYPE diff --git a/authentik/stages/authenticator/tests.py b/authentik/stages/authenticator/tests.py index 5e17eb0360..96fafe52b1 100644 --- a/authentik/stages/authenticator/tests.py +++ b/authentik/stages/authenticator/tests.py @@ -11,7 +11,7 @@ from django.utils import timezone from freezegun import freeze_time from authentik.core.tests.utils import create_test_admin_user -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.stages.authenticator import match_token, user_has_device, verify_token from authentik.stages.authenticator.models import Device, VerifyNotAllowed diff --git a/authentik/stages/authenticator_duo/tests.py b/authentik/stages/authenticator_duo/tests.py index 3262589f69..46cf780ab8 100644 --- a/authentik/stages/authenticator_duo/tests.py +++ b/authentik/stages/authenticator_duo/tests.py @@ -7,9 +7,9 @@ from django.test.client import RequestFactory from django.urls import reverse from authentik.core.tests.utils import create_test_admin_user, create_test_flow +from authentik.crypto.generators import generate_id from authentik.flows.models import FlowStageBinding from authentik.flows.tests import FlowTestCase -from authentik.lib.generators import generate_id from authentik.stages.authenticator_duo.models import AuthenticatorDuoStage, DuoDevice from authentik.stages.authenticator_duo.stage import SESSION_KEY_DUO_ENROLL from authentik.stages.identification.models import IdentificationStage, UserFields diff --git a/authentik/stages/authenticator_sms/tests.py b/authentik/stages/authenticator_sms/tests.py index b3d5ec29c2..ce775166ed 100644 --- a/authentik/stages/authenticator_sms/tests.py +++ b/authentik/stages/authenticator_sms/tests.py @@ -7,11 +7,11 @@ from django.urls import reverse from requests_mock import Mocker from authentik.core.tests.utils import create_test_admin_user, create_test_flow +from authentik.crypto.generators import generate_id from authentik.flows.models import FlowStageBinding from authentik.flows.planner import FlowPlan from authentik.flows.tests import FlowTestCase from authentik.flows.views.executor import SESSION_KEY_PLAN -from authentik.lib.generators import generate_id from authentik.stages.authenticator_sms.models import ( AuthenticatorSMSStage, SMSDevice, diff --git a/authentik/stages/authenticator_static/stage.py b/authentik/stages/authenticator_static/stage.py index face89bfd8..38610a35e0 100644 --- a/authentik/stages/authenticator_static/stage.py +++ b/authentik/stages/authenticator_static/stage.py @@ -3,9 +3,9 @@ from django.http import HttpRequest, HttpResponse from rest_framework.fields import CharField, ListField +from authentik.crypto.generators import generate_id from authentik.flows.challenge import ChallengeResponse, WithUserInfoChallenge from authentik.flows.stage import ChallengeStageView -from authentik.lib.generators import generate_id from authentik.stages.authenticator_static.models import ( AuthenticatorStaticStage, StaticDevice, diff --git a/authentik/stages/authenticator_static/tests.py b/authentik/stages/authenticator_static/tests.py index d002e5c040..3eeea521da 100644 --- a/authentik/stages/authenticator_static/tests.py +++ b/authentik/stages/authenticator_static/tests.py @@ -6,7 +6,7 @@ from rest_framework.test import APITestCase from authentik.core.models import User from authentik.core.tests.utils import create_test_admin_user -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.stages.authenticator.tests import TestCase, ThrottlingTestMixin from authentik.stages.authenticator_static.models import StaticDevice diff --git a/authentik/stages/authenticator_validate/tests/test_duo.py b/authentik/stages/authenticator_validate/tests/test_duo.py index dbfe52559a..62cd74f7f9 100644 --- a/authentik/stages/authenticator_validate/tests/test_duo.py +++ b/authentik/stages/authenticator_validate/tests/test_duo.py @@ -10,13 +10,13 @@ from rest_framework.exceptions import ValidationError from authentik.brands.utils import get_brand_for_request from authentik.core.middleware import RESPONSE_HEADER_ID from authentik.core.tests.utils import create_test_admin_user, create_test_flow +from authentik.crypto.generators import generate_id, generate_key from authentik.events.models import Event, EventAction from authentik.flows.models import FlowDesignation, FlowStageBinding from authentik.flows.planner import PLAN_CONTEXT_PENDING_USER, FlowPlan from authentik.flows.stage import StageView from authentik.flows.tests import FlowTestCase from authentik.flows.views.executor import SESSION_KEY_PLAN, FlowExecutorView -from authentik.lib.generators import generate_id, generate_key from authentik.lib.tests.utils import dummy_get_response from authentik.stages.authenticator_duo.models import AuthenticatorDuoStage, DuoDevice from authentik.stages.authenticator_validate.challenge import validate_challenge_duo diff --git a/authentik/stages/authenticator_validate/tests/test_email.py b/authentik/stages/authenticator_validate/tests/test_email.py index 03f32f993a..d0f9abb238 100644 --- a/authentik/stages/authenticator_validate/tests/test_email.py +++ b/authentik/stages/authenticator_validate/tests/test_email.py @@ -4,9 +4,9 @@ from django.test.client import RequestFactory from django.urls.base import reverse from authentik.core.tests.utils import create_test_admin_user, create_test_flow +from authentik.crypto.generators import generate_id from authentik.flows.models import FlowStageBinding, NotConfiguredAction from authentik.flows.tests import FlowTestCase -from authentik.lib.generators import generate_id from authentik.lib.utils.email import mask_email from authentik.stages.authenticator_email.models import AuthenticatorEmailStage, EmailDevice from authentik.stages.authenticator_validate.models import AuthenticatorValidateStage, DeviceClasses diff --git a/authentik/stages/authenticator_validate/tests/test_sms.py b/authentik/stages/authenticator_validate/tests/test_sms.py index 850854a892..277a71d84a 100644 --- a/authentik/stages/authenticator_validate/tests/test_sms.py +++ b/authentik/stages/authenticator_validate/tests/test_sms.py @@ -6,9 +6,9 @@ from django.test.client import RequestFactory from django.urls.base import reverse from authentik.core.tests.utils import create_test_admin_user, create_test_flow +from authentik.crypto.generators import generate_id from authentik.flows.models import FlowStageBinding, NotConfiguredAction from authentik.flows.tests import FlowTestCase -from authentik.lib.generators import generate_id from authentik.stages.authenticator_sms.models import AuthenticatorSMSStage, SMSDevice, SMSProviders from authentik.stages.authenticator_validate.models import AuthenticatorValidateStage, DeviceClasses from authentik.stages.authenticator_validate.stage import COOKIE_NAME_MFA diff --git a/authentik/stages/authenticator_validate/tests/test_stage.py b/authentik/stages/authenticator_validate/tests/test_stage.py index 438149a92a..31a0717c32 100644 --- a/authentik/stages/authenticator_validate/tests/test_stage.py +++ b/authentik/stages/authenticator_validate/tests/test_stage.py @@ -7,11 +7,11 @@ from django.urls.base import reverse from django.utils.timezone import now from authentik.core.tests.utils import create_test_admin_user, create_test_flow +from authentik.crypto.generators import generate_id, generate_key from authentik.flows.models import FlowDesignation, FlowStageBinding, NotConfiguredAction from authentik.flows.planner import FlowPlan from authentik.flows.tests import FlowTestCase from authentik.flows.views.executor import SESSION_KEY_PLAN -from authentik.lib.generators import generate_id, generate_key from authentik.stages.authenticator_duo.models import AuthenticatorDuoStage, DuoDevice from authentik.stages.authenticator_static.models import AuthenticatorStaticStage from authentik.stages.authenticator_totp.models import AuthenticatorTOTPStage, TOTPDigits diff --git a/authentik/stages/authenticator_validate/tests/test_totp.py b/authentik/stages/authenticator_validate/tests/test_totp.py index 8efcec7eb4..acfa284e64 100644 --- a/authentik/stages/authenticator_validate/tests/test_totp.py +++ b/authentik/stages/authenticator_validate/tests/test_totp.py @@ -10,11 +10,11 @@ from jwt import encode from rest_framework.exceptions import ValidationError from authentik.core.tests.utils import create_test_admin_user, create_test_flow +from authentik.crypto.generators import generate_id from authentik.flows.models import FlowDesignation, FlowStageBinding, NotConfiguredAction from authentik.flows.stage import StageView from authentik.flows.tests import FlowTestCase from authentik.flows.views.executor import FlowExecutorView -from authentik.lib.generators import generate_id from authentik.root.install_id import get_install_id from authentik.stages.authenticator.oath import TOTP from authentik.stages.authenticator_totp.models import TOTPDevice diff --git a/authentik/stages/authenticator_validate/tests/test_webauthn.py b/authentik/stages/authenticator_validate/tests/test_webauthn.py index 05fe216081..0796608069 100644 --- a/authentik/stages/authenticator_validate/tests/test_webauthn.py +++ b/authentik/stages/authenticator_validate/tests/test_webauthn.py @@ -9,12 +9,12 @@ from webauthn.helpers.base64url_to_bytes import base64url_to_bytes from webauthn.helpers.bytes_to_base64url import bytes_to_base64url from authentik.core.tests.utils import create_test_admin_user, create_test_flow +from authentik.crypto.generators import generate_id from authentik.flows.models import FlowStageBinding, NotConfiguredAction from authentik.flows.planner import PLAN_CONTEXT_PENDING_USER, FlowPlan from authentik.flows.stage import StageView from authentik.flows.tests import FlowTestCase from authentik.flows.views.executor import SESSION_KEY_PLAN, FlowExecutorView -from authentik.lib.generators import generate_id from authentik.lib.tests.utils import get_request from authentik.stages.authenticator_validate.challenge import ( get_challenge_for_device, diff --git a/authentik/stages/authenticator_webauthn/tests.py b/authentik/stages/authenticator_webauthn/tests.py index fa02633c45..0621490e69 100644 --- a/authentik/stages/authenticator_webauthn/tests.py +++ b/authentik/stages/authenticator_webauthn/tests.py @@ -6,12 +6,12 @@ from django.urls import reverse from webauthn.helpers.bytes_to_base64url import bytes_to_base64url from authentik.core.tests.utils import create_test_admin_user, create_test_flow +from authentik.crypto.generators import generate_id from authentik.flows.markers import StageMarker from authentik.flows.models import FlowStageBinding from authentik.flows.planner import PLAN_CONTEXT_PENDING_USER, FlowPlan from authentik.flows.tests import FlowTestCase from authentik.flows.views.executor import SESSION_KEY_PLAN -from authentik.lib.generators import generate_id from authentik.stages.authenticator_webauthn.models import ( UNKNOWN_DEVICE_TYPE_AAGUID, AuthenticatorWebAuthnStage, diff --git a/authentik/stages/consent/tests.py b/authentik/stages/consent/tests.py index 872539ad24..ff8572af87 100644 --- a/authentik/stages/consent/tests.py +++ b/authentik/stages/consent/tests.py @@ -8,13 +8,13 @@ from freezegun import freeze_time from authentik.core.models import Application from authentik.core.tasks import clean_expired_models from authentik.core.tests.utils import create_test_admin_user, create_test_flow +from authentik.crypto.generators import generate_id from authentik.flows.challenge import PermissionDict from authentik.flows.markers import StageMarker from authentik.flows.models import FlowDesignation, FlowStageBinding from authentik.flows.planner import PLAN_CONTEXT_APPLICATION, FlowPlan from authentik.flows.tests import FlowTestCase from authentik.flows.views.executor import SESSION_KEY_PLAN -from authentik.lib.generators import generate_id from authentik.stages.consent.models import ConsentMode, ConsentStage, UserConsent from authentik.stages.consent.stage import ( PLAN_CONTEXT_CONSENT_PERMISSIONS, diff --git a/authentik/stages/dummy/stage.py b/authentik/stages/dummy/stage.py index a3a32ebd34..ab7374baf5 100644 --- a/authentik/stages/dummy/stage.py +++ b/authentik/stages/dummy/stage.py @@ -3,9 +3,9 @@ from django.http.response import HttpResponse from rest_framework.fields import CharField +from authentik.common.exceptions import NotReportedException from authentik.flows.challenge import Challenge, ChallengeResponse from authentik.flows.stage import ChallengeStageView -from authentik.lib.sentry import SentryIgnoredException class DummyChallenge(Challenge): @@ -31,7 +31,7 @@ class DummyStageView(ChallengeStageView): def get_challenge(self, *args, **kwargs) -> Challenge: if self.executor.current_stage.throw_error: - raise SentryIgnoredException("Test error") + raise NotReportedException("Test error") return DummyChallenge( data={ "title": self.executor.current_stage.name, diff --git a/authentik/stages/email/tests/test_sending.py b/authentik/stages/email/tests/test_sending.py index 4f2b5758c2..6d5ac46f58 100644 --- a/authentik/stages/email/tests/test_sending.py +++ b/authentik/stages/email/tests/test_sending.py @@ -9,13 +9,13 @@ from django.urls import reverse from authentik.core.models import User from authentik.core.tests.utils import create_test_admin_user, create_test_flow, create_test_user +from authentik.crypto.generators import generate_id from authentik.events.models import Event, EventAction from authentik.flows.markers import StageMarker from authentik.flows.models import FlowDesignation, FlowStageBinding from authentik.flows.planner import PLAN_CONTEXT_PENDING_USER, FlowPlan from authentik.flows.tests import FlowTestCase from authentik.flows.views.executor import SESSION_KEY_PLAN -from authentik.lib.generators import generate_id from authentik.stages.email.models import EmailStage diff --git a/authentik/stages/email/tests/test_stage.py b/authentik/stages/email/tests/test_stage.py index e1a6665ad8..b69c87f7c2 100644 --- a/authentik/stages/email/tests/test_stage.py +++ b/authentik/stages/email/tests/test_stage.py @@ -10,13 +10,13 @@ from django.urls import reverse from django.utils.http import urlencode from authentik.core.tests.utils import create_test_admin_user, create_test_flow +from authentik.crypto.generators import generate_id from authentik.flows.markers import StageMarker from authentik.flows.models import FlowDesignation, FlowStageBinding, FlowToken from authentik.flows.planner import PLAN_CONTEXT_PENDING_USER, FlowPlan from authentik.flows.tests import FlowTestCase from authentik.flows.views.executor import QS_KEY_TOKEN, SESSION_KEY_PLAN, FlowExecutorView from authentik.lib.config import CONFIG -from authentik.lib.generators import generate_id from authentik.stages.email.models import EmailStage from authentik.stages.email.stage import PLAN_CONTEXT_EMAIL_OVERRIDE, EmailStageView diff --git a/authentik/stages/identification/tests.py b/authentik/stages/identification/tests.py index c39434e24a..d0d3fa6303 100644 --- a/authentik/stages/identification/tests.py +++ b/authentik/stages/identification/tests.py @@ -5,9 +5,9 @@ from requests_mock import Mocker from rest_framework.exceptions import ValidationError from authentik.core.tests.utils import create_test_admin_user, create_test_flow +from authentik.crypto.generators import generate_id from authentik.flows.models import FlowDesignation, FlowStageBinding from authentik.flows.tests import FlowTestCase -from authentik.lib.generators import generate_id from authentik.sources.oauth.models import OAuthSource from authentik.stages.captcha.models import CaptchaStage from authentik.stages.captcha.tests import RECAPTCHA_PRIVATE_KEY, RECAPTCHA_PUBLIC_KEY diff --git a/authentik/stages/password/tests.py b/authentik/stages/password/tests.py index bb4ec487a6..5d063ecdba 100644 --- a/authentik/stages/password/tests.py +++ b/authentik/stages/password/tests.py @@ -6,13 +6,13 @@ from django.core.exceptions import PermissionDenied from django.urls import reverse from authentik.core.tests.utils import create_test_admin_user, create_test_brand, create_test_flow +from authentik.crypto.generators import generate_id from authentik.flows.markers import StageMarker from authentik.flows.models import FlowDesignation, FlowStageBinding from authentik.flows.planner import PLAN_CONTEXT_PENDING_USER, FlowPlan from authentik.flows.tests import FlowTestCase from authentik.flows.tests.test_executor import TO_STAGE_RESPONSE_MOCK from authentik.flows.views.executor import SESSION_KEY_PLAN -from authentik.lib.generators import generate_id from authentik.stages.password import BACKEND_INBUILT from authentik.stages.password.models import PasswordStage diff --git a/authentik/stages/prompt/api.py b/authentik/stages/prompt/api.py index f4f87c2551..f6bfb93570 100644 --- a/authentik/stages/prompt/api.py +++ b/authentik/stages/prompt/api.py @@ -11,11 +11,11 @@ from rest_framework.viewsets import ModelViewSet from authentik.core.api.used_by import UsedByMixin from authentik.core.api.utils import ModelSerializer from authentik.core.expression.exceptions import PropertyMappingExpressionException +from authentik.crypto.generators import generate_id from authentik.flows.api.stages import StageSerializer from authentik.flows.challenge import HttpChallengeResponse from authentik.flows.planner import FlowPlan from authentik.flows.views.executor import FlowExecutorView -from authentik.lib.generators import generate_id from authentik.lib.utils.errors import exception_to_string from authentik.stages.prompt.models import Prompt, PromptStage from authentik.stages.prompt.stage import PromptChallenge, PromptStageView diff --git a/authentik/stages/prompt/tests.py b/authentik/stages/prompt/tests.py index 17453b2400..e5dfb0b8d1 100644 --- a/authentik/stages/prompt/tests.py +++ b/authentik/stages/prompt/tests.py @@ -7,12 +7,12 @@ from django.urls import reverse from rest_framework.exceptions import ErrorDetail, ValidationError from authentik.core.tests.utils import create_test_admin_user, create_test_flow +from authentik.crypto.generators import generate_id from authentik.flows.markers import StageMarker from authentik.flows.models import FlowStageBinding from authentik.flows.planner import FlowPlan from authentik.flows.tests import FlowTestCase from authentik.flows.views.executor import SESSION_KEY_PLAN, FlowExecutorView -from authentik.lib.generators import generate_id from authentik.policies.expression.models import ExpressionPolicy from authentik.stages.prompt.models import FieldTypes, InlineFileField, Prompt, PromptStage from authentik.stages.prompt.stage import ( diff --git a/authentik/stages/redirect/tests.py b/authentik/stages/redirect/tests.py index 1a6f13ac63..9b1cf986b8 100644 --- a/authentik/stages/redirect/tests.py +++ b/authentik/stages/redirect/tests.py @@ -6,9 +6,9 @@ from django.urls.base import reverse from rest_framework.exceptions import ValidationError from authentik.core.tests.utils import create_test_flow +from authentik.crypto.generators import generate_id from authentik.flows.models import FlowAuthenticationRequirement, FlowDesignation, FlowStageBinding from authentik.flows.tests import FlowTestCase -from authentik.lib.generators import generate_id from authentik.policies.expression.models import ExpressionPolicy from authentik.policies.models import PolicyBinding from authentik.stages.dummy.models import DummyStage diff --git a/authentik/stages/user_login/middleware.py b/authentik/stages/user_login/middleware.py index 8d50ac376f..b8fa8fb9df 100644 --- a/authentik/stages/user_login/middleware.py +++ b/authentik/stages/user_login/middleware.py @@ -6,9 +6,9 @@ from django.contrib.auth.views import redirect_to_login from django.http.request import HttpRequest from structlog.stdlib import get_logger +from authentik.common.exceptions import NotReportedException from authentik.events.context_processors.asn import ASN_CONTEXT_PROCESSOR from authentik.events.context_processors.geoip import GEOIP_CONTEXT_PROCESSOR -from authentik.lib.sentry import SentryIgnoredException from authentik.root.middleware import ClientIPMiddleware, SessionMiddleware from authentik.stages.user_login.models import GeoIPBinding, NetworkBinding @@ -17,7 +17,7 @@ SESSION_KEY_BINDING_GEO = "authentik/stages/user_login/binding/geo" LOGGER = get_logger() -class SessionBindingBroken(SentryIgnoredException): +class SessionBindingBroken(NotReportedException): """Session binding was broken due to specified `reason`""" def __init__( # noqa: PLR0913 diff --git a/authentik/stages/user_login/tests.py b/authentik/stages/user_login/tests.py index 01570c4b50..30e70322cd 100644 --- a/authentik/stages/user_login/tests.py +++ b/authentik/stages/user_login/tests.py @@ -8,13 +8,13 @@ from django.utils.timezone import now from authentik.core.models import AuthenticatedSession, Session from authentik.core.tests.utils import create_test_admin_user, create_test_flow +from authentik.crypto.generators import generate_id from authentik.flows.markers import StageMarker from authentik.flows.models import FlowDesignation, FlowStageBinding from authentik.flows.planner import PLAN_CONTEXT_PENDING_USER, FlowPlan from authentik.flows.tests import FlowTestCase from authentik.flows.tests.test_executor import TO_STAGE_RESPONSE_MOCK from authentik.flows.views.executor import SESSION_KEY_PLAN -from authentik.lib.generators import generate_id from authentik.lib.utils.time import timedelta_from_string from authentik.root.middleware import ClientIPMiddleware from authentik.stages.user_login.models import UserLoginStage diff --git a/authentik/stages/user_write/tests.py b/authentik/stages/user_write/tests.py index bbc5a3564b..5910eb476f 100644 --- a/authentik/stages/user_write/tests.py +++ b/authentik/stages/user_write/tests.py @@ -13,6 +13,7 @@ from authentik.core.models import ( ) from authentik.core.sources.stage import PLAN_CONTEXT_SOURCES_CONNECTION from authentik.core.tests.utils import create_test_admin_user, create_test_flow +from authentik.crypto.generators import generate_key from authentik.events.models import Event, EventAction from authentik.flows.markers import StageMarker from authentik.flows.models import FlowStageBinding @@ -20,7 +21,6 @@ from authentik.flows.planner import PLAN_CONTEXT_PENDING_USER, FlowPlan from authentik.flows.tests import FlowTestCase from authentik.flows.tests.test_executor import TO_STAGE_RESPONSE_MOCK from authentik.flows.views.executor import SESSION_KEY_PLAN -from authentik.lib.generators import generate_key from authentik.stages.prompt.stage import PLAN_CONTEXT_PROMPT from authentik.stages.user_write.models import UserCreationMode, UserWriteStage from authentik.stages.user_write.stage import PLAN_CONTEXT_GROUPS, UserWriteStageView diff --git a/authentik/tenants/tests/test_api.py b/authentik/tenants/tests/test_api.py index 87f8490186..a09af2b8f2 100644 --- a/authentik/tenants/tests/test_api.py +++ b/authentik/tenants/tests/test_api.py @@ -4,8 +4,8 @@ from json import loads from django.urls import reverse +from authentik.crypto.generators import generate_id from authentik.lib.config import CONFIG -from authentik.lib.generators import generate_id from authentik.tenants.tests.utils import TenantAPITestCase TENANTS_API_KEY = generate_id() diff --git a/authentik/tenants/tests/test_domain.py b/authentik/tenants/tests/test_domain.py index 03f6d224bc..8346eae2ec 100644 --- a/authentik/tenants/tests/test_domain.py +++ b/authentik/tenants/tests/test_domain.py @@ -4,8 +4,8 @@ from json import loads from django.urls import reverse +from authentik.crypto.generators import generate_id from authentik.lib.config import CONFIG -from authentik.lib.generators import generate_id from authentik.tenants.models import Domain, Tenant from authentik.tenants.tests.utils import TenantAPITestCase diff --git a/authentik/tenants/tests/test_recovery.py b/authentik/tenants/tests/test_recovery.py index e100dbd3c7..be990844f3 100644 --- a/authentik/tenants/tests/test_recovery.py +++ b/authentik/tenants/tests/test_recovery.py @@ -6,8 +6,8 @@ from django.urls import reverse from django_tenants.utils import get_public_schema_name from authentik.core.models import Token, TokenIntents, User +from authentik.crypto.generators import generate_id from authentik.lib.config import CONFIG -from authentik.lib.generators import generate_id from authentik.tenants.models import Tenant from authentik.tenants.tests.utils import TenantAPITestCase diff --git a/authentik/tenants/tests/test_settings.py b/authentik/tenants/tests/test_settings.py index 63eb09cbff..4e93111227 100644 --- a/authentik/tenants/tests/test_settings.py +++ b/authentik/tenants/tests/test_settings.py @@ -3,7 +3,7 @@ from django.urls import reverse from authentik.core.tests.utils import create_test_admin_user -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.tenants.models import Domain, Tenant from authentik.tenants.tests.utils import TenantAPITestCase diff --git a/scripts/generate_config.py b/scripts/generate_config.py index df87abdba4..d9f8bab8f6 100755 --- a/scripts/generate_config.py +++ b/scripts/generate_config.py @@ -3,7 +3,7 @@ from yaml import safe_dump -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id def generate_local_config(): diff --git a/tests/e2e/test_flows_recovery.py b/tests/e2e/test_flows_recovery.py index f5ccc3b200..b70f21e8d9 100644 --- a/tests/e2e/test_flows_recovery.py +++ b/tests/e2e/test_flows_recovery.py @@ -9,9 +9,9 @@ from selenium.webdriver.support.wait import WebDriverWait from authentik.blueprints.tests import apply_blueprint from authentik.core.models import User from authentik.core.tests.utils import create_test_admin_user +from authentik.crypto.generators import generate_id from authentik.flows.models import Flow from authentik.lib.config import CONFIG -from authentik.lib.generators import generate_id from authentik.stages.identification.models import IdentificationStage from tests.e2e.utils import SeleniumTestCase, retry diff --git a/tests/e2e/test_flows_stage_setup.py b/tests/e2e/test_flows_stage_setup.py index a82b2b7a28..2b3c1e9476 100644 --- a/tests/e2e/test_flows_stage_setup.py +++ b/tests/e2e/test_flows_stage_setup.py @@ -5,8 +5,8 @@ from selenium.webdriver.common.keys import Keys from authentik.blueprints.tests import apply_blueprint from authentik.core.models import User +from authentik.crypto.generators import generate_key from authentik.flows.models import Flow, FlowDesignation -from authentik.lib.generators import generate_key from authentik.stages.password.models import PasswordStage from tests.e2e.utils import SeleniumTestCase, retry diff --git a/tests/e2e/test_provider_ldap.py b/tests/e2e/test_provider_ldap.py index 4eb163797c..c8899c5517 100644 --- a/tests/e2e/test_provider_ldap.py +++ b/tests/e2e/test_provider_ldap.py @@ -10,9 +10,9 @@ from ldap3.core.exceptions import LDAPInvalidCredentialsResult from authentik.blueprints.tests import apply_blueprint, reconcile_app from authentik.core.models import Application, User from authentik.core.tests.utils import create_test_user +from authentik.crypto.generators import generate_id from authentik.events.models import Event, EventAction from authentik.flows.models import Flow -from authentik.lib.generators import generate_id from authentik.outposts.apps import MANAGED_OUTPOST from authentik.outposts.models import Outpost, OutpostConfig, OutpostType from authentik.providers.ldap.models import APIAccessMode, LDAPProvider diff --git a/tests/e2e/test_provider_oauth2_github.py b/tests/e2e/test_provider_oauth2_github.py index 977308ead1..cebdeb3478 100644 --- a/tests/e2e/test_provider_oauth2_github.py +++ b/tests/e2e/test_provider_oauth2_github.py @@ -8,8 +8,8 @@ from selenium.webdriver.support import expected_conditions as ec from authentik.blueprints.tests import apply_blueprint, reconcile_app from authentik.core.models import Application +from authentik.crypto.generators import generate_id, generate_key from authentik.flows.models import Flow -from authentik.lib.generators import generate_id, generate_key from authentik.policies.expression.models import ExpressionPolicy from authentik.policies.models import PolicyBinding from authentik.providers.oauth2.models import ( diff --git a/tests/e2e/test_provider_oauth2_grafana.py b/tests/e2e/test_provider_oauth2_grafana.py index 71822693bc..788fe8cfca 100644 --- a/tests/e2e/test_provider_oauth2_grafana.py +++ b/tests/e2e/test_provider_oauth2_grafana.py @@ -15,8 +15,8 @@ from authentik.common.oauth.constants import ( ) from authentik.core.models import Application from authentik.core.tests.utils import create_test_cert +from authentik.crypto.generators import generate_id, generate_key from authentik.flows.models import Flow -from authentik.lib.generators import generate_id, generate_key from authentik.policies.expression.models import ExpressionPolicy from authentik.policies.models import PolicyBinding from authentik.providers.oauth2.models import ( diff --git a/tests/e2e/test_provider_oidc.py b/tests/e2e/test_provider_oidc.py index c4dc73f0b9..a93ed1e1f2 100644 --- a/tests/e2e/test_provider_oidc.py +++ b/tests/e2e/test_provider_oidc.py @@ -15,8 +15,8 @@ from authentik.common.oauth.constants import ( ) from authentik.core.models import Application from authentik.core.tests.utils import create_test_cert +from authentik.crypto.generators import generate_id, generate_key from authentik.flows.models import Flow -from authentik.lib.generators import generate_id, generate_key from authentik.policies.expression.models import ExpressionPolicy from authentik.policies.models import PolicyBinding from authentik.providers.oauth2.models import ( diff --git a/tests/e2e/test_provider_oidc_implicit.py b/tests/e2e/test_provider_oidc_implicit.py index d1adcee57f..2ad6a67bb6 100644 --- a/tests/e2e/test_provider_oidc_implicit.py +++ b/tests/e2e/test_provider_oidc_implicit.py @@ -15,8 +15,8 @@ from authentik.common.oauth.constants import ( ) from authentik.core.models import Application from authentik.core.tests.utils import create_test_cert +from authentik.crypto.generators import generate_id, generate_key from authentik.flows.models import Flow -from authentik.lib.generators import generate_id, generate_key from authentik.policies.expression.models import ExpressionPolicy from authentik.policies.models import PolicyBinding from authentik.providers.oauth2.models import ( diff --git a/tests/e2e/test_provider_proxy.py b/tests/e2e/test_provider_proxy.py index 0ac9300e6f..56ed2e7d6d 100644 --- a/tests/e2e/test_provider_proxy.py +++ b/tests/e2e/test_provider_proxy.py @@ -13,8 +13,8 @@ from selenium.webdriver.common.by import By from authentik.blueprints.tests import apply_blueprint, reconcile_app from authentik.core.models import Application +from authentik.crypto.generators import generate_id from authentik.flows.models import Flow -from authentik.lib.generators import generate_id from authentik.outposts.models import DockerServiceConnection, Outpost, OutpostConfig, OutpostType from authentik.outposts.tasks import outpost_connection_discovery from authentik.providers.proxy.models import ProxyProvider diff --git a/tests/e2e/test_provider_proxy_forward.py b/tests/e2e/test_provider_proxy_forward.py index 8060d8c520..b7fd771f7f 100644 --- a/tests/e2e/test_provider_proxy_forward.py +++ b/tests/e2e/test_provider_proxy_forward.py @@ -9,8 +9,8 @@ from selenium.webdriver.common.by import By from authentik.blueprints.tests import apply_blueprint, reconcile_app from authentik.core.models import Application +from authentik.crypto.generators import generate_id from authentik.flows.models import Flow -from authentik.lib.generators import generate_id from authentik.outposts.models import Outpost, OutpostType from authentik.providers.proxy.models import ProxyMode, ProxyProvider from tests.e2e.utils import SeleniumTestCase, retry diff --git a/tests/e2e/test_provider_radius.py b/tests/e2e/test_provider_radius.py index 0392a77372..ddeba43c2e 100644 --- a/tests/e2e/test_provider_radius.py +++ b/tests/e2e/test_provider_radius.py @@ -9,8 +9,8 @@ from pyrad.packet import AccessAccept, AccessReject, AccessRequest from authentik.blueprints.tests import apply_blueprint from authentik.core.models import Application, User +from authentik.crypto.generators import generate_id, generate_key from authentik.flows.models import Flow -from authentik.lib.generators import generate_id, generate_key from authentik.outposts.models import Outpost, OutpostConfig, OutpostType from authentik.providers.radius.models import RadiusProvider from tests.e2e.utils import SeleniumTestCase, retry diff --git a/tests/e2e/test_source_ldap_samba.py b/tests/e2e/test_source_ldap_samba.py index 77f1444dae..3bfaa894df 100644 --- a/tests/e2e/test_source_ldap_samba.py +++ b/tests/e2e/test_source_ldap_samba.py @@ -5,7 +5,7 @@ from ldap3.core.exceptions import LDAPSessionTerminatedByServerError from authentik.blueprints.tests import apply_blueprint from authentik.core.models import Group, User -from authentik.lib.generators import generate_id, generate_key +from authentik.crypto.generators import generate_id, generate_key from authentik.sources.ldap.auth import LDAPBackend from authentik.sources.ldap.models import LDAPSource, LDAPSourcePropertyMapping from authentik.sources.ldap.sync.groups import GroupLDAPSynchronizer diff --git a/tests/e2e/test_source_oauth_oauth1.py b/tests/e2e/test_source_oauth_oauth1.py index 6236d1a374..c1157f8575 100644 --- a/tests/e2e/test_source_oauth_oauth1.py +++ b/tests/e2e/test_source_oauth_oauth1.py @@ -10,8 +10,8 @@ from selenium.webdriver.support.wait import WebDriverWait from authentik.blueprints.tests import apply_blueprint from authentik.core.models import User +from authentik.crypto.generators import generate_id, generate_key from authentik.flows.models import Flow -from authentik.lib.generators import generate_id, generate_key from authentik.sources.oauth.models import OAuthSource from authentik.sources.oauth.types.registry import SourceType, registry from authentik.sources.oauth.views.callback import OAuthCallback diff --git a/tests/e2e/test_source_oauth_oauth2.py b/tests/e2e/test_source_oauth_oauth2.py index 3766c23d48..35ab373eec 100644 --- a/tests/e2e/test_source_oauth_oauth2.py +++ b/tests/e2e/test_source_oauth_oauth2.py @@ -12,8 +12,8 @@ from selenium.webdriver.support.wait import WebDriverWait from authentik.blueprints.tests import apply_blueprint from authentik.core.models import User +from authentik.crypto.generators import generate_id from authentik.flows.models import Flow -from authentik.lib.generators import generate_id from authentik.sources.oauth.models import OAuthSource from authentik.stages.identification.models import IdentificationStage from tests.e2e.utils import SeleniumTestCase, retry diff --git a/tests/e2e/test_source_saml.py b/tests/e2e/test_source_saml.py index da01fd2ab2..0da1e1716b 100644 --- a/tests/e2e/test_source_saml.py +++ b/tests/e2e/test_source_saml.py @@ -11,9 +11,9 @@ from selenium.webdriver.support.wait import WebDriverWait from authentik.blueprints.tests import apply_blueprint from authentik.core.models import User +from authentik.crypto.generators import generate_id from authentik.crypto.models import CertificateKeyPair from authentik.flows.models import Flow -from authentik.lib.generators import generate_id from authentik.sources.saml.models import SAMLBindingTypes, SAMLSource from authentik.stages.identification.models import IdentificationStage from tests.e2e.utils import SeleniumTestCase, retry diff --git a/tests/e2e/test_source_scim.py b/tests/e2e/test_source_scim.py index 368bd1811d..980a758a14 100644 --- a/tests/e2e/test_source_scim.py +++ b/tests/e2e/test_source_scim.py @@ -5,7 +5,7 @@ from time import sleep from docker.types import Healthcheck -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id from authentik.lib.utils.http import get_http_session from authentik.sources.scim.models import SCIMSource from tests.e2e.utils import SeleniumTestCase, retry diff --git a/tests/e2e/utils.py b/tests/e2e/utils.py index 88d9ec867d..3f71589eb6 100644 --- a/tests/e2e/utils.py +++ b/tests/e2e/utils.py @@ -35,7 +35,7 @@ from structlog.stdlib import get_logger from authentik.core.api.users import UserSerializer from authentik.core.models import User from authentik.core.tests.utils import create_test_admin_user -from authentik.lib.generators import generate_id +from authentik.crypto.generators import generate_id RETRIES = int(environ.get("RETRIES", "3")) IS_CI = "CI" in environ