mirror of
https://github.com/scsibug/nostr-rs-relay.git
synced 2024-11-09 21:29:06 -05:00
feat: remove author
from subscriptions (NIP-01 Spec)
The `authors` field is sufficient to represent all queries that `author` could have been used in. See https://github.com/fiatjaf/nostr/issues/34 for the discussion leading to this removal.
This commit is contained in:
parent
acf6231277
commit
5b6a20dfa6
10
src/db.rs
10
src/db.rs
|
@ -181,16 +181,6 @@ fn query_from_sub(sub: &Subscription) -> String {
|
||||||
for f in sub.filters.iter() {
|
for f in sub.filters.iter() {
|
||||||
// individual filter components
|
// individual filter components
|
||||||
let mut filter_components: Vec<String> = Vec::new();
|
let mut filter_components: Vec<String> = Vec::new();
|
||||||
// Query for "author"
|
|
||||||
// https://github.com/fiatjaf/nostr/issues/34
|
|
||||||
// I believe the author & authors fields are redundant.
|
|
||||||
if f.author.is_some() {
|
|
||||||
let author_str = f.author.as_ref().unwrap();
|
|
||||||
if is_hex(author_str) {
|
|
||||||
let author_clause = format!("author = x'{}'", author_str);
|
|
||||||
filter_components.push(author_clause);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Query for "authors"
|
// Query for "authors"
|
||||||
if f.authors.is_some() {
|
if f.authors.is_some() {
|
||||||
let authors_escaped: Vec<String> = f
|
let authors_escaped: Vec<String> = f
|
||||||
|
|
|
@ -20,8 +20,6 @@ pub struct Subscription {
|
||||||
pub struct ReqFilter {
|
pub struct ReqFilter {
|
||||||
/// Event hash
|
/// Event hash
|
||||||
pub id: Option<String>,
|
pub id: Option<String>,
|
||||||
/// Author public key
|
|
||||||
pub author: Option<String>,
|
|
||||||
/// Event kind
|
/// Event kind
|
||||||
pub kind: Option<u64>,
|
pub kind: Option<u64>,
|
||||||
/// Referenced event hash
|
/// Referenced event hash
|
||||||
|
@ -114,13 +112,6 @@ impl ReqFilter {
|
||||||
.map(|vs| vs.contains(&event.pubkey.to_owned()))
|
.map(|vs| vs.contains(&event.pubkey.to_owned()))
|
||||||
.unwrap_or(true)
|
.unwrap_or(true)
|
||||||
}
|
}
|
||||||
/// Check for a specific author match
|
|
||||||
fn author_match(&self, event: &Event) -> bool {
|
|
||||||
self.author
|
|
||||||
.as_ref()
|
|
||||||
.map(|v| v == &event.pubkey)
|
|
||||||
.unwrap_or(true)
|
|
||||||
}
|
|
||||||
/// Check if this filter either matches, or does not care about the event tags.
|
/// Check if this filter either matches, or does not care about the event tags.
|
||||||
fn event_match(&self, event: &Event) -> bool {
|
fn event_match(&self, event: &Event) -> bool {
|
||||||
self.event
|
self.event
|
||||||
|
@ -148,7 +139,6 @@ impl ReqFilter {
|
||||||
self.id.as_ref().map(|v| v == &event.id).unwrap_or(true)
|
self.id.as_ref().map(|v| v == &event.id).unwrap_or(true)
|
||||||
&& self.since.map(|t| event.created_at > t).unwrap_or(true)
|
&& self.since.map(|t| event.created_at > t).unwrap_or(true)
|
||||||
&& self.kind_match(event.kind)
|
&& self.kind_match(event.kind)
|
||||||
&& self.author_match(event)
|
|
||||||
&& self.authors_match(event)
|
&& self.authors_match(event)
|
||||||
&& self.pubkey_match(event)
|
&& self.pubkey_match(event)
|
||||||
&& self.event_match(event)
|
&& self.event_match(event)
|
||||||
|
@ -165,17 +155,7 @@ mod tests {
|
||||||
let s: Subscription = serde_json::from_str(raw_json)?;
|
let s: Subscription = serde_json::from_str(raw_json)?;
|
||||||
assert_eq!(s.id, "some-id");
|
assert_eq!(s.id, "some-id");
|
||||||
assert_eq!(s.filters.len(), 1);
|
assert_eq!(s.filters.len(), 1);
|
||||||
assert_eq!(s.filters.get(0).unwrap().author, None);
|
assert_eq!(s.filters.get(0).unwrap().authors, None);
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn multi_empty_request_parse() -> Result<()> {
|
|
||||||
let raw_json = r#"["REQ","some-id",{}]"#;
|
|
||||||
let s: Subscription = serde_json::from_str(raw_json)?;
|
|
||||||
assert_eq!(s.id, "some-id");
|
|
||||||
assert_eq!(s.filters.len(), 1);
|
|
||||||
assert_eq!(s.filters.get(0).unwrap().author, None);
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -277,23 +257,6 @@ mod tests {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn author_single() -> Result<()> {
|
|
||||||
// subscription with a filter for ID
|
|
||||||
let s: Subscription = serde_json::from_str(r#"["REQ","xyz",{"author":"abc"}]"#)?;
|
|
||||||
let e = Event {
|
|
||||||
id: "123".to_owned(),
|
|
||||||
pubkey: "abc".to_owned(),
|
|
||||||
created_at: 0,
|
|
||||||
kind: 0,
|
|
||||||
tags: Vec::new(),
|
|
||||||
content: "".to_owned(),
|
|
||||||
sig: "".to_owned(),
|
|
||||||
};
|
|
||||||
assert_eq!(s.interested_in_event(&e), true);
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn authors_single() -> Result<()> {
|
fn authors_single() -> Result<()> {
|
||||||
// subscription with a filter for ID
|
// subscription with a filter for ID
|
||||||
|
@ -311,6 +274,7 @@ mod tests {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
#[test]
|
#[test]
|
||||||
|
|
||||||
fn authors_multi_pubkey() -> Result<()> {
|
fn authors_multi_pubkey() -> Result<()> {
|
||||||
// check for any of a set of authors, against the pubkey
|
// check for any of a set of authors, against the pubkey
|
||||||
let s: Subscription = serde_json::from_str(r#"["REQ","xyz",{"authors":["abc", "bcd"]}]"#)?;
|
let s: Subscription = serde_json::from_str(r#"["REQ","xyz",{"authors":["abc", "bcd"]}]"#)?;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user