mirror of
https://github.com/scsibug/nostr-rs-relay.git
synced 2024-11-22 09:09:07 -05:00
improvement: send error on empty-string prefix author/id searches
This commit is contained in:
parent
8137b6211c
commit
c6a8807485
|
@ -65,12 +65,21 @@ impl<'de> Deserialize<'de> for ReqFilter {
|
||||||
tags: None,
|
tags: None,
|
||||||
force_no_match: false,
|
force_no_match: false,
|
||||||
};
|
};
|
||||||
|
let empty_string = "".into();
|
||||||
let mut ts = None;
|
let mut ts = None;
|
||||||
// iterate through each key, and assign values that exist
|
// iterate through each key, and assign values that exist
|
||||||
for (key, val) in filter.into_iter() {
|
for (key, val) in filter.into_iter() {
|
||||||
// ids
|
// ids
|
||||||
if key == "ids" {
|
if key == "ids" {
|
||||||
rf.ids = Deserialize::deserialize(val).ok();
|
let raw_ids: Option<Vec<String>>= Deserialize::deserialize(val).ok();
|
||||||
|
if let Some(a) = raw_ids.as_ref() {
|
||||||
|
if a.contains(&empty_string) {
|
||||||
|
return Err(serde::de::Error::invalid_type(
|
||||||
|
Unexpected::Other("prefix matches must not be empty strings"),
|
||||||
|
&"a json object"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rf.ids =raw_ids;
|
||||||
} else if key == "kinds" {
|
} else if key == "kinds" {
|
||||||
rf.kinds = Deserialize::deserialize(val).ok();
|
rf.kinds = Deserialize::deserialize(val).ok();
|
||||||
} else if key == "since" {
|
} else if key == "since" {
|
||||||
|
@ -80,7 +89,15 @@ impl<'de> Deserialize<'de> for ReqFilter {
|
||||||
} else if key == "limit" {
|
} else if key == "limit" {
|
||||||
rf.limit = Deserialize::deserialize(val).ok();
|
rf.limit = Deserialize::deserialize(val).ok();
|
||||||
} else if key == "authors" {
|
} else if key == "authors" {
|
||||||
rf.authors = Deserialize::deserialize(val).ok();
|
let raw_authors: Option<Vec<String>>= Deserialize::deserialize(val).ok();
|
||||||
|
if let Some(a) = raw_authors.as_ref() {
|
||||||
|
if a.contains(&empty_string) {
|
||||||
|
return Err(serde::de::Error::invalid_type(
|
||||||
|
Unexpected::Other("prefix matches must not be empty strings"),
|
||||||
|
&"a json object"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rf.authors = raw_authors;
|
||||||
} else if key.starts_with('#') && key.len() > 1 && val.is_array() {
|
} else if key.starts_with('#') && key.len() > 1 && val.is_array() {
|
||||||
if let Some(tag_search) = tag_search_char_from_filter(key) {
|
if let Some(tag_search) = tag_search_char_from_filter(key) {
|
||||||
if ts.is_none() {
|
if ts.is_none() {
|
||||||
|
@ -294,6 +311,24 @@ mod tests {
|
||||||
assert!(serde_json::from_str::<Subscription>(raw_json).is_err());
|
assert!(serde_json::from_str::<Subscription>(raw_json).is_err());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn req_empty_authors_prefix() {
|
||||||
|
let raw_json = "[\"REQ\",\"some-id\",{\"authors\": [\"\"]}]";
|
||||||
|
assert!(serde_json::from_str::<Subscription>(raw_json).is_err());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn req_empty_ids_prefix() {
|
||||||
|
let raw_json = "[\"REQ\",\"some-id\",{\"ids\": [\"\"]}]";
|
||||||
|
assert!(serde_json::from_str::<Subscription>(raw_json).is_err());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn req_empty_ids_prefix_mixed() {
|
||||||
|
let raw_json = "[\"REQ\",\"some-id\",{\"ids\": [\"\",\"aaa\"]}]";
|
||||||
|
assert!(serde_json::from_str::<Subscription>(raw_json).is_err());
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn legacy_filter() {
|
fn legacy_filter() {
|
||||||
// legacy field in filter
|
// legacy field in filter
|
||||||
|
|
Loading…
Reference in New Issue
Block a user