blueprints: handle model referencing non-existent app/model (#10796)

Signed-off-by: Jens Langhammer <jens@goauthentik.io>
This commit is contained in:
Jens L.
2024-08-06 15:16:45 +02:00
committed by GitHub
parent 34b01d9785
commit 02e852b192
3 changed files with 11 additions and 7 deletions

View File

@ -328,7 +328,10 @@ class Find(YAMLTag):
else: else:
model_name = self.model_name model_name = self.model_name
model_class = apps.get_model(*model_name.split(".")) try:
model_class = apps.get_model(*model_name.split("."))
except LookupError as exc:
raise EntryInvalidError.from_entry(exc, entry) from exc
query = Q() query = Q()
for cond in self.conditions: for cond in self.conditions:

View File

@ -231,14 +231,17 @@ class Importer:
return main_query | sub_query return main_query | sub_query
def _validate_single(self, entry: BlueprintEntry) -> BaseSerializer | None: def _validate_single(self, entry: BlueprintEntry) -> BaseSerializer | None: # noqa: PLR0915
"""Validate a single entry""" """Validate a single entry"""
if not entry.check_all_conditions_match(self._import): if not entry.check_all_conditions_match(self._import):
self.logger.debug("One or more conditions of this entry are not fulfilled, skipping") self.logger.debug("One or more conditions of this entry are not fulfilled, skipping")
return None return None
model_app_label, model_name = entry.get_model(self._import).split(".") model_app_label, model_name = entry.get_model(self._import).split(".")
model: type[SerializerModel] = registry.get_model(model_app_label, model_name) try:
model: type[SerializerModel] = registry.get_model(model_app_label, model_name)
except LookupError as exc:
raise EntryInvalidError.from_entry(exc, entry) from exc
# Don't use isinstance since we don't want to check for inheritance # Don't use isinstance since we don't want to check for inheritance
if not is_model_allowed(model): if not is_model_allowed(model):
raise EntryInvalidError.from_entry(f"Model {model} not allowed", entry) raise EntryInvalidError.from_entry(f"Model {model} not allowed", entry)
@ -313,10 +316,7 @@ class Importer:
try: try:
full_data = self.__update_pks_for_attrs(entry.get_attrs(self._import)) full_data = self.__update_pks_for_attrs(entry.get_attrs(self._import))
except ValueError as exc: except ValueError as exc:
raise EntryInvalidError.from_entry( raise EntryInvalidError.from_entry(exc, entry) from exc
exc,
entry,
) from exc
always_merger.merge(full_data, updated_identifiers) always_merger.merge(full_data, updated_identifiers)
serializer_kwargs["data"] = full_data serializer_kwargs["data"] = full_data

View File

@ -66,6 +66,7 @@ class RadiusProvider(OutpostModel, Provider):
class RadiusProviderPropertyMapping(PropertyMapping): class RadiusProviderPropertyMapping(PropertyMapping):
"""Add additional attributes to Radius authentication responses."""
@property @property
def component(self) -> str: def component(self) -> str: