diff options
-rw-r--r-- | docs/src/contributing_websocket_http_api.md | 1 | ||||
-rw-r--r-- | server/Cargo.lock | 4 | ||||
-rw-r--r-- | server/Cargo.toml | 2 | ||||
-rw-r--r-- | server/lemmy_db/src/community_view.rs | 2 | ||||
-rw-r--r-- | server/lemmy_db/src/post_view.rs | 12 | ||||
-rw-r--r-- | server/lemmy_db/src/user_view.rs | 5 | ||||
-rw-r--r-- | server/lemmy_utils/src/lib.rs | 4 | ||||
-rw-r--r-- | server/src/api/post.rs | 11 | ||||
-rw-r--r-- | server/src/routes/federation.rs | 22 |
9 files changed, 52 insertions, 11 deletions
diff --git a/docs/src/contributing_websocket_http_api.md b/docs/src/contributing_websocket_http_api.md index 567f674c..6ed25b98 100644 --- a/docs/src/contributing_websocket_http_api.md +++ b/docs/src/contributing_websocket_http_api.md @@ -1149,6 +1149,7 @@ Post listing types are `All, Subscribed, Community` page: Option<i64>, limit: Option<i64>, community_id: Option<i32>, + community_name: Option<String>, auth: Option<String> } } diff --git a/server/Cargo.lock b/server/Cargo.lock index 62438593..d90b9679 100644 --- a/server/Cargo.lock +++ b/server/Cargo.lock @@ -1422,9 +1422,9 @@ dependencies = [ [[package]] name = "http-signature-normalization-actix" -version = "0.4.0-alpha.0" +version = "0.4.0-alpha.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09afff6987c7edbed101d1cddd2185786fb0af0dd9c06b654aca73a0a763680f" +checksum = "131fc982391a6b37847888b568cbe0e9cd302f1b0015f4f6f4a50234bebd049c" dependencies = [ "actix-http", "actix-web", diff --git a/server/Cargo.toml b/server/Cargo.toml index a5e5a583..2aa3c139 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -44,7 +44,7 @@ url = { version = "2.1.1", features = ["serde"] } percent-encoding = "2.1.0" openssl = "0.10" http = "0.2.1" -http-signature-normalization-actix = { version = "0.4.0-alpha.0", default-features = false, features = ["sha-2"] } +http-signature-normalization-actix = { version = "0.4.0-alpha.2", default-features = false, features = ["sha-2"] } base64 = "0.12.1" tokio = "0.2.21" futures = "0.3.5" diff --git a/server/lemmy_db/src/community_view.rs b/server/lemmy_db/src/community_view.rs index b465ddab..5c6bd81a 100644 --- a/server/lemmy_db/src/community_view.rs +++ b/server/lemmy_db/src/community_view.rs @@ -299,6 +299,7 @@ impl CommunityModeratorView { use super::community_view::community_moderator_view::dsl::*; community_moderator_view .filter(community_id.eq(from_community_id)) + .order_by(published) .load::<Self>(conn) } @@ -306,6 +307,7 @@ impl CommunityModeratorView { use super::community_view::community_moderator_view::dsl::*; community_moderator_view .filter(user_id.eq(from_user_id)) + .order_by(published) .load::<Self>(conn) } } diff --git a/server/lemmy_db/src/post_view.rs b/server/lemmy_db/src/post_view.rs index b55359ea..3e9f8737 100644 --- a/server/lemmy_db/src/post_view.rs +++ b/server/lemmy_db/src/post_view.rs @@ -158,6 +158,7 @@ pub struct PostQueryBuilder<'a> { my_user_id: Option<i32>, for_creator_id: Option<i32>, for_community_id: Option<i32>, + for_community_name: Option<String>, search_term: Option<String>, url_search: Option<String>, show_nsfw: bool, @@ -181,6 +182,7 @@ impl<'a> PostQueryBuilder<'a> { my_user_id: None, for_creator_id: None, for_community_id: None, + for_community_name: None, search_term: None, url_search: None, show_nsfw: true, @@ -206,6 +208,11 @@ impl<'a> PostQueryBuilder<'a> { self } + pub fn for_community_name<T: MaybeOptional<String>>(mut self, for_community_name: T) -> Self { + self.for_community_name = for_community_name.get_optional(); + self + } + pub fn for_creator_id<T: MaybeOptional<i32>>(mut self, for_creator_id: T) -> Self { self.for_creator_id = for_creator_id.get_optional(); self @@ -265,6 +272,11 @@ impl<'a> PostQueryBuilder<'a> { query = query.then_order_by(stickied.desc()); } + if let Some(for_community_name) = self.for_community_name { + query = query.filter(community_name.eq(for_community_name)); + query = query.then_order_by(stickied.desc()); + } + if let Some(url_search) = self.url_search { query = query.filter(url.eq(url_search)); } diff --git a/server/lemmy_db/src/user_view.rs b/server/lemmy_db/src/user_view.rs index 84feba38..f2ac4742 100644 --- a/server/lemmy_db/src/user_view.rs +++ b/server/lemmy_db/src/user_view.rs @@ -157,7 +157,10 @@ impl UserView { pub fn admins(conn: &PgConnection) -> Result<Vec<Self>, Error> { use super::user_view::user_fast::dsl::*; - user_fast.filter(admin.eq(true)).load::<Self>(conn) + user_fast + .filter(admin.eq(true)) + .order_by(published) + .load::<Self>(conn) } pub fn banned(conn: &PgConnection) -> Result<Vec<Self>, Error> { diff --git a/server/lemmy_utils/src/lib.rs b/server/lemmy_utils/src/lib.rs index bbee8500..d88335e2 100644 --- a/server/lemmy_utils/src/lib.rs +++ b/server/lemmy_utils/src/lib.rs @@ -167,8 +167,8 @@ mod tests { use crate::{ is_email_regex, is_valid_community_name, - is_valid_username, is_valid_post_title, + is_valid_username, remove_slurs, scrape_text_for_mentions, slur_check, @@ -216,8 +216,6 @@ mod tests { assert!(!is_valid_post_title("\n \n \n \n ")); // tabs/spaces/newlines } - - #[test] fn test_slur_filter() { let test = diff --git a/server/src/api/post.rs b/server/src/api/post.rs index cbdb976c..6710a2cd 100644 --- a/server/src/api/post.rs +++ b/server/src/api/post.rs @@ -28,7 +28,13 @@ use lemmy_db::{ Saveable, SortType, }; -use lemmy_utils::{is_valid_post_title, make_apub_endpoint, slur_check, slurs_vec_to_str, EndpointType}; +use lemmy_utils::{ + is_valid_post_title, + make_apub_endpoint, + slur_check, + slurs_vec_to_str, + EndpointType, +}; use serde::{Deserialize, Serialize}; use std::str::FromStr; @@ -70,6 +76,7 @@ pub struct GetPosts { page: Option<i64>, limit: Option<i64>, pub community_id: Option<i32>, + pub community_name: Option<String>, auth: Option<String>, } @@ -369,12 +376,14 @@ impl Perform for Oper<GetPosts> { let page = data.page; let limit = data.limit; let community_id = data.community_id; + let community_name = data.community_name.to_owned(); let posts = match blocking(pool, move |conn| { PostQueryBuilder::create(conn) .listing_type(type_) .sort(&sort) .show_nsfw(show_nsfw) .for_community_id(community_id) + .for_community_name(community_name) .my_user_id(user_id) .page(page) .limit(limit) diff --git a/server/src/routes/federation.rs b/server/src/routes/federation.rs index ebab139a..cd4c4780 100644 --- a/server/src/routes/federation.rs +++ b/server/src/routes/federation.rs @@ -9,11 +9,15 @@ use crate::apub::{ APUB_JSON_CONTENT_TYPE, }; use actix_web::*; +use http_signature_normalization_actix::digest::middleware::VerifyDigest; use lemmy_utils::settings::Settings; +use sha2::{Digest, Sha256}; pub fn config(cfg: &mut web::ServiceConfig) { if Settings::get().federation.enabled { println!("federation enabled, host is {}", Settings::get().hostname); + let digest_verifier = VerifyDigest::new(Sha256::new()); + cfg .service( web::scope("/") @@ -36,8 +40,20 @@ pub fn config(cfg: &mut web::ServiceConfig) { .route("/comment/{comment_id}", web::get().to(get_apub_comment)), ) // Inboxes dont work with the header guard for some reason. - .route("/c/{community_name}/inbox", web::post().to(community_inbox)) - .route("/u/{user_name}/inbox", web::post().to(user_inbox)) - .route("/inbox", web::post().to(shared_inbox)); + .service( + web::resource("/c/{community_name}/inbox") + .wrap(digest_verifier.clone()) + .route(web::post().to(community_inbox)), + ) + .service( + web::resource("/u/{user_name}/inbox") + .wrap(digest_verifier.clone()) + .route(web::post().to(user_inbox)), + ) + .service( + web::resource("/inbox") + .wrap(digest_verifier) + .route(web::post().to(shared_inbox)), + ); } } |