summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docs/src/contributing_websocket_http_api.md1
-rw-r--r--server/Cargo.lock4
-rw-r--r--server/Cargo.toml2
-rw-r--r--server/lemmy_db/src/community_view.rs2
-rw-r--r--server/lemmy_db/src/post_view.rs12
-rw-r--r--server/lemmy_db/src/user_view.rs5
-rw-r--r--server/lemmy_utils/src/lib.rs4
-rw-r--r--server/src/api/post.rs11
-rw-r--r--server/src/routes/federation.rs22
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)),
+ );
}
}