Fix inbox resolution, fix notsubscribed message

This commit is contained in:
asonix 2020-05-21 17:00:55 -05:00
parent 729e425e32
commit 17886732dd
2 changed files with 10 additions and 3 deletions

View file

@ -63,7 +63,7 @@ impl ActorCache {
let input_host = id.as_url().host(); let input_host = id.as_url().host();
let accepted_actor_id = accepted_actor.id().ok_or(MyError::MissingId)?; let accepted_actor_id = accepted_actor.id().ok_or(MyError::MissingId)?;
let actor_host = accepted_actor_id.as_url().host(); let actor_host = accepted_actor_id.as_url().host();
let inbox_host = accepted_actor.inbox().as_url().host(); let inbox_host = get_inbox(&accepted_actor).as_url().host();
if input_host != actor_host { if input_host != actor_host {
let input_host = input_host.map(|h| h.to_string()).unwrap_or_default(); let input_host = input_host.map(|h| h.to_string()).unwrap_or_default();
@ -79,7 +79,7 @@ impl ActorCache {
return Err(MyError::HostMismatch(actor_host, inbox_host)); return Err(MyError::HostMismatch(actor_host, inbox_host));
} }
let inbox = accepted_actor.inbox().clone(); let inbox = get_inbox(&accepted_actor).clone();
let actor = Actor { let actor = Actor {
id: accepted_actor_id.clone(), id: accepted_actor_id.clone(),
@ -335,6 +335,13 @@ impl ActorCache {
} }
} }
fn get_inbox(actor: &AcceptedActors) -> &XsdAnyUri {
actor
.endpoints()
.and_then(|e| e.shared_inbox.as_ref())
.unwrap_or(actor.inbox())
}
#[derive(Clone, Debug, serde::Deserialize, serde::Serialize)] #[derive(Clone, Debug, serde::Deserialize, serde::Serialize)]
pub struct Actor { pub struct Actor {
pub id: XsdAnyUri, pub id: XsdAnyUri,

View file

@ -166,7 +166,7 @@ async fn handle_undo(
jobs.queue(Forward::new(input, actor))?; jobs.queue(Forward::new(input, actor))?;
return Ok(()); return Ok(());
} else { } else {
return Err(MyError::NotSubscribed(id_string(input.id())?)); return Err(MyError::NotSubscribed(actor.inbox.to_string()));
} }
} }