2020-04-24 14:04:36 +00:00
|
|
|
use super::*;
|
2020-04-09 19:04:31 +00:00
|
|
|
|
2020-04-27 16:57:00 +00:00
|
|
|
pub fn populate_object_props(
|
2020-04-13 13:06:41 +00:00
|
|
|
props: &mut ObjectProperties,
|
|
|
|
addressed_to: &str,
|
|
|
|
object_id: &str,
|
|
|
|
) -> Result<(), Error> {
|
|
|
|
props
|
|
|
|
.set_context_xsd_any_uri(context())?
|
|
|
|
// TODO: the activity needs a seperate id from the object
|
|
|
|
.set_id(object_id)?
|
2020-04-10 11:26:06 +00:00
|
|
|
// TODO: should to/cc go on the Create, or on the Post? or on both?
|
|
|
|
// TODO: handle privacy on the receiving side (at least ignore anything thats not public)
|
2020-04-13 13:06:41 +00:00
|
|
|
.set_to_xsd_any_uri(public())?
|
|
|
|
.set_cc_xsd_any_uri(addressed_to)?;
|
|
|
|
Ok(())
|
|
|
|
}
|
|
|
|
|
2020-04-17 15:33:55 +00:00
|
|
|
/// Send an activity to a list of recipients, using the correct headers etc.
|
2020-04-26 17:20:42 +00:00
|
|
|
pub fn send_activity<A>(
|
2020-04-18 18:54:20 +00:00
|
|
|
activity: &A,
|
2020-04-19 11:44:44 +00:00
|
|
|
private_key: &str,
|
2020-04-18 18:54:20 +00:00
|
|
|
sender_id: &str,
|
|
|
|
to: Vec<String>,
|
|
|
|
) -> Result<(), Error>
|
2020-04-13 13:06:41 +00:00
|
|
|
where
|
|
|
|
A: Serialize + Debug,
|
|
|
|
{
|
|
|
|
let json = serde_json::to_string(&activity)?;
|
2020-04-17 17:34:18 +00:00
|
|
|
debug!("Sending activitypub activity {} to {:?}", json, to);
|
2020-04-14 15:37:23 +00:00
|
|
|
for t in to {
|
2020-04-18 18:54:20 +00:00
|
|
|
let to_url = Url::parse(&t)?;
|
|
|
|
if !is_apub_id_valid(&to_url) {
|
2020-04-17 17:34:18 +00:00
|
|
|
debug!("Not sending activity to {} (invalid or blacklisted)", t);
|
|
|
|
continue;
|
|
|
|
}
|
2020-04-18 18:54:20 +00:00
|
|
|
let request = Request::post(t).header("Host", to_url.domain().unwrap());
|
2020-04-19 11:44:44 +00:00
|
|
|
let signature = sign(&request, private_key, sender_id)?;
|
2020-04-18 18:54:20 +00:00
|
|
|
let res = request
|
|
|
|
.header("Signature", signature)
|
2020-04-09 19:04:31 +00:00
|
|
|
.header("Content-Type", "application/json")
|
|
|
|
.body(json.to_owned())?
|
|
|
|
.send()?;
|
2020-04-17 14:55:28 +00:00
|
|
|
debug!("Result for activity send: {:?}", res);
|
2020-04-09 19:04:31 +00:00
|
|
|
}
|
|
|
|
Ok(())
|
|
|
|
}
|