From 794993767aa457af5f40bdf7212eeadb4a5388cf Mon Sep 17 00:00:00 2001 From: Nutomic Date: Wed, 1 Oct 2025 15:57:38 +0000 Subject: [PATCH] Split apub code into multiple crates, other changes for faster building (#6031) * Comment out joins for faster compile (ref #6012) * cleanup * revert report_combined * comments * add clean-workspace * move api code out * compile site view earlier * compile post view earlier * move code * rename * move activities to separate crate * subfolder * revert migrations * fix tests * fmt * Use Box::pin for large futures * move server to crates * Move api_routes to separate crate * fix tests --- .cargo/config.toml | 2 - .woodpecker.yml | 1 - Cargo.lock | 137 +++++++++++------- Cargo.toml | 69 ++------- crates/api/api/Cargo.toml | 7 + .../api/src/federation/fetcher.rs} | 15 +- .../api/src/federation}/list_comments.rs | 12 +- .../src/federation}/list_person_content.rs | 2 +- .../api/src/federation}/list_posts.rs | 12 +- .../src/api => api/api/src/federation}/mod.rs | 3 +- .../api/src/federation}/read_community.rs | 2 +- .../api/src/federation}/read_person.rs | 2 +- .../api/src/federation}/resolve_object.rs | 43 +++++- .../api => api/api/src/federation}/search.rs | 2 +- .../src/federation}/user_settings_backup.rs | 2 +- crates/api/api/src/lib.rs | 1 + crates/api/api/src/local_user/list_hidden.rs | 2 +- crates/api/api/src/local_user/list_read.rs | 2 +- .../site/registration_applications/tests.rs | 8 +- crates/api/api_common/src/account.rs | 17 +-- crates/api/api_common/src/post.rs | 4 +- crates/api/api_crud/src/post/read.rs | 6 +- crates/api/api_crud/src/site/read.rs | 3 +- crates/api/routes/Cargo.toml | 27 ++++ .../api/routes/src/lib.rs | 20 +-- crates/apub/{ => activities}/Cargo.toml | 16 +- .../{ => activities}/src/activity_lists.rs | 18 +-- .../src}/block/block_user.rs | 16 +- .../src}/block/mod.rs | 2 +- .../src}/block/undo_block_user.rs | 14 +- .../src}/community/announce.rs | 8 +- .../src}/community/collection_add.rs | 8 +- .../src}/community/collection_remove.rs | 5 +- .../src}/community/lock.rs | 12 +- .../src}/community/mod.rs | 4 +- .../src}/community/report.rs | 5 +- .../src}/community/resolve_report.rs | 5 +- .../src}/community/update.rs | 7 +- .../src}/create_or_update/comment.rs | 10 +- .../src}/create_or_update/mod.rs | 0 .../src}/create_or_update/note_wrapper.rs | 2 +- .../src}/create_or_update/post.rs | 12 +- .../src}/create_or_update/private_message.rs | 9 +- .../src}/deletion/delete.rs | 14 +- .../src}/deletion/mod.rs | 8 +- .../src}/deletion/undo_delete.rs | 12 +- .../src}/following/accept.rs | 5 +- .../src}/following/follow.rs | 7 +- .../src}/following/mod.rs | 2 +- .../src}/following/reject.rs | 4 +- .../src}/following/undo_follow.rs | 5 +- .../mod.rs => activities/src/lib.rs} | 65 ++++++--- .../src/protocol}/block/block_user.rs | 2 +- .../apub/activities/src/protocol/block/mod.rs | 18 +++ .../src/protocol}/block/undo_block_user.rs | 0 .../src/protocol}/community/announce.rs | 2 +- .../src/protocol}/community/collection_add.rs | 0 .../protocol}/community/collection_remove.rs | 0 .../src/protocol}/community/lock.rs | 0 .../activities/src/protocol/community/mod.rs | 68 +++++++++ .../src/protocol}/community/report.rs | 0 .../src/protocol}/community/resolve_report.rs | 0 .../src/protocol}/community/update.rs | 0 .../src/protocol}/create_or_update/mod.rs | 18 +-- .../src/protocol}/create_or_update/note.rs | 2 +- .../create_or_update/note_wrapper.rs | 0 .../src/protocol}/create_or_update/page.rs | 2 +- .../create_or_update/private_message.rs | 2 +- .../src/protocol}/deletion/delete.rs | 2 +- .../src/protocol}/deletion/delete_user.rs | 0 .../activities/src/protocol/deletion/mod.rs | 38 +++++ .../src/protocol}/deletion/undo_delete.rs | 0 .../src/protocol}/following/accept.rs | 2 +- .../src/protocol}/following/follow.rs | 0 .../activities/src/protocol/following/mod.rs | 21 +++ .../src/protocol}/following/reject.rs | 2 +- .../src/protocol}/following/undo_follow.rs | 2 +- crates/apub/activities/src/protocol/mod.rs | 131 +++++++++++++++++ .../activities/src/protocol/voting/mod.rs | 23 +++ .../src/protocol}/voting/undo_vote.rs | 0 .../src/protocol}/voting/vote.rs | 0 .../src}/voting/mod.rs | 4 +- .../src}/voting/undo_vote.rs | 10 +- .../src}/voting/vote.rs | 10 +- crates/apub/apub/Cargo.toml | 51 +++++++ .../assets/discourse/objects/group.json | 0 .../assets/discourse/objects/page.json | 0 .../assets/discourse/objects/person.json | 0 .../friendica/activities/create_note.json | 0 .../friendica/activities/create_page_1.json | 0 .../friendica/activities/create_page_2.json | 0 .../assets/friendica/activities/delete.json | 0 .../friendica/activities/dislike_page.json | 0 .../friendica/activities/like_page.json | 0 .../activities/undo_dislike_page.json | 0 .../friendica/activities/update_note.json | 0 .../assets/friendica/objects/note_1.json | 0 .../assets/friendica/objects/note_2.json | 0 .../assets/friendica/objects/page_1.json | 0 .../assets/friendica/objects/page_2.json | 0 .../assets/friendica/objects/person_1.json | 0 .../assets/friendica/objects/person_2.json | 0 .../gnusocial/activities/create_note.json | 0 .../gnusocial/activities/create_page.json | 0 .../gnusocial/activities/like_note.json | 0 .../assets/gnusocial/objects/group.json | 0 .../assets/gnusocial/objects/note.json | 0 .../assets/gnusocial/objects/page.json | 0 .../assets/gnusocial/objects/person.json | 0 .../lemmy/activities/block/block_user.json | 0 .../activities/block/undo_block_user.json | 0 .../community/add_featured_post.json | 0 .../lemmy/activities/community/add_mod.json | 0 .../community/announce_create_page.json | 0 .../lemmy/activities/community/lock_note.json | 0 .../lemmy/activities/community/lock_page.json | 0 .../community/remove_featured_post.json | 0 .../activities/community/remove_mod.json | 0 .../activities/community/report_page.json | 0 .../community/resolve_report_page.json | 0 .../activities/community/undo_lock_note.json | 0 .../activities/community/undo_lock_page.json | 0 .../community/update_community.json | 0 .../create_or_update/create_comment.json | 0 .../create_or_update/create_page.json | 0 .../create_private_message.json | 0 .../create_or_update/update_page.json | 0 .../activities/deletion/delete_page.json | 0 .../deletion/delete_private_message.json | 0 .../activities/deletion/delete_user.json | 0 .../activities/deletion/remove_note.json | 0 .../activities/deletion/undo_delete_page.json | 0 .../deletion/undo_delete_private_message.json | 0 .../activities/deletion/undo_remove_note.json | 0 .../lemmy/activities/following/accept.json | 0 .../lemmy/activities/following/follow.json | 0 .../activities/following/undo_follow.json | 0 .../lemmy/activities/voting/dislike_page.json | 0 .../lemmy/activities/voting/like_note.json | 0 .../activities/voting/undo_dislike_page.json | 0 .../activities/voting/undo_like_note.json | 0 .../collections/group_featured_posts.json | 0 .../lemmy/collections/group_followers.json | 0 .../lemmy/collections/group_moderators.json | 0 .../lemmy/collections/group_outbox.json | 0 .../lemmy/collections/person_outbox.json | 0 .../assets/lemmy/objects/comment.json | 0 .../assets/lemmy/objects/group.json | 0 .../assets/lemmy/objects/instance.json | 0 .../{ => apub}/assets/lemmy/objects/page.json | 0 .../assets/lemmy/objects/person.json | 0 .../assets/lemmy/objects/private_message.json | 0 .../assets/lemmy/objects/tombstone.json | 0 .../lotide/activities/create_note_reply.json | 0 .../assets/lotide/activities/create_page.json | 0 .../lotide/activities/create_page_image.json | 0 .../assets/lotide/activities/delete_note.json | 0 .../assets/lotide/activities/follow.json | 0 .../assets/lotide/objects/group.json | 0 .../assets/lotide/objects/note.json | 0 .../assets/lotide/objects/page.json | 0 .../assets/lotide/objects/person.json | 0 .../assets/lotide/objects/tombstone.json | 0 .../mastodon/activities/create_note.json | 0 .../assets/mastodon/activities/delete.json | 0 .../assets/mastodon/activities/flag.json | 0 .../assets/mastodon/activities/follow.json | 0 .../assets/mastodon/activities/like_page.json | 0 .../mastodon/activities/private_message.json | 0 .../mastodon/activities/undo_follow.json | 0 .../mastodon/activities/undo_like_page.json | 0 .../assets/mastodon/collections/featured.json | 0 .../assets/mastodon/objects/note_1.json | 0 .../assets/mastodon/objects/note_2.json | 0 .../assets/mastodon/objects/page.json | 0 .../assets/mastodon/objects/person.json | 0 .../assets/mbin/activities/accept.json | 0 .../assets/mbin/activities/flag.json | 0 .../assets/mobilizon/objects/event.json | 0 .../assets/mobilizon/objects/group.json | 0 .../assets/mobilizon/objects/person.json | 0 .../assets/nodebb/objects/group.json | 0 .../assets/nodebb/objects/page.json | 0 .../assets/nodebb/objects/person.json | 0 .../peertube/activities/announce_video.json | 0 .../assets/peertube/objects/group.json | 0 .../assets/peertube/objects/note.json | 0 .../assets/peertube/objects/person.json | 0 .../assets/peertube/objects/video.json | 0 .../pleroma/activities/create_note.json | 0 .../assets/pleroma/activities/delete.json | 0 .../assets/pleroma/activities/follow.json | 0 .../assets/pleroma/objects/chat_message.json | 0 .../assets/pleroma/objects/note.json | 0 .../assets/pleroma/objects/person.json | 0 .../smithereen/activities/create_note.json | 0 .../assets/smithereen/objects/note.json | 0 .../assets/smithereen/objects/person.json | 0 .../assets/wordpress/activities/announce.json | 0 .../assets/wordpress/objects/group.json | 0 .../assets/wordpress/objects/note.json | 0 .../assets/wordpress/objects/page.json | 0 .../assets/wordpress/objects/person.json | 0 .../src/collections/community_featured.rs | 0 .../src/collections/community_follower.rs | 0 .../src/collections/community_moderators.rs | 0 .../src/collections/community_outbox.rs | 36 ++--- crates/apub/{ => apub}/src/collections/mod.rs | 0 crates/apub/{ => apub}/src/http/comment.rs | 0 crates/apub/{ => apub}/src/http/community.rs | 3 +- crates/apub/{ => apub}/src/http/mod.rs | 22 ++- crates/apub/{ => apub}/src/http/person.rs | 0 crates/apub/{ => apub}/src/http/post.rs | 0 crates/apub/{ => apub}/src/http/routes.rs | 0 crates/apub/{ => apub}/src/http/site.rs | 0 crates/apub/{ => apub}/src/lib.rs | 44 +----- .../protocol/collections/group_featured.rs | 0 .../protocol/collections/group_followers.rs | 0 .../protocol/collections/group_moderators.rs | 0 .../src/protocol/collections/group_outbox.rs | 2 +- .../src/protocol/collections/mod.rs | 0 .../protocol/collections/url_collection.rs | 0 crates/apub/apub/src/protocol/mod.rs | 1 + .../{apub_objects => apub/objects}/Cargo.toml | 0 .../{apub_objects => apub/objects}/src/lib.rs | 0 .../objects}/src/objects/comment.rs | 28 +--- .../objects}/src/objects/community.rs | 7 +- .../objects}/src/objects/instance.rs | 3 +- .../objects}/src/objects/mod.rs | 0 .../objects}/src/objects/multi_community.rs | 0 .../src/objects/multi_community_collection.rs | 0 .../objects}/src/objects/person.rs | 23 +-- .../objects}/src/objects/post.rs | 19 +-- .../objects}/src/objects/private_message.rs | 23 +-- .../objects}/src/protocol/group.rs | 0 .../objects}/src/protocol/instance.rs | 0 .../objects}/src/protocol/mod.rs | 0 .../objects}/src/protocol/multi_community.rs | 0 .../objects}/src/protocol/note.rs | 0 .../objects}/src/protocol/page.rs | 0 .../objects}/src/protocol/person.rs | 0 .../objects}/src/protocol/private_message.rs | 0 .../objects}/src/protocol/tags.rs | 0 .../objects}/src/protocol/tombstone.rs | 0 .../objects}/src/utils/functions.rs | 4 +- .../objects}/src/utils/markdown_links.rs | 2 + .../objects}/src/utils/mentions.rs | 0 .../objects}/src/utils/mod.rs | 0 .../objects}/src/utils/protocol.rs | 0 .../objects}/src/utils/test.rs | 0 crates/{federate => apub/send}/Cargo.toml | 2 +- crates/{federate => apub/send}/src/inboxes.rs | 0 crates/{federate => apub/send}/src/lib.rs | 0 crates/{federate => apub/send}/src/send.rs | 0 crates/{federate => apub/send}/src/stats.rs | 0 crates/{federate => apub/send}/src/util.rs | 0 crates/{federate => apub/send}/src/worker.rs | 0 crates/apub/src/fetcher/search.rs | 44 ------ .../apub/src/protocol/activities/block/mod.rs | 16 -- .../src/protocol/activities/community/mod.rs | 58 -------- .../src/protocol/activities/deletion/mod.rs | 32 ---- .../src/protocol/activities/following/mod.rs | 23 --- crates/apub/src/protocol/activities/mod.rs | 103 ------------- .../src/protocol/activities/voting/mod.rs | 19 --- crates/apub/src/protocol/mod.rs | 32 ---- crates/db_views/comment/src/impls.rs | 1 + crates/db_views/modlog_combined/src/impls.rs | 56 +++---- crates/db_views/modlog_combined/src/lib.rs | 4 + .../person_content_combined/src/api.rs | 50 +++++++ .../person_content_combined/src/lib.rs | 1 + crates/db_views/post/Cargo.toml | 3 - crates/db_views/post/src/api.rs | 35 +---- crates/db_views/search_combined/src/api.rs | 28 ++++ crates/db_views/search_combined/src/lib.rs | 1 + crates/db_views/site/Cargo.toml | 3 - crates/db_views/site/src/api.rs | 47 ------ crates/server/Cargo.toml | 49 +++++++ {src => crates/server/src}/lib.rs | 8 +- {src => crates/server/src}/main.rs | 0 crates/utils/tests/test_errors_used.rs | 3 +- scripts/clean-workspace.sh | 6 + 281 files changed, 995 insertions(+), 932 deletions(-) delete mode 100644 .cargo/config.toml rename crates/{apub/src/fetcher/mod.rs => api/api/src/federation/fetcher.rs} (82%) rename crates/{apub/src/api => api/api/src/federation}/list_comments.rs (95%) rename crates/{apub/src/api => api/api/src/federation}/list_person_content.rs (96%) rename crates/{apub/src/api => api/api/src/federation}/list_posts.rs (95%) rename crates/{apub/src/api => api/api/src/federation}/mod.rs (98%) rename crates/{apub/src/api => api/api/src/federation}/read_community.rs (97%) rename crates/{apub/src/api => api/api/src/federation}/read_person.rs (96%) rename crates/{apub/src/api => api/api/src/federation}/resolve_object.rs (79%) rename crates/{apub/src/api => api/api/src/federation}/search.rs (96%) rename crates/{apub/src/api => api/api/src/federation}/user_settings_backup.rs (99%) create mode 100644 crates/api/routes/Cargo.toml rename src/api_routes.rs => crates/api/routes/src/lib.rs (98%) rename crates/apub/{ => activities}/Cargo.toml (74%) rename crates/apub/{ => activities}/src/activity_lists.rs (87%) rename crates/apub/{src/activities => activities/src}/block/block_user.rs (95%) rename crates/apub/{src/activities => activities/src}/block/mod.rs (97%) rename crates/apub/{src/activities => activities/src}/block/undo_block_user.rs (94%) rename crates/apub/{src/activities => activities/src}/community/announce.rs (97%) rename crates/apub/{src/activities => activities/src}/community/collection_add.rs (96%) rename crates/apub/{src/activities => activities/src}/community/collection_remove.rs (96%) rename crates/apub/{src/activities => activities/src}/community/lock.rs (95%) rename crates/apub/{src/activities => activities/src}/community/mod.rs (98%) rename crates/apub/{src/activities => activities/src}/community/report.rs (98%) rename crates/apub/{src/activities => activities/src}/community/resolve_report.rs (97%) rename crates/apub/{src/activities => activities/src}/community/update.rs (95%) rename crates/apub/{src/activities => activities/src}/create_or_update/comment.rs (96%) rename crates/apub/{src/activities => activities/src}/create_or_update/mod.rs (100%) rename crates/apub/{src/activities => activities/src}/create_or_update/note_wrapper.rs (97%) rename crates/apub/{src/activities => activities/src}/create_or_update/post.rs (95%) rename crates/apub/{src/activities => activities/src}/create_or_update/private_message.rs (91%) rename crates/apub/{src/activities => activities/src}/deletion/delete.rs (94%) rename crates/apub/{src/activities => activities/src}/deletion/mod.rs (97%) rename crates/apub/{src/activities => activities/src}/deletion/undo_delete.rs (93%) rename crates/apub/{src/activities => activities/src}/following/accept.rs (94%) rename crates/apub/{src/activities => activities/src}/following/follow.rs (96%) rename crates/apub/{src/activities => activities/src}/following/mod.rs (98%) rename crates/apub/{src/activities => activities/src}/following/reject.rs (95%) rename crates/apub/{src/activities => activities/src}/following/undo_follow.rs (95%) rename crates/apub/{src/activities/mod.rs => activities/src/lib.rs} (89%) rename crates/apub/{src/protocol/activities => activities/src/protocol}/block/block_user.rs (97%) create mode 100644 crates/apub/activities/src/protocol/block/mod.rs rename crates/apub/{src/protocol/activities => activities/src/protocol}/block/undo_block_user.rs (100%) rename crates/apub/{src/protocol/activities => activities/src/protocol}/community/announce.rs (94%) rename crates/apub/{src/protocol/activities => activities/src/protocol}/community/collection_add.rs (100%) rename crates/apub/{src/protocol/activities => activities/src/protocol}/community/collection_remove.rs (100%) rename crates/apub/{src/protocol/activities => activities/src/protocol}/community/lock.rs (100%) create mode 100644 crates/apub/activities/src/protocol/community/mod.rs rename crates/apub/{src/protocol/activities => activities/src/protocol}/community/report.rs (100%) rename crates/apub/{src/protocol/activities => activities/src/protocol}/community/resolve_report.rs (100%) rename crates/apub/{src/protocol/activities => activities/src/protocol}/community/update.rs (100%) rename crates/apub/{src/protocol/activities => activities/src/protocol}/create_or_update/mod.rs (54%) rename crates/apub/{src/protocol/activities => activities/src/protocol}/create_or_update/note.rs (96%) rename crates/apub/{src/protocol/activities => activities/src/protocol}/create_or_update/note_wrapper.rs (100%) rename crates/apub/{src/protocol/activities => activities/src/protocol}/create_or_update/page.rs (95%) rename crates/apub/{src/protocol/activities => activities/src/protocol}/create_or_update/private_message.rs (92%) rename crates/apub/{src/protocol/activities => activities/src/protocol}/deletion/delete.rs (96%) rename crates/apub/{src/protocol/activities => activities/src/protocol}/deletion/delete_user.rs (100%) create mode 100644 crates/apub/activities/src/protocol/deletion/mod.rs rename crates/apub/{src/protocol/activities => activities/src/protocol}/deletion/undo_delete.rs (100%) rename crates/apub/{src/protocol/activities => activities/src/protocol}/following/accept.rs (92%) rename crates/apub/{src/protocol/activities => activities/src/protocol}/following/follow.rs (100%) create mode 100644 crates/apub/activities/src/protocol/following/mod.rs rename crates/apub/{src/protocol/activities => activities/src/protocol}/following/reject.rs (92%) rename crates/apub/{src/protocol/activities => activities/src/protocol}/following/undo_follow.rs (92%) create mode 100644 crates/apub/activities/src/protocol/mod.rs create mode 100644 crates/apub/activities/src/protocol/voting/mod.rs rename crates/apub/{src/protocol/activities => activities/src/protocol}/voting/undo_vote.rs (100%) rename crates/apub/{src/protocol/activities => activities/src/protocol}/voting/vote.rs (100%) rename crates/apub/{src/activities => activities/src}/voting/mod.rs (97%) rename crates/apub/{src/activities => activities/src}/voting/undo_vote.rs (88%) rename crates/apub/{src/activities => activities/src}/voting/vote.rs (92%) create mode 100644 crates/apub/apub/Cargo.toml rename crates/apub/{ => apub}/assets/discourse/objects/group.json (100%) rename crates/apub/{ => apub}/assets/discourse/objects/page.json (100%) rename crates/apub/{ => apub}/assets/discourse/objects/person.json (100%) rename crates/apub/{ => apub}/assets/friendica/activities/create_note.json (100%) rename crates/apub/{ => apub}/assets/friendica/activities/create_page_1.json (100%) rename crates/apub/{ => apub}/assets/friendica/activities/create_page_2.json (100%) rename crates/apub/{ => apub}/assets/friendica/activities/delete.json (100%) rename crates/apub/{ => apub}/assets/friendica/activities/dislike_page.json (100%) rename crates/apub/{ => apub}/assets/friendica/activities/like_page.json (100%) rename crates/apub/{ => apub}/assets/friendica/activities/undo_dislike_page.json (100%) rename crates/apub/{ => apub}/assets/friendica/activities/update_note.json (100%) rename crates/apub/{ => apub}/assets/friendica/objects/note_1.json (100%) rename crates/apub/{ => apub}/assets/friendica/objects/note_2.json (100%) rename crates/apub/{ => apub}/assets/friendica/objects/page_1.json (100%) rename crates/apub/{ => apub}/assets/friendica/objects/page_2.json (100%) rename crates/apub/{ => apub}/assets/friendica/objects/person_1.json (100%) rename crates/apub/{ => apub}/assets/friendica/objects/person_2.json (100%) rename crates/apub/{ => apub}/assets/gnusocial/activities/create_note.json (100%) rename crates/apub/{ => apub}/assets/gnusocial/activities/create_page.json (100%) rename crates/apub/{ => apub}/assets/gnusocial/activities/like_note.json (100%) rename crates/apub/{ => apub}/assets/gnusocial/objects/group.json (100%) rename crates/apub/{ => apub}/assets/gnusocial/objects/note.json (100%) rename crates/apub/{ => apub}/assets/gnusocial/objects/page.json (100%) rename crates/apub/{ => apub}/assets/gnusocial/objects/person.json (100%) rename crates/apub/{ => apub}/assets/lemmy/activities/block/block_user.json (100%) rename crates/apub/{ => apub}/assets/lemmy/activities/block/undo_block_user.json (100%) rename crates/apub/{ => apub}/assets/lemmy/activities/community/add_featured_post.json (100%) rename crates/apub/{ => apub}/assets/lemmy/activities/community/add_mod.json (100%) rename crates/apub/{ => apub}/assets/lemmy/activities/community/announce_create_page.json (100%) rename crates/apub/{ => apub}/assets/lemmy/activities/community/lock_note.json (100%) rename crates/apub/{ => apub}/assets/lemmy/activities/community/lock_page.json (100%) rename crates/apub/{ => apub}/assets/lemmy/activities/community/remove_featured_post.json (100%) rename crates/apub/{ => apub}/assets/lemmy/activities/community/remove_mod.json (100%) rename crates/apub/{ => apub}/assets/lemmy/activities/community/report_page.json (100%) rename crates/apub/{ => apub}/assets/lemmy/activities/community/resolve_report_page.json (100%) rename crates/apub/{ => apub}/assets/lemmy/activities/community/undo_lock_note.json (100%) rename crates/apub/{ => apub}/assets/lemmy/activities/community/undo_lock_page.json (100%) rename crates/apub/{ => apub}/assets/lemmy/activities/community/update_community.json (100%) rename crates/apub/{ => apub}/assets/lemmy/activities/create_or_update/create_comment.json (100%) rename crates/apub/{ => apub}/assets/lemmy/activities/create_or_update/create_page.json (100%) rename crates/apub/{ => apub}/assets/lemmy/activities/create_or_update/create_private_message.json (100%) rename crates/apub/{ => apub}/assets/lemmy/activities/create_or_update/update_page.json (100%) rename crates/apub/{ => apub}/assets/lemmy/activities/deletion/delete_page.json (100%) rename crates/apub/{ => apub}/assets/lemmy/activities/deletion/delete_private_message.json (100%) rename crates/apub/{ => apub}/assets/lemmy/activities/deletion/delete_user.json (100%) rename crates/apub/{ => apub}/assets/lemmy/activities/deletion/remove_note.json (100%) rename crates/apub/{ => apub}/assets/lemmy/activities/deletion/undo_delete_page.json (100%) rename crates/apub/{ => apub}/assets/lemmy/activities/deletion/undo_delete_private_message.json (100%) rename crates/apub/{ => apub}/assets/lemmy/activities/deletion/undo_remove_note.json (100%) rename crates/apub/{ => apub}/assets/lemmy/activities/following/accept.json (100%) rename crates/apub/{ => apub}/assets/lemmy/activities/following/follow.json (100%) rename crates/apub/{ => apub}/assets/lemmy/activities/following/undo_follow.json (100%) rename crates/apub/{ => apub}/assets/lemmy/activities/voting/dislike_page.json (100%) rename crates/apub/{ => apub}/assets/lemmy/activities/voting/like_note.json (100%) rename crates/apub/{ => apub}/assets/lemmy/activities/voting/undo_dislike_page.json (100%) rename crates/apub/{ => apub}/assets/lemmy/activities/voting/undo_like_note.json (100%) rename crates/apub/{ => apub}/assets/lemmy/collections/group_featured_posts.json (100%) rename crates/apub/{ => apub}/assets/lemmy/collections/group_followers.json (100%) rename crates/apub/{ => apub}/assets/lemmy/collections/group_moderators.json (100%) rename crates/apub/{ => apub}/assets/lemmy/collections/group_outbox.json (100%) rename crates/apub/{ => apub}/assets/lemmy/collections/person_outbox.json (100%) rename crates/apub/{ => apub}/assets/lemmy/objects/comment.json (100%) rename crates/apub/{ => apub}/assets/lemmy/objects/group.json (100%) rename crates/apub/{ => apub}/assets/lemmy/objects/instance.json (100%) rename crates/apub/{ => apub}/assets/lemmy/objects/page.json (100%) rename crates/apub/{ => apub}/assets/lemmy/objects/person.json (100%) rename crates/apub/{ => apub}/assets/lemmy/objects/private_message.json (100%) rename crates/apub/{ => apub}/assets/lemmy/objects/tombstone.json (100%) rename crates/apub/{ => apub}/assets/lotide/activities/create_note_reply.json (100%) rename crates/apub/{ => apub}/assets/lotide/activities/create_page.json (100%) rename crates/apub/{ => apub}/assets/lotide/activities/create_page_image.json (100%) rename crates/apub/{ => apub}/assets/lotide/activities/delete_note.json (100%) rename crates/apub/{ => apub}/assets/lotide/activities/follow.json (100%) rename crates/apub/{ => apub}/assets/lotide/objects/group.json (100%) rename crates/apub/{ => apub}/assets/lotide/objects/note.json (100%) rename crates/apub/{ => apub}/assets/lotide/objects/page.json (100%) rename crates/apub/{ => apub}/assets/lotide/objects/person.json (100%) rename crates/apub/{ => apub}/assets/lotide/objects/tombstone.json (100%) rename crates/apub/{ => apub}/assets/mastodon/activities/create_note.json (100%) rename crates/apub/{ => apub}/assets/mastodon/activities/delete.json (100%) rename crates/apub/{ => apub}/assets/mastodon/activities/flag.json (100%) rename crates/apub/{ => apub}/assets/mastodon/activities/follow.json (100%) rename crates/apub/{ => apub}/assets/mastodon/activities/like_page.json (100%) rename crates/apub/{ => apub}/assets/mastodon/activities/private_message.json (100%) rename crates/apub/{ => apub}/assets/mastodon/activities/undo_follow.json (100%) rename crates/apub/{ => apub}/assets/mastodon/activities/undo_like_page.json (100%) rename crates/apub/{ => apub}/assets/mastodon/collections/featured.json (100%) rename crates/apub/{ => apub}/assets/mastodon/objects/note_1.json (100%) rename crates/apub/{ => apub}/assets/mastodon/objects/note_2.json (100%) rename crates/apub/{ => apub}/assets/mastodon/objects/page.json (100%) rename crates/apub/{ => apub}/assets/mastodon/objects/person.json (100%) rename crates/apub/{ => apub}/assets/mbin/activities/accept.json (100%) rename crates/apub/{ => apub}/assets/mbin/activities/flag.json (100%) rename crates/apub/{ => apub}/assets/mobilizon/objects/event.json (100%) rename crates/apub/{ => apub}/assets/mobilizon/objects/group.json (100%) rename crates/apub/{ => apub}/assets/mobilizon/objects/person.json (100%) rename crates/apub/{ => apub}/assets/nodebb/objects/group.json (100%) rename crates/apub/{ => apub}/assets/nodebb/objects/page.json (100%) rename crates/apub/{ => apub}/assets/nodebb/objects/person.json (100%) rename crates/apub/{ => apub}/assets/peertube/activities/announce_video.json (100%) rename crates/apub/{ => apub}/assets/peertube/objects/group.json (100%) rename crates/apub/{ => apub}/assets/peertube/objects/note.json (100%) rename crates/apub/{ => apub}/assets/peertube/objects/person.json (100%) rename crates/apub/{ => apub}/assets/peertube/objects/video.json (100%) rename crates/apub/{ => apub}/assets/pleroma/activities/create_note.json (100%) rename crates/apub/{ => apub}/assets/pleroma/activities/delete.json (100%) rename crates/apub/{ => apub}/assets/pleroma/activities/follow.json (100%) rename crates/apub/{ => apub}/assets/pleroma/objects/chat_message.json (100%) rename crates/apub/{ => apub}/assets/pleroma/objects/note.json (100%) rename crates/apub/{ => apub}/assets/pleroma/objects/person.json (100%) rename crates/apub/{ => apub}/assets/smithereen/activities/create_note.json (100%) rename crates/apub/{ => apub}/assets/smithereen/objects/note.json (100%) rename crates/apub/{ => apub}/assets/smithereen/objects/person.json (100%) rename crates/apub/{ => apub}/assets/wordpress/activities/announce.json (100%) rename crates/apub/{ => apub}/assets/wordpress/objects/group.json (100%) rename crates/apub/{ => apub}/assets/wordpress/objects/note.json (100%) rename crates/apub/{ => apub}/assets/wordpress/objects/page.json (100%) rename crates/apub/{ => apub}/assets/wordpress/objects/person.json (100%) rename crates/apub/{ => apub}/src/collections/community_featured.rs (100%) rename crates/apub/{ => apub}/src/collections/community_follower.rs (100%) rename crates/apub/{ => apub}/src/collections/community_moderators.rs (100%) rename crates/apub/{ => apub}/src/collections/community_outbox.rs (88%) rename crates/apub/{ => apub}/src/collections/mod.rs (100%) rename crates/apub/{ => apub}/src/http/comment.rs (100%) rename crates/apub/{ => apub}/src/http/community.rs (99%) rename crates/apub/{ => apub}/src/http/mod.rs (91%) rename crates/apub/{ => apub}/src/http/person.rs (100%) rename crates/apub/{ => apub}/src/http/post.rs (100%) rename crates/apub/{ => apub}/src/http/routes.rs (100%) rename crates/apub/{ => apub}/src/http/site.rs (100%) rename crates/apub/{ => apub}/src/lib.rs (59%) rename crates/apub/{ => apub}/src/protocol/collections/group_featured.rs (100%) rename crates/apub/{ => apub}/src/protocol/collections/group_followers.rs (100%) rename crates/apub/{ => apub}/src/protocol/collections/group_moderators.rs (100%) rename crates/apub/{ => apub}/src/protocol/collections/group_outbox.rs (83%) rename crates/apub/{ => apub}/src/protocol/collections/mod.rs (100%) rename crates/apub/{ => apub}/src/protocol/collections/url_collection.rs (100%) create mode 100644 crates/apub/apub/src/protocol/mod.rs rename crates/{apub_objects => apub/objects}/Cargo.toml (100%) rename crates/{apub_objects => apub/objects}/src/lib.rs (100%) rename crates/{apub_objects => apub/objects}/src/objects/comment.rs (91%) rename crates/{apub_objects => apub/objects}/src/objects/community.rs (97%) rename crates/{apub_objects => apub/objects}/src/objects/instance.rs (98%) rename crates/{apub_objects => apub/objects}/src/objects/mod.rs (100%) rename crates/{apub_objects => apub/objects}/src/objects/multi_community.rs (100%) rename crates/{apub_objects => apub/objects}/src/objects/multi_community_collection.rs (100%) rename crates/{apub_objects => apub/objects}/src/objects/person.rs (92%) rename crates/{apub_objects => apub/objects}/src/objects/post.rs (94%) rename crates/{apub_objects => apub/objects}/src/objects/private_message.rs (91%) rename crates/{apub_objects => apub/objects}/src/protocol/group.rs (100%) rename crates/{apub_objects => apub/objects}/src/protocol/instance.rs (100%) rename crates/{apub_objects => apub/objects}/src/protocol/mod.rs (100%) rename crates/{apub_objects => apub/objects}/src/protocol/multi_community.rs (100%) rename crates/{apub_objects => apub/objects}/src/protocol/note.rs (100%) rename crates/{apub_objects => apub/objects}/src/protocol/page.rs (100%) rename crates/{apub_objects => apub/objects}/src/protocol/person.rs (100%) rename crates/{apub_objects => apub/objects}/src/protocol/private_message.rs (100%) rename crates/{apub_objects => apub/objects}/src/protocol/tags.rs (100%) rename crates/{apub_objects => apub/objects}/src/protocol/tombstone.rs (100%) rename crates/{apub_objects => apub/objects}/src/utils/functions.rs (99%) rename crates/{apub_objects => apub/objects}/src/utils/markdown_links.rs (98%) rename crates/{apub_objects => apub/objects}/src/utils/mentions.rs (100%) rename crates/{apub_objects => apub/objects}/src/utils/mod.rs (100%) rename crates/{apub_objects => apub/objects}/src/utils/protocol.rs (100%) rename crates/{apub_objects => apub/objects}/src/utils/test.rs (100%) rename crates/{federate => apub/send}/Cargo.toml (98%) rename crates/{federate => apub/send}/src/inboxes.rs (100%) rename crates/{federate => apub/send}/src/lib.rs (100%) rename crates/{federate => apub/send}/src/send.rs (100%) rename crates/{federate => apub/send}/src/stats.rs (100%) rename crates/{federate => apub/send}/src/util.rs (100%) rename crates/{federate => apub/send}/src/worker.rs (100%) delete mode 100644 crates/apub/src/fetcher/search.rs delete mode 100644 crates/apub/src/protocol/activities/block/mod.rs delete mode 100644 crates/apub/src/protocol/activities/community/mod.rs delete mode 100644 crates/apub/src/protocol/activities/deletion/mod.rs delete mode 100644 crates/apub/src/protocol/activities/following/mod.rs delete mode 100644 crates/apub/src/protocol/activities/mod.rs delete mode 100644 crates/apub/src/protocol/activities/voting/mod.rs delete mode 100644 crates/apub/src/protocol/mod.rs create mode 100644 crates/db_views/person_content_combined/src/api.rs create mode 100644 crates/db_views/search_combined/src/api.rs create mode 100644 crates/server/Cargo.toml rename {src => crates/server/src}/lib.rs (98%) rename {src => crates/server/src}/main.rs (100%) create mode 100755 scripts/clean-workspace.sh diff --git a/.cargo/config.toml b/.cargo/config.toml deleted file mode 100644 index 4a6a1abdd..000000000 --- a/.cargo/config.toml +++ /dev/null @@ -1,2 +0,0 @@ -[resolver] -incompatible-rust-versions = "fallback" diff --git a/.woodpecker.yml b/.woodpecker.yml index c7bd1f123..ae2b6ef0a 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -16,7 +16,6 @@ variables: include: [ # rust source code "crates/**", - "src/**", "**/Cargo.toml", "Cargo.lock", # database migrations diff --git a/Cargo.lock b/Cargo.lock index d93875dc3..7351d01d3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -939,9 +939,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.47" +version = "4.5.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7eac00902d9d136acd712710d71823fb8ac8004ca445a89e73a41d45aa712931" +checksum = "e2134bb3ea021b78629caa971416385309e0131b351b25e01dc16fb54e1b5fae" dependencies = [ "clap_builder", "clap_derive", @@ -949,9 +949,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.47" +version = "4.5.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ad9bbf750e73b5884fb8a211a9424a1906c1e156724260fdae972f31d70e1d6" +checksum = "c2ba64afa3c0a6df7fa517765e31314e983f51dda798ffba27b988194fb65dc9" dependencies = [ "anstream", "anstyle", @@ -3133,12 +3133,16 @@ dependencies = [ "bcrypt", "captcha", "chrono", + "diesel", "diesel-async", "either", "elementtree", + "futures", "hound", + "itertools 0.14.0", "lemmy_api_crud", "lemmy_api_utils", + "lemmy_apub_objects", "lemmy_db_schema", "lemmy_db_schema_file", "lemmy_db_views_comment", @@ -3157,12 +3161,15 @@ dependencies = [ "lemmy_db_views_post", "lemmy_db_views_registration_applications", "lemmy_db_views_report_combined", + "lemmy_db_views_search_combined", "lemmy_db_views_site", "lemmy_db_views_vote", "lemmy_email", "lemmy_utils", "pretty_assertions", "regex", + "serde", + "serde_json", "serial_test", "sitemap-rs", "tokio", @@ -3239,6 +3246,17 @@ dependencies = [ "uuid", ] +[[package]] +name = "lemmy_api_routes" +version = "1.0.0-alpha.9" +dependencies = [ + "actix-web", + "lemmy_api", + "lemmy_api_crud", + "lemmy_routes", + "lemmy_utils", +] + [[package]] name = "lemmy_api_utils" version = "1.0.0-alpha.9" @@ -3298,6 +3316,33 @@ version = "1.0.0-alpha.9" dependencies = [ "activitypub_federation", "actix-web", + "async-trait", + "either", + "futures", + "futures-util", + "lemmy_api_utils", + "lemmy_apub_activities", + "lemmy_apub_objects", + "lemmy_db_schema", + "lemmy_db_schema_file", + "lemmy_db_views_community_follower", + "lemmy_db_views_community_moderator", + "lemmy_db_views_post", + "lemmy_utils", + "pretty_assertions", + "serde", + "serde_json", + "serial_test", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "lemmy_apub_activities" +version = "1.0.0-alpha.9" +dependencies = [ + "activitypub_federation", "anyhow", "async-trait", "chrono", @@ -3306,31 +3351,22 @@ dependencies = [ "enum_delegate", "futures", "futures-util", - "itertools 0.14.0", "lemmy_api_utils", "lemmy_apub_objects", "lemmy_db_schema", "lemmy_db_schema_file", - "lemmy_db_views_comment", "lemmy_db_views_community", - "lemmy_db_views_community_follower", "lemmy_db_views_community_moderator", "lemmy_db_views_community_person_ban", "lemmy_db_views_local_user", - "lemmy_db_views_person", - "lemmy_db_views_person_content_combined", "lemmy_db_views_post", "lemmy_db_views_private_message", - "lemmy_db_views_search_combined", "lemmy_db_views_site", "lemmy_utils", - "pretty_assertions", "serde", "serde_json", "serde_with", - "serial_test", "strum", - "tokio", "tracing", "url", "uuid", @@ -3374,6 +3410,40 @@ dependencies = [ "url", ] +[[package]] +name = "lemmy_apub_send" +version = "1.0.0-alpha.9" +dependencies = [ + "activitypub_federation", + "actix-web", + "anyhow", + "async-trait", + "chrono", + "diesel", + "diesel-async", + "either", + "futures", + "lemmy_api_utils", + "lemmy_apub_objects", + "lemmy_db_schema", + "lemmy_db_schema_file", + "lemmy_db_views_community_follower", + "lemmy_utils", + "mockall", + "moka", + "reqwest 0.12.23", + "serde", + "serde_json", + "serial_test", + "test-context", + "tokio", + "tokio-util", + "tracing", + "tracing-test", + "url", + "uuid", +] + [[package]] name = "lemmy_db_schema" version = "1.0.0-alpha.9" @@ -3715,7 +3785,6 @@ dependencies = [ "i-love-jesus", "lemmy_db_schema", "lemmy_db_schema_file", - "lemmy_db_views_community", "lemmy_db_views_local_user", "lemmy_db_views_vote", "lemmy_utils", @@ -3834,7 +3903,6 @@ dependencies = [ "lemmy_db_views_community_moderator", "lemmy_db_views_local_user", "lemmy_db_views_person", - "lemmy_db_views_post", "lemmy_db_views_readable_federation_state", "lemmy_utils", "serde", @@ -3876,40 +3944,6 @@ dependencies = [ "uuid", ] -[[package]] -name = "lemmy_federate" -version = "1.0.0-alpha.9" -dependencies = [ - "activitypub_federation", - "actix-web", - "anyhow", - "async-trait", - "chrono", - "diesel", - "diesel-async", - "either", - "futures", - "lemmy_api_utils", - "lemmy_apub_objects", - "lemmy_db_schema", - "lemmy_db_schema_file", - "lemmy_db_views_community_follower", - "lemmy_utils", - "mockall", - "moka", - "reqwest 0.12.23", - "serde", - "serde_json", - "serial_test", - "test-context", - "tokio", - "tokio-util", - "tracing", - "tracing-test", - "url", - "uuid", -] - [[package]] name = "lemmy_routes" version = "1.0.0-alpha.9" @@ -3960,14 +3994,15 @@ dependencies = [ "actix-web", "clap", "lemmy_api", - "lemmy_api_crud", + "lemmy_api_routes", "lemmy_api_utils", "lemmy_apub", + "lemmy_apub_activities", "lemmy_apub_objects", + "lemmy_apub_send", "lemmy_db_schema", "lemmy_db_schema_setup", "lemmy_db_views_site", - "lemmy_federate", "lemmy_routes", "lemmy_utils", "mimalloc", diff --git a/Cargo.toml b/Cargo.toml index fcda4bf37..f96dd46f7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,24 +8,6 @@ documentation = "https://join-lemmy.org/docs/en/index.html" repository = "https://github.com/LemmyNet/lemmy" rust-version = "1.81" -[package] -name = "lemmy_server" -version.workspace = true -edition.workspace = true -description.workspace = true -license.workspace = true -homepage.workspace = true -documentation.workspace = true -repository.workspace = true -rust-version.workspace = true -publish = false - -[lib] -doctest = false - -[lints] -workspace = true - # See https://github.com/johnthagen/min-sized-rust for additional optimizations [profile.release] lto = "fat" @@ -37,9 +19,6 @@ codegen-units = 1 # Reduce parallel code generation. [profile.dev] debug = 0 -[features] -default = [] - [workspace] members = [ "crates/utils", @@ -72,11 +51,17 @@ members = [ "crates/api/api_crud", "crates/api/api_common", "crates/api/api_utils", - "crates/apub", - "crates/apub_objects", - "crates/federate", + "crates/api/routes", + "crates/apub/apub", + "crates/apub/activities", + "crates/apub/objects", + "crates/apub/send", "crates/routes", + "crates/server", ] +resolver = "2" +# This line can be removed after upgrading to resolver = 3 +incompatible-rust-versions = "fallback" [workspace.lints.clippy] cast_lossless = "deny" @@ -104,19 +89,22 @@ unused_async = "deny" map_err_ignore = "deny" expect_used = "deny" as_conversions = "deny" +large_futures = "deny" [workspace.dependencies] lemmy_api = { version = "=1.0.0-alpha.9", path = "./crates/api/api" } lemmy_api_crud = { version = "=1.0.0-alpha.9", path = "./crates/api/api_crud" } -lemmy_apub = { version = "=1.0.0-alpha.9", path = "./crates/apub" } -lemmy_apub_objects = { version = "=1.0.0-alpha.9", path = "./crates/apub_objects" } +lemmy_api_routes = { version = "=1.0.0-alpha.9", path = "./crates/api/routes" } +lemmy_apub = { version = "=1.0.0-alpha.9", path = "./crates/apub/apub" } +lemmy_apub_activities = { version = "=1.0.0-alpha.9", path = "./crates/apub/activities" } +lemmy_apub_objects = { version = "=1.0.0-alpha.9", path = "./crates/apub/objects" } lemmy_utils = { version = "=1.0.0-alpha.9", path = "./crates/utils", default-features = false } lemmy_db_schema = { version = "=1.0.0-alpha.9", path = "./crates/db_schema" } lemmy_db_schema_file = { version = "=1.0.0-alpha.9", path = "./crates/db_schema_file" } lemmy_db_schema_setup = { version = "=1.0.0-alpha.9", path = "./crates/db_schema_setup" } lemmy_api_utils = { version = "=1.0.0-alpha.9", path = "./crates/api/api_utils" } lemmy_routes = { version = "=1.0.0-alpha.9", path = "./crates/routes" } -lemmy_federate = { version = "=1.0.0-alpha.9", path = "./crates/federate" } +lemmy_apub_send = { version = "=1.0.0-alpha.9", path = "./crates/apub/send" } lemmy_email = { version = "=1.0.0-alpha.9", path = "./crates/email" } lemmy_db_views_comment = { version = "=1.0.0-alpha.9", path = "./crates/db_views/comment" } lemmy_db_views_community = { version = "=1.0.0-alpha.9", path = "./crates/db_views/community" } @@ -225,33 +213,6 @@ extism-convert = "1.12.0" unified-diff = "0.2.1" diesel-uplete = { version = "0.2.0" } -[dependencies] -lemmy_api = { workspace = true } -lemmy_api_crud = { workspace = true } -lemmy_apub = { workspace = true } -lemmy_apub_objects = { workspace = true } -lemmy_utils = { workspace = true } -lemmy_db_schema = { workspace = true } -lemmy_db_schema_setup = { workspace = true } -lemmy_api_utils = { workspace = true } -lemmy_routes = { workspace = true } -lemmy_federate = { workspace = true } -lemmy_db_views_site = { workspace = true } -activitypub_federation = { workspace = true } -actix-web = { workspace = true } -tracing = { workspace = true } -tracing-actix-web = { workspace = true } -tracing-subscriber = { workspace = true } -reqwest-middleware = { workspace = true } -reqwest-tracing = { workspace = true } -serde_json = { workspace = true } -rustls = { workspace = true } -tokio.workspace = true -clap = { workspace = true } - -[target.'cfg(target_arch = "x86_64")'.dependencies] -mimalloc = "0.1.48" - # Speedup RSA key generation # https://github.com/RustCrypto/RSA/blob/master/README.md#example [profile.dev.package.num-bigint-dig] diff --git a/crates/api/api/Cargo.toml b/crates/api/api/Cargo.toml index 9e66d5298..93a90ae6a 100644 --- a/crates/api/api/Cargo.toml +++ b/crates/api/api/Cargo.toml @@ -26,10 +26,12 @@ lemmy_db_views_comment = { workspace = true, features = ["full"] } lemmy_db_views_community = { workspace = true, features = ["full"] } lemmy_db_views_community_moderator = { workspace = true, features = ["full"] } lemmy_db_views_community_follower = { workspace = true, features = ["full"] } +lemmy_apub_objects = { workspace = true, features = ["full"] } lemmy_db_views_community_person_ban = { workspace = true, features = ["full"] } lemmy_db_views_post = { workspace = true, features = ["full"] } lemmy_db_views_vote = { workspace = true, features = ["full"] } lemmy_db_views_local_user = { workspace = true, features = ["full"] } +lemmy_db_views_search_combined = { workspace = true, features = ["full"] } lemmy_db_views_person = { workspace = true, features = ["full"] } lemmy_db_views_local_image = { workspace = true, features = ["full"] } lemmy_db_views_notification = { workspace = true, features = ["full"] } @@ -64,6 +66,11 @@ sitemap-rs = "0.2.2" totp-rs = { version = "5.7.0", features = ["gen_secret", "otpauth"] } diesel-async = { workspace = true, features = ["deadpool", "postgres"] } either = { workspace = true } +futures = { workspace = true } +serde = { workspace = true } +itertools = { workspace = true } +serde_json = { workspace = true } +diesel = { workspace = true } [dev-dependencies] serial_test = { workspace = true } diff --git a/crates/apub/src/fetcher/mod.rs b/crates/api/api/src/federation/fetcher.rs similarity index 82% rename from crates/apub/src/fetcher/mod.rs rename to crates/api/api/src/federation/fetcher.rs index a7af7d1fe..f1824ef83 100644 --- a/crates/apub/src/fetcher/mod.rs +++ b/crates/api/api/src/federation/fetcher.rs @@ -4,16 +4,12 @@ use activitypub_federation::{ traits::{Actor, Object}, }; use diesel::NotFound; -use either::Either::*; use itertools::Itertools; use lemmy_api_utils::context::LemmyContext; -use lemmy_apub_objects::objects::SiteOrMultiOrCommunityOrUser; -use lemmy_db_schema::{newtypes::InstanceId, traits::ApubActor}; +use lemmy_db_schema::traits::ApubActor; use lemmy_db_views_local_user::LocalUserView; use lemmy_utils::error::{LemmyError, LemmyErrorType, LemmyResult}; -pub mod search; - /// Resolve actor identifier like `!news@example.com` to user or community object. /// /// In case the requesting user is logged in and the object was not found locally, it is attempted @@ -65,12 +61,3 @@ where ) } } - -pub(crate) fn get_instance_id(s: &SiteOrMultiOrCommunityOrUser) -> InstanceId { - match s { - Left(Left(s)) => s.instance_id, - Left(Right(m)) => m.instance_id, - Right(Left(u)) => u.instance_id, - Right(Right(c)) => c.instance_id, - } -} diff --git a/crates/apub/src/api/list_comments.rs b/crates/api/api/src/federation/list_comments.rs similarity index 95% rename from crates/apub/src/api/list_comments.rs rename to crates/api/api/src/federation/list_comments.rs index a7864f097..1085ddf79 100644 --- a/crates/apub/src/api/list_comments.rs +++ b/crates/api/api/src/federation/list_comments.rs @@ -1,11 +1,9 @@ -use super::comment_sort_type_with_default; -use crate::{ - api::{ - fetch_limit_with_default, - listing_type_with_default, - post_time_range_seconds_with_default, - }, +use crate::federation::{ + comment_sort_type_with_default, + fetch_limit_with_default, fetcher::resolve_ap_identifier, + listing_type_with_default, + post_time_range_seconds_with_default, }; use activitypub_federation::config::Data; use actix_web::web::{Json, Query}; diff --git a/crates/apub/src/api/list_person_content.rs b/crates/api/api/src/federation/list_person_content.rs similarity index 96% rename from crates/apub/src/api/list_person_content.rs rename to crates/api/api/src/federation/list_person_content.rs index 5d4aeb375..c8b83cfc8 100644 --- a/crates/apub/src/api/list_person_content.rs +++ b/crates/api/api/src/federation/list_person_content.rs @@ -1,4 +1,4 @@ -use super::resolve_person_id_from_id_or_username; +use crate::federation::resolve_person_id_from_id_or_username; use activitypub_federation::config::Data; use actix_web::web::{Json, Query}; use lemmy_api_utils::{context::LemmyContext, utils::check_private_instance}; diff --git a/crates/apub/src/api/list_posts.rs b/crates/api/api/src/federation/list_posts.rs similarity index 95% rename from crates/apub/src/api/list_posts.rs rename to crates/api/api/src/federation/list_posts.rs index 782417126..da5cf2ae6 100644 --- a/crates/apub/src/api/list_posts.rs +++ b/crates/api/api/src/federation/list_posts.rs @@ -1,11 +1,9 @@ -use crate::{ - api::{ - fetch_limit_with_default, - listing_type_with_default, - post_sort_type_with_default, - post_time_range_seconds_with_default, - }, +use crate::federation::{ + fetch_limit_with_default, fetcher::resolve_ap_identifier, + listing_type_with_default, + post_sort_type_with_default, + post_time_range_seconds_with_default, }; use activitypub_federation::config::Data; use actix_web::web::{Json, Query}; diff --git a/crates/apub/src/api/mod.rs b/crates/api/api/src/federation/mod.rs similarity index 98% rename from crates/apub/src/api/mod.rs rename to crates/api/api/src/federation/mod.rs index 72ca3abbf..823fc2fa8 100644 --- a/crates/apub/src/api/mod.rs +++ b/crates/api/api/src/federation/mod.rs @@ -1,4 +1,4 @@ -use crate::fetcher::resolve_ap_identifier; +use crate::federation::fetcher::resolve_ap_identifier; use activitypub_federation::config::Data; use lemmy_api_utils::context::LemmyContext; use lemmy_apub_objects::objects::person::ApubPerson; @@ -10,6 +10,7 @@ use lemmy_db_schema_file::enums::{CommentSortType, ListingType, PostSortType}; use lemmy_db_views_local_user::LocalUserView; use lemmy_utils::error::{LemmyErrorType, LemmyResult}; +mod fetcher; pub mod list_comments; pub mod list_person_content; pub mod list_posts; diff --git a/crates/apub/src/api/read_community.rs b/crates/api/api/src/federation/read_community.rs similarity index 97% rename from crates/apub/src/api/read_community.rs rename to crates/api/api/src/federation/read_community.rs index 3c9743107..b55c9625c 100644 --- a/crates/apub/src/api/read_community.rs +++ b/crates/api/api/src/federation/read_community.rs @@ -1,4 +1,4 @@ -use crate::fetcher::resolve_ap_identifier; +use crate::federation::fetcher::resolve_ap_identifier; use activitypub_federation::config::Data; use actix_web::web::{Json, Query}; use lemmy_api_utils::{ diff --git a/crates/apub/src/api/read_person.rs b/crates/api/api/src/federation/read_person.rs similarity index 96% rename from crates/apub/src/api/read_person.rs rename to crates/api/api/src/federation/read_person.rs index f38042039..bb8d39ab0 100644 --- a/crates/apub/src/api/read_person.rs +++ b/crates/api/api/src/federation/read_person.rs @@ -1,4 +1,4 @@ -use super::resolve_person_id_from_id_or_username; +use crate::federation::resolve_person_id_from_id_or_username; use activitypub_federation::config::Data; use actix_web::web::{Json, Query}; use lemmy_api_utils::{ diff --git a/crates/apub/src/api/resolve_object.rs b/crates/api/api/src/federation/resolve_object.rs similarity index 79% rename from crates/apub/src/api/resolve_object.rs rename to crates/api/api/src/federation/resolve_object.rs index 89d75bccf..014ecd9a3 100644 --- a/crates/apub/src/api/resolve_object.rs +++ b/crates/api/api/src/federation/resolve_object.rs @@ -1,8 +1,11 @@ -use crate::fetcher::search::{search_query_to_object_id, search_query_to_object_id_local}; -use activitypub_federation::config::Data; +use activitypub_federation::{ + config::Data, + fetch::{object_id::ObjectId, webfinger::webfinger_resolve_actor}, +}; use actix_web::web::{Json, Query}; use either::Either::*; use lemmy_api_utils::{context::LemmyContext, utils::check_private_instance}; +use lemmy_apub_objects::objects::{SearchableObjects, UserOrCommunity}; use lemmy_db_views_comment::CommentView; use lemmy_db_views_community::{CommunityView, MultiCommunityView}; use lemmy_db_views_local_user::LocalUserView; @@ -11,6 +14,7 @@ use lemmy_db_views_post::PostView; use lemmy_db_views_search_combined::{SearchCombinedView, SearchResponse}; use lemmy_db_views_site::{api::ResolveObject, SiteView}; use lemmy_utils::error::{LemmyErrorExt2, LemmyErrorType, LemmyResult}; +use url::Url; pub async fn resolve_object( data: Query, @@ -68,6 +72,41 @@ pub(super) async fn resolve_object_internal( }) } +/// Converts search query to object id. The query can either be an URL, which will be treated as +/// ObjectId directly, or a webfinger identifier (@user@example.com or !community@example.com) +/// which gets resolved to an URL. +async fn search_query_to_object_id( + mut query: String, + context: &Data, +) -> LemmyResult { + Ok(match Url::parse(&query) { + Ok(url) => { + // its already an url, just go with it + ObjectId::from(url).dereference(context).await? + } + Err(_) => { + // not an url, try to resolve via webfinger + if query.starts_with('!') || query.starts_with('@') { + query.remove(0); + } + Left(Right( + webfinger_resolve_actor::(&query, context).await?, + )) + } + }) +} + +/// Converts a search query to an object id. The query MUST bbe a URL which will bbe treated +/// as the ObjectId directly. If the query is a webfinger identifier (@user@example.com or +/// !community@example.com) this method will return an error. +async fn search_query_to_object_id_local( + query: &str, + context: &Data, +) -> LemmyResult { + let url = Url::parse(query)?; + ObjectId::from(url).dereference_local(context).await +} + #[cfg(test)] mod tests { use super::*; diff --git a/crates/apub/src/api/search.rs b/crates/api/api/src/federation/search.rs similarity index 96% rename from crates/apub/src/api/search.rs rename to crates/api/api/src/federation/search.rs index 56c4dcbd6..125a059f9 100644 --- a/crates/apub/src/api/search.rs +++ b/crates/api/api/src/federation/search.rs @@ -1,4 +1,4 @@ -use crate::{api::resolve_object::resolve_object_internal, fetcher::resolve_ap_identifier}; +use crate::federation::{fetcher::resolve_ap_identifier, resolve_object::resolve_object_internal}; use activitypub_federation::config::Data; use actix_web::web::{Json, Query}; use futures::future::join; diff --git a/crates/apub/src/api/user_settings_backup.rs b/crates/api/api/src/federation/user_settings_backup.rs similarity index 99% rename from crates/apub/src/api/user_settings_backup.rs rename to crates/api/api/src/federation/user_settings_backup.rs index 833a62ae1..52ed0b140 100644 --- a/crates/apub/src/api/user_settings_backup.rs +++ b/crates/api/api/src/federation/user_settings_backup.rs @@ -267,7 +267,7 @@ where #[expect(clippy::indexing_slicing)] pub(crate) mod tests { use super::*; - use crate::api::user_settings_backup::{export_settings, import_settings}; + use crate::federation::user_settings_backup::{export_settings, import_settings}; use actix_web::web::Json; use lemmy_api_utils::context::LemmyContext; use lemmy_db_schema::{ diff --git a/crates/api/api/src/lib.rs b/crates/api/api/src/lib.rs index 28da26d69..22d477c47 100644 --- a/crates/api/api/src/lib.rs +++ b/crates/api/api/src/lib.rs @@ -11,6 +11,7 @@ use totp_rs::{Secret, TOTP}; pub mod comment; pub mod community; +pub mod federation; pub mod local_user; pub mod post; pub mod reports; diff --git a/crates/api/api/src/local_user/list_hidden.rs b/crates/api/api/src/local_user/list_hidden.rs index c983f27a6..6e0898978 100644 --- a/crates/api/api/src/local_user/list_hidden.rs +++ b/crates/api/api/src/local_user/list_hidden.rs @@ -3,8 +3,8 @@ use actix_web::web::{Json, Query}; use lemmy_api_utils::context::LemmyContext; use lemmy_db_schema::source::post::PostActions; use lemmy_db_views_local_user::LocalUserView; +use lemmy_db_views_person_content_combined::api::{ListPersonHidden, ListPersonHiddenResponse}; use lemmy_db_views_post::PostView; -use lemmy_db_views_site::api::{ListPersonHidden, ListPersonHiddenResponse}; use lemmy_utils::error::LemmyResult; pub async fn list_person_hidden( diff --git a/crates/api/api/src/local_user/list_read.rs b/crates/api/api/src/local_user/list_read.rs index ee212189f..323c2a341 100644 --- a/crates/api/api/src/local_user/list_read.rs +++ b/crates/api/api/src/local_user/list_read.rs @@ -3,8 +3,8 @@ use actix_web::web::{Json, Query}; use lemmy_api_utils::context::LemmyContext; use lemmy_db_schema::source::post::PostActions; use lemmy_db_views_local_user::LocalUserView; +use lemmy_db_views_person_content_combined::api::{ListPersonRead, ListPersonReadResponse}; use lemmy_db_views_post::PostView; -use lemmy_db_views_site::api::{ListPersonRead, ListPersonReadResponse}; use lemmy_utils::error::LemmyResult; pub async fn list_person_read( diff --git a/crates/api/api/src/site/registration_applications/tests.rs b/crates/api/api/src/site/registration_applications/tests.rs index 94135d981..23ff5b223 100644 --- a/crates/api/api/src/site/registration_applications/tests.rs +++ b/crates/api/api/src/site/registration_applications/tests.rs @@ -252,14 +252,14 @@ async fn test_application_approval() -> LemmyResult<()> { expected_total_applications, ); - update_site( + Box::pin(update_site( Json(EditSite { require_email_verification: Some(false), ..Default::default() }), context.clone(), admin_local_user_view.clone(), - ) + )) .await?; // TODO: There is probably a better way to ensure cache invalidation @@ -359,14 +359,14 @@ async fn test_application_approval() -> LemmyResult<()> { expected_total_applications, ); - update_site( + Box::pin(update_site( Json(EditSite { registration_mode: Some(RegistrationMode::Open), ..Default::default() }), context.clone(), admin_local_user_view.clone(), - ) + )) .await?; // TODO: There is probably a better way to ensure cache invalidation diff --git a/crates/api/api_common/src/account.rs b/crates/api/api_common/src/account.rs index beb3d6c38..de2c18f4e 100644 --- a/crates/api/api_common/src/account.rs +++ b/crates/api/api_common/src/account.rs @@ -1,3 +1,9 @@ +pub use lemmy_db_views_person_content_combined::api::{ + ListPersonHidden, + ListPersonHiddenResponse, + ListPersonRead, + ListPersonReadResponse, +}; pub use lemmy_db_views_person_liked_combined::{ ListPersonLiked, ListPersonLikedResponse, @@ -8,16 +14,7 @@ pub use lemmy_db_views_person_saved_combined::{ ListPersonSavedResponse, PersonSavedCombinedView, }; -pub use lemmy_db_views_site::api::{ - DeleteAccount, - ListPersonHidden, - ListPersonHiddenResponse, - ListPersonRead, - ListPersonReadResponse, - MyUserInfo, - SaveUserSettings, -}; - +pub use lemmy_db_views_site::api::{DeleteAccount, MyUserInfo, SaveUserSettings}; pub mod auth { pub use lemmy_db_schema::source::login_token::LoginToken; pub use lemmy_db_views_registration_applications::api::Register; diff --git a/crates/api/api_common/src/post.rs b/crates/api/api_common/src/post.rs index 9f169b2cb..bafdb6872 100644 --- a/crates/api/api_common/src/post.rs +++ b/crates/api/api_common/src/post.rs @@ -6,8 +6,6 @@ pub use lemmy_db_schema::{ pub use lemmy_db_schema_file::enums::{PostListingMode, PostNotificationsMode}; pub use lemmy_db_views_post::{ api::{ - GetPost, - GetPostResponse, GetPosts, GetPostsResponse, GetSiteMetadata, @@ -18,7 +16,7 @@ pub use lemmy_db_views_post::{ }, PostView, }; - +pub use lemmy_db_views_search_combined::api::{GetPost, GetPostResponse}; pub mod actions { pub use lemmy_db_views_post::api::{ CreatePost, diff --git a/crates/api/api_crud/src/post/read.rs b/crates/api/api_crud/src/post/read.rs index cb36074fc..03546c8d0 100644 --- a/crates/api/api_crud/src/post/read.rs +++ b/crates/api/api_crud/src/post/read.rs @@ -13,11 +13,11 @@ use lemmy_db_schema::{ }; use lemmy_db_views_community::CommunityView; use lemmy_db_views_local_user::LocalUserView; -use lemmy_db_views_post::{ +use lemmy_db_views_post::PostView; +use lemmy_db_views_search_combined::{ api::{GetPost, GetPostResponse}, - PostView, + impls::SearchCombinedQuery, }; -use lemmy_db_views_search_combined::impls::SearchCombinedQuery; use lemmy_db_views_site::SiteView; use lemmy_utils::error::{LemmyErrorType, LemmyResult}; diff --git a/crates/api/api_crud/src/site/read.rs b/crates/api/api_crud/src/site/read.rs index a0bf88902..6331b6d2e 100644 --- a/crates/api/api_crud/src/site/read.rs +++ b/crates/api/api_crud/src/site/read.rs @@ -19,8 +19,7 @@ pub async fn get_site( ) -> LemmyResult> { // This data is independent from the user account so we can cache it across requests static CACHE: CacheLock = LazyLock::new(build_cache); - let mut site_response = CACHE - .try_get_with((), read_site(&context)) + let mut site_response = Box::pin(CACHE.try_get_with((), read_site(&context))) .await .map_err(|e| anyhow::anyhow!("Failed to construct site response: {e}"))?; diff --git a/crates/api/routes/Cargo.toml b/crates/api/routes/Cargo.toml new file mode 100644 index 000000000..5a5caeeac --- /dev/null +++ b/crates/api/routes/Cargo.toml @@ -0,0 +1,27 @@ +[package] +name = "lemmy_api_routes" +version.workspace = true +edition.workspace = true +description.workspace = true +license.workspace = true +homepage.workspace = true +documentation.workspace = true +repository.workspace = true +rust-version.workspace = true +publish = false + +[lib] +doctest = false + +[lints] +workspace = true + +[features] +default = [] + +[dependencies] +lemmy_api = { workspace = true } +lemmy_api_crud = { workspace = true } +lemmy_utils = { workspace = true } +lemmy_routes = { workspace = true } +actix-web = { workspace = true } diff --git a/src/api_routes.rs b/crates/api/routes/src/lib.rs similarity index 98% rename from src/api_routes.rs rename to crates/api/routes/src/lib.rs index 5bd61a5b4..06db116ae 100644 --- a/src/api_routes.rs +++ b/crates/api/routes/src/lib.rs @@ -23,6 +23,16 @@ use lemmy_api::{ transfer::transfer_community, update_notifications::update_community_notifications, }, + federation::{ + list_comments::{list_comments, list_comments_slim}, + list_person_content::list_person_content, + list_posts::list_posts, + read_community::get_community, + read_person::read_person, + resolve_object::resolve_object, + search::search, + user_settings_backup::{export_settings, import_settings}, + }, local_user::{ add_admin::add_admin, ban_person::ban_from_site, @@ -157,16 +167,6 @@ use lemmy_api_crud::{ my_user::get_my_user, }, }; -use lemmy_apub::api::{ - list_comments::{list_comments, list_comments_slim}, - list_person_content::list_person_content, - list_posts::list_posts, - read_community::get_community, - read_person::read_person, - resolve_object::resolve_object, - search::search, - user_settings_backup::{export_settings, import_settings}, -}; use lemmy_routes::images::{ delete::{ delete_community_banner, diff --git a/crates/apub/Cargo.toml b/crates/apub/activities/Cargo.toml similarity index 74% rename from crates/apub/Cargo.toml rename to crates/apub/activities/Cargo.toml index f66eaf1bd..49a7438b5 100644 --- a/crates/apub/Cargo.toml +++ b/crates/apub/activities/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "lemmy_apub" +name = "lemmy_apub_activities" publish = false version.workspace = true edition.workspace = true @@ -11,7 +11,7 @@ repository.workspace = true rust-version.workspace = true [lib] -name = "lemmy_apub" +name = "lemmy_apub_activities" path = "src/lib.rs" doctest = false @@ -22,19 +22,12 @@ full = [] workspace = true [dependencies] -lemmy_db_views_comment = { workspace = true, features = ["full"] } lemmy_db_views_community = { workspace = true, features = ["full"] } lemmy_db_views_community_moderator = { workspace = true, features = ["full"] } -lemmy_db_views_community_follower = { workspace = true, features = ["full"] } lemmy_db_views_post = { workspace = true, features = ["full"] } lemmy_db_views_local_user = { workspace = true, features = ["full"] } -lemmy_db_views_person = { workspace = true, features = ["full"] } lemmy_db_views_private_message = { workspace = true, features = ["full"] } lemmy_db_views_site = { workspace = true, features = ["full"] } -lemmy_db_views_person_content_combined = { workspace = true, features = [ - "full", -] } -lemmy_db_views_search_combined = { workspace = true, features = ["full"] } lemmy_db_views_community_person_ban = { workspace = true, features = ["full"] } lemmy_utils = { workspace = true, features = ["full"] } lemmy_db_schema = { workspace = true, features = ["full"] } @@ -46,14 +39,11 @@ diesel = { workspace = true } chrono = { workspace = true } serde_json = { workspace = true } serde = { workspace = true } -actix-web = { workspace = true } -tokio = { workspace = true } tracing = { workspace = true } strum = { workspace = true } url = { workspace = true } futures = { workspace = true } futures-util = { workspace = true } -itertools = { workspace = true } uuid = { workspace = true } async-trait = { workspace = true } anyhow = { workspace = true } @@ -62,8 +52,6 @@ enum_delegate = "0.2.0" either = { workspace = true } [dev-dependencies] -serial_test = { workspace = true } -pretty_assertions = { workspace = true } [package.metadata.cargo-shear] ignored = ["futures", "futures-util"] diff --git a/crates/apub/src/activity_lists.rs b/crates/apub/activities/src/activity_lists.rs similarity index 87% rename from crates/apub/src/activity_lists.rs rename to crates/apub/activities/src/activity_lists.rs index 2aacd557d..5222d2aa3 100644 --- a/crates/apub/src/activity_lists.rs +++ b/crates/apub/activities/src/activity_lists.rs @@ -1,4 +1,4 @@ -use crate::protocol::activities::{ +use crate::protocol::{ block::{block_user::BlockUser, undo_block_user::UndoBlockUser}, community::{ announce::{AnnounceActivity, RawAnnouncableActivities}, @@ -38,7 +38,7 @@ use url::Url; #[derive(Debug, Deserialize, Serialize, Clone)] #[serde(untagged)] #[enum_delegate::implement(Activity)] -pub(crate) enum SharedInboxActivities { +pub enum SharedInboxActivities { Follow(Follow), AcceptFollow(AcceptFollow), RejectFollow(RejectFollow), @@ -107,24 +107,24 @@ mod tests { #[test] fn test_shared_inbox() -> LemmyResult<()> { test_parse_lemmy_item::( - "assets/lemmy/activities/deletion/delete_user.json", + "../apub/assets/lemmy/activities/deletion/delete_user.json", )?; test_parse_lemmy_item::( - "assets/lemmy/activities/following/accept.json", + "../apub/assets/lemmy/activities/following/accept.json", )?; test_parse_lemmy_item::( - "assets/lemmy/activities/create_or_update/create_comment.json", + "../apub/assets/lemmy/activities/create_or_update/create_comment.json", )?; test_parse_lemmy_item::( - "assets/lemmy/activities/create_or_update/create_private_message.json", + "../apub/assets/lemmy/activities/create_or_update/create_private_message.json", )?; test_parse_lemmy_item::( - "assets/lemmy/activities/following/follow.json", + "../apub/assets/lemmy/activities/following/follow.json", )?; test_parse_lemmy_item::( - "assets/lemmy/activities/create_or_update/create_comment.json", + "../apub/assets/lemmy/activities/create_or_update/create_comment.json", )?; - test_json::("assets/mastodon/activities/follow.json")?; + test_json::("../apub/assets/mastodon/activities/follow.json")?; Ok(()) } } diff --git a/crates/apub/src/activities/block/block_user.rs b/crates/apub/activities/src/block/block_user.rs similarity index 95% rename from crates/apub/src/activities/block/block_user.rs rename to crates/apub/activities/src/block/block_user.rs index 3c43efae9..ac2afd25d 100644 --- a/crates/apub/src/activities/block/block_user.rs +++ b/crates/apub/activities/src/block/block_user.rs @@ -1,14 +1,12 @@ use super::{to, update_removed_for_instance}; use crate::{ - activities::{ - block::{generate_cc, SiteOrCommunity}, - community::send_activity_in_community, - generate_activity_id, - send_lemmy_activity, - MOD_ACTION_DEFAULT_REASON, - }, activity_lists::AnnouncableActivities, - protocol::activities::block::block_user::BlockUser, + block::{generate_cc, SiteOrCommunity}, + community::send_activity_in_community, + generate_activity_id, + protocol::block::block_user::BlockUser, + send_lemmy_activity, + MOD_ACTION_DEFAULT_REASON, }; use activitypub_federation::{ config::Data, @@ -46,7 +44,7 @@ use lemmy_utils::error::{LemmyError, LemmyResult}; use url::Url; impl BlockUser { - pub(in crate::activities::block) async fn new( + pub(in crate::block) async fn new( target: &SiteOrCommunity, user: &ApubPerson, mod_: &ApubPerson, diff --git a/crates/apub/src/activities/block/mod.rs b/crates/apub/activities/src/block/mod.rs similarity index 97% rename from crates/apub/src/activities/block/mod.rs rename to crates/apub/activities/src/block/mod.rs index 95f20030f..76f709e38 100644 --- a/crates/apub/src/activities/block/mod.rs +++ b/crates/apub/activities/src/block/mod.rs @@ -1,4 +1,4 @@ -use crate::protocol::activities::block::{block_user::BlockUser, undo_block_user::UndoBlockUser}; +use crate::protocol::block::{block_user::BlockUser, undo_block_user::UndoBlockUser}; use activitypub_federation::{config::Data, kinds::public, traits::Object}; use either::Either; use lemmy_api_utils::{context::LemmyContext, utils::check_expire_time}; diff --git a/crates/apub/src/activities/block/undo_block_user.rs b/crates/apub/activities/src/block/undo_block_user.rs similarity index 94% rename from crates/apub/src/activities/block/undo_block_user.rs rename to crates/apub/activities/src/block/undo_block_user.rs index 54effed64..cbc26996f 100644 --- a/crates/apub/src/activities/block/undo_block_user.rs +++ b/crates/apub/activities/src/block/undo_block_user.rs @@ -1,14 +1,12 @@ use super::{to, update_removed_for_instance}; use crate::{ - activities::{ - block::{generate_cc, SiteOrCommunity}, - community::send_activity_in_community, - generate_activity_id, - send_lemmy_activity, - MOD_ACTION_DEFAULT_REASON, - }, activity_lists::AnnouncableActivities, - protocol::activities::block::{block_user::BlockUser, undo_block_user::UndoBlockUser}, + block::{generate_cc, SiteOrCommunity}, + community::send_activity_in_community, + generate_activity_id, + protocol::block::{block_user::BlockUser, undo_block_user::UndoBlockUser}, + send_lemmy_activity, + MOD_ACTION_DEFAULT_REASON, }; use activitypub_federation::{ config::Data, diff --git a/crates/apub/src/activities/community/announce.rs b/crates/apub/activities/src/community/announce.rs similarity index 97% rename from crates/apub/src/activities/community/announce.rs rename to crates/apub/activities/src/community/announce.rs index f24bdd677..503b53e91 100644 --- a/crates/apub/src/activities/community/announce.rs +++ b/crates/apub/activities/src/community/announce.rs @@ -1,10 +1,12 @@ use crate::{ - activities::{generate_activity_id, generate_announce_activity_id, send_lemmy_activity}, activity_lists::AnnouncableActivities, + generate_activity_id, + generate_announce_activity_id, protocol::{ - activities::community::announce::{AnnounceActivity, RawAnnouncableActivities}, + community::announce::{AnnounceActivity, RawAnnouncableActivities}, IdOrNestedObject, }, + send_lemmy_activity, }; use activitypub_federation::{ config::Data, @@ -77,7 +79,7 @@ impl Id for RawAnnouncableActivities { } impl AnnounceActivity { - pub(crate) fn new( + pub fn new( object: RawAnnouncableActivities, community: &ApubCommunity, context: &Data, diff --git a/crates/apub/src/activities/community/collection_add.rs b/crates/apub/activities/src/community/collection_add.rs similarity index 96% rename from crates/apub/src/activities/community/collection_add.rs rename to crates/apub/activities/src/community/collection_add.rs index fa782f389..b283b6462 100644 --- a/crates/apub/src/activities/community/collection_add.rs +++ b/crates/apub/activities/src/community/collection_add.rs @@ -1,10 +1,8 @@ use crate::{ - activities::{community::send_activity_in_community, generate_activity_id}, activity_lists::AnnouncableActivities, - protocol::activities::community::{ - collection_add::CollectionAdd, - collection_remove::CollectionRemove, - }, + community::send_activity_in_community, + generate_activity_id, + protocol::community::{collection_add::CollectionAdd, collection_remove::CollectionRemove}, }; use activitypub_federation::{ config::Data, diff --git a/crates/apub/src/activities/community/collection_remove.rs b/crates/apub/activities/src/community/collection_remove.rs similarity index 96% rename from crates/apub/src/activities/community/collection_remove.rs rename to crates/apub/activities/src/community/collection_remove.rs index 3e9e74908..cf0f6bae3 100644 --- a/crates/apub/src/activities/community/collection_remove.rs +++ b/crates/apub/activities/src/community/collection_remove.rs @@ -1,7 +1,8 @@ use crate::{ - activities::{community::send_activity_in_community, generate_activity_id}, activity_lists::AnnouncableActivities, - protocol::activities::community::collection_remove::CollectionRemove, + community::send_activity_in_community, + generate_activity_id, + protocol::community::collection_remove::CollectionRemove, }; use activitypub_federation::{ config::Data, diff --git a/crates/apub/src/activities/community/lock.rs b/crates/apub/activities/src/community/lock.rs similarity index 95% rename from crates/apub/src/activities/community/lock.rs rename to crates/apub/activities/src/community/lock.rs index bb15c300a..46ef2ab33 100644 --- a/crates/apub/src/activities/community/lock.rs +++ b/crates/apub/activities/src/community/lock.rs @@ -1,13 +1,11 @@ use crate::{ - activities::{ - check_community_deleted_or_removed, - community::send_activity_in_community, - generate_activity_id, - MOD_ACTION_DEFAULT_REASON, - }, activity_lists::AnnouncableActivities, + check_community_deleted_or_removed, + community::send_activity_in_community, + generate_activity_id, post_or_comment_community, - protocol::activities::community::lock::{LockPageOrNote, LockType, UndoLockPageOrNote}, + protocol::community::lock::{LockPageOrNote, LockType, UndoLockPageOrNote}, + MOD_ACTION_DEFAULT_REASON, }; use activitypub_federation::{ config::Data, diff --git a/crates/apub/src/activities/community/mod.rs b/crates/apub/activities/src/community/mod.rs similarity index 98% rename from crates/apub/src/activities/community/mod.rs rename to crates/apub/activities/src/community/mod.rs index 6d026f592..6e241cc56 100644 --- a/crates/apub/src/activities/community/mod.rs +++ b/crates/apub/activities/src/community/mod.rs @@ -1,7 +1,7 @@ use crate::{ - activities::send_lemmy_activity, activity_lists::AnnouncableActivities, - protocol::activities::community::announce::AnnounceActivity, + protocol::community::announce::AnnounceActivity, + send_lemmy_activity, }; use activitypub_federation::{config::Data, fetch::object_id::ObjectId, traits::Actor}; use either::Either; diff --git a/crates/apub/src/activities/community/report.rs b/crates/apub/activities/src/community/report.rs similarity index 98% rename from crates/apub/src/activities/community/report.rs rename to crates/apub/activities/src/community/report.rs index 0a4299717..9cadc34c4 100644 --- a/crates/apub/src/activities/community/report.rs +++ b/crates/apub/activities/src/community/report.rs @@ -1,11 +1,12 @@ use super::{local_community, report_inboxes}; use crate::{ - activities::{generate_activity_id, send_lemmy_activity}, activity_lists::AnnouncableActivities, - protocol::activities::community::{ + generate_activity_id, + protocol::community::{ announce::AnnounceActivity, report::{Report, ReportObject}, }, + send_lemmy_activity, }; use activitypub_federation::{ config::Data, diff --git a/crates/apub/src/activities/community/resolve_report.rs b/crates/apub/activities/src/community/resolve_report.rs similarity index 97% rename from crates/apub/src/activities/community/resolve_report.rs rename to crates/apub/activities/src/community/resolve_report.rs index 19379bcde..e1dc29069 100644 --- a/crates/apub/src/activities/community/resolve_report.rs +++ b/crates/apub/activities/src/community/resolve_report.rs @@ -1,12 +1,13 @@ use super::{local_community, report_inboxes, verify_mod_or_admin_action}; use crate::{ - activities::{generate_activity_id, send_lemmy_activity}, activity_lists::AnnouncableActivities, - protocol::activities::community::{ + generate_activity_id, + protocol::community::{ announce::AnnounceActivity, report::Report, resolve_report::{ResolveReport, ResolveType}, }, + send_lemmy_activity, }; use activitypub_federation::{ config::Data, diff --git a/crates/apub/src/activities/community/update.rs b/crates/apub/activities/src/community/update.rs similarity index 95% rename from crates/apub/src/activities/community/update.rs rename to crates/apub/activities/src/community/update.rs index f69ebe8eb..f4a6e784e 100644 --- a/crates/apub/src/activities/community/update.rs +++ b/crates/apub/activities/src/community/update.rs @@ -1,7 +1,8 @@ use crate::{ - activities::{community::send_activity_in_community, generate_activity_id, send_lemmy_activity}, - activity_lists::AnnouncableActivities, - protocol::activities::community::update::Update, + community::{send_activity_in_community, AnnouncableActivities}, + generate_activity_id, + protocol::community::update::Update, + send_lemmy_activity, }; use activitypub_federation::{ config::Data, diff --git a/crates/apub/src/activities/create_or_update/comment.rs b/crates/apub/activities/src/create_or_update/comment.rs similarity index 96% rename from crates/apub/src/activities/create_or_update/comment.rs rename to crates/apub/activities/src/create_or_update/comment.rs index f39d9a43b..f57e47131 100644 --- a/crates/apub/src/activities/create_or_update/comment.rs +++ b/crates/apub/activities/src/create_or_update/comment.rs @@ -1,11 +1,9 @@ use crate::{ - activities::{ - check_community_deleted_or_removed, - community::send_activity_in_community, - generate_activity_id, - }, activity_lists::AnnouncableActivities, - protocol::activities::{create_or_update::note::CreateOrUpdateNote, CreateOrUpdateType}, + check_community_deleted_or_removed, + community::send_activity_in_community, + generate_activity_id, + protocol::{create_or_update::note::CreateOrUpdateNote, CreateOrUpdateType}, }; use activitypub_federation::{ config::Data, diff --git a/crates/apub/src/activities/create_or_update/mod.rs b/crates/apub/activities/src/create_or_update/mod.rs similarity index 100% rename from crates/apub/src/activities/create_or_update/mod.rs rename to crates/apub/activities/src/create_or_update/mod.rs diff --git a/crates/apub/src/activities/create_or_update/note_wrapper.rs b/crates/apub/activities/src/create_or_update/note_wrapper.rs similarity index 97% rename from crates/apub/src/activities/create_or_update/note_wrapper.rs rename to crates/apub/activities/src/create_or_update/note_wrapper.rs index 6ae9cb8e0..b3efe5bd4 100644 --- a/crates/apub/src/activities/create_or_update/note_wrapper.rs +++ b/crates/apub/activities/src/create_or_update/note_wrapper.rs @@ -1,4 +1,4 @@ -use crate::protocol::activities::create_or_update::{ +use crate::protocol::create_or_update::{ note::CreateOrUpdateNote, note_wrapper::CreateOrUpdateNoteWrapper, private_message::CreateOrUpdatePrivateMessage, diff --git a/crates/apub/src/activities/create_or_update/post.rs b/crates/apub/activities/src/create_or_update/post.rs similarity index 95% rename from crates/apub/src/activities/create_or_update/post.rs rename to crates/apub/activities/src/create_or_update/post.rs index e07788577..403ba398e 100644 --- a/crates/apub/src/activities/create_or_update/post.rs +++ b/crates/apub/activities/src/create_or_update/post.rs @@ -1,11 +1,9 @@ use crate::{ - activities::{ - check_community_deleted_or_removed, - community::send_activity_in_community, - generate_activity_id, - }, activity_lists::AnnouncableActivities, - protocol::activities::{create_or_update::page::CreateOrUpdatePage, CreateOrUpdateType}, + check_community_deleted_or_removed, + community::send_activity_in_community, + generate_activity_id, + protocol::{create_or_update::page::CreateOrUpdatePage, CreateOrUpdateType}, }; use activitypub_federation::{ config::Data, @@ -40,7 +38,7 @@ use lemmy_utils::error::{LemmyError, LemmyResult}; use url::Url; impl CreateOrUpdatePage { - pub(crate) async fn new( + pub async fn new( post: ApubPost, actor: &ApubPerson, community: &ApubCommunity, diff --git a/crates/apub/src/activities/create_or_update/private_message.rs b/crates/apub/activities/src/create_or_update/private_message.rs similarity index 91% rename from crates/apub/src/activities/create_or_update/private_message.rs rename to crates/apub/activities/src/create_or_update/private_message.rs index dab98be74..07c7d14c7 100644 --- a/crates/apub/src/activities/create_or_update/private_message.rs +++ b/crates/apub/activities/src/create_or_update/private_message.rs @@ -1,9 +1,8 @@ use crate::{ - activities::{generate_activity_id, send_lemmy_activity, verify_person}, - protocol::activities::{ - create_or_update::private_message::CreateOrUpdatePrivateMessage, - CreateOrUpdateType, - }, + generate_activity_id, + protocol::{create_or_update::private_message::CreateOrUpdatePrivateMessage, CreateOrUpdateType}, + send_lemmy_activity, + verify_person, }; use activitypub_federation::{ config::Data, diff --git a/crates/apub/src/activities/deletion/delete.rs b/crates/apub/activities/src/deletion/delete.rs similarity index 94% rename from crates/apub/src/activities/deletion/delete.rs rename to crates/apub/activities/src/deletion/delete.rs index 4f36bc1ea..b22dadecb 100644 --- a/crates/apub/src/activities/deletion/delete.rs +++ b/crates/apub/activities/src/deletion/delete.rs @@ -1,10 +1,8 @@ use crate::{ - activities::{ - deletion::{receive_delete_action, verify_delete_activity, DeletableObjects}, - generate_activity_id, - MOD_ACTION_DEFAULT_REASON, - }, - protocol::{activities::deletion::delete::Delete, IdOrNestedObject}, + deletion::{receive_delete_action, verify_delete_activity, DeletableObjects}, + generate_activity_id, + protocol::{deletion::delete::Delete, IdOrNestedObject}, + MOD_ACTION_DEFAULT_REASON, }; use activitypub_federation::{config::Data, kinds::activity::DeleteType, traits::Activity}; use lemmy_api_utils::{context::LemmyContext, notify::notify_mod_action}; @@ -76,7 +74,7 @@ impl Activity for Delete { } impl Delete { - pub(in crate::activities::deletion) fn new( + pub(in crate::deletion) fn new( actor: &ApubPerson, object: DeletableObjects, to: Vec, @@ -99,7 +97,7 @@ impl Delete { } } -pub(in crate::activities) async fn receive_remove_action( +pub(crate) async fn receive_remove_action( actor: &ApubPerson, object: &Url, reason: Option, diff --git a/crates/apub/src/activities/deletion/mod.rs b/crates/apub/activities/src/deletion/mod.rs similarity index 97% rename from crates/apub/src/activities/deletion/mod.rs rename to crates/apub/activities/src/deletion/mod.rs index 9a926c9db..83516a47d 100644 --- a/crates/apub/src/activities/deletion/mod.rs +++ b/crates/apub/activities/src/deletion/mod.rs @@ -1,7 +1,9 @@ use crate::{ - activities::{community::send_activity_in_community, send_lemmy_activity, verify_person}, activity_lists::AnnouncableActivities, - protocol::activities::deletion::{delete::Delete, undo_delete::UndoDelete}, + community::send_activity_in_community, + protocol::deletion::{delete::Delete, undo_delete::UndoDelete}, + send_lemmy_activity, + verify_person, }; use activitypub_federation::{ config::Data, @@ -176,7 +178,7 @@ impl DeletableObjects { } } -pub(in crate::activities) async fn verify_delete_activity( +pub(crate) async fn verify_delete_activity( activity: &Delete, is_mod_action: bool, context: &Data, diff --git a/crates/apub/src/activities/deletion/undo_delete.rs b/crates/apub/activities/src/deletion/undo_delete.rs similarity index 93% rename from crates/apub/src/activities/deletion/undo_delete.rs rename to crates/apub/activities/src/deletion/undo_delete.rs index 063bc1da8..a8719b24a 100644 --- a/crates/apub/src/activities/deletion/undo_delete.rs +++ b/crates/apub/activities/src/deletion/undo_delete.rs @@ -1,9 +1,7 @@ use crate::{ - activities::{ - deletion::{receive_delete_action, verify_delete_activity, DeletableObjects}, - generate_activity_id, - }, - protocol::activities::deletion::{delete::Delete, undo_delete::UndoDelete}, + deletion::{receive_delete_action, verify_delete_activity, DeletableObjects}, + generate_activity_id, + protocol::deletion::{delete::Delete, undo_delete::UndoDelete}, }; use activitypub_federation::{config::Data, kinds::activity::UndoType, traits::Activity}; use lemmy_api_utils::context::LemmyContext; @@ -58,7 +56,7 @@ impl Activity for UndoDelete { } impl UndoDelete { - pub(in crate::activities::deletion) fn new( + pub(in crate::deletion) fn new( actor: &ApubPerson, object: DeletableObjects, to: Vec, @@ -80,7 +78,7 @@ impl UndoDelete { }) } - pub(in crate::activities) async fn receive_undo_remove_action( + pub(crate) async fn receive_undo_remove_action( actor: &ApubPerson, object: &Url, reason: String, diff --git a/crates/apub/src/activities/following/accept.rs b/crates/apub/activities/src/following/accept.rs similarity index 94% rename from crates/apub/src/activities/following/accept.rs rename to crates/apub/activities/src/following/accept.rs index acf149b51..68a31904e 100644 --- a/crates/apub/src/activities/following/accept.rs +++ b/crates/apub/activities/src/following/accept.rs @@ -1,6 +1,7 @@ use crate::{ - activities::{generate_activity_id, send_lemmy_activity}, - protocol::activities::following::{accept::AcceptFollow, follow::Follow}, + generate_activity_id, + protocol::following::{accept::AcceptFollow, follow::Follow}, + send_lemmy_activity, }; use activitypub_federation::{ config::Data, diff --git a/crates/apub/src/activities/following/follow.rs b/crates/apub/activities/src/following/follow.rs similarity index 96% rename from crates/apub/src/activities/following/follow.rs rename to crates/apub/activities/src/following/follow.rs index 954837e95..76184fd59 100644 --- a/crates/apub/src/activities/following/follow.rs +++ b/crates/apub/activities/src/following/follow.rs @@ -1,6 +1,7 @@ use crate::{ - activities::{generate_activity_id, send_lemmy_activity}, - protocol::activities::following::{accept::AcceptFollow, follow::Follow}, + generate_activity_id, + protocol::following::{accept::AcceptFollow, follow::Follow}, + send_lemmy_activity, }; use activitypub_federation::{ config::Data, @@ -28,7 +29,7 @@ use lemmy_utils::error::{FederationError, LemmyError, LemmyErrorType, LemmyResul use url::Url; impl Follow { - pub(in crate::activities::following) fn new( + pub(in crate::following) fn new( actor: &ApubPerson, target: &CommunityOrMulti, context: &Data, diff --git a/crates/apub/src/activities/following/mod.rs b/crates/apub/activities/src/following/mod.rs similarity index 98% rename from crates/apub/src/activities/following/mod.rs rename to crates/apub/activities/src/following/mod.rs index 5cc4a2ac6..b69c1092f 100644 --- a/crates/apub/src/activities/following/mod.rs +++ b/crates/apub/activities/src/following/mod.rs @@ -1,5 +1,5 @@ use super::{generate_activity_id, send_lemmy_activity}; -use crate::protocol::activities::following::{ +use crate::protocol::following::{ accept::AcceptFollow, follow::Follow, reject::RejectFollow, diff --git a/crates/apub/src/activities/following/reject.rs b/crates/apub/activities/src/following/reject.rs similarity index 95% rename from crates/apub/src/activities/following/reject.rs rename to crates/apub/activities/src/following/reject.rs index 07f77ae3f..66f5413d9 100644 --- a/crates/apub/src/activities/following/reject.rs +++ b/crates/apub/activities/src/following/reject.rs @@ -1,7 +1,7 @@ use super::send_activity_from_user_or_community_or_multi; use crate::{ - activities::generate_activity_id, - protocol::activities::following::{follow::Follow, reject::RejectFollow}, + generate_activity_id, + protocol::following::{follow::Follow, reject::RejectFollow}, }; use activitypub_federation::{ config::Data, diff --git a/crates/apub/src/activities/following/undo_follow.rs b/crates/apub/activities/src/following/undo_follow.rs similarity index 95% rename from crates/apub/src/activities/following/undo_follow.rs rename to crates/apub/activities/src/following/undo_follow.rs index cd0152f26..eb47a0e70 100644 --- a/crates/apub/src/activities/following/undo_follow.rs +++ b/crates/apub/activities/src/following/undo_follow.rs @@ -1,6 +1,7 @@ use crate::{ - activities::{generate_activity_id, send_lemmy_activity}, - protocol::activities::following::{follow::Follow, undo_follow::UndoFollow}, + generate_activity_id, + protocol::following::{follow::Follow, undo_follow::UndoFollow}, + send_lemmy_activity, }; use activitypub_federation::{ config::Data, diff --git a/crates/apub/src/activities/mod.rs b/crates/apub/activities/src/lib.rs similarity index 89% rename from crates/apub/src/activities/mod.rs rename to crates/apub/activities/src/lib.rs index d2e90ce45..02badf70a 100644 --- a/crates/apub/src/activities/mod.rs +++ b/crates/apub/activities/src/lib.rs @@ -1,26 +1,24 @@ use crate::{ - activities::{ - block::{send_ban_from_community, send_ban_from_site}, - community::{ - collection_add::{send_add_mod_to_community, send_feature_post}, - lock::send_lock, - update::{send_update_community, send_update_multi_community}, - }, - create_or_update::private_message::send_create_or_update_pm, - deletion::{ - send_apub_delete_in_community, - send_apub_delete_private_message, - send_apub_delete_user, - DeletableObjects, - }, - following::send_follow, - voting::send_like_activity, + block::{send_ban_from_community, send_ban_from_site}, + community::{ + collection_add::{send_add_mod_to_community, send_feature_post}, + lock::send_lock, + update::{send_update_community, send_update_multi_community}, }, - protocol::activities::{ + create_or_update::private_message::send_create_or_update_pm, + deletion::{ + send_apub_delete_in_community, + send_apub_delete_private_message, + send_apub_delete_user, + DeletableObjects, + }, + following::send_follow, + protocol::{ community::{report::Report, resolve_report::ResolveReport}, create_or_update::{note::CreateOrUpdateNote, page::CreateOrUpdatePage}, CreateOrUpdateType, }, + voting::send_like_activity, }; use activitypub_federation::{ config::Data, @@ -46,17 +44,21 @@ use lemmy_db_schema::{ }, traits::Crud, }; +use lemmy_db_views_post::PostView; +use lemmy_db_views_site::SiteView; use lemmy_utils::error::{FederationError, LemmyError, LemmyResult}; use serde::Serialize; use tracing::info; use url::{ParseError, Url}; use uuid::Uuid; +pub mod activity_lists; pub mod block; pub mod community; pub mod create_or_update; pub mod deletion; pub mod following; +pub mod protocol; pub mod voting; const MOD_ACTION_DEFAULT_REASON: &str = "No reason provided"; @@ -155,7 +157,7 @@ pub async fn match_outgoing_activities( context: &Data, ) -> LemmyResult<()> { let context = context.clone(); - let fed_task = async { + Box::pin(async { use SendActivityData::*; match data { CreatePost(post) => { @@ -373,7 +375,30 @@ pub async fn match_outgoing_activities( send_update_multi_community(multi, actor, context).await } } - }; - fed_task.await?; + }) + .await?; Ok(()) } + +pub(crate) async fn post_or_comment_community( + post_or_comment: &PostOrComment, + context: &Data, +) -> LemmyResult { + match post_or_comment { + PostOrComment::Left(p) => Community::read(&mut context.pool(), p.community_id).await, + PostOrComment::Right(c) => { + let site_view = SiteView::read_local(&mut context.pool()).await?; + Ok( + PostView::read( + &mut context.pool(), + c.post_id, + None, + site_view.instance.id, + false, + ) + .await? + .community, + ) + } + } +} diff --git a/crates/apub/src/protocol/activities/block/block_user.rs b/crates/apub/activities/src/protocol/block/block_user.rs similarity index 97% rename from crates/apub/src/protocol/activities/block/block_user.rs rename to crates/apub/activities/src/protocol/block/block_user.rs index 21cd922c6..b9bb027ba 100644 --- a/crates/apub/src/protocol/activities/block/block_user.rs +++ b/crates/apub/activities/src/protocol/block/block_user.rs @@ -1,4 +1,4 @@ -use crate::activities::block::SiteOrCommunity; +use crate::block::SiteOrCommunity; use activitypub_federation::{ config::Data, fetch::object_id::ObjectId, diff --git a/crates/apub/activities/src/protocol/block/mod.rs b/crates/apub/activities/src/protocol/block/mod.rs new file mode 100644 index 000000000..1aaac1de0 --- /dev/null +++ b/crates/apub/activities/src/protocol/block/mod.rs @@ -0,0 +1,18 @@ +pub mod block_user; +pub mod undo_block_user; + +#[cfg(test)] +mod tests { + use crate::protocol::block::{block_user::BlockUser, undo_block_user::UndoBlockUser}; + use lemmy_apub_objects::utils::test::test_parse_lemmy_item; + use lemmy_utils::error::LemmyResult; + + #[test] + fn test_parse_lemmy_block() -> LemmyResult<()> { + test_parse_lemmy_item::("../apub/assets/lemmy/activities/block/block_user.json")?; + test_parse_lemmy_item::( + "../apub/assets/lemmy/activities/block/undo_block_user.json", + )?; + Ok(()) + } +} diff --git a/crates/apub/src/protocol/activities/block/undo_block_user.rs b/crates/apub/activities/src/protocol/block/undo_block_user.rs similarity index 100% rename from crates/apub/src/protocol/activities/block/undo_block_user.rs rename to crates/apub/activities/src/protocol/block/undo_block_user.rs diff --git a/crates/apub/src/protocol/activities/community/announce.rs b/crates/apub/activities/src/protocol/community/announce.rs similarity index 94% rename from crates/apub/src/protocol/activities/community/announce.rs rename to crates/apub/activities/src/protocol/community/announce.rs index 87d753630..12e409e6f 100644 --- a/crates/apub/src/protocol/activities/community/announce.rs +++ b/crates/apub/activities/src/protocol/community/announce.rs @@ -15,7 +15,7 @@ pub struct AnnounceActivity { pub(crate) actor: ObjectId, #[serde(deserialize_with = "deserialize_one_or_many")] pub(crate) to: Vec, - pub(crate) object: IdOrNestedObject, + pub object: IdOrNestedObject, #[serde(deserialize_with = "deserialize_one_or_many")] pub(crate) cc: Vec, #[serde(rename = "type")] diff --git a/crates/apub/src/protocol/activities/community/collection_add.rs b/crates/apub/activities/src/protocol/community/collection_add.rs similarity index 100% rename from crates/apub/src/protocol/activities/community/collection_add.rs rename to crates/apub/activities/src/protocol/community/collection_add.rs diff --git a/crates/apub/src/protocol/activities/community/collection_remove.rs b/crates/apub/activities/src/protocol/community/collection_remove.rs similarity index 100% rename from crates/apub/src/protocol/activities/community/collection_remove.rs rename to crates/apub/activities/src/protocol/community/collection_remove.rs diff --git a/crates/apub/src/protocol/activities/community/lock.rs b/crates/apub/activities/src/protocol/community/lock.rs similarity index 100% rename from crates/apub/src/protocol/activities/community/lock.rs rename to crates/apub/activities/src/protocol/community/lock.rs diff --git a/crates/apub/activities/src/protocol/community/mod.rs b/crates/apub/activities/src/protocol/community/mod.rs new file mode 100644 index 000000000..551469b89 --- /dev/null +++ b/crates/apub/activities/src/protocol/community/mod.rs @@ -0,0 +1,68 @@ +pub mod announce; +pub mod collection_add; +pub mod collection_remove; +pub mod lock; +pub mod report; +pub mod resolve_report; +pub mod update; + +#[cfg(test)] +mod tests { + use super::resolve_report::ResolveReport; + use crate::protocol::community::{ + announce::AnnounceActivity, + collection_add::CollectionAdd, + collection_remove::CollectionRemove, + lock::{LockPageOrNote, UndoLockPageOrNote}, + report::Report, + update::Update, + }; + use lemmy_apub_objects::utils::test::test_parse_lemmy_item; + use lemmy_utils::error::LemmyResult; + + #[test] + fn test_parse_lemmy_community_activities() -> LemmyResult<()> { + test_parse_lemmy_item::( + "../apub/assets/lemmy/activities/community/announce_create_page.json", + )?; + + test_parse_lemmy_item::( + "../apub/assets/lemmy/activities/community/add_mod.json", + )?; + test_parse_lemmy_item::( + "../apub/assets/lemmy/activities/community/remove_mod.json", + )?; + + test_parse_lemmy_item::( + "../apub/assets/lemmy/activities/community/add_featured_post.json", + )?; + test_parse_lemmy_item::( + "../apub/assets/lemmy/activities/community/remove_featured_post.json", + )?; + + test_parse_lemmy_item::( + "../apub/assets/lemmy/activities/community/lock_page.json", + )?; + test_parse_lemmy_item::( + "../apub/assets/lemmy/activities/community/undo_lock_page.json", + )?; + + test_parse_lemmy_item::( + "../apub/assets/lemmy/activities/community/lock_note.json", + )?; + test_parse_lemmy_item::( + "../apub/assets/lemmy/activities/community/undo_lock_note.json", + )?; + + test_parse_lemmy_item::( + "../apub/assets/lemmy/activities/community/update_community.json", + )?; + + test_parse_lemmy_item::("../apub/assets/lemmy/activities/community/report_page.json")?; + test_parse_lemmy_item::( + "../apub/assets/lemmy/activities/community/resolve_report_page.json", + )?; + + Ok(()) + } +} diff --git a/crates/apub/src/protocol/activities/community/report.rs b/crates/apub/activities/src/protocol/community/report.rs similarity index 100% rename from crates/apub/src/protocol/activities/community/report.rs rename to crates/apub/activities/src/protocol/community/report.rs diff --git a/crates/apub/src/protocol/activities/community/resolve_report.rs b/crates/apub/activities/src/protocol/community/resolve_report.rs similarity index 100% rename from crates/apub/src/protocol/activities/community/resolve_report.rs rename to crates/apub/activities/src/protocol/community/resolve_report.rs diff --git a/crates/apub/src/protocol/activities/community/update.rs b/crates/apub/activities/src/protocol/community/update.rs similarity index 100% rename from crates/apub/src/protocol/activities/community/update.rs rename to crates/apub/activities/src/protocol/community/update.rs diff --git a/crates/apub/src/protocol/activities/create_or_update/mod.rs b/crates/apub/activities/src/protocol/create_or_update/mod.rs similarity index 54% rename from crates/apub/src/protocol/activities/create_or_update/mod.rs rename to crates/apub/activities/src/protocol/create_or_update/mod.rs index 6a6b099d5..dd35521b5 100644 --- a/crates/apub/src/protocol/activities/create_or_update/mod.rs +++ b/crates/apub/activities/src/protocol/create_or_update/mod.rs @@ -6,7 +6,7 @@ pub mod private_message; #[cfg(test)] mod tests { use super::note_wrapper::{CreateOrUpdateNoteWrapper, NoteWrapper}; - use crate::protocol::activities::create_or_update::{ + use crate::protocol::create_or_update::{ note::CreateOrUpdateNote, page::CreateOrUpdatePage, private_message::CreateOrUpdatePrivateMessage, @@ -17,25 +17,25 @@ mod tests { #[test] fn test_parse_lemmy_create_or_update() -> LemmyResult<()> { test_parse_lemmy_item::( - "assets/lemmy/activities/create_or_update/create_page.json", + "../apub/assets/lemmy/activities/create_or_update/create_page.json", )?; test_parse_lemmy_item::( - "assets/lemmy/activities/create_or_update/update_page.json", + "../apub/assets/lemmy/activities/create_or_update/update_page.json", )?; test_parse_lemmy_item::( - "assets/lemmy/activities/create_or_update/create_comment.json", + "../apub/assets/lemmy/activities/create_or_update/create_comment.json", )?; test_parse_lemmy_item::( - "assets/lemmy/activities/create_or_update/create_private_message.json", + "../apub/assets/lemmy/activities/create_or_update/create_private_message.json", )?; test_parse_lemmy_item::( - "assets/lemmy/activities/create_or_update/create_comment.json", + "../apub/assets/lemmy/activities/create_or_update/create_comment.json", )?; test_parse_lemmy_item::( - "assets/lemmy/activities/create_or_update/create_private_message.json", + "../apub/assets/lemmy/activities/create_or_update/create_private_message.json", )?; - test_parse_lemmy_item::("assets/lemmy/objects/comment.json")?; - test_parse_lemmy_item::("assets/lemmy/objects/private_message.json")?; + test_parse_lemmy_item::("../apub/assets/lemmy/objects/comment.json")?; + test_parse_lemmy_item::("../apub/assets/lemmy/objects/private_message.json")?; Ok(()) } } diff --git a/crates/apub/src/protocol/activities/create_or_update/note.rs b/crates/apub/activities/src/protocol/create_or_update/note.rs similarity index 96% rename from crates/apub/src/protocol/activities/create_or_update/note.rs rename to crates/apub/activities/src/protocol/create_or_update/note.rs index 33e260fd1..0c88267c3 100644 --- a/crates/apub/src/protocol/activities/create_or_update/note.rs +++ b/crates/apub/activities/src/protocol/create_or_update/note.rs @@ -1,4 +1,4 @@ -use crate::protocol::activities::CreateOrUpdateType; +use crate::protocol::CreateOrUpdateType; use activitypub_federation::{ config::Data, fetch::object_id::ObjectId, diff --git a/crates/apub/src/protocol/activities/create_or_update/note_wrapper.rs b/crates/apub/activities/src/protocol/create_or_update/note_wrapper.rs similarity index 100% rename from crates/apub/src/protocol/activities/create_or_update/note_wrapper.rs rename to crates/apub/activities/src/protocol/create_or_update/note_wrapper.rs diff --git a/crates/apub/src/protocol/activities/create_or_update/page.rs b/crates/apub/activities/src/protocol/create_or_update/page.rs similarity index 95% rename from crates/apub/src/protocol/activities/create_or_update/page.rs rename to crates/apub/activities/src/protocol/create_or_update/page.rs index 296d4905b..0a594ce62 100644 --- a/crates/apub/src/protocol/activities/create_or_update/page.rs +++ b/crates/apub/activities/src/protocol/create_or_update/page.rs @@ -1,4 +1,4 @@ -use crate::protocol::activities::CreateOrUpdateType; +use crate::protocol::CreateOrUpdateType; use activitypub_federation::{ config::Data, fetch::object_id::ObjectId, diff --git a/crates/apub/src/protocol/activities/create_or_update/private_message.rs b/crates/apub/activities/src/protocol/create_or_update/private_message.rs similarity index 92% rename from crates/apub/src/protocol/activities/create_or_update/private_message.rs rename to crates/apub/activities/src/protocol/create_or_update/private_message.rs index 91fd116c7..0c0e0a93f 100644 --- a/crates/apub/src/protocol/activities/create_or_update/private_message.rs +++ b/crates/apub/activities/src/protocol/create_or_update/private_message.rs @@ -1,4 +1,4 @@ -use crate::protocol::activities::CreateOrUpdateType; +use crate::protocol::CreateOrUpdateType; use activitypub_federation::{fetch::object_id::ObjectId, protocol::helpers::deserialize_one}; use lemmy_apub_objects::{objects::person::ApubPerson, protocol::private_message::PrivateMessage}; use serde::{Deserialize, Serialize}; diff --git a/crates/apub/src/protocol/activities/deletion/delete.rs b/crates/apub/activities/src/protocol/deletion/delete.rs similarity index 96% rename from crates/apub/src/protocol/activities/deletion/delete.rs rename to crates/apub/activities/src/protocol/deletion/delete.rs index 270986a61..b76d033d0 100644 --- a/crates/apub/src/protocol/activities/deletion/delete.rs +++ b/crates/apub/activities/src/protocol/deletion/delete.rs @@ -1,4 +1,4 @@ -use crate::{activities::deletion::DeletableObjects, protocol::IdOrNestedObject}; +use crate::{deletion::DeletableObjects, protocol::IdOrNestedObject}; use activitypub_federation::{ config::Data, fetch::object_id::ObjectId, diff --git a/crates/apub/src/protocol/activities/deletion/delete_user.rs b/crates/apub/activities/src/protocol/deletion/delete_user.rs similarity index 100% rename from crates/apub/src/protocol/activities/deletion/delete_user.rs rename to crates/apub/activities/src/protocol/deletion/delete_user.rs diff --git a/crates/apub/activities/src/protocol/deletion/mod.rs b/crates/apub/activities/src/protocol/deletion/mod.rs new file mode 100644 index 000000000..8c5bf9e6f --- /dev/null +++ b/crates/apub/activities/src/protocol/deletion/mod.rs @@ -0,0 +1,38 @@ +pub mod delete; +pub mod delete_user; +pub mod undo_delete; + +#[cfg(test)] +mod tests { + use crate::protocol::deletion::{ + delete::Delete, + delete_user::DeleteUser, + undo_delete::UndoDelete, + }; + use lemmy_apub_objects::utils::test::test_parse_lemmy_item; + use lemmy_utils::error::LemmyResult; + + #[test] + fn test_parse_lemmy_deletion() -> LemmyResult<()> { + test_parse_lemmy_item::("../apub/assets/lemmy/activities/deletion/remove_note.json")?; + test_parse_lemmy_item::("../apub/assets/lemmy/activities/deletion/delete_page.json")?; + + test_parse_lemmy_item::( + "../apub/assets/lemmy/activities/deletion/undo_remove_note.json", + )?; + test_parse_lemmy_item::( + "../apub/assets/lemmy/activities/deletion/undo_delete_page.json", + )?; + test_parse_lemmy_item::( + "../apub/assets/lemmy/activities/deletion/delete_private_message.json", + )?; + test_parse_lemmy_item::( + "../apub/assets/lemmy/activities/deletion/undo_delete_private_message.json", + )?; + + test_parse_lemmy_item::( + "../apub/assets/lemmy/activities/deletion/delete_user.json", + )?; + Ok(()) + } +} diff --git a/crates/apub/src/protocol/activities/deletion/undo_delete.rs b/crates/apub/activities/src/protocol/deletion/undo_delete.rs similarity index 100% rename from crates/apub/src/protocol/activities/deletion/undo_delete.rs rename to crates/apub/activities/src/protocol/deletion/undo_delete.rs diff --git a/crates/apub/src/protocol/activities/following/accept.rs b/crates/apub/activities/src/protocol/following/accept.rs similarity index 92% rename from crates/apub/src/protocol/activities/following/accept.rs rename to crates/apub/activities/src/protocol/following/accept.rs index 0072da09a..aec7454a1 100644 --- a/crates/apub/src/protocol/activities/following/accept.rs +++ b/crates/apub/activities/src/protocol/following/accept.rs @@ -1,4 +1,4 @@ -use crate::protocol::activities::following::follow::Follow; +use crate::protocol::following::follow::Follow; use activitypub_federation::{ fetch::object_id::ObjectId, kinds::activity::AcceptType, diff --git a/crates/apub/src/protocol/activities/following/follow.rs b/crates/apub/activities/src/protocol/following/follow.rs similarity index 100% rename from crates/apub/src/protocol/activities/following/follow.rs rename to crates/apub/activities/src/protocol/following/follow.rs diff --git a/crates/apub/activities/src/protocol/following/mod.rs b/crates/apub/activities/src/protocol/following/mod.rs new file mode 100644 index 000000000..0c6c58202 --- /dev/null +++ b/crates/apub/activities/src/protocol/following/mod.rs @@ -0,0 +1,21 @@ +pub(crate) mod accept; +pub mod follow; +pub(crate) mod reject; +pub mod undo_follow; + +#[cfg(test)] +mod tests { + use crate::protocol::following::{accept::AcceptFollow, follow::Follow, undo_follow::UndoFollow}; + use lemmy_apub_objects::utils::test::test_parse_lemmy_item; + use lemmy_utils::error::LemmyResult; + + #[test] + fn test_parse_lemmy_accept_follow() -> LemmyResult<()> { + test_parse_lemmy_item::("../apub/assets/lemmy/activities/following/follow.json")?; + test_parse_lemmy_item::("../apub/assets/lemmy/activities/following/accept.json")?; + test_parse_lemmy_item::( + "../apub/assets/lemmy/activities/following/undo_follow.json", + )?; + Ok(()) + } +} diff --git a/crates/apub/src/protocol/activities/following/reject.rs b/crates/apub/activities/src/protocol/following/reject.rs similarity index 92% rename from crates/apub/src/protocol/activities/following/reject.rs rename to crates/apub/activities/src/protocol/following/reject.rs index b665d8245..74d75cebc 100644 --- a/crates/apub/src/protocol/activities/following/reject.rs +++ b/crates/apub/activities/src/protocol/following/reject.rs @@ -1,4 +1,4 @@ -use crate::protocol::activities::following::follow::Follow; +use crate::protocol::following::follow::Follow; use activitypub_federation::{ fetch::object_id::ObjectId, kinds::activity::RejectType, diff --git a/crates/apub/src/protocol/activities/following/undo_follow.rs b/crates/apub/activities/src/protocol/following/undo_follow.rs similarity index 92% rename from crates/apub/src/protocol/activities/following/undo_follow.rs rename to crates/apub/activities/src/protocol/following/undo_follow.rs index 538a20d9a..05f725e36 100644 --- a/crates/apub/src/protocol/activities/following/undo_follow.rs +++ b/crates/apub/activities/src/protocol/following/undo_follow.rs @@ -1,4 +1,4 @@ -use crate::protocol::activities::following::follow::Follow; +use crate::protocol::following::follow::Follow; use activitypub_federation::{ fetch::object_id::ObjectId, kinds::activity::UndoType, diff --git a/crates/apub/activities/src/protocol/mod.rs b/crates/apub/activities/src/protocol/mod.rs new file mode 100644 index 000000000..f4250f3af --- /dev/null +++ b/crates/apub/activities/src/protocol/mod.rs @@ -0,0 +1,131 @@ +use activitypub_federation::{config::Data, fetch::fetch_object_http}; +use lemmy_api_utils::context::LemmyContext; +use lemmy_apub_objects::utils::protocol::Id; +use lemmy_utils::error::LemmyResult; +use serde::{de::DeserializeOwned, Deserialize, Serialize}; +use strum::Display; +use url::Url; + +pub mod block; +pub mod community; +pub mod create_or_update; +pub mod deletion; +pub mod following; +pub mod voting; + +#[derive(Clone, Debug, Display, Deserialize, Serialize, PartialEq, Eq)] +pub enum CreateOrUpdateType { + Create, + Update, +} + +#[derive(Clone, Debug, Deserialize, Serialize)] +#[serde(untagged)] +pub enum IdOrNestedObject { + Id(Url), + NestedObject(Kind), +} + +impl IdOrNestedObject { + pub(crate) fn id(&self) -> &Url { + match self { + IdOrNestedObject::Id(i) => i, + IdOrNestedObject::NestedObject(n) => n.id(), + } + } + pub async fn object(self, context: &Data) -> LemmyResult { + match self { + // TODO: move IdOrNestedObject struct to library and make fetch_object_http private + IdOrNestedObject::Id(i) => Ok(fetch_object_http(&i, context).await?.object), + IdOrNestedObject::NestedObject(o) => Ok(o), + } + } +} + +#[cfg(test)] +mod tests { + use crate::protocol::{ + community::{announce::AnnounceActivity, report::Report}, + create_or_update::{note::CreateOrUpdateNote, page::CreateOrUpdatePage}, + deletion::delete::Delete, + following::{accept::AcceptFollow, follow::Follow, undo_follow::UndoFollow}, + voting::{undo_vote::UndoVote, vote::Vote}, + }; + use lemmy_apub_objects::utils::test::test_json; + use lemmy_utils::error::LemmyResult; + + #[test] + fn test_parse_smithereen_activities() -> LemmyResult<()> { + test_json::("../apub/assets/smithereen/activities/create_note.json")?; + Ok(()) + } + + #[test] + fn test_parse_pleroma_activities() -> LemmyResult<()> { + test_json::("../apub/assets/pleroma/activities/create_note.json")?; + test_json::("../apub/assets/pleroma/activities/delete.json")?; + test_json::("../apub/assets/pleroma/activities/follow.json")?; + Ok(()) + } + + #[test] + fn test_parse_mastodon_activities() -> LemmyResult<()> { + test_json::("../apub/assets/mastodon/activities/create_note.json")?; + test_json::("../apub/assets/mastodon/activities/delete.json")?; + test_json::("../apub/assets/mastodon/activities/follow.json")?; + test_json::("../apub/assets/mastodon/activities/undo_follow.json")?; + test_json::("../apub/assets/mastodon/activities/like_page.json")?; + test_json::("../apub/assets/mastodon/activities/undo_like_page.json")?; + test_json::("../apub/assets/mastodon/activities/flag.json")?; + Ok(()) + } + + #[test] + fn test_parse_lotide_activities() -> LemmyResult<()> { + test_json::("../apub/assets/lotide/activities/follow.json")?; + test_json::("../apub/assets/lotide/activities/create_page.json")?; + test_json::("../apub/assets/lotide/activities/create_page_image.json")?; + test_json::("../apub/assets/lotide/activities/create_note_reply.json")?; + Ok(()) + } + + #[test] + fn test_parse_friendica_activities() -> LemmyResult<()> { + test_json::("../apub/assets/friendica/activities/create_page_1.json")?; + test_json::("../apub/assets/friendica/activities/create_page_2.json")?; + test_json::("../apub/assets/friendica/activities/create_note.json")?; + test_json::("../apub/assets/friendica/activities/update_note.json")?; + test_json::("../apub/assets/friendica/activities/delete.json")?; + test_json::("../apub/assets/friendica/activities/like_page.json")?; + test_json::("../apub/assets/friendica/activities/dislike_page.json")?; + test_json::("../apub/assets/friendica/activities/undo_dislike_page.json")?; + Ok(()) + } + + #[test] + fn test_parse_gnusocial_activities() -> LemmyResult<()> { + test_json::("../apub/assets/gnusocial/activities/create_page.json")?; + test_json::("../apub/assets/gnusocial/activities/create_note.json")?; + test_json::("../apub/assets/gnusocial/activities/like_note.json")?; + Ok(()) + } + + #[test] + fn test_parse_peertube_activities() -> LemmyResult<()> { + test_json::("../apub/assets/peertube/activities/announce_video.json")?; + Ok(()) + } + + #[test] + fn test_parse_mbin_activities() -> LemmyResult<()> { + test_json::("../apub/assets/mbin/activities/accept.json")?; + test_json::("../apub/assets/mbin/activities/flag.json")?; + Ok(()) + } + + #[test] + fn test_parse_wordpress_activities() -> LemmyResult<()> { + test_json::("../apub/assets/wordpress/activities/announce.json")?; + Ok(()) + } +} diff --git a/crates/apub/activities/src/protocol/voting/mod.rs b/crates/apub/activities/src/protocol/voting/mod.rs new file mode 100644 index 000000000..32c32b85f --- /dev/null +++ b/crates/apub/activities/src/protocol/voting/mod.rs @@ -0,0 +1,23 @@ +pub mod undo_vote; +pub mod vote; + +#[cfg(test)] +mod tests { + use crate::protocol::voting::{undo_vote::UndoVote, vote::Vote}; + use lemmy_apub_objects::utils::test::test_parse_lemmy_item; + use lemmy_utils::error::LemmyResult; + + #[test] + fn test_parse_lemmy_voting() -> LemmyResult<()> { + test_parse_lemmy_item::("../apub/assets/lemmy/activities/voting/like_note.json")?; + test_parse_lemmy_item::("../apub/assets/lemmy/activities/voting/dislike_page.json")?; + + test_parse_lemmy_item::( + "../apub/assets/lemmy/activities/voting/undo_like_note.json", + )?; + test_parse_lemmy_item::( + "../apub/assets/lemmy/activities/voting/undo_dislike_page.json", + )?; + Ok(()) + } +} diff --git a/crates/apub/src/protocol/activities/voting/undo_vote.rs b/crates/apub/activities/src/protocol/voting/undo_vote.rs similarity index 100% rename from crates/apub/src/protocol/activities/voting/undo_vote.rs rename to crates/apub/activities/src/protocol/voting/undo_vote.rs diff --git a/crates/apub/src/protocol/activities/voting/vote.rs b/crates/apub/activities/src/protocol/voting/vote.rs similarity index 100% rename from crates/apub/src/protocol/activities/voting/vote.rs rename to crates/apub/activities/src/protocol/voting/vote.rs diff --git a/crates/apub/src/activities/voting/mod.rs b/crates/apub/activities/src/voting/mod.rs similarity index 97% rename from crates/apub/src/activities/voting/mod.rs rename to crates/apub/activities/src/voting/mod.rs index bea4788fc..71ea88f40 100644 --- a/crates/apub/src/activities/voting/mod.rs +++ b/crates/apub/activities/src/voting/mod.rs @@ -1,7 +1,7 @@ use crate::{ - activities::community::send_activity_in_community, activity_lists::AnnouncableActivities, - protocol::activities::voting::{ + community::send_activity_in_community, + protocol::voting::{ undo_vote::UndoVote, vote::{Vote, VoteType}, }, diff --git a/crates/apub/src/activities/voting/undo_vote.rs b/crates/apub/activities/src/voting/undo_vote.rs similarity index 88% rename from crates/apub/src/activities/voting/undo_vote.rs rename to crates/apub/activities/src/voting/undo_vote.rs index 78ed8e508..d8046d331 100644 --- a/crates/apub/src/activities/voting/undo_vote.rs +++ b/crates/apub/activities/src/voting/undo_vote.rs @@ -1,9 +1,7 @@ use crate::{ - activities::{ - generate_activity_id, - voting::{undo_vote_comment, undo_vote_post}, - }, - protocol::activities::voting::{undo_vote::UndoVote, vote::Vote}, + generate_activity_id, + protocol::voting::{undo_vote::UndoVote, vote::Vote}, + voting::{undo_vote_comment, undo_vote_post}, }; use activitypub_federation::{ config::Data, @@ -20,7 +18,7 @@ use lemmy_utils::error::{LemmyError, LemmyResult}; use url::Url; impl UndoVote { - pub(in crate::activities::voting) fn new( + pub(in crate::voting) fn new( vote: Vote, actor: &ApubPerson, context: &Data, diff --git a/crates/apub/src/activities/voting/vote.rs b/crates/apub/activities/src/voting/vote.rs similarity index 92% rename from crates/apub/src/activities/voting/vote.rs rename to crates/apub/activities/src/voting/vote.rs index c0fb99fa8..6ac9fed90 100644 --- a/crates/apub/src/activities/voting/vote.rs +++ b/crates/apub/activities/src/voting/vote.rs @@ -1,9 +1,7 @@ use crate::{ - activities::{ - generate_activity_id, - voting::{undo_vote_comment, undo_vote_post, vote_comment, vote_post}, - }, - protocol::activities::voting::vote::{Vote, VoteType}, + generate_activity_id, + protocol::voting::vote::{Vote, VoteType}, + voting::{undo_vote_comment, undo_vote_post, vote_comment, vote_post}, }; use activitypub_federation::{ config::Data, @@ -21,7 +19,7 @@ use lemmy_utils::error::{LemmyError, LemmyResult}; use url::Url; impl Vote { - pub(in crate::activities::voting) fn new( + pub(in crate::voting) fn new( object_id: ObjectId, actor: &ApubPerson, kind: VoteType, diff --git a/crates/apub/apub/Cargo.toml b/crates/apub/apub/Cargo.toml new file mode 100644 index 000000000..1706afad0 --- /dev/null +++ b/crates/apub/apub/Cargo.toml @@ -0,0 +1,51 @@ +[package] +name = "lemmy_apub" +publish = false +version.workspace = true +edition.workspace = true +description.workspace = true +license.workspace = true +homepage.workspace = true +documentation.workspace = true +repository.workspace = true +rust-version.workspace = true + +[lib] +name = "lemmy_apub" +path = "src/lib.rs" +doctest = false + +[features] +full = [] + +[lints] +workspace = true + +[dependencies] +lemmy_db_views_community_moderator = { workspace = true, features = ["full"] } +lemmy_db_views_community_follower = { workspace = true, features = ["full"] } +lemmy_db_views_post = { workspace = true, features = ["full"] } +lemmy_utils = { workspace = true, features = ["full"] } +lemmy_db_schema = { workspace = true, features = ["full"] } +lemmy_api_utils = { workspace = true, features = ["full"] } +lemmy_apub_activities = { workspace = true } +lemmy_apub_objects = { workspace = true } +activitypub_federation = { workspace = true } +lemmy_db_schema_file = { workspace = true } +serde_json = { workspace = true } +serde = { workspace = true } +actix-web = { workspace = true } +tokio = { workspace = true } +tracing = { workspace = true } +url = { workspace = true } +futures = { workspace = true } +futures-util = { workspace = true } +async-trait = { workspace = true } +either = { workspace = true } + +[dev-dependencies] +serial_test = { workspace = true } +pretty_assertions = { workspace = true } + +[package.metadata.cargo-shear] +ignored = ["futures", "futures-util"] diff --git a/crates/apub/assets/discourse/objects/group.json b/crates/apub/apub/assets/discourse/objects/group.json similarity index 100% rename from crates/apub/assets/discourse/objects/group.json rename to crates/apub/apub/assets/discourse/objects/group.json diff --git a/crates/apub/assets/discourse/objects/page.json b/crates/apub/apub/assets/discourse/objects/page.json similarity index 100% rename from crates/apub/assets/discourse/objects/page.json rename to crates/apub/apub/assets/discourse/objects/page.json diff --git a/crates/apub/assets/discourse/objects/person.json b/crates/apub/apub/assets/discourse/objects/person.json similarity index 100% rename from crates/apub/assets/discourse/objects/person.json rename to crates/apub/apub/assets/discourse/objects/person.json diff --git a/crates/apub/assets/friendica/activities/create_note.json b/crates/apub/apub/assets/friendica/activities/create_note.json similarity index 100% rename from crates/apub/assets/friendica/activities/create_note.json rename to crates/apub/apub/assets/friendica/activities/create_note.json diff --git a/crates/apub/assets/friendica/activities/create_page_1.json b/crates/apub/apub/assets/friendica/activities/create_page_1.json similarity index 100% rename from crates/apub/assets/friendica/activities/create_page_1.json rename to crates/apub/apub/assets/friendica/activities/create_page_1.json diff --git a/crates/apub/assets/friendica/activities/create_page_2.json b/crates/apub/apub/assets/friendica/activities/create_page_2.json similarity index 100% rename from crates/apub/assets/friendica/activities/create_page_2.json rename to crates/apub/apub/assets/friendica/activities/create_page_2.json diff --git a/crates/apub/assets/friendica/activities/delete.json b/crates/apub/apub/assets/friendica/activities/delete.json similarity index 100% rename from crates/apub/assets/friendica/activities/delete.json rename to crates/apub/apub/assets/friendica/activities/delete.json diff --git a/crates/apub/assets/friendica/activities/dislike_page.json b/crates/apub/apub/assets/friendica/activities/dislike_page.json similarity index 100% rename from crates/apub/assets/friendica/activities/dislike_page.json rename to crates/apub/apub/assets/friendica/activities/dislike_page.json diff --git a/crates/apub/assets/friendica/activities/like_page.json b/crates/apub/apub/assets/friendica/activities/like_page.json similarity index 100% rename from crates/apub/assets/friendica/activities/like_page.json rename to crates/apub/apub/assets/friendica/activities/like_page.json diff --git a/crates/apub/assets/friendica/activities/undo_dislike_page.json b/crates/apub/apub/assets/friendica/activities/undo_dislike_page.json similarity index 100% rename from crates/apub/assets/friendica/activities/undo_dislike_page.json rename to crates/apub/apub/assets/friendica/activities/undo_dislike_page.json diff --git a/crates/apub/assets/friendica/activities/update_note.json b/crates/apub/apub/assets/friendica/activities/update_note.json similarity index 100% rename from crates/apub/assets/friendica/activities/update_note.json rename to crates/apub/apub/assets/friendica/activities/update_note.json diff --git a/crates/apub/assets/friendica/objects/note_1.json b/crates/apub/apub/assets/friendica/objects/note_1.json similarity index 100% rename from crates/apub/assets/friendica/objects/note_1.json rename to crates/apub/apub/assets/friendica/objects/note_1.json diff --git a/crates/apub/assets/friendica/objects/note_2.json b/crates/apub/apub/assets/friendica/objects/note_2.json similarity index 100% rename from crates/apub/assets/friendica/objects/note_2.json rename to crates/apub/apub/assets/friendica/objects/note_2.json diff --git a/crates/apub/assets/friendica/objects/page_1.json b/crates/apub/apub/assets/friendica/objects/page_1.json similarity index 100% rename from crates/apub/assets/friendica/objects/page_1.json rename to crates/apub/apub/assets/friendica/objects/page_1.json diff --git a/crates/apub/assets/friendica/objects/page_2.json b/crates/apub/apub/assets/friendica/objects/page_2.json similarity index 100% rename from crates/apub/assets/friendica/objects/page_2.json rename to crates/apub/apub/assets/friendica/objects/page_2.json diff --git a/crates/apub/assets/friendica/objects/person_1.json b/crates/apub/apub/assets/friendica/objects/person_1.json similarity index 100% rename from crates/apub/assets/friendica/objects/person_1.json rename to crates/apub/apub/assets/friendica/objects/person_1.json diff --git a/crates/apub/assets/friendica/objects/person_2.json b/crates/apub/apub/assets/friendica/objects/person_2.json similarity index 100% rename from crates/apub/assets/friendica/objects/person_2.json rename to crates/apub/apub/assets/friendica/objects/person_2.json diff --git a/crates/apub/assets/gnusocial/activities/create_note.json b/crates/apub/apub/assets/gnusocial/activities/create_note.json similarity index 100% rename from crates/apub/assets/gnusocial/activities/create_note.json rename to crates/apub/apub/assets/gnusocial/activities/create_note.json diff --git a/crates/apub/assets/gnusocial/activities/create_page.json b/crates/apub/apub/assets/gnusocial/activities/create_page.json similarity index 100% rename from crates/apub/assets/gnusocial/activities/create_page.json rename to crates/apub/apub/assets/gnusocial/activities/create_page.json diff --git a/crates/apub/assets/gnusocial/activities/like_note.json b/crates/apub/apub/assets/gnusocial/activities/like_note.json similarity index 100% rename from crates/apub/assets/gnusocial/activities/like_note.json rename to crates/apub/apub/assets/gnusocial/activities/like_note.json diff --git a/crates/apub/assets/gnusocial/objects/group.json b/crates/apub/apub/assets/gnusocial/objects/group.json similarity index 100% rename from crates/apub/assets/gnusocial/objects/group.json rename to crates/apub/apub/assets/gnusocial/objects/group.json diff --git a/crates/apub/assets/gnusocial/objects/note.json b/crates/apub/apub/assets/gnusocial/objects/note.json similarity index 100% rename from crates/apub/assets/gnusocial/objects/note.json rename to crates/apub/apub/assets/gnusocial/objects/note.json diff --git a/crates/apub/assets/gnusocial/objects/page.json b/crates/apub/apub/assets/gnusocial/objects/page.json similarity index 100% rename from crates/apub/assets/gnusocial/objects/page.json rename to crates/apub/apub/assets/gnusocial/objects/page.json diff --git a/crates/apub/assets/gnusocial/objects/person.json b/crates/apub/apub/assets/gnusocial/objects/person.json similarity index 100% rename from crates/apub/assets/gnusocial/objects/person.json rename to crates/apub/apub/assets/gnusocial/objects/person.json diff --git a/crates/apub/assets/lemmy/activities/block/block_user.json b/crates/apub/apub/assets/lemmy/activities/block/block_user.json similarity index 100% rename from crates/apub/assets/lemmy/activities/block/block_user.json rename to crates/apub/apub/assets/lemmy/activities/block/block_user.json diff --git a/crates/apub/assets/lemmy/activities/block/undo_block_user.json b/crates/apub/apub/assets/lemmy/activities/block/undo_block_user.json similarity index 100% rename from crates/apub/assets/lemmy/activities/block/undo_block_user.json rename to crates/apub/apub/assets/lemmy/activities/block/undo_block_user.json diff --git a/crates/apub/assets/lemmy/activities/community/add_featured_post.json b/crates/apub/apub/assets/lemmy/activities/community/add_featured_post.json similarity index 100% rename from crates/apub/assets/lemmy/activities/community/add_featured_post.json rename to crates/apub/apub/assets/lemmy/activities/community/add_featured_post.json diff --git a/crates/apub/assets/lemmy/activities/community/add_mod.json b/crates/apub/apub/assets/lemmy/activities/community/add_mod.json similarity index 100% rename from crates/apub/assets/lemmy/activities/community/add_mod.json rename to crates/apub/apub/assets/lemmy/activities/community/add_mod.json diff --git a/crates/apub/assets/lemmy/activities/community/announce_create_page.json b/crates/apub/apub/assets/lemmy/activities/community/announce_create_page.json similarity index 100% rename from crates/apub/assets/lemmy/activities/community/announce_create_page.json rename to crates/apub/apub/assets/lemmy/activities/community/announce_create_page.json diff --git a/crates/apub/assets/lemmy/activities/community/lock_note.json b/crates/apub/apub/assets/lemmy/activities/community/lock_note.json similarity index 100% rename from crates/apub/assets/lemmy/activities/community/lock_note.json rename to crates/apub/apub/assets/lemmy/activities/community/lock_note.json diff --git a/crates/apub/assets/lemmy/activities/community/lock_page.json b/crates/apub/apub/assets/lemmy/activities/community/lock_page.json similarity index 100% rename from crates/apub/assets/lemmy/activities/community/lock_page.json rename to crates/apub/apub/assets/lemmy/activities/community/lock_page.json diff --git a/crates/apub/assets/lemmy/activities/community/remove_featured_post.json b/crates/apub/apub/assets/lemmy/activities/community/remove_featured_post.json similarity index 100% rename from crates/apub/assets/lemmy/activities/community/remove_featured_post.json rename to crates/apub/apub/assets/lemmy/activities/community/remove_featured_post.json diff --git a/crates/apub/assets/lemmy/activities/community/remove_mod.json b/crates/apub/apub/assets/lemmy/activities/community/remove_mod.json similarity index 100% rename from crates/apub/assets/lemmy/activities/community/remove_mod.json rename to crates/apub/apub/assets/lemmy/activities/community/remove_mod.json diff --git a/crates/apub/assets/lemmy/activities/community/report_page.json b/crates/apub/apub/assets/lemmy/activities/community/report_page.json similarity index 100% rename from crates/apub/assets/lemmy/activities/community/report_page.json rename to crates/apub/apub/assets/lemmy/activities/community/report_page.json diff --git a/crates/apub/assets/lemmy/activities/community/resolve_report_page.json b/crates/apub/apub/assets/lemmy/activities/community/resolve_report_page.json similarity index 100% rename from crates/apub/assets/lemmy/activities/community/resolve_report_page.json rename to crates/apub/apub/assets/lemmy/activities/community/resolve_report_page.json diff --git a/crates/apub/assets/lemmy/activities/community/undo_lock_note.json b/crates/apub/apub/assets/lemmy/activities/community/undo_lock_note.json similarity index 100% rename from crates/apub/assets/lemmy/activities/community/undo_lock_note.json rename to crates/apub/apub/assets/lemmy/activities/community/undo_lock_note.json diff --git a/crates/apub/assets/lemmy/activities/community/undo_lock_page.json b/crates/apub/apub/assets/lemmy/activities/community/undo_lock_page.json similarity index 100% rename from crates/apub/assets/lemmy/activities/community/undo_lock_page.json rename to crates/apub/apub/assets/lemmy/activities/community/undo_lock_page.json diff --git a/crates/apub/assets/lemmy/activities/community/update_community.json b/crates/apub/apub/assets/lemmy/activities/community/update_community.json similarity index 100% rename from crates/apub/assets/lemmy/activities/community/update_community.json rename to crates/apub/apub/assets/lemmy/activities/community/update_community.json diff --git a/crates/apub/assets/lemmy/activities/create_or_update/create_comment.json b/crates/apub/apub/assets/lemmy/activities/create_or_update/create_comment.json similarity index 100% rename from crates/apub/assets/lemmy/activities/create_or_update/create_comment.json rename to crates/apub/apub/assets/lemmy/activities/create_or_update/create_comment.json diff --git a/crates/apub/assets/lemmy/activities/create_or_update/create_page.json b/crates/apub/apub/assets/lemmy/activities/create_or_update/create_page.json similarity index 100% rename from crates/apub/assets/lemmy/activities/create_or_update/create_page.json rename to crates/apub/apub/assets/lemmy/activities/create_or_update/create_page.json diff --git a/crates/apub/assets/lemmy/activities/create_or_update/create_private_message.json b/crates/apub/apub/assets/lemmy/activities/create_or_update/create_private_message.json similarity index 100% rename from crates/apub/assets/lemmy/activities/create_or_update/create_private_message.json rename to crates/apub/apub/assets/lemmy/activities/create_or_update/create_private_message.json diff --git a/crates/apub/assets/lemmy/activities/create_or_update/update_page.json b/crates/apub/apub/assets/lemmy/activities/create_or_update/update_page.json similarity index 100% rename from crates/apub/assets/lemmy/activities/create_or_update/update_page.json rename to crates/apub/apub/assets/lemmy/activities/create_or_update/update_page.json diff --git a/crates/apub/assets/lemmy/activities/deletion/delete_page.json b/crates/apub/apub/assets/lemmy/activities/deletion/delete_page.json similarity index 100% rename from crates/apub/assets/lemmy/activities/deletion/delete_page.json rename to crates/apub/apub/assets/lemmy/activities/deletion/delete_page.json diff --git a/crates/apub/assets/lemmy/activities/deletion/delete_private_message.json b/crates/apub/apub/assets/lemmy/activities/deletion/delete_private_message.json similarity index 100% rename from crates/apub/assets/lemmy/activities/deletion/delete_private_message.json rename to crates/apub/apub/assets/lemmy/activities/deletion/delete_private_message.json diff --git a/crates/apub/assets/lemmy/activities/deletion/delete_user.json b/crates/apub/apub/assets/lemmy/activities/deletion/delete_user.json similarity index 100% rename from crates/apub/assets/lemmy/activities/deletion/delete_user.json rename to crates/apub/apub/assets/lemmy/activities/deletion/delete_user.json diff --git a/crates/apub/assets/lemmy/activities/deletion/remove_note.json b/crates/apub/apub/assets/lemmy/activities/deletion/remove_note.json similarity index 100% rename from crates/apub/assets/lemmy/activities/deletion/remove_note.json rename to crates/apub/apub/assets/lemmy/activities/deletion/remove_note.json diff --git a/crates/apub/assets/lemmy/activities/deletion/undo_delete_page.json b/crates/apub/apub/assets/lemmy/activities/deletion/undo_delete_page.json similarity index 100% rename from crates/apub/assets/lemmy/activities/deletion/undo_delete_page.json rename to crates/apub/apub/assets/lemmy/activities/deletion/undo_delete_page.json diff --git a/crates/apub/assets/lemmy/activities/deletion/undo_delete_private_message.json b/crates/apub/apub/assets/lemmy/activities/deletion/undo_delete_private_message.json similarity index 100% rename from crates/apub/assets/lemmy/activities/deletion/undo_delete_private_message.json rename to crates/apub/apub/assets/lemmy/activities/deletion/undo_delete_private_message.json diff --git a/crates/apub/assets/lemmy/activities/deletion/undo_remove_note.json b/crates/apub/apub/assets/lemmy/activities/deletion/undo_remove_note.json similarity index 100% rename from crates/apub/assets/lemmy/activities/deletion/undo_remove_note.json rename to crates/apub/apub/assets/lemmy/activities/deletion/undo_remove_note.json diff --git a/crates/apub/assets/lemmy/activities/following/accept.json b/crates/apub/apub/assets/lemmy/activities/following/accept.json similarity index 100% rename from crates/apub/assets/lemmy/activities/following/accept.json rename to crates/apub/apub/assets/lemmy/activities/following/accept.json diff --git a/crates/apub/assets/lemmy/activities/following/follow.json b/crates/apub/apub/assets/lemmy/activities/following/follow.json similarity index 100% rename from crates/apub/assets/lemmy/activities/following/follow.json rename to crates/apub/apub/assets/lemmy/activities/following/follow.json diff --git a/crates/apub/assets/lemmy/activities/following/undo_follow.json b/crates/apub/apub/assets/lemmy/activities/following/undo_follow.json similarity index 100% rename from crates/apub/assets/lemmy/activities/following/undo_follow.json rename to crates/apub/apub/assets/lemmy/activities/following/undo_follow.json diff --git a/crates/apub/assets/lemmy/activities/voting/dislike_page.json b/crates/apub/apub/assets/lemmy/activities/voting/dislike_page.json similarity index 100% rename from crates/apub/assets/lemmy/activities/voting/dislike_page.json rename to crates/apub/apub/assets/lemmy/activities/voting/dislike_page.json diff --git a/crates/apub/assets/lemmy/activities/voting/like_note.json b/crates/apub/apub/assets/lemmy/activities/voting/like_note.json similarity index 100% rename from crates/apub/assets/lemmy/activities/voting/like_note.json rename to crates/apub/apub/assets/lemmy/activities/voting/like_note.json diff --git a/crates/apub/assets/lemmy/activities/voting/undo_dislike_page.json b/crates/apub/apub/assets/lemmy/activities/voting/undo_dislike_page.json similarity index 100% rename from crates/apub/assets/lemmy/activities/voting/undo_dislike_page.json rename to crates/apub/apub/assets/lemmy/activities/voting/undo_dislike_page.json diff --git a/crates/apub/assets/lemmy/activities/voting/undo_like_note.json b/crates/apub/apub/assets/lemmy/activities/voting/undo_like_note.json similarity index 100% rename from crates/apub/assets/lemmy/activities/voting/undo_like_note.json rename to crates/apub/apub/assets/lemmy/activities/voting/undo_like_note.json diff --git a/crates/apub/assets/lemmy/collections/group_featured_posts.json b/crates/apub/apub/assets/lemmy/collections/group_featured_posts.json similarity index 100% rename from crates/apub/assets/lemmy/collections/group_featured_posts.json rename to crates/apub/apub/assets/lemmy/collections/group_featured_posts.json diff --git a/crates/apub/assets/lemmy/collections/group_followers.json b/crates/apub/apub/assets/lemmy/collections/group_followers.json similarity index 100% rename from crates/apub/assets/lemmy/collections/group_followers.json rename to crates/apub/apub/assets/lemmy/collections/group_followers.json diff --git a/crates/apub/assets/lemmy/collections/group_moderators.json b/crates/apub/apub/assets/lemmy/collections/group_moderators.json similarity index 100% rename from crates/apub/assets/lemmy/collections/group_moderators.json rename to crates/apub/apub/assets/lemmy/collections/group_moderators.json diff --git a/crates/apub/assets/lemmy/collections/group_outbox.json b/crates/apub/apub/assets/lemmy/collections/group_outbox.json similarity index 100% rename from crates/apub/assets/lemmy/collections/group_outbox.json rename to crates/apub/apub/assets/lemmy/collections/group_outbox.json diff --git a/crates/apub/assets/lemmy/collections/person_outbox.json b/crates/apub/apub/assets/lemmy/collections/person_outbox.json similarity index 100% rename from crates/apub/assets/lemmy/collections/person_outbox.json rename to crates/apub/apub/assets/lemmy/collections/person_outbox.json diff --git a/crates/apub/assets/lemmy/objects/comment.json b/crates/apub/apub/assets/lemmy/objects/comment.json similarity index 100% rename from crates/apub/assets/lemmy/objects/comment.json rename to crates/apub/apub/assets/lemmy/objects/comment.json diff --git a/crates/apub/assets/lemmy/objects/group.json b/crates/apub/apub/assets/lemmy/objects/group.json similarity index 100% rename from crates/apub/assets/lemmy/objects/group.json rename to crates/apub/apub/assets/lemmy/objects/group.json diff --git a/crates/apub/assets/lemmy/objects/instance.json b/crates/apub/apub/assets/lemmy/objects/instance.json similarity index 100% rename from crates/apub/assets/lemmy/objects/instance.json rename to crates/apub/apub/assets/lemmy/objects/instance.json diff --git a/crates/apub/assets/lemmy/objects/page.json b/crates/apub/apub/assets/lemmy/objects/page.json similarity index 100% rename from crates/apub/assets/lemmy/objects/page.json rename to crates/apub/apub/assets/lemmy/objects/page.json diff --git a/crates/apub/assets/lemmy/objects/person.json b/crates/apub/apub/assets/lemmy/objects/person.json similarity index 100% rename from crates/apub/assets/lemmy/objects/person.json rename to crates/apub/apub/assets/lemmy/objects/person.json diff --git a/crates/apub/assets/lemmy/objects/private_message.json b/crates/apub/apub/assets/lemmy/objects/private_message.json similarity index 100% rename from crates/apub/assets/lemmy/objects/private_message.json rename to crates/apub/apub/assets/lemmy/objects/private_message.json diff --git a/crates/apub/assets/lemmy/objects/tombstone.json b/crates/apub/apub/assets/lemmy/objects/tombstone.json similarity index 100% rename from crates/apub/assets/lemmy/objects/tombstone.json rename to crates/apub/apub/assets/lemmy/objects/tombstone.json diff --git a/crates/apub/assets/lotide/activities/create_note_reply.json b/crates/apub/apub/assets/lotide/activities/create_note_reply.json similarity index 100% rename from crates/apub/assets/lotide/activities/create_note_reply.json rename to crates/apub/apub/assets/lotide/activities/create_note_reply.json diff --git a/crates/apub/assets/lotide/activities/create_page.json b/crates/apub/apub/assets/lotide/activities/create_page.json similarity index 100% rename from crates/apub/assets/lotide/activities/create_page.json rename to crates/apub/apub/assets/lotide/activities/create_page.json diff --git a/crates/apub/assets/lotide/activities/create_page_image.json b/crates/apub/apub/assets/lotide/activities/create_page_image.json similarity index 100% rename from crates/apub/assets/lotide/activities/create_page_image.json rename to crates/apub/apub/assets/lotide/activities/create_page_image.json diff --git a/crates/apub/assets/lotide/activities/delete_note.json b/crates/apub/apub/assets/lotide/activities/delete_note.json similarity index 100% rename from crates/apub/assets/lotide/activities/delete_note.json rename to crates/apub/apub/assets/lotide/activities/delete_note.json diff --git a/crates/apub/assets/lotide/activities/follow.json b/crates/apub/apub/assets/lotide/activities/follow.json similarity index 100% rename from crates/apub/assets/lotide/activities/follow.json rename to crates/apub/apub/assets/lotide/activities/follow.json diff --git a/crates/apub/assets/lotide/objects/group.json b/crates/apub/apub/assets/lotide/objects/group.json similarity index 100% rename from crates/apub/assets/lotide/objects/group.json rename to crates/apub/apub/assets/lotide/objects/group.json diff --git a/crates/apub/assets/lotide/objects/note.json b/crates/apub/apub/assets/lotide/objects/note.json similarity index 100% rename from crates/apub/assets/lotide/objects/note.json rename to crates/apub/apub/assets/lotide/objects/note.json diff --git a/crates/apub/assets/lotide/objects/page.json b/crates/apub/apub/assets/lotide/objects/page.json similarity index 100% rename from crates/apub/assets/lotide/objects/page.json rename to crates/apub/apub/assets/lotide/objects/page.json diff --git a/crates/apub/assets/lotide/objects/person.json b/crates/apub/apub/assets/lotide/objects/person.json similarity index 100% rename from crates/apub/assets/lotide/objects/person.json rename to crates/apub/apub/assets/lotide/objects/person.json diff --git a/crates/apub/assets/lotide/objects/tombstone.json b/crates/apub/apub/assets/lotide/objects/tombstone.json similarity index 100% rename from crates/apub/assets/lotide/objects/tombstone.json rename to crates/apub/apub/assets/lotide/objects/tombstone.json diff --git a/crates/apub/assets/mastodon/activities/create_note.json b/crates/apub/apub/assets/mastodon/activities/create_note.json similarity index 100% rename from crates/apub/assets/mastodon/activities/create_note.json rename to crates/apub/apub/assets/mastodon/activities/create_note.json diff --git a/crates/apub/assets/mastodon/activities/delete.json b/crates/apub/apub/assets/mastodon/activities/delete.json similarity index 100% rename from crates/apub/assets/mastodon/activities/delete.json rename to crates/apub/apub/assets/mastodon/activities/delete.json diff --git a/crates/apub/assets/mastodon/activities/flag.json b/crates/apub/apub/assets/mastodon/activities/flag.json similarity index 100% rename from crates/apub/assets/mastodon/activities/flag.json rename to crates/apub/apub/assets/mastodon/activities/flag.json diff --git a/crates/apub/assets/mastodon/activities/follow.json b/crates/apub/apub/assets/mastodon/activities/follow.json similarity index 100% rename from crates/apub/assets/mastodon/activities/follow.json rename to crates/apub/apub/assets/mastodon/activities/follow.json diff --git a/crates/apub/assets/mastodon/activities/like_page.json b/crates/apub/apub/assets/mastodon/activities/like_page.json similarity index 100% rename from crates/apub/assets/mastodon/activities/like_page.json rename to crates/apub/apub/assets/mastodon/activities/like_page.json diff --git a/crates/apub/assets/mastodon/activities/private_message.json b/crates/apub/apub/assets/mastodon/activities/private_message.json similarity index 100% rename from crates/apub/assets/mastodon/activities/private_message.json rename to crates/apub/apub/assets/mastodon/activities/private_message.json diff --git a/crates/apub/assets/mastodon/activities/undo_follow.json b/crates/apub/apub/assets/mastodon/activities/undo_follow.json similarity index 100% rename from crates/apub/assets/mastodon/activities/undo_follow.json rename to crates/apub/apub/assets/mastodon/activities/undo_follow.json diff --git a/crates/apub/assets/mastodon/activities/undo_like_page.json b/crates/apub/apub/assets/mastodon/activities/undo_like_page.json similarity index 100% rename from crates/apub/assets/mastodon/activities/undo_like_page.json rename to crates/apub/apub/assets/mastodon/activities/undo_like_page.json diff --git a/crates/apub/assets/mastodon/collections/featured.json b/crates/apub/apub/assets/mastodon/collections/featured.json similarity index 100% rename from crates/apub/assets/mastodon/collections/featured.json rename to crates/apub/apub/assets/mastodon/collections/featured.json diff --git a/crates/apub/assets/mastodon/objects/note_1.json b/crates/apub/apub/assets/mastodon/objects/note_1.json similarity index 100% rename from crates/apub/assets/mastodon/objects/note_1.json rename to crates/apub/apub/assets/mastodon/objects/note_1.json diff --git a/crates/apub/assets/mastodon/objects/note_2.json b/crates/apub/apub/assets/mastodon/objects/note_2.json similarity index 100% rename from crates/apub/assets/mastodon/objects/note_2.json rename to crates/apub/apub/assets/mastodon/objects/note_2.json diff --git a/crates/apub/assets/mastodon/objects/page.json b/crates/apub/apub/assets/mastodon/objects/page.json similarity index 100% rename from crates/apub/assets/mastodon/objects/page.json rename to crates/apub/apub/assets/mastodon/objects/page.json diff --git a/crates/apub/assets/mastodon/objects/person.json b/crates/apub/apub/assets/mastodon/objects/person.json similarity index 100% rename from crates/apub/assets/mastodon/objects/person.json rename to crates/apub/apub/assets/mastodon/objects/person.json diff --git a/crates/apub/assets/mbin/activities/accept.json b/crates/apub/apub/assets/mbin/activities/accept.json similarity index 100% rename from crates/apub/assets/mbin/activities/accept.json rename to crates/apub/apub/assets/mbin/activities/accept.json diff --git a/crates/apub/assets/mbin/activities/flag.json b/crates/apub/apub/assets/mbin/activities/flag.json similarity index 100% rename from crates/apub/assets/mbin/activities/flag.json rename to crates/apub/apub/assets/mbin/activities/flag.json diff --git a/crates/apub/assets/mobilizon/objects/event.json b/crates/apub/apub/assets/mobilizon/objects/event.json similarity index 100% rename from crates/apub/assets/mobilizon/objects/event.json rename to crates/apub/apub/assets/mobilizon/objects/event.json diff --git a/crates/apub/assets/mobilizon/objects/group.json b/crates/apub/apub/assets/mobilizon/objects/group.json similarity index 100% rename from crates/apub/assets/mobilizon/objects/group.json rename to crates/apub/apub/assets/mobilizon/objects/group.json diff --git a/crates/apub/assets/mobilizon/objects/person.json b/crates/apub/apub/assets/mobilizon/objects/person.json similarity index 100% rename from crates/apub/assets/mobilizon/objects/person.json rename to crates/apub/apub/assets/mobilizon/objects/person.json diff --git a/crates/apub/assets/nodebb/objects/group.json b/crates/apub/apub/assets/nodebb/objects/group.json similarity index 100% rename from crates/apub/assets/nodebb/objects/group.json rename to crates/apub/apub/assets/nodebb/objects/group.json diff --git a/crates/apub/assets/nodebb/objects/page.json b/crates/apub/apub/assets/nodebb/objects/page.json similarity index 100% rename from crates/apub/assets/nodebb/objects/page.json rename to crates/apub/apub/assets/nodebb/objects/page.json diff --git a/crates/apub/assets/nodebb/objects/person.json b/crates/apub/apub/assets/nodebb/objects/person.json similarity index 100% rename from crates/apub/assets/nodebb/objects/person.json rename to crates/apub/apub/assets/nodebb/objects/person.json diff --git a/crates/apub/assets/peertube/activities/announce_video.json b/crates/apub/apub/assets/peertube/activities/announce_video.json similarity index 100% rename from crates/apub/assets/peertube/activities/announce_video.json rename to crates/apub/apub/assets/peertube/activities/announce_video.json diff --git a/crates/apub/assets/peertube/objects/group.json b/crates/apub/apub/assets/peertube/objects/group.json similarity index 100% rename from crates/apub/assets/peertube/objects/group.json rename to crates/apub/apub/assets/peertube/objects/group.json diff --git a/crates/apub/assets/peertube/objects/note.json b/crates/apub/apub/assets/peertube/objects/note.json similarity index 100% rename from crates/apub/assets/peertube/objects/note.json rename to crates/apub/apub/assets/peertube/objects/note.json diff --git a/crates/apub/assets/peertube/objects/person.json b/crates/apub/apub/assets/peertube/objects/person.json similarity index 100% rename from crates/apub/assets/peertube/objects/person.json rename to crates/apub/apub/assets/peertube/objects/person.json diff --git a/crates/apub/assets/peertube/objects/video.json b/crates/apub/apub/assets/peertube/objects/video.json similarity index 100% rename from crates/apub/assets/peertube/objects/video.json rename to crates/apub/apub/assets/peertube/objects/video.json diff --git a/crates/apub/assets/pleroma/activities/create_note.json b/crates/apub/apub/assets/pleroma/activities/create_note.json similarity index 100% rename from crates/apub/assets/pleroma/activities/create_note.json rename to crates/apub/apub/assets/pleroma/activities/create_note.json diff --git a/crates/apub/assets/pleroma/activities/delete.json b/crates/apub/apub/assets/pleroma/activities/delete.json similarity index 100% rename from crates/apub/assets/pleroma/activities/delete.json rename to crates/apub/apub/assets/pleroma/activities/delete.json diff --git a/crates/apub/assets/pleroma/activities/follow.json b/crates/apub/apub/assets/pleroma/activities/follow.json similarity index 100% rename from crates/apub/assets/pleroma/activities/follow.json rename to crates/apub/apub/assets/pleroma/activities/follow.json diff --git a/crates/apub/assets/pleroma/objects/chat_message.json b/crates/apub/apub/assets/pleroma/objects/chat_message.json similarity index 100% rename from crates/apub/assets/pleroma/objects/chat_message.json rename to crates/apub/apub/assets/pleroma/objects/chat_message.json diff --git a/crates/apub/assets/pleroma/objects/note.json b/crates/apub/apub/assets/pleroma/objects/note.json similarity index 100% rename from crates/apub/assets/pleroma/objects/note.json rename to crates/apub/apub/assets/pleroma/objects/note.json diff --git a/crates/apub/assets/pleroma/objects/person.json b/crates/apub/apub/assets/pleroma/objects/person.json similarity index 100% rename from crates/apub/assets/pleroma/objects/person.json rename to crates/apub/apub/assets/pleroma/objects/person.json diff --git a/crates/apub/assets/smithereen/activities/create_note.json b/crates/apub/apub/assets/smithereen/activities/create_note.json similarity index 100% rename from crates/apub/assets/smithereen/activities/create_note.json rename to crates/apub/apub/assets/smithereen/activities/create_note.json diff --git a/crates/apub/assets/smithereen/objects/note.json b/crates/apub/apub/assets/smithereen/objects/note.json similarity index 100% rename from crates/apub/assets/smithereen/objects/note.json rename to crates/apub/apub/assets/smithereen/objects/note.json diff --git a/crates/apub/assets/smithereen/objects/person.json b/crates/apub/apub/assets/smithereen/objects/person.json similarity index 100% rename from crates/apub/assets/smithereen/objects/person.json rename to crates/apub/apub/assets/smithereen/objects/person.json diff --git a/crates/apub/assets/wordpress/activities/announce.json b/crates/apub/apub/assets/wordpress/activities/announce.json similarity index 100% rename from crates/apub/assets/wordpress/activities/announce.json rename to crates/apub/apub/assets/wordpress/activities/announce.json diff --git a/crates/apub/assets/wordpress/objects/group.json b/crates/apub/apub/assets/wordpress/objects/group.json similarity index 100% rename from crates/apub/assets/wordpress/objects/group.json rename to crates/apub/apub/assets/wordpress/objects/group.json diff --git a/crates/apub/assets/wordpress/objects/note.json b/crates/apub/apub/assets/wordpress/objects/note.json similarity index 100% rename from crates/apub/assets/wordpress/objects/note.json rename to crates/apub/apub/assets/wordpress/objects/note.json diff --git a/crates/apub/assets/wordpress/objects/page.json b/crates/apub/apub/assets/wordpress/objects/page.json similarity index 100% rename from crates/apub/assets/wordpress/objects/page.json rename to crates/apub/apub/assets/wordpress/objects/page.json diff --git a/crates/apub/assets/wordpress/objects/person.json b/crates/apub/apub/assets/wordpress/objects/person.json similarity index 100% rename from crates/apub/assets/wordpress/objects/person.json rename to crates/apub/apub/assets/wordpress/objects/person.json diff --git a/crates/apub/src/collections/community_featured.rs b/crates/apub/apub/src/collections/community_featured.rs similarity index 100% rename from crates/apub/src/collections/community_featured.rs rename to crates/apub/apub/src/collections/community_featured.rs diff --git a/crates/apub/src/collections/community_follower.rs b/crates/apub/apub/src/collections/community_follower.rs similarity index 100% rename from crates/apub/src/collections/community_follower.rs rename to crates/apub/apub/src/collections/community_follower.rs diff --git a/crates/apub/src/collections/community_moderators.rs b/crates/apub/apub/src/collections/community_moderators.rs similarity index 100% rename from crates/apub/src/collections/community_moderators.rs rename to crates/apub/apub/src/collections/community_moderators.rs diff --git a/crates/apub/src/collections/community_outbox.rs b/crates/apub/apub/src/collections/community_outbox.rs similarity index 88% rename from crates/apub/src/collections/community_outbox.rs rename to crates/apub/apub/src/collections/community_outbox.rs index 3495e728f..6c55c1a1f 100644 --- a/crates/apub/src/collections/community_outbox.rs +++ b/crates/apub/apub/src/collections/community_outbox.rs @@ -1,14 +1,4 @@ -use crate::{ - activity_lists::AnnouncableActivities, - protocol::{ - activities::{ - community::announce::AnnounceActivity, - create_or_update::page::CreateOrUpdatePage, - CreateOrUpdateType, - }, - collections::group_outbox::GroupOutbox, - }, -}; +use crate::protocol::collections::group_outbox::GroupOutbox; use activitypub_federation::{ config::Data, kinds::collection::OrderedCollectionType, @@ -17,6 +7,14 @@ use activitypub_federation::{ }; use futures::future::join_all; use lemmy_api_utils::{context::LemmyContext, utils::generate_outbox_url}; +use lemmy_apub_activities::{ + activity_lists::AnnouncableActivities, + protocol::{ + community::announce::AnnounceActivity, + create_or_update::page::CreateOrUpdatePage, + CreateOrUpdateType, + }, +}; use lemmy_apub_objects::objects::community::ApubCommunity; use lemmy_db_schema::{source::site::Site, utils::FETCH_LIMIT_MAX}; use lemmy_db_schema_file::enums::PostSortType; @@ -37,13 +35,15 @@ impl Collection for ApubCommunityOutbox { async fn read_local(owner: &Self::Owner, data: &Data) -> LemmyResult { let site = Site::read_local(&mut data.pool()).await?; - let post_views = PostQuery { - community_id: Some(owner.id), - sort: Some(PostSortType::New), - limit: Some(FETCH_LIMIT_MAX.try_into()?), - ..Default::default() - } - .list(&site, &mut data.pool()) + let post_views = Box::pin( + PostQuery { + community_id: Some(owner.id), + sort: Some(PostSortType::New), + limit: Some(FETCH_LIMIT_MAX.try_into()?), + ..Default::default() + } + .list(&site, &mut data.pool()), + ) .await?; let mut ordered_items = vec![]; diff --git a/crates/apub/src/collections/mod.rs b/crates/apub/apub/src/collections/mod.rs similarity index 100% rename from crates/apub/src/collections/mod.rs rename to crates/apub/apub/src/collections/mod.rs diff --git a/crates/apub/src/http/comment.rs b/crates/apub/apub/src/http/comment.rs similarity index 100% rename from crates/apub/src/http/comment.rs rename to crates/apub/apub/src/http/comment.rs diff --git a/crates/apub/src/http/community.rs b/crates/apub/apub/src/http/community.rs similarity index 99% rename from crates/apub/src/http/community.rs rename to crates/apub/apub/src/http/community.rs index 489b509b3..598f66b31 100644 --- a/crates/apub/src/http/community.rs +++ b/crates/apub/apub/src/http/community.rs @@ -6,8 +6,7 @@ use crate::{ community_moderators::ApubCommunityModerators, community_outbox::ApubCommunityOutbox, }, - fetcher::get_instance_id, - http::check_community_fetchable, + http::{check_community_fetchable, get_instance_id}, }; use activitypub_federation::{ actix_web::{response::create_http_response, signing_actor}, diff --git a/crates/apub/src/http/mod.rs b/crates/apub/apub/src/http/mod.rs similarity index 91% rename from crates/apub/src/http/mod.rs rename to crates/apub/apub/src/http/mod.rs index 7bb4ce2f6..3e63d0dd5 100644 --- a/crates/apub/src/http/mod.rs +++ b/crates/apub/apub/src/http/mod.rs @@ -1,4 +1,3 @@ -use crate::{activity_lists::SharedInboxActivities, fetcher::get_instance_id}; use activitypub_federation::{ actix_web::{ inbox::{receive_activity_with_hook, ReceiveActivityHook}, @@ -13,11 +12,16 @@ use actix_web::{ HttpRequest, HttpResponse, }; +use either::Either; use lemmy_api_utils::{context::LemmyContext, plugins::plugin_hook_after}; +use lemmy_apub_activities::activity_lists::SharedInboxActivities; use lemmy_apub_objects::objects::{SiteOrMultiOrCommunityOrUser, UserOrCommunity}; -use lemmy_db_schema::source::{ - activity::{ReceivedActivity, SentActivity}, - community::Community, +use lemmy_db_schema::{ + newtypes::InstanceId, + source::{ + activity::{ReceivedActivity, SentActivity}, + community::Community, + }, }; use lemmy_db_schema_file::enums::CommunityVisibility; use lemmy_db_views_community_follower::CommunityFollowerView; @@ -157,3 +161,13 @@ async fn check_community_content_fetchable( LocalOnlyPublic | LocalOnlyPrivate => Err(LemmyErrorType::NotFound.into()), } } + +pub(in crate::http) fn get_instance_id(s: &SiteOrMultiOrCommunityOrUser) -> InstanceId { + use Either::*; + match s { + Left(Left(s)) => s.instance_id, + Left(Right(m)) => m.instance_id, + Right(Left(u)) => u.instance_id, + Right(Right(c)) => c.instance_id, + } +} diff --git a/crates/apub/src/http/person.rs b/crates/apub/apub/src/http/person.rs similarity index 100% rename from crates/apub/src/http/person.rs rename to crates/apub/apub/src/http/person.rs diff --git a/crates/apub/src/http/post.rs b/crates/apub/apub/src/http/post.rs similarity index 100% rename from crates/apub/src/http/post.rs rename to crates/apub/apub/src/http/post.rs diff --git a/crates/apub/src/http/routes.rs b/crates/apub/apub/src/http/routes.rs similarity index 100% rename from crates/apub/src/http/routes.rs rename to crates/apub/apub/src/http/routes.rs diff --git a/crates/apub/src/http/site.rs b/crates/apub/apub/src/http/site.rs similarity index 100% rename from crates/apub/src/http/site.rs rename to crates/apub/apub/src/http/site.rs diff --git a/crates/apub/src/lib.rs b/crates/apub/apub/src/lib.rs similarity index 59% rename from crates/apub/src/lib.rs rename to crates/apub/apub/src/lib.rs index 2119bd240..abcc098ef 100644 --- a/crates/apub/src/lib.rs +++ b/crates/apub/apub/src/lib.rs @@ -1,50 +1,14 @@ -use activitypub_federation::{ - config::{Data, UrlVerifier}, - error::Error as ActivityPubError, -}; +use activitypub_federation::{config::UrlVerifier, error::Error as ActivityPubError}; use async_trait::async_trait; -use lemmy_api_utils::context::LemmyContext; -use lemmy_apub_objects::{ - objects::PostOrComment, - utils::functions::{check_apub_id_valid, local_site_data_cached}, -}; -use lemmy_db_schema::{source::community::Community, traits::Crud, utils::ActualDbPool}; -use lemmy_db_views_post::PostView; -use lemmy_db_views_site::SiteView; -use lemmy_utils::error::{FederationError, LemmyError, LemmyErrorType, LemmyResult}; +use lemmy_apub_objects::utils::functions::{check_apub_id_valid, local_site_data_cached}; +use lemmy_db_schema::utils::ActualDbPool; +use lemmy_utils::error::{FederationError, LemmyError, LemmyErrorType}; use url::Url; -pub mod activities; -pub mod activity_lists; -pub mod api; pub mod collections; -pub mod fetcher; pub mod http; pub mod protocol; -pub(crate) async fn post_or_comment_community( - post_or_comment: &PostOrComment, - context: &Data, -) -> LemmyResult { - match post_or_comment { - PostOrComment::Left(p) => Community::read(&mut context.pool(), p.community_id).await, - PostOrComment::Right(c) => { - let site_view = SiteView::read_local(&mut context.pool()).await?; - Ok( - PostView::read( - &mut context.pool(), - c.post_id, - None, - site_view.instance.id, - false, - ) - .await? - .community, - ) - } - } -} - /// Maximum number of outgoing HTTP requests to fetch a single object. Needs to be high enough /// to fetch a new community with posts, moderators and featured posts. pub const FEDERATION_HTTP_FETCH_LIMIT: u32 = 100; diff --git a/crates/apub/src/protocol/collections/group_featured.rs b/crates/apub/apub/src/protocol/collections/group_featured.rs similarity index 100% rename from crates/apub/src/protocol/collections/group_featured.rs rename to crates/apub/apub/src/protocol/collections/group_featured.rs diff --git a/crates/apub/src/protocol/collections/group_followers.rs b/crates/apub/apub/src/protocol/collections/group_followers.rs similarity index 100% rename from crates/apub/src/protocol/collections/group_followers.rs rename to crates/apub/apub/src/protocol/collections/group_followers.rs diff --git a/crates/apub/src/protocol/collections/group_moderators.rs b/crates/apub/apub/src/protocol/collections/group_moderators.rs similarity index 100% rename from crates/apub/src/protocol/collections/group_moderators.rs rename to crates/apub/apub/src/protocol/collections/group_moderators.rs diff --git a/crates/apub/src/protocol/collections/group_outbox.rs b/crates/apub/apub/src/protocol/collections/group_outbox.rs similarity index 83% rename from crates/apub/src/protocol/collections/group_outbox.rs rename to crates/apub/apub/src/protocol/collections/group_outbox.rs index 77e82348d..743a14b0c 100644 --- a/crates/apub/src/protocol/collections/group_outbox.rs +++ b/crates/apub/apub/src/protocol/collections/group_outbox.rs @@ -1,5 +1,5 @@ -use crate::protocol::activities::community::announce::AnnounceActivity; use activitypub_federation::kinds::collection::OrderedCollectionType; +use lemmy_apub_activities::protocol::community::announce::AnnounceActivity; use serde::{Deserialize, Serialize}; use url::Url; diff --git a/crates/apub/src/protocol/collections/mod.rs b/crates/apub/apub/src/protocol/collections/mod.rs similarity index 100% rename from crates/apub/src/protocol/collections/mod.rs rename to crates/apub/apub/src/protocol/collections/mod.rs diff --git a/crates/apub/src/protocol/collections/url_collection.rs b/crates/apub/apub/src/protocol/collections/url_collection.rs similarity index 100% rename from crates/apub/src/protocol/collections/url_collection.rs rename to crates/apub/apub/src/protocol/collections/url_collection.rs diff --git a/crates/apub/apub/src/protocol/mod.rs b/crates/apub/apub/src/protocol/mod.rs new file mode 100644 index 000000000..6bd7fb8a4 --- /dev/null +++ b/crates/apub/apub/src/protocol/mod.rs @@ -0,0 +1 @@ +pub(crate) mod collections; diff --git a/crates/apub_objects/Cargo.toml b/crates/apub/objects/Cargo.toml similarity index 100% rename from crates/apub_objects/Cargo.toml rename to crates/apub/objects/Cargo.toml diff --git a/crates/apub_objects/src/lib.rs b/crates/apub/objects/src/lib.rs similarity index 100% rename from crates/apub_objects/src/lib.rs rename to crates/apub/objects/src/lib.rs diff --git a/crates/apub_objects/src/objects/comment.rs b/crates/apub/objects/src/objects/comment.rs similarity index 91% rename from crates/apub_objects/src/objects/comment.rs rename to crates/apub/objects/src/objects/comment.rs index 7e06a19ed..8ad45794f 100644 --- a/crates/apub_objects/src/objects/comment.rs +++ b/crates/apub/objects/src/objects/comment.rs @@ -250,10 +250,7 @@ pub(crate) mod tests { }; use assert_json_diff::assert_json_include; use html2md::parse_html; - use lemmy_db_schema::{ - source::{local_site::LocalSite, site::Site}, - test_data::TestData, - }; + use lemmy_db_schema::{source::instance::Instance, test_data::TestData}; use pretty_assertions::assert_eq; use serial_test::serial; @@ -271,25 +268,13 @@ pub(crate) mod tests { Ok((person, community, post, site)) } - async fn cleanup( - (person, community, post, site): (ApubPerson, ApubCommunity, ApubPost, ApubSite), - context: &LemmyContext, - ) -> LemmyResult<()> { - Post::delete(&mut context.pool(), post.id).await?; - Community::delete(&mut context.pool(), community.id).await?; - Person::delete(&mut context.pool(), person.id).await?; - Site::delete(&mut context.pool(), site.id).await?; - LocalSite::delete(&mut context.pool()).await?; - Ok(()) - } - #[tokio::test] #[serial] pub(crate) async fn test_parse_lemmy_comment() -> LemmyResult<()> { let context = LemmyContext::init_test_context().await; let test_data = TestData::create(&mut context.pool()).await?; let url = Url::parse("https://enterprise.lemmy.ml/comment/38741")?; - let data = prepare_comment_test(&url, &context).await?; + prepare_comment_test(&url, &context).await?; let json: Note = file_to_json_object("../apub/assets/lemmy/objects/comment.json")?; ApubComment::verify(&json, &url, &context).await?; @@ -300,13 +285,11 @@ pub(crate) mod tests { assert!(!comment.local); assert_eq!(context.request_count(), 0); - let comment_id = comment.id; let to_apub = comment.into_json(&context).await?; assert_json_include!(actual: json, expected: to_apub); - Comment::delete(&mut context.pool(), comment_id).await?; - cleanup(data, &context).await?; test_data.delete(&mut context.pool()).await?; + Instance::delete_all(&mut context.pool()).await?; Ok(()) } @@ -316,7 +299,7 @@ pub(crate) mod tests { let context = LemmyContext::init_test_context().await; let test_data = TestData::create(&mut context.pool()).await?; let url = Url::parse("https://enterprise.lemmy.ml/comment/38741")?; - let data = prepare_comment_test(&url, &context).await?; + prepare_comment_test(&url, &context).await?; let pleroma_url = Url::parse("https://queer.hacktivis.me/objects/8d4973f4-53de-49cd-8c27-df160e16a9c2")?; @@ -332,9 +315,8 @@ pub(crate) mod tests { assert!(!comment.local); assert_eq!(context.request_count(), 1); - Comment::delete(&mut context.pool(), comment.id).await?; - cleanup(data, &context).await?; test_data.delete(&mut context.pool()).await?; + Instance::delete_all(&mut context.pool()).await?; Ok(()) } diff --git a/crates/apub_objects/src/objects/community.rs b/crates/apub/objects/src/objects/community.rs similarity index 97% rename from crates/apub_objects/src/objects/community.rs rename to crates/apub/objects/src/objects/community.rs index 0917ea174..7d094c7a8 100644 --- a/crates/apub_objects/src/objects/community.rs +++ b/crates/apub/objects/src/objects/community.rs @@ -292,7 +292,7 @@ impl GetActorType for ApubCommunity { pub(crate) mod tests { use super::*; use crate::utils::test::{parse_lemmy_community, parse_lemmy_instance}; - use lemmy_db_schema::source::site::Site; + use lemmy_db_schema::source::instance::Instance; use pretty_assertions::assert_eq; use serial_test::serial; @@ -300,7 +300,7 @@ pub(crate) mod tests { #[serial] async fn test_parse_lemmy_community() -> LemmyResult<()> { let context = LemmyContext::init_test_context().await; - let site = parse_lemmy_instance(&context).await?; + parse_lemmy_instance(&context).await?; let community = parse_lemmy_community(&context).await?; assert_eq!(community.title, "Ten Forward"); @@ -316,8 +316,7 @@ pub(crate) mod tests { Some("A description of ten forward.".into()) ); - Community::delete(&mut context.pool(), community.id).await?; - Site::delete(&mut context.pool(), site.id).await?; + Instance::delete_all(&mut context.pool()).await?; Ok(()) } } diff --git a/crates/apub_objects/src/objects/instance.rs b/crates/apub/objects/src/objects/instance.rs similarity index 98% rename from crates/apub_objects/src/objects/instance.rs rename to crates/apub/objects/src/objects/instance.rs index c71d2a0bd..63f673880 100644 --- a/crates/apub_objects/src/objects/instance.rs +++ b/crates/apub/objects/src/objects/instance.rs @@ -222,6 +222,7 @@ pub(crate) async fn fetch_instance_actor_for_object + Clone>( pub(crate) mod tests { use super::*; use crate::utils::test::parse_lemmy_instance; + use lemmy_db_schema::source::instance::Instance; use pretty_assertions::assert_eq; use serial_test::serial; @@ -237,7 +238,7 @@ pub(crate) mod tests { Some(15) ); - Site::delete(&mut context.pool(), site.id).await?; + Instance::delete_all(&mut context.pool()).await?; Ok(()) } } diff --git a/crates/apub_objects/src/objects/mod.rs b/crates/apub/objects/src/objects/mod.rs similarity index 100% rename from crates/apub_objects/src/objects/mod.rs rename to crates/apub/objects/src/objects/mod.rs diff --git a/crates/apub_objects/src/objects/multi_community.rs b/crates/apub/objects/src/objects/multi_community.rs similarity index 100% rename from crates/apub_objects/src/objects/multi_community.rs rename to crates/apub/objects/src/objects/multi_community.rs diff --git a/crates/apub_objects/src/objects/multi_community_collection.rs b/crates/apub/objects/src/objects/multi_community_collection.rs similarity index 100% rename from crates/apub_objects/src/objects/multi_community_collection.rs rename to crates/apub/objects/src/objects/multi_community_collection.rs diff --git a/crates/apub_objects/src/objects/person.rs b/crates/apub/objects/src/objects/person.rs similarity index 92% rename from crates/apub_objects/src/objects/person.rs rename to crates/apub/objects/src/objects/person.rs index a5d1bb65e..8112f09d8 100644 --- a/crates/apub_objects/src/objects/person.rs +++ b/crates/apub/objects/src/objects/person.rs @@ -217,11 +217,10 @@ pub(crate) mod tests { use super::*; use crate::{ objects::instance::ApubSite, - protocol::instance::Instance, utils::test::{file_to_json_object, parse_lemmy_person}, }; use activitypub_federation::fetch::object_id::ObjectId; - use lemmy_db_schema::source::site::Site; + use lemmy_db_schema::source::instance::Instance; use pretty_assertions::assert_eq; use serial_test::serial; @@ -229,13 +228,13 @@ pub(crate) mod tests { #[serial] async fn test_parse_lemmy_person() -> LemmyResult<()> { let context = LemmyContext::init_test_context().await; - let (person, site) = parse_lemmy_person(&context).await?; + let (person, _) = parse_lemmy_person(&context).await?; assert_eq!(person.display_name, Some("Jean-Luc Picard".to_string())); assert!(!person.local); assert_eq!(person.bio.as_ref().map(std::string::String::len), Some(39)); - cleanup((person, site), &context).await?; + Instance::delete_all(&mut context.pool()).await?; Ok(()) } @@ -245,11 +244,12 @@ pub(crate) mod tests { let context = LemmyContext::init_test_context().await; // create and parse a fake pleroma instance actor, to avoid network request during test - let mut json: Instance = file_to_json_object("../apub/assets/lemmy/objects/instance.json")?; + let mut json: crate::protocol::instance::Instance = + file_to_json_object("../apub/assets/lemmy/objects/instance.json")?; json.id = ObjectId::parse("https://queer.hacktivis.me/")?; let url = Url::parse("https://queer.hacktivis.me/users/lanodan")?; ApubSite::verify(&json, &url, &context).await?; - let site = ApubSite::from_json(json, &context).await?; + ApubSite::from_json(json, &context).await?; let json = file_to_json_object("../apub/assets/pleroma/objects/person.json")?; ApubPerson::verify(&json, &url, &context).await?; @@ -261,16 +261,7 @@ pub(crate) mod tests { assert_eq!(context.request_count(), 0); assert_eq!(person.bio.as_ref().map(std::string::String::len), Some(812)); - cleanup((person, site), &context).await?; - Ok(()) - } - - async fn cleanup( - (person, site): (ApubPerson, ApubSite), - context: &LemmyContext, - ) -> LemmyResult<()> { - DbPerson::delete(&mut context.pool(), person.id).await?; - Site::delete(&mut context.pool(), site.id).await?; + Instance::delete_all(&mut context.pool()).await?; Ok(()) } } diff --git a/crates/apub_objects/src/objects/post.rs b/crates/apub/objects/src/objects/post.rs similarity index 94% rename from crates/apub_objects/src/objects/post.rs rename to crates/apub/objects/src/objects/post.rs index 98c231f1b..ce0821de9 100644 --- a/crates/apub_objects/src/objects/post.rs +++ b/crates/apub/objects/src/objects/post.rs @@ -380,7 +380,7 @@ mod tests { objects::ApubPerson, utils::test::{file_to_json_object, parse_lemmy_community, parse_lemmy_person}, }; - use lemmy_db_schema::source::{community::Community, person::Person, site::Site}; + use lemmy_db_schema::source::instance::Instance; use pretty_assertions::assert_eq; use serial_test::serial; @@ -388,8 +388,8 @@ mod tests { #[serial] async fn test_parse_lemmy_post() -> LemmyResult<()> { let context = LemmyContext::init_test_context().await; - let (person, site) = parse_lemmy_person(&context).await?; - let community = parse_lemmy_community(&context).await?; + parse_lemmy_person(&context).await?; + parse_lemmy_community(&context).await?; let json = file_to_json_object("../apub/assets/lemmy/objects/page.json")?; let url = Url::parse("https://enterprise.lemmy.ml/post/55143")?; @@ -404,10 +404,7 @@ mod tests { assert!(!post.featured_community); assert_eq!(context.request_count(), 0); - Post::delete(&mut context.pool(), post.id).await?; - Person::delete(&mut context.pool(), person.id).await?; - Community::delete(&mut context.pool(), community.id).await?; - Site::delete(&mut context.pool(), site.id).await?; + Instance::delete_all(&mut context.pool()).await?; Ok(()) } @@ -415,19 +412,17 @@ mod tests { #[serial] async fn test_convert_mastodon_post_title() -> LemmyResult<()> { let context = LemmyContext::init_test_context().await; - let community = parse_lemmy_community(&context).await?; + parse_lemmy_community(&context).await?; let json = file_to_json_object("../apub/assets/mastodon/objects/person.json")?; - let person = ApubPerson::from_json(json, &context).await?; + ApubPerson::from_json(json, &context).await?; let json = file_to_json_object("../apub/assets/mastodon/objects/page.json")?; let post = ApubPost::from_json(json, &context).await?; assert_eq!(post.name, "Variable never resetting at refresh"); - Post::delete(&mut context.pool(), post.id).await?; - Person::delete(&mut context.pool(), person.id).await?; - Community::delete(&mut context.pool(), community.id).await?; + Instance::delete_all(&mut context.pool()).await?; Ok(()) } } diff --git a/crates/apub_objects/src/objects/private_message.rs b/crates/apub/objects/src/objects/private_message.rs similarity index 91% rename from crates/apub_objects/src/objects/private_message.rs rename to crates/apub/objects/src/objects/private_message.rs index 388d17659..79947480a 100644 --- a/crates/apub_objects/src/objects/private_message.rs +++ b/crates/apub/objects/src/objects/private_message.rs @@ -181,7 +181,7 @@ mod tests { utils::test::{file_to_json_object, parse_lemmy_instance}, }; use assert_json_diff::assert_json_include; - use lemmy_db_schema::{source::site::Site, test_data::TestData}; + use lemmy_db_schema::test_data::TestData; use pretty_assertions::assert_eq; use serial_test::serial; @@ -201,23 +201,13 @@ mod tests { Ok((person1, person2, site)) } - async fn cleanup( - (person1, person2, site): (ApubPerson, ApubPerson, ApubSite), - context: &Data, - ) -> LemmyResult<()> { - Person::delete(&mut context.pool(), person1.id).await?; - Person::delete(&mut context.pool(), person2.id).await?; - Site::delete(&mut context.pool(), site.id).await?; - Ok(()) - } - #[tokio::test] #[serial] async fn test_parse_lemmy_pm() -> LemmyResult<()> { let context = LemmyContext::init_test_context().await; let test_data = TestData::create(&mut context.pool()).await?; let url = Url::parse("https://enterprise.lemmy.ml/private_message/1621")?; - let data = prepare_comment_test(&url, &context).await?; + prepare_comment_test(&url, &context).await?; let json: PrivateMessage = file_to_json_object("../apub/assets/lemmy/objects/private_message.json")?; ApubPrivateMessage::verify(&json, &url, &context).await?; @@ -227,13 +217,11 @@ mod tests { assert_eq!(pm.content.len(), 20); assert_eq!(context.request_count(), 0); - let pm_id = pm.id; let to_apub = pm.into_json(&context).await?; assert_json_include!(actual: json, expected: to_apub); - DbPrivateMessage::delete(&mut context.pool(), pm_id).await?; - cleanup(data, &context).await?; test_data.delete(&mut context.pool()).await?; + Instance::delete_all(&mut context.pool()).await?; Ok(()) } @@ -243,7 +231,7 @@ mod tests { let context = LemmyContext::init_test_context().await; let test_data = TestData::create(&mut context.pool()).await?; let url = Url::parse("https://enterprise.lemmy.ml/private_message/1621")?; - let data = prepare_comment_test(&url, &context).await?; + prepare_comment_test(&url, &context).await?; let pleroma_url = Url::parse("https://queer.hacktivis.me/objects/2")?; let json = file_to_json_object("../apub/assets/pleroma/objects/chat_message.json")?; ApubPrivateMessage::verify(&json, &pleroma_url, &context).await?; @@ -253,9 +241,8 @@ mod tests { assert_eq!(pm.content.len(), 3); assert_eq!(context.request_count(), 0); - DbPrivateMessage::delete(&mut context.pool(), pm.id).await?; - cleanup(data, &context).await?; test_data.delete(&mut context.pool()).await?; + Instance::delete_all(&mut context.pool()).await?; Ok(()) } } diff --git a/crates/apub_objects/src/protocol/group.rs b/crates/apub/objects/src/protocol/group.rs similarity index 100% rename from crates/apub_objects/src/protocol/group.rs rename to crates/apub/objects/src/protocol/group.rs diff --git a/crates/apub_objects/src/protocol/instance.rs b/crates/apub/objects/src/protocol/instance.rs similarity index 100% rename from crates/apub_objects/src/protocol/instance.rs rename to crates/apub/objects/src/protocol/instance.rs diff --git a/crates/apub_objects/src/protocol/mod.rs b/crates/apub/objects/src/protocol/mod.rs similarity index 100% rename from crates/apub_objects/src/protocol/mod.rs rename to crates/apub/objects/src/protocol/mod.rs diff --git a/crates/apub_objects/src/protocol/multi_community.rs b/crates/apub/objects/src/protocol/multi_community.rs similarity index 100% rename from crates/apub_objects/src/protocol/multi_community.rs rename to crates/apub/objects/src/protocol/multi_community.rs diff --git a/crates/apub_objects/src/protocol/note.rs b/crates/apub/objects/src/protocol/note.rs similarity index 100% rename from crates/apub_objects/src/protocol/note.rs rename to crates/apub/objects/src/protocol/note.rs diff --git a/crates/apub_objects/src/protocol/page.rs b/crates/apub/objects/src/protocol/page.rs similarity index 100% rename from crates/apub_objects/src/protocol/page.rs rename to crates/apub/objects/src/protocol/page.rs diff --git a/crates/apub_objects/src/protocol/person.rs b/crates/apub/objects/src/protocol/person.rs similarity index 100% rename from crates/apub_objects/src/protocol/person.rs rename to crates/apub/objects/src/protocol/person.rs diff --git a/crates/apub_objects/src/protocol/private_message.rs b/crates/apub/objects/src/protocol/private_message.rs similarity index 100% rename from crates/apub_objects/src/protocol/private_message.rs rename to crates/apub/objects/src/protocol/private_message.rs diff --git a/crates/apub_objects/src/protocol/tags.rs b/crates/apub/objects/src/protocol/tags.rs similarity index 100% rename from crates/apub_objects/src/protocol/tags.rs rename to crates/apub/objects/src/protocol/tags.rs diff --git a/crates/apub_objects/src/protocol/tombstone.rs b/crates/apub/objects/src/protocol/tombstone.rs similarity index 100% rename from crates/apub_objects/src/protocol/tombstone.rs rename to crates/apub/objects/src/protocol/tombstone.rs diff --git a/crates/apub_objects/src/utils/functions.rs b/crates/apub/objects/src/utils/functions.rs similarity index 99% rename from crates/apub_objects/src/utils/functions.rs rename to crates/apub/objects/src/utils/functions.rs index 133ae5ac3..06039a32c 100644 --- a/crates/apub_objects/src/utils/functions.rs +++ b/crates/apub/objects/src/utils/functions.rs @@ -79,7 +79,7 @@ pub async fn local_site_data_cached(pool: &mut DbPool<'_>) -> LemmyResult ( @@ -96,7 +96,7 @@ pub async fn local_site_data_cached(pool: &mut DbPool<'_>) -> LemmyResult, -) -> LemmyResult { - Ok(match Url::parse(&query) { - Ok(url) => { - // its already an url, just go with it - ObjectId::from(url).dereference(context).await? - } - Err(_) => { - // not an url, try to resolve via webfinger - if query.starts_with('!') || query.starts_with('@') { - query.remove(0); - } - Left(Right( - webfinger_resolve_actor::(&query, context).await?, - )) - } - }) -} - -/// Converts a search query to an object id. The query MUST bbe a URL which will bbe treated -/// as the ObjectId directly. If the query is a webfinger identifier (@user@example.com or -/// !community@example.com) this method will return an error. -pub(crate) async fn search_query_to_object_id_local( - query: &str, - context: &Data, -) -> LemmyResult { - let url = Url::parse(query)?; - ObjectId::from(url).dereference_local(context).await -} diff --git a/crates/apub/src/protocol/activities/block/mod.rs b/crates/apub/src/protocol/activities/block/mod.rs deleted file mode 100644 index 1b40ad0ef..000000000 --- a/crates/apub/src/protocol/activities/block/mod.rs +++ /dev/null @@ -1,16 +0,0 @@ -pub mod block_user; -pub mod undo_block_user; - -#[cfg(test)] -mod tests { - use crate::protocol::activities::block::{block_user::BlockUser, undo_block_user::UndoBlockUser}; - use lemmy_apub_objects::utils::test::test_parse_lemmy_item; - use lemmy_utils::error::LemmyResult; - - #[test] - fn test_parse_lemmy_block() -> LemmyResult<()> { - test_parse_lemmy_item::("assets/lemmy/activities/block/block_user.json")?; - test_parse_lemmy_item::("assets/lemmy/activities/block/undo_block_user.json")?; - Ok(()) - } -} diff --git a/crates/apub/src/protocol/activities/community/mod.rs b/crates/apub/src/protocol/activities/community/mod.rs deleted file mode 100644 index ae11fde1b..000000000 --- a/crates/apub/src/protocol/activities/community/mod.rs +++ /dev/null @@ -1,58 +0,0 @@ -pub mod announce; -pub mod collection_add; -pub mod collection_remove; -pub mod lock; -pub mod report; -pub mod resolve_report; -pub mod update; - -#[cfg(test)] -mod tests { - use super::resolve_report::ResolveReport; - use crate::protocol::activities::community::{ - announce::AnnounceActivity, - collection_add::CollectionAdd, - collection_remove::CollectionRemove, - lock::{LockPageOrNote, UndoLockPageOrNote}, - report::Report, - update::Update, - }; - use lemmy_apub_objects::utils::test::test_parse_lemmy_item; - use lemmy_utils::error::LemmyResult; - - #[test] - fn test_parse_lemmy_community_activities() -> LemmyResult<()> { - test_parse_lemmy_item::( - "assets/lemmy/activities/community/announce_create_page.json", - )?; - - test_parse_lemmy_item::("assets/lemmy/activities/community/add_mod.json")?; - test_parse_lemmy_item::("assets/lemmy/activities/community/remove_mod.json")?; - - test_parse_lemmy_item::( - "assets/lemmy/activities/community/add_featured_post.json", - )?; - test_parse_lemmy_item::( - "assets/lemmy/activities/community/remove_featured_post.json", - )?; - - test_parse_lemmy_item::("assets/lemmy/activities/community/lock_page.json")?; - test_parse_lemmy_item::( - "assets/lemmy/activities/community/undo_lock_page.json", - )?; - - test_parse_lemmy_item::("assets/lemmy/activities/community/lock_note.json")?; - test_parse_lemmy_item::( - "assets/lemmy/activities/community/undo_lock_note.json", - )?; - - test_parse_lemmy_item::("assets/lemmy/activities/community/update_community.json")?; - - test_parse_lemmy_item::("assets/lemmy/activities/community/report_page.json")?; - test_parse_lemmy_item::( - "assets/lemmy/activities/community/resolve_report_page.json", - )?; - - Ok(()) - } -} diff --git a/crates/apub/src/protocol/activities/deletion/mod.rs b/crates/apub/src/protocol/activities/deletion/mod.rs deleted file mode 100644 index 71e3811ec..000000000 --- a/crates/apub/src/protocol/activities/deletion/mod.rs +++ /dev/null @@ -1,32 +0,0 @@ -pub mod delete; -pub mod delete_user; -pub mod undo_delete; - -#[cfg(test)] -mod tests { - use crate::protocol::activities::deletion::{ - delete::Delete, - delete_user::DeleteUser, - undo_delete::UndoDelete, - }; - use lemmy_apub_objects::utils::test::test_parse_lemmy_item; - use lemmy_utils::error::LemmyResult; - - #[test] - fn test_parse_lemmy_deletion() -> LemmyResult<()> { - test_parse_lemmy_item::("assets/lemmy/activities/deletion/remove_note.json")?; - test_parse_lemmy_item::("assets/lemmy/activities/deletion/delete_page.json")?; - - test_parse_lemmy_item::("assets/lemmy/activities/deletion/undo_remove_note.json")?; - test_parse_lemmy_item::("assets/lemmy/activities/deletion/undo_delete_page.json")?; - test_parse_lemmy_item::( - "assets/lemmy/activities/deletion/delete_private_message.json", - )?; - test_parse_lemmy_item::( - "assets/lemmy/activities/deletion/undo_delete_private_message.json", - )?; - - test_parse_lemmy_item::("assets/lemmy/activities/deletion/delete_user.json")?; - Ok(()) - } -} diff --git a/crates/apub/src/protocol/activities/following/mod.rs b/crates/apub/src/protocol/activities/following/mod.rs deleted file mode 100644 index f6c209cc1..000000000 --- a/crates/apub/src/protocol/activities/following/mod.rs +++ /dev/null @@ -1,23 +0,0 @@ -pub(crate) mod accept; -pub mod follow; -pub(crate) mod reject; -pub mod undo_follow; - -#[cfg(test)] -mod tests { - use crate::protocol::activities::following::{ - accept::AcceptFollow, - follow::Follow, - undo_follow::UndoFollow, - }; - use lemmy_apub_objects::utils::test::test_parse_lemmy_item; - use lemmy_utils::error::LemmyResult; - - #[test] - fn test_parse_lemmy_accept_follow() -> LemmyResult<()> { - test_parse_lemmy_item::("assets/lemmy/activities/following/follow.json")?; - test_parse_lemmy_item::("assets/lemmy/activities/following/accept.json")?; - test_parse_lemmy_item::("assets/lemmy/activities/following/undo_follow.json")?; - Ok(()) - } -} diff --git a/crates/apub/src/protocol/activities/mod.rs b/crates/apub/src/protocol/activities/mod.rs deleted file mode 100644 index 9fc674ab9..000000000 --- a/crates/apub/src/protocol/activities/mod.rs +++ /dev/null @@ -1,103 +0,0 @@ -use serde::{Deserialize, Serialize}; -use strum::Display; - -pub mod block; -pub mod community; -pub mod create_or_update; -pub mod deletion; -pub mod following; -pub mod voting; - -#[derive(Clone, Debug, Display, Deserialize, Serialize, PartialEq, Eq)] -pub enum CreateOrUpdateType { - Create, - Update, -} - -#[cfg(test)] -mod tests { - use crate::protocol::activities::{ - community::{announce::AnnounceActivity, report::Report}, - create_or_update::{note::CreateOrUpdateNote, page::CreateOrUpdatePage}, - deletion::delete::Delete, - following::{accept::AcceptFollow, follow::Follow, undo_follow::UndoFollow}, - voting::{undo_vote::UndoVote, vote::Vote}, - }; - use lemmy_apub_objects::utils::test::test_json; - use lemmy_utils::error::LemmyResult; - - #[test] - fn test_parse_smithereen_activities() -> LemmyResult<()> { - test_json::("assets/smithereen/activities/create_note.json")?; - Ok(()) - } - - #[test] - fn test_parse_pleroma_activities() -> LemmyResult<()> { - test_json::("assets/pleroma/activities/create_note.json")?; - test_json::("assets/pleroma/activities/delete.json")?; - test_json::("assets/pleroma/activities/follow.json")?; - Ok(()) - } - - #[test] - fn test_parse_mastodon_activities() -> LemmyResult<()> { - test_json::("assets/mastodon/activities/create_note.json")?; - test_json::("assets/mastodon/activities/delete.json")?; - test_json::("assets/mastodon/activities/follow.json")?; - test_json::("assets/mastodon/activities/undo_follow.json")?; - test_json::("assets/mastodon/activities/like_page.json")?; - test_json::("assets/mastodon/activities/undo_like_page.json")?; - test_json::("assets/mastodon/activities/flag.json")?; - Ok(()) - } - - #[test] - fn test_parse_lotide_activities() -> LemmyResult<()> { - test_json::("assets/lotide/activities/follow.json")?; - test_json::("assets/lotide/activities/create_page.json")?; - test_json::("assets/lotide/activities/create_page_image.json")?; - test_json::("assets/lotide/activities/create_note_reply.json")?; - Ok(()) - } - - #[test] - fn test_parse_friendica_activities() -> LemmyResult<()> { - test_json::("assets/friendica/activities/create_page_1.json")?; - test_json::("assets/friendica/activities/create_page_2.json")?; - test_json::("assets/friendica/activities/create_note.json")?; - test_json::("assets/friendica/activities/update_note.json")?; - test_json::("assets/friendica/activities/delete.json")?; - test_json::("assets/friendica/activities/like_page.json")?; - test_json::("assets/friendica/activities/dislike_page.json")?; - test_json::("assets/friendica/activities/undo_dislike_page.json")?; - Ok(()) - } - - #[test] - fn test_parse_gnusocial_activities() -> LemmyResult<()> { - test_json::("assets/gnusocial/activities/create_page.json")?; - test_json::("assets/gnusocial/activities/create_note.json")?; - test_json::("assets/gnusocial/activities/like_note.json")?; - Ok(()) - } - - #[test] - fn test_parse_peertube_activities() -> LemmyResult<()> { - test_json::("assets/peertube/activities/announce_video.json")?; - Ok(()) - } - - #[test] - fn test_parse_mbin_activities() -> LemmyResult<()> { - test_json::("assets/mbin/activities/accept.json")?; - test_json::("assets/mbin/activities/flag.json")?; - Ok(()) - } - - #[test] - fn test_parse_wordpress_activities() -> LemmyResult<()> { - test_json::("assets/wordpress/activities/announce.json")?; - Ok(()) - } -} diff --git a/crates/apub/src/protocol/activities/voting/mod.rs b/crates/apub/src/protocol/activities/voting/mod.rs deleted file mode 100644 index 302b2e731..000000000 --- a/crates/apub/src/protocol/activities/voting/mod.rs +++ /dev/null @@ -1,19 +0,0 @@ -pub mod undo_vote; -pub mod vote; - -#[cfg(test)] -mod tests { - use crate::protocol::activities::voting::{undo_vote::UndoVote, vote::Vote}; - use lemmy_apub_objects::utils::test::test_parse_lemmy_item; - use lemmy_utils::error::LemmyResult; - - #[test] - fn test_parse_lemmy_voting() -> LemmyResult<()> { - test_parse_lemmy_item::("assets/lemmy/activities/voting/like_note.json")?; - test_parse_lemmy_item::("assets/lemmy/activities/voting/dislike_page.json")?; - - test_parse_lemmy_item::("assets/lemmy/activities/voting/undo_like_note.json")?; - test_parse_lemmy_item::("assets/lemmy/activities/voting/undo_dislike_page.json")?; - Ok(()) - } -} diff --git a/crates/apub/src/protocol/mod.rs b/crates/apub/src/protocol/mod.rs deleted file mode 100644 index fed3362c4..000000000 --- a/crates/apub/src/protocol/mod.rs +++ /dev/null @@ -1,32 +0,0 @@ -use activitypub_federation::{config::Data, fetch::fetch_object_http}; -use lemmy_api_utils::context::LemmyContext; -use lemmy_apub_objects::utils::protocol::Id; -use lemmy_utils::error::LemmyResult; -use serde::{de::DeserializeOwned, Deserialize, Serialize}; -use url::Url; - -pub mod activities; -pub(crate) mod collections; - -#[derive(Clone, Debug, Deserialize, Serialize)] -#[serde(untagged)] -pub(crate) enum IdOrNestedObject { - Id(Url), - NestedObject(Kind), -} - -impl IdOrNestedObject { - pub(crate) fn id(&self) -> &Url { - match self { - IdOrNestedObject::Id(i) => i, - IdOrNestedObject::NestedObject(n) => n.id(), - } - } - pub(crate) async fn object(self, context: &Data) -> LemmyResult { - match self { - // TODO: move IdOrNestedObject struct to library and make fetch_object_http private - IdOrNestedObject::Id(i) => Ok(fetch_object_http(&i, context).await?.object), - IdOrNestedObject::NestedObject(o) => Ok(o), - } - } -} diff --git a/crates/db_views/comment/src/impls.rs b/crates/db_views/comment/src/impls.rs index d28ed60c2..4ad85fb99 100644 --- a/crates/db_views/comment/src/impls.rs +++ b/crates/db_views/comment/src/impls.rs @@ -370,6 +370,7 @@ mod tests { } async fn init_data(pool: &mut DbPool<'_>) -> LemmyResult { + Instance::read_all(pool).await?; let inserted_instance = Instance::read_or_create(pool, "my_domain.tld".to_string()).await?; let timmy_person_form = PersonInsertForm::test_form(inserted_instance.id, "timmy"); diff --git a/crates/db_views/modlog_combined/src/impls.rs b/crates/db_views/modlog_combined/src/impls.rs index 2c5328c9f..d11d673d8 100644 --- a/crates/db_views/modlog_combined/src/impls.rs +++ b/crates/db_views/modlog_combined/src/impls.rs @@ -3,10 +3,6 @@ use crate::{ AdminAllowInstanceView, AdminBanView, AdminBlockInstanceView, - AdminPurgeCommentView, - AdminPurgeCommunityView, - AdminPurgePersonView, - AdminPurgePostView, AdminRemoveCommunityView, ModAddToCommunityView, ModBanFromCommunityView, @@ -59,10 +55,6 @@ use lemmy_db_schema_file::{ admin_allow_instance, admin_ban, admin_block_instance, - admin_purge_comment, - admin_purge_community, - admin_purge_person, - admin_purge_post, admin_remove_community, comment, community, @@ -97,10 +89,14 @@ impl ModlogCombinedViewInternal { admin_allow_instance::admin_person_id .eq(person::id) .or(admin_block_instance::admin_person_id.eq(person::id)) + /* + Temporarily disabled to speed up compilation + https://github.com/LemmyNet/lemmy/issues/6012 .or(admin_purge_comment::admin_person_id.eq(person::id)) .or(admin_purge_community::admin_person_id.eq(person::id)) .or(admin_purge_person::admin_person_id.eq(person::id)) .or(admin_purge_post::admin_person_id.eq(person::id)) + */ .or(admin_add::mod_person_id.eq(person::id)) .or(mod_add_to_community::mod_person_id.eq(person::id)) .or(admin_ban::mod_person_id.eq(person::id)) @@ -157,9 +153,10 @@ impl ModlogCombinedViewInternal { ); let post_join = post::table.on( - admin_purge_comment::post_id + mod_feature_post::post_id .eq(post::id) - .or(mod_feature_post::post_id.eq(post::id)) + // https://github.com/LemmyNet/lemmy/issues/6012 + //.or(admin_purge_comment::post_id.eq(post::id)) .or(mod_lock_post::post_id.eq(post::id)) .or( mod_remove_comment::id @@ -175,9 +172,10 @@ impl ModlogCombinedViewInternal { ); let community_join = community::table.on( - admin_purge_post::community_id + mod_add_to_community::community_id .eq(community::id) - .or(mod_add_to_community::community_id.eq(community::id)) + // https://github.com/LemmyNet/lemmy/issues/6012 + //.or(admin_purge_post::community_id.eq(community::id)) .or(mod_ban_from_community::community_id.eq(community::id)) .or( mod_feature_post::id @@ -224,10 +222,14 @@ impl ModlogCombinedViewInternal { modlog_combined::table .left_join(admin_allow_instance::table) .left_join(admin_block_instance::table) + /* + Temporarily disabled to speed up compilation + https://github.com/LemmyNet/lemmy/issues/6012 .left_join(admin_purge_comment::table) .left_join(admin_purge_community::table) .left_join(admin_purge_person::table) .left_join(admin_purge_post::table) + */ .left_join(admin_add::table) .left_join(mod_add_to_community::table) .left_join(admin_ban::table) @@ -483,6 +485,9 @@ impl InternalToCombinedView for ModlogCombinedViewInternal { admin: v.moderator, }, )) + /* + Temporarily disabled to speed up compilation + https://github.com/LemmyNet/lemmy/issues/6012 } else if let (Some(admin_purge_comment), Some(post)) = (v.admin_purge_comment, v.post.clone()) { Some(ModlogCombinedView::AdminPurgeComment( @@ -512,6 +517,7 @@ impl InternalToCombinedView for ModlogCombinedViewInternal { admin: v.moderator, community, })) + */ } else if let (Some(admin_add), Some(other_person)) = (v.admin_add, v.other_person.clone()) { Some(ModlogCombinedView::AdminAdd(AdminAddView { admin_add, @@ -690,14 +696,6 @@ mod tests { AdminBanForm, AdminBlockInstance, AdminBlockInstanceForm, - AdminPurgeComment, - AdminPurgeCommentForm, - AdminPurgeCommunity, - AdminPurgeCommunityForm, - AdminPurgePerson, - AdminPurgePersonForm, - AdminPurgePost, - AdminPurgePostForm, AdminRemoveCommunity, AdminRemoveCommunityForm, }, @@ -833,6 +831,9 @@ mod tests { }; AdminBlockInstance::create(pool, &form).await?; + /* + Temporarily disabled to speed up compilation + https://github.com/LemmyNet/lemmy/issues/6012 let form = AdminPurgeCommentForm { admin_person_id: data.timmy.id, post_id: data.post.id, @@ -858,6 +859,7 @@ mod tests { reason: "reason".to_string(), }; AdminPurgePost::create(pool, &form).await?; + */ let form = ModChangeCommunityVisibilityForm { mod_person_id: data.timmy.id, @@ -875,7 +877,7 @@ mod tests { ModChangeCommunityVisibility::create(pool, &form).await?; let modlog = ModlogCombinedQuery::default().list(pool).await?; - assert_eq!(8, modlog.len()); + assert_eq!(4, modlog.len()); if let ModlogCombinedView::ModChangeCommunityVisibility(v) = &modlog[0] { assert_eq!( @@ -905,6 +907,9 @@ mod tests { panic!("wrong type"); } + /* + Temporarily disabled to speed up compilation + https://github.com/LemmyNet/lemmy/issues/6012 if let ModlogCombinedView::AdminPurgePost(v) = &modlog[2] { assert_eq!(data.community.id, v.admin_purge_post.community_id); assert_eq!(data.community.id, v.community.id); @@ -944,9 +949,10 @@ mod tests { } else { panic!("wrong type"); } + */ // Make sure the report types are correct - if let ModlogCombinedView::AdminBlockInstance(v) = &modlog[6] { + if let ModlogCombinedView::AdminBlockInstance(v) = &modlog[2] { assert_eq!(data.instance.id, v.admin_block_instance.instance_id); assert_eq!(data.instance.id, v.instance.id); assert_eq!( @@ -957,7 +963,7 @@ mod tests { panic!("wrong type"); } - if let ModlogCombinedView::AdminAllowInstance(v) = &modlog[7] { + if let ModlogCombinedView::AdminAllowInstance(v) = &modlog[3] { assert_eq!(data.instance.id, v.admin_allow_instance.instance_id); assert_eq!(data.instance.id, v.instance.id); assert_eq!( @@ -976,7 +982,7 @@ mod tests { .list(pool) .await?; // Only one is jessica - assert_eq!(7, modlog_admin_filter.len()); + assert_eq!(3, modlog_admin_filter.len()); // Filter by community let modlog_community_filter = ModlogCombinedQuery { @@ -987,7 +993,7 @@ mod tests { .await?; // Should be 2, and not jessicas - assert_eq!(2, modlog_community_filter.len()); + assert_eq!(1, modlog_community_filter.len()); // Filter by type let modlog_type_filter = ModlogCombinedQuery { diff --git a/crates/db_views/modlog_combined/src/lib.rs b/crates/db_views/modlog_combined/src/lib.rs index 1fb32ca61..0f467b7f7 100644 --- a/crates/db_views/modlog_combined/src/lib.rs +++ b/crates/db_views/modlog_combined/src/lib.rs @@ -298,6 +298,9 @@ pub(crate) struct ModlogCombinedViewInternal { pub admin_allow_instance: Option, #[cfg_attr(feature = "full", diesel(embed))] pub admin_block_instance: Option, + /* + Temporarily disabled to speed up compilation + https://github.com/LemmyNet/lemmy/issues/6012 #[cfg_attr(feature = "full", diesel(embed))] pub admin_purge_comment: Option, #[cfg_attr(feature = "full", diesel(embed))] @@ -306,6 +309,7 @@ pub(crate) struct ModlogCombinedViewInternal { pub admin_purge_person: Option, #[cfg_attr(feature = "full", diesel(embed))] pub admin_purge_post: Option, + */ #[cfg_attr(feature = "full", diesel(embed))] pub admin_add: Option, #[cfg_attr(feature = "full", diesel(embed))] diff --git a/crates/db_views/person_content_combined/src/api.rs b/crates/db_views/person_content_combined/src/api.rs new file mode 100644 index 000000000..e791bbbb8 --- /dev/null +++ b/crates/db_views/person_content_combined/src/api.rs @@ -0,0 +1,50 @@ +use lemmy_db_schema::newtypes::PaginationCursor; +use lemmy_db_views_post::PostView; +use serde::{Deserialize, Serialize}; +use serde_with::skip_serializing_none; + +#[skip_serializing_none] +#[derive(Debug, Serialize, Deserialize, Clone, Default, PartialEq, Eq, Hash)] +#[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))] +#[cfg_attr(feature = "ts-rs", ts(optional_fields, export))] +/// Gets your hidden posts. +pub struct ListPersonHidden { + pub page_cursor: Option, + pub page_back: Option, + pub limit: Option, +} + +#[skip_serializing_none] +#[derive(Debug, Serialize, Deserialize, Clone)] +#[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))] +#[cfg_attr(feature = "ts-rs", ts(optional_fields, export))] +/// You hidden posts response. +pub struct ListPersonHiddenResponse { + pub hidden: Vec, + /// the pagination cursor to use to fetch the next page + pub next_page: Option, + pub prev_page: Option, +} + +#[skip_serializing_none] +#[derive(Debug, Serialize, Deserialize, Clone, Default, PartialEq, Eq, Hash)] +#[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))] +#[cfg_attr(feature = "ts-rs", ts(optional_fields, export))] +/// Gets your read posts. +pub struct ListPersonRead { + pub page_cursor: Option, + pub page_back: Option, + pub limit: Option, +} + +#[skip_serializing_none] +#[derive(Debug, Serialize, Deserialize, Clone)] +#[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))] +#[cfg_attr(feature = "ts-rs", ts(optional_fields, export))] +/// You read posts response. +pub struct ListPersonReadResponse { + pub read: Vec, + /// the pagination cursor to use to fetch the next page + pub next_page: Option, + pub prev_page: Option, +} diff --git a/crates/db_views/person_content_combined/src/lib.rs b/crates/db_views/person_content_combined/src/lib.rs index 512a35c87..de12d90ea 100644 --- a/crates/db_views/person_content_combined/src/lib.rs +++ b/crates/db_views/person_content_combined/src/lib.rs @@ -34,6 +34,7 @@ use { lemmy_db_views_local_user::LocalUserView, }; +pub mod api; #[cfg(feature = "full")] pub mod impls; diff --git a/crates/db_views/post/Cargo.toml b/crates/db_views/post/Cargo.toml index ccaf2015b..3a65e5274 100644 --- a/crates/db_views/post/Cargo.toml +++ b/crates/db_views/post/Cargo.toml @@ -23,14 +23,12 @@ full = [ "i-love-jesus", "lemmy_db_schema/full", "lemmy_db_schema_file/full", - "lemmy_db_views_community/full", "lemmy_db_views_vote/full", ] ts-rs = [ "dep:ts-rs", "lemmy_db_schema/ts-rs", "lemmy_db_schema_file/ts-rs", - "lemmy_db_views_community/ts-rs", "lemmy_db_views_vote/ts-rs", ] @@ -38,7 +36,6 @@ ts-rs = [ lemmy_db_schema = { workspace = true } lemmy_utils = { workspace = true, optional = true } lemmy_db_schema_file = { workspace = true } -lemmy_db_views_community = { workspace = true } lemmy_db_views_vote = { workspace = true } diesel = { workspace = true, optional = true } diesel-async = { workspace = true, optional = true } diff --git a/crates/db_views/post/src/api.rs b/crates/db_views/post/src/api.rs index be13d6759..1e74204a7 100644 --- a/crates/db_views/post/src/api.rs +++ b/crates/db_views/post/src/api.rs @@ -1,19 +1,9 @@ use crate::PostView; use lemmy_db_schema::{ - newtypes::{ - CommentId, - CommunityId, - DbUrl, - LanguageId, - MultiCommunityId, - PaginationCursor, - PostId, - TagId, - }, + newtypes::{CommunityId, DbUrl, LanguageId, MultiCommunityId, PaginationCursor, PostId, TagId}, PostFeatureType, }; use lemmy_db_schema_file::enums::{ListingType, PostNotificationsMode, PostSortType}; -use lemmy_db_views_community::CommunityView; use lemmy_db_views_vote::VoteView; use serde::{Deserialize, Serialize}; use serde_with::skip_serializing_none; @@ -113,29 +103,6 @@ pub struct UpdatePostNotifications { pub mode: PostNotificationsMode, } -#[skip_serializing_none] -#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq, Eq, Hash)] -#[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))] -#[cfg_attr(feature = "ts-rs", ts(optional_fields, export))] -// TODO this should be made into a tagged enum -/// Get a post. Needs either the post id, or comment_id. -pub struct GetPost { - pub id: Option, - pub comment_id: Option, -} - -#[skip_serializing_none] -#[derive(Debug, Serialize, Deserialize, Clone)] -#[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))] -#[cfg_attr(feature = "ts-rs", ts(optional_fields, export))] -/// The post response. -pub struct GetPostResponse { - pub post_view: PostView, - pub community_view: CommunityView, - /// A list of cross-posts, or other times / communities this link has been posted to. - pub cross_posts: Vec, -} - #[skip_serializing_none] #[derive(Serialize, Deserialize, Debug, Clone, Default, PartialEq, Eq, Hash)] #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))] diff --git a/crates/db_views/search_combined/src/api.rs b/crates/db_views/search_combined/src/api.rs new file mode 100644 index 000000000..90cd10366 --- /dev/null +++ b/crates/db_views/search_combined/src/api.rs @@ -0,0 +1,28 @@ +use lemmy_db_schema::newtypes::{CommentId, PostId}; +use lemmy_db_views_community::CommunityView; +use lemmy_db_views_post::PostView; +use serde::{Deserialize, Serialize}; +use serde_with::skip_serializing_none; + +#[skip_serializing_none] +#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq, Eq, Hash)] +#[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))] +#[cfg_attr(feature = "ts-rs", ts(optional_fields, export))] +// TODO this should be made into a tagged enum +/// Get a post. Needs either the post id, or comment_id. +pub struct GetPost { + pub id: Option, + pub comment_id: Option, +} + +#[skip_serializing_none] +#[derive(Debug, Serialize, Deserialize, Clone)] +#[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))] +#[cfg_attr(feature = "ts-rs", ts(optional_fields, export))] +/// The post response. +pub struct GetPostResponse { + pub post_view: PostView, + pub community_view: CommunityView, + /// A list of cross-posts, or other times / communities this link has been posted to. + pub cross_posts: Vec, +} diff --git a/crates/db_views/search_combined/src/lib.rs b/crates/db_views/search_combined/src/lib.rs index 9918c5659..a163d30a1 100644 --- a/crates/db_views/search_combined/src/lib.rs +++ b/crates/db_views/search_combined/src/lib.rs @@ -39,6 +39,7 @@ use { lemmy_db_views_local_user::LocalUserView, }; +pub mod api; #[cfg(feature = "full")] pub mod impls; diff --git a/crates/db_views/site/Cargo.toml b/crates/db_views/site/Cargo.toml index 84a234fc0..c3a10dd5d 100644 --- a/crates/db_views/site/Cargo.toml +++ b/crates/db_views/site/Cargo.toml @@ -23,7 +23,6 @@ full = [ "lemmy_db_schema/full", "lemmy_db_schema_file/full", "lemmy_db_views_person/full", - "lemmy_db_views_post/full", "lemmy_db_views_readable_federation_state/full", "extism", "extism-convert", @@ -37,7 +36,6 @@ ts-rs = [ "lemmy_db_views_community_moderator/ts-rs", "lemmy_db_views_local_user/ts-rs", "lemmy_db_views_person/ts-rs", - "lemmy_db_views_post/ts-rs", "lemmy_db_views_readable_federation_state/ts-rs", ] @@ -49,7 +47,6 @@ lemmy_db_views_community_follower = { workspace = true } lemmy_db_views_community_moderator = { workspace = true } lemmy_db_views_local_user = { workspace = true } lemmy_db_views_person = { workspace = true } -lemmy_db_views_post = { workspace = true } lemmy_db_views_readable_federation_state = { workspace = true } chrono = { workspace = true } diesel = { workspace = true, optional = true } diff --git a/crates/db_views/site/src/api.rs b/crates/db_views/site/src/api.rs index 2a5dae9e9..f0bb051ce 100644 --- a/crates/db_views/site/src/api.rs +++ b/crates/db_views/site/src/api.rs @@ -38,7 +38,6 @@ use lemmy_db_views_community_follower::CommunityFollowerView; use lemmy_db_views_community_moderator::CommunityModeratorView; use lemmy_db_views_local_user::LocalUserView; use lemmy_db_views_person::PersonView; -use lemmy_db_views_post::PostView; use lemmy_db_views_readable_federation_state::ReadableFederationState; use serde::{Deserialize, Serialize}; use serde_with::skip_serializing_none; @@ -584,52 +583,6 @@ pub struct VerifyEmail { pub token: String, } -#[skip_serializing_none] -#[derive(Debug, Serialize, Deserialize, Clone, Default, PartialEq, Eq, Hash)] -#[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))] -#[cfg_attr(feature = "ts-rs", ts(optional_fields, export))] -/// Gets your hidden posts. -pub struct ListPersonHidden { - pub page_cursor: Option, - pub page_back: Option, - pub limit: Option, -} - -#[skip_serializing_none] -#[derive(Debug, Serialize, Deserialize, Clone)] -#[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))] -#[cfg_attr(feature = "ts-rs", ts(optional_fields, export))] -/// You hidden posts response. -pub struct ListPersonHiddenResponse { - pub hidden: Vec, - /// the pagination cursor to use to fetch the next page - pub next_page: Option, - pub prev_page: Option, -} - -#[skip_serializing_none] -#[derive(Debug, Serialize, Deserialize, Clone, Default, PartialEq, Eq, Hash)] -#[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))] -#[cfg_attr(feature = "ts-rs", ts(optional_fields, export))] -/// Gets your read posts. -pub struct ListPersonRead { - pub page_cursor: Option, - pub page_back: Option, - pub limit: Option, -} - -#[skip_serializing_none] -#[derive(Debug, Serialize, Deserialize, Clone)] -#[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))] -#[cfg_attr(feature = "ts-rs", ts(optional_fields, export))] -/// You read posts response. -pub struct ListPersonReadResponse { - pub read: Vec, - /// the pagination cursor to use to fetch the next page - pub next_page: Option, - pub prev_page: Option, -} - #[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, Hash)] #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))] #[cfg_attr(feature = "ts-rs", ts(optional_fields, export))] diff --git a/crates/server/Cargo.toml b/crates/server/Cargo.toml new file mode 100644 index 000000000..07256af27 --- /dev/null +++ b/crates/server/Cargo.toml @@ -0,0 +1,49 @@ +[package] +name = "lemmy_server" +version.workspace = true +edition.workspace = true +description.workspace = true +license.workspace = true +homepage.workspace = true +documentation.workspace = true +repository.workspace = true +rust-version.workspace = true +publish = false +default-run = "lemmy_server" + +[lib] +doctest = false + +[lints] +workspace = true + +[features] +default = [] + +[dependencies] +lemmy_api = { workspace = true } +lemmy_api_routes = { workspace = true } +lemmy_apub = { workspace = true } +lemmy_apub_activities = { workspace = true } +lemmy_apub_objects = { workspace = true } +lemmy_utils = { workspace = true } +lemmy_db_schema = { workspace = true } +lemmy_db_schema_setup = { workspace = true } +lemmy_api_utils = { workspace = true } +lemmy_routes = { workspace = true } +lemmy_apub_send = { workspace = true } +lemmy_db_views_site = { workspace = true } +activitypub_federation = { workspace = true } +actix-web = { workspace = true } +tracing = { workspace = true } +tracing-actix-web = { workspace = true } +tracing-subscriber = { workspace = true } +reqwest-middleware = { workspace = true } +reqwest-tracing = { workspace = true } +serde_json = { workspace = true } +rustls = { workspace = true } +tokio.workspace = true +clap = { workspace = true } + +[target.'cfg(target_arch = "x86_64")'.dependencies] +mimalloc = "0.1.48" diff --git a/src/lib.rs b/crates/server/src/lib.rs similarity index 98% rename from src/lib.rs rename to crates/server/src/lib.rs index e6d5bb8bb..cdda118e5 100644 --- a/src/lib.rs +++ b/crates/server/src/lib.rs @@ -1,5 +1,3 @@ -pub mod api_routes; - use activitypub_federation::config::{FederationConfig, FederationMiddleware}; use actix_web::{ dev::{ServerHandle, ServiceResponse}, @@ -18,15 +16,15 @@ use lemmy_api_utils::{ utils::local_site_rate_limit_to_rate_limit_config, }; use lemmy_apub::{ - activities::{handle_outgoing_activities, match_outgoing_activities}, collections::fetch_community_collections, VerifyUrlData, FEDERATION_HTTP_FETCH_LIMIT, }; +use lemmy_apub_activities::{handle_outgoing_activities, match_outgoing_activities}; use lemmy_apub_objects::objects::{community::FETCH_COMMUNITY_COLLECTIONS, instance::ApubSite}; +use lemmy_apub_send::{Opts, SendManager}; use lemmy_db_schema::{source::secret::Secret, utils::build_db_pool}; use lemmy_db_views_site::SiteView; -use lemmy_federate::{Opts, SendManager}; use lemmy_routes::{ feeds, middleware::{ @@ -367,7 +365,7 @@ fn create_http_server( // The routes app - .configure(|cfg| api_routes::config(cfg, &rate_limit)) + .configure(|cfg| lemmy_api_routes::config(cfg, &rate_limit)) .configure(|cfg| { if site_view.local_site.federation_enabled { lemmy_apub::http::routes::config(cfg); diff --git a/src/main.rs b/crates/server/src/main.rs similarity index 100% rename from src/main.rs rename to crates/server/src/main.rs diff --git a/crates/utils/tests/test_errors_used.rs b/crates/utils/tests/test_errors_used.rs index bfd70bdad..723fd5321 100644 --- a/crates/utils/tests/test_errors_used.rs +++ b/crates/utils/tests/test_errors_used.rs @@ -17,8 +17,7 @@ fn test_errors_used() { .arg("-R") .arg("--exclude=error.rs") .arg(&search) - .arg("crates/") - .arg("src/"); + .arg("crates/"); let output = grep_all.output().unwrap(); let grep_all_out = std::str::from_utf8(&output.stdout).unwrap(); diff --git a/scripts/clean-workspace.sh b/scripts/clean-workspace.sh new file mode 100755 index 000000000..608fdfbd3 --- /dev/null +++ b/scripts/clean-workspace.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -e + +# Run `cargo clean -p` for each workspace member. This allows to accurately measure the time for +# an incremental build. +clear && cargo metadata --no-deps | jq .packages.[].name | sed 's/.*/-p &/' | xargs cargo clean