Skip to content

Commit a8ec134

Browse files
Feature/full custom query (#40)
* Add full custom query for observations * fix predefined behaviour * fix(security): Add validation for full_custom_query input > > Adds read-only SQL validation to the field in the observation form. This prevents arbitrary SQL execution by ensuring that only SELECT statements can be submitted, mitigating a potential security vulnerability.
1 parent c19db3f commit a8ec134

File tree

1 file changed

+13
-1
lines changed

1 file changed

+13
-1
lines changed

src/ui/observations/inputs.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,7 @@ def render(
215215
audience_tables=[],
216216
filters=[],
217217
custom_test_ids_query=None,
218+
full_custom_query=None,
218219
metric_tags=[],
219220
metric_groups=[],
220221
)
@@ -347,7 +348,9 @@ def render(
347348
"Modifying operations (INSERT, UPDATE, DELETE) are not allowed.",
348349
)
349350
full_custom_query = st.text_area(
350-
"Full Custom Query", value="", key="full_custom_query_input_key"
351+
"Full Custom Query",
352+
value=predefined.full_custom_query,
353+
key="full_custom_query_input_key",
351354
)
352355

353356
metric_tags: list[str] | None = st.multiselect(
@@ -414,6 +417,15 @@ def render(
414417
st.warning(f"Custom Test IDs Query validation failed: {e}")
415418
return None
416419

420+
# Validate full custom query separately with SQL query validation
421+
if full_custom_query and full_custom_query.strip():
422+
try:
423+
ValidationUtils.validate_sql_query(full_custom_query)
424+
except Exception as e:
425+
st.toast(f"Invalid SQL query for Full Custom Query: {str(e)}", icon="⚠️")
426+
st.warning(f"Full Custom Query validation failed: {e}")
427+
return None
428+
417429
return cls(
418430
observation=ObservationFormData(
419431
experiment_id=experiment_id,

0 commit comments

Comments
 (0)