core: fix error when raising SkipObject in mapping (#10153)
* core: fix error when raising SkipObject in mapping Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix events not being saved thanks tests Signed-off-by: Jens Langhammer <jens@goauthentik.io> --------- Signed-off-by: Jens Langhammer <jens@goauthentik.io>
This commit is contained in:
		| @ -76,8 +76,11 @@ class PropertyMappingEvaluator(BaseEvaluator): | ||||
|         ) | ||||
|         if "request" in self._context: | ||||
|             req: PolicyRequest = self._context["request"] | ||||
|             if req.http_request: | ||||
|                 event.from_http(req.http_request, req.user) | ||||
|                 return | ||||
|             elif req.user: | ||||
|                 event.set_user(req.user) | ||||
|         event.save() | ||||
|  | ||||
|     def evaluate(self, *args, **kwargs) -> Any: | ||||
|  | ||||
| @ -16,3 +16,7 @@ class SkipObjectException(PropertyMappingExpressionException): | ||||
|     """Exception which can be raised in a property mapping to skip syncing an object. | ||||
|     Only applies to Property mappings which sync objects, and not on mappings which transitively | ||||
|     apply to a single user""" | ||||
|  | ||||
|     def __init__(self) -> None: | ||||
|         # For this class only, both of these are set by the function evaluating the property mapping | ||||
|         super().__init__(exc=None, mapping=None) | ||||
|  | ||||
| @ -4,7 +4,10 @@ from django.db.models import QuerySet | ||||
| from django.http import HttpRequest | ||||
|  | ||||
| from authentik.core.expression.evaluator import PropertyMappingEvaluator | ||||
| from authentik.core.expression.exceptions import PropertyMappingExpressionException | ||||
| from authentik.core.expression.exceptions import ( | ||||
|     PropertyMappingExpressionException, | ||||
|     SkipObjectException, | ||||
| ) | ||||
| from authentik.core.models import PropertyMapping, User | ||||
|  | ||||
|  | ||||
| @ -57,6 +60,10 @@ class PropertyMappingManager: | ||||
|             mapping.set_context(user, request, **kwargs) | ||||
|             try: | ||||
|                 value = mapping.evaluate(mapping.model.expression) | ||||
|             except SkipObjectException as exc: | ||||
|                 exc.exc = exc | ||||
|                 exc.mapping = mapping | ||||
|                 raise exc from exc | ||||
|             except PropertyMappingExpressionException as exc: | ||||
|                 raise exc from exc | ||||
|             except Exception as exc: | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Jens L
					Jens L