код написан

This commit is contained in:
2026-03-10 12:00:18 +03:00
parent 82435822eb
commit 31717870e3
57 changed files with 53951 additions and 4909 deletions

View File

@@ -173,12 +173,29 @@ class ProfileService:
payload.dashboards_table_density
)
effective_telegram_id = self._sanitize_text(preference.telegram_id)
if "telegram_id" in provided_fields:
effective_telegram_id = self._sanitize_text(payload.telegram_id)
effective_email_address = self._sanitize_text(preference.email_address)
if "email_address" in provided_fields:
effective_email_address = self._sanitize_text(payload.email_address)
effective_notify_on_fail = (
bool(preference.notify_on_fail)
if preference.notify_on_fail is not None
else True
)
if "notify_on_fail" in provided_fields:
effective_notify_on_fail = bool(payload.notify_on_fail)
validation_errors = self._validate_update_payload(
superset_username=effective_superset_username,
show_only_my_dashboards=effective_show_only,
git_email=effective_git_email,
start_page=effective_start_page,
dashboards_table_density=effective_dashboards_table_density,
email_address=effective_email_address,
)
if validation_errors:
logger.reflect("[REFLECT] Validation failed; mutation is denied")
@@ -205,6 +222,9 @@ class ProfileService:
preference.start_page = effective_start_page
preference.auto_open_task_drawer = effective_auto_open_task_drawer
preference.dashboards_table_density = effective_dashboards_table_density
preference.telegram_id = effective_telegram_id
preference.email_address = effective_email_address
preference.notify_on_fail = effective_notify_on_fail
preference.updated_at = datetime.utcnow()
persisted_preference = self.auth_repository.save_user_dashboard_preference(preference)
@@ -453,6 +473,9 @@ class ProfileService:
dashboards_table_density=self._normalize_density(
preference.dashboards_table_density
),
telegram_id=self._sanitize_text(preference.telegram_id),
email_address=self._sanitize_text(preference.email_address),
notify_on_fail=bool(preference.notify_on_fail) if preference.notify_on_fail is not None else True,
created_at=created_at,
updated_at=updated_at,
)
@@ -570,6 +593,9 @@ class ProfileService:
start_page="dashboards",
auto_open_task_drawer=True,
dashboards_table_density="comfortable",
telegram_id=None,
email_address=None,
notify_on_fail=True,
created_at=now,
updated_at=now,
)
@@ -586,6 +612,7 @@ class ProfileService:
git_email: Optional[str],
start_page: str,
dashboards_table_density: str,
email_address: Optional[str] = None,
) -> List[str]:
errors: List[str] = []
sanitized_username = self._sanitize_username(superset_username)
@@ -613,6 +640,16 @@ class ProfileService:
if dashboards_table_density not in SUPPORTED_DENSITIES:
errors.append("Dashboards table density value is not supported.")
sanitized_email = self._sanitize_text(email_address)
if sanitized_email:
if (
" " in sanitized_email
or "@" not in sanitized_email
or sanitized_email.startswith("@")
or sanitized_email.endswith("@")
):
errors.append("Notification email should be a valid email address.")
return errors
# [/DEF:_validate_update_payload:Function]