mirror of
https://github.com/LemmyNet/lemmy.git
synced 2024-11-16 17:34:00 +00:00
Merge branch 'federation' into add_activity_table
This commit is contained in:
commit
1e95f50898
4 changed files with 69 additions and 97 deletions
|
@ -23,9 +23,6 @@ impl ToApub for Comment {
|
|||
// Not needed when the Post is embedded in a collection (like for community outbox)
|
||||
.set_context_xsd_any_uri(context())?
|
||||
.set_id(self.ap_id.to_owned())?
|
||||
// Use summary field to be consistent with mastodon content warning.
|
||||
// https://mastodon.xyz/@Louisa/103987265222901387.json
|
||||
// .set_summary_xsd_string(self.name.to_owned())?
|
||||
.set_published(convert_datetime(self.published))?
|
||||
.set_to_xsd_any_uri(community.actor_id)?
|
||||
.set_many_in_reply_to_xsd_any_uris(in_reply_to_vec)?
|
||||
|
|
|
@ -16,11 +16,7 @@ use activitystreams::{
|
|||
context,
|
||||
endpoint::EndpointProperties,
|
||||
ext::{Ext, Extensible, Extension},
|
||||
object::{
|
||||
kind::{NoteType, PageType},
|
||||
properties::ObjectProperties,
|
||||
Note, Page,
|
||||
},
|
||||
object::{properties::ObjectProperties, Note, Page},
|
||||
public, BaseBox,
|
||||
};
|
||||
use actix_web::body::Body;
|
||||
|
@ -184,12 +180,12 @@ pub trait ActorType {
|
|||
// and a user can't be followed (yet)
|
||||
#[allow(unused_variables)]
|
||||
fn send_follow(&self, follow_actor_id: &str, conn: &PgConnection) -> Result<(), Error> {
|
||||
Ok(())
|
||||
Err(format_err!("Follow not implemented."))
|
||||
}
|
||||
|
||||
#[allow(unused_variables)]
|
||||
fn send_accept_follow(&self, follow: &Follow, conn: &PgConnection) -> Result<(), Error> {
|
||||
Ok(())
|
||||
Err(format_err!("Accept not implemented."))
|
||||
}
|
||||
|
||||
// TODO default because there is no user following yet.
|
||||
|
|
|
@ -7,6 +7,15 @@ pub enum SharedAcceptedObjects {
|
|||
Update(Update),
|
||||
}
|
||||
|
||||
impl SharedAcceptedObjects {
|
||||
fn object(&self) -> Option<&BaseBox> {
|
||||
match self {
|
||||
SharedAcceptedObjects::Create(c) => c.create_props.get_object_base_box(),
|
||||
SharedAcceptedObjects::Update(u) => u.update_props.get_object_base_box(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Handler for all incoming activities to user inboxes.
|
||||
pub async fn shared_inbox(
|
||||
request: HttpRequest,
|
||||
|
@ -15,59 +24,45 @@ pub async fn shared_inbox(
|
|||
chat_server: ChatServerParam,
|
||||
) -> Result<HttpResponse, Error> {
|
||||
// TODO: would be nice if we could do the signature check here, but we cant access the actor property
|
||||
let input = input.into_inner();
|
||||
let activity = input.into_inner();
|
||||
let conn = &db.get().unwrap();
|
||||
|
||||
let json = serde_json::to_string(&input)?;
|
||||
debug!("Shared inbox received activity: {:?}", &json);
|
||||
let json = serde_json::to_string(&activity)?;
|
||||
debug!("Shared inbox received activity: {}", json);
|
||||
|
||||
match input {
|
||||
SharedAcceptedObjects::Create(c) => handle_create(&c, &request, &conn, chat_server),
|
||||
SharedAcceptedObjects::Update(u) => handle_update(&u, &request, &conn, chat_server),
|
||||
let object = activity.object().cloned().unwrap();
|
||||
|
||||
match (activity, object.kind()) {
|
||||
(SharedAcceptedObjects::Create(c), Some("Note")) => {
|
||||
receive_create_comment(&c, &request, &conn, chat_server)
|
||||
}
|
||||
(SharedAcceptedObjects::Create(c), Some("Page")) => {
|
||||
receive_create_post(&c, &request, &conn, chat_server)
|
||||
}
|
||||
(SharedAcceptedObjects::Update(u), Some("Note")) => {
|
||||
receive_update_comment(&u, &request, &conn, chat_server)
|
||||
}
|
||||
(SharedAcceptedObjects::Update(u), Some("Page")) => {
|
||||
receive_update_post(&u, &request, &conn, chat_server)
|
||||
}
|
||||
_ => Err(format_err!("Unknown incoming activity type.")),
|
||||
}
|
||||
}
|
||||
|
||||
/// Handle create activities and insert them in the database.
|
||||
fn handle_create(
|
||||
fn receive_create_post(
|
||||
create: &Create,
|
||||
request: &HttpRequest,
|
||||
conn: &PgConnection,
|
||||
chat_server: ChatServerParam,
|
||||
) -> Result<HttpResponse, Error> {
|
||||
let base_box = create.create_props.get_object_base_box().unwrap();
|
||||
let page = create
|
||||
.create_props
|
||||
.get_object_base_box()
|
||||
.to_owned()
|
||||
.unwrap()
|
||||
.to_owned()
|
||||
.to_concrete::<Page>()?;
|
||||
|
||||
if base_box.is_kind(PageType) {
|
||||
let page = create
|
||||
.create_props
|
||||
.get_object_base_box()
|
||||
.to_owned()
|
||||
.unwrap()
|
||||
.to_owned()
|
||||
.to_concrete::<Page>()?;
|
||||
receive_create_post(&create, &page, &request, &conn, chat_server)?;
|
||||
} else if base_box.is_kind(NoteType) {
|
||||
let note = create
|
||||
.create_props
|
||||
.get_object_base_box()
|
||||
.to_owned()
|
||||
.unwrap()
|
||||
.to_owned()
|
||||
.to_concrete::<Note>()?;
|
||||
receive_create_comment(&create, ¬e, &request, &conn, chat_server)?;
|
||||
} else {
|
||||
return Err(format_err!("Unknown base box type"));
|
||||
}
|
||||
|
||||
Ok(HttpResponse::Ok().finish())
|
||||
}
|
||||
|
||||
fn receive_create_post(
|
||||
create: &Create,
|
||||
page: &Page,
|
||||
request: &HttpRequest,
|
||||
conn: &PgConnection,
|
||||
chat_server: ChatServerParam,
|
||||
) -> Result<(), Error> {
|
||||
let user_uri = create
|
||||
.create_props
|
||||
.get_actor_xsd_any_uri()
|
||||
|
@ -100,16 +95,23 @@ fn receive_create_post(
|
|||
my_id: None,
|
||||
});
|
||||
|
||||
Ok(())
|
||||
Ok(HttpResponse::Ok().finish())
|
||||
}
|
||||
|
||||
fn receive_create_comment(
|
||||
create: &Create,
|
||||
note: &Note,
|
||||
request: &HttpRequest,
|
||||
conn: &PgConnection,
|
||||
chat_server: ChatServerParam,
|
||||
) -> Result<(), Error> {
|
||||
) -> Result<HttpResponse, Error> {
|
||||
let note = create
|
||||
.create_props
|
||||
.get_object_base_box()
|
||||
.to_owned()
|
||||
.unwrap()
|
||||
.to_owned()
|
||||
.to_concrete::<Note>()?;
|
||||
|
||||
let user_uri = create
|
||||
.create_props
|
||||
.get_actor_xsd_any_uri()
|
||||
|
@ -147,51 +149,23 @@ fn receive_create_comment(
|
|||
my_id: None,
|
||||
});
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Handle create activities and insert them in the database.
|
||||
fn handle_update(
|
||||
update: &Update,
|
||||
request: &HttpRequest,
|
||||
conn: &PgConnection,
|
||||
chat_server: ChatServerParam,
|
||||
) -> Result<HttpResponse, Error> {
|
||||
let base_box = update.update_props.get_object_base_box().unwrap();
|
||||
|
||||
if base_box.is_kind(PageType) {
|
||||
let page = update
|
||||
.update_props
|
||||
.get_object_base_box()
|
||||
.to_owned()
|
||||
.unwrap()
|
||||
.to_owned()
|
||||
.to_concrete::<Page>()?;
|
||||
|
||||
receive_update_post(&update, &page, &request, &conn, chat_server)?;
|
||||
} else if base_box.is_kind(NoteType) {
|
||||
let note = update
|
||||
.update_props
|
||||
.get_object_base_box()
|
||||
.to_owned()
|
||||
.unwrap()
|
||||
.to_owned()
|
||||
.to_concrete::<Note>()?;
|
||||
receive_update_comment(&update, ¬e, &request, &conn, chat_server)?;
|
||||
} else {
|
||||
return Err(format_err!("Unknown base box type"));
|
||||
}
|
||||
|
||||
Ok(HttpResponse::Ok().finish())
|
||||
}
|
||||
|
||||
fn receive_update_post(
|
||||
update: &Update,
|
||||
page: &Page,
|
||||
request: &HttpRequest,
|
||||
conn: &PgConnection,
|
||||
chat_server: ChatServerParam,
|
||||
) -> Result<(), Error> {
|
||||
) -> Result<HttpResponse, Error> {
|
||||
let page = update
|
||||
.update_props
|
||||
.get_object_base_box()
|
||||
.to_owned()
|
||||
.unwrap()
|
||||
.to_owned()
|
||||
.to_concrete::<Page>()?;
|
||||
|
||||
let user_uri = update
|
||||
.update_props
|
||||
.get_actor_xsd_any_uri()
|
||||
|
@ -225,16 +199,23 @@ fn receive_update_post(
|
|||
my_id: None,
|
||||
});
|
||||
|
||||
Ok(())
|
||||
Ok(HttpResponse::Ok().finish())
|
||||
}
|
||||
|
||||
fn receive_update_comment(
|
||||
update: &Update,
|
||||
note: &Note,
|
||||
request: &HttpRequest,
|
||||
conn: &PgConnection,
|
||||
chat_server: ChatServerParam,
|
||||
) -> Result<(), Error> {
|
||||
) -> Result<HttpResponse, Error> {
|
||||
let note = update
|
||||
.update_props
|
||||
.get_object_base_box()
|
||||
.to_owned()
|
||||
.unwrap()
|
||||
.to_owned()
|
||||
.to_concrete::<Note>()?;
|
||||
|
||||
let user_uri = update
|
||||
.update_props
|
||||
.get_actor_xsd_any_uri()
|
||||
|
@ -273,5 +254,5 @@ fn receive_update_comment(
|
|||
my_id: None,
|
||||
});
|
||||
|
||||
Ok(())
|
||||
Ok(HttpResponse::Ok().finish())
|
||||
}
|
||||
|
|
2
ui/src/api_tests/api.spec.ts
vendored
2
ui/src/api_tests/api.spec.ts
vendored
|
@ -102,8 +102,6 @@ describe('main', () => {
|
|||
|
||||
expect(searchResponse.communities[0].name).toBe('main');
|
||||
|
||||
// TODO
|
||||
// Unfortunately the search is correctly
|
||||
let followForm: FollowCommunityForm = {
|
||||
community_id: searchResponse.communities[0].id,
|
||||
follow: true,
|
||||
|
|
Loading…
Reference in a new issue