fix(protocol): harden gateway contract validation
This commit is contained in:
@@ -56,12 +56,18 @@ fn evaluate(kind: &str, input: &str) -> &'static str {
|
||||
"gateway_input" => classify_gateway_input(values.get("hex").map(String::as_str).unwrap_or_default()),
|
||||
"gateway_feedback" => classify_gateway_feedback(values.get("hex").map(String::as_str).unwrap_or_default()),
|
||||
"gateway_clipboard" if values.contains_key("file") => "invalid:forbidden",
|
||||
"gateway_clipboard"
|
||||
if matches!(values.get("direction").map(String::as_str), Some("client_to_provider") | Some("provider_to_client"))
|
||||
&& values.get("encoding").map(String::as_str) == Some("utf-8")
|
||||
&& values.get("loop_token").map_or(false, |value| (16..=128).contains(&value.len()))
|
||||
&& values.get("text").map_or(false, |value| value.len() <= 65536) => "valid",
|
||||
"gateway_clipboard" => "invalid:clipboard",
|
||||
"gateway_clipboard" => match (
|
||||
values.get("direction"),
|
||||
values.get("text"),
|
||||
values.get("encoding"),
|
||||
values.get("loop_token"),
|
||||
) {
|
||||
(Some(direction), Some(text), Some(encoding), Some(token))
|
||||
if GatewayClipboardText::new(
|
||||
direction.clone(), text.clone(), encoding.clone(), token.clone(),
|
||||
).is_ok() => "valid",
|
||||
_ => "invalid:clipboard",
|
||||
},
|
||||
"gateway_clipboard_audit" if values.contains_key("text") => "invalid:forbidden",
|
||||
"gateway_clipboard_audit"
|
||||
if matches!(values.get("direction").map(String::as_str), Some("client_to_provider") | Some("provider_to_client"))
|
||||
|
||||
Reference in New Issue
Block a user