bbdf8c054b
* handle non-applicable when restarting flow Signed-off-by: Jens Langhammer <jens@goauthentik.io> * flows: add StageInvalidException error to be used in challenge/response serializer validation to return a stage_invalid error Signed-off-by: Jens Langhammer <jens@goauthentik.io> * rework password stage Signed-off-by: Jens Langhammer <jens@goauthentik.io> --------- Signed-off-by: Jens Langhammer <jens@goauthentik.io>
34 lines
1.1 KiB
Python
34 lines
1.1 KiB
Python
"""flow exceptions"""
|
|
from typing import Optional
|
|
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
from authentik.lib.sentry import SentryIgnoredException
|
|
from authentik.policies.types import PolicyResult
|
|
|
|
|
|
class FlowNonApplicableException(SentryIgnoredException):
|
|
"""Flow does not apply to current user (denied by policy, or otherwise)."""
|
|
|
|
policy_result: Optional[PolicyResult] = None
|
|
|
|
@property
|
|
def messages(self) -> str:
|
|
"""Get messages from policy result, fallback to generic reason"""
|
|
if not self.policy_result or len(self.policy_result.messages) < 1:
|
|
return _("Flow does not apply to current user.")
|
|
return "\n".join(self.policy_result.messages)
|
|
|
|
|
|
class EmptyFlowException(SentryIgnoredException):
|
|
"""Flow has no stages."""
|
|
|
|
|
|
class FlowSkipStageException(SentryIgnoredException):
|
|
"""Exception to skip a stage"""
|
|
|
|
|
|
class StageInvalidException(SentryIgnoredException):
|
|
"""Exception can be thrown in a `Challenge` or `ChallengeResponse` serializer's
|
|
validation to trigger a `executor.stage_invalid()` response"""
|