From d4f52b78b38463cd4bff1f189eda66ef9c227dd5 Mon Sep 17 00:00:00 2001 From: Dessalines Date: Wed, 21 Jun 2023 15:46:32 -0400 Subject: [PATCH 1/5] Trying to fix version again. (#3246) --- docker/Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index f28c3ac96..429379031 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -20,7 +20,8 @@ RUN --mount=type=cache,target=/app/target \ # Release mode build RUN \ if [ "$RUST_RELEASE_MODE" = "release" ] ; then \ - cargo build --target ${CARGO_BUILD_TARGET} --release \ + echo "pub const VERSION: &str = \"$(git describe --tag)\";" > "crates/utils/src/version.rs" \ + && cargo build --target ${CARGO_BUILD_TARGET} --release \ && cp ./target/$CARGO_BUILD_TARGET/$RUST_RELEASE_MODE/lemmy_server /app/lemmy_server; \ fi From 289052f26178213e50e940648d1f91a6623d772e Mon Sep 17 00:00:00 2001 From: Dessalines Date: Wed, 21 Jun 2023 16:02:42 -0400 Subject: [PATCH 2/5] Version 0.18.0-rc.5 --- Cargo.lock | 22 +++++++++++----------- Cargo.toml | 22 +++++++++++----------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index dd4aaf2d8..f769fa501 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2583,7 +2583,7 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "lemmy_api" -version = "0.18.0-rc.4" +version = "0.18.0-rc.5" dependencies = [ "actix-web", "anyhow", @@ -2606,7 +2606,7 @@ dependencies = [ [[package]] name = "lemmy_api_common" -version = "0.18.0-rc.4" +version = "0.18.0-rc.5" dependencies = [ "actix-rt", "actix-web", @@ -2635,7 +2635,7 @@ dependencies = [ [[package]] name = "lemmy_api_crud" -version = "0.18.0-rc.4" +version = "0.18.0-rc.5" dependencies = [ "activitypub_federation", "actix-web", @@ -2654,7 +2654,7 @@ dependencies = [ [[package]] name = "lemmy_apub" -version = "0.18.0-rc.4" +version = "0.18.0-rc.5" dependencies = [ "activitypub_federation", "actix-rt", @@ -2692,7 +2692,7 @@ dependencies = [ [[package]] name = "lemmy_db_schema" -version = "0.18.0-rc.4" +version = "0.18.0-rc.5" dependencies = [ "activitypub_federation", "async-trait", @@ -2724,7 +2724,7 @@ dependencies = [ [[package]] name = "lemmy_db_views" -version = "0.18.0-rc.4" +version = "0.18.0-rc.5" dependencies = [ "diesel", "diesel-async", @@ -2741,7 +2741,7 @@ dependencies = [ [[package]] name = "lemmy_db_views_actor" -version = "0.18.0-rc.4" +version = "0.18.0-rc.5" dependencies = [ "diesel", "diesel-async", @@ -2754,7 +2754,7 @@ dependencies = [ [[package]] name = "lemmy_db_views_moderator" -version = "0.18.0-rc.4" +version = "0.18.0-rc.5" dependencies = [ "diesel", "diesel-async", @@ -2766,7 +2766,7 @@ dependencies = [ [[package]] name = "lemmy_routes" -version = "0.18.0-rc.4" +version = "0.18.0-rc.5" dependencies = [ "activitypub_federation", "actix-web", @@ -2791,7 +2791,7 @@ dependencies = [ [[package]] name = "lemmy_server" -version = "0.18.0-rc.4" +version = "0.18.0-rc.5" dependencies = [ "activitypub_federation", "actix-cors", @@ -2828,7 +2828,7 @@ dependencies = [ [[package]] name = "lemmy_utils" -version = "0.18.0-rc.4" +version = "0.18.0-rc.5" dependencies = [ "actix-web", "anyhow", diff --git a/Cargo.toml b/Cargo.toml index af5139523..14398c5ff 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [workspace.package] -version = "0.18.0-rc.4" +version = "0.18.0-rc.5" edition = "2021" description = "A link aggregator for the fediverse" license = "AGPL-3.0" @@ -49,16 +49,16 @@ members = [ ] [workspace.dependencies] -lemmy_api = { version = "=0.18.0-rc.4", path = "./crates/api" } -lemmy_api_crud = { version = "=0.18.0-rc.4", path = "./crates/api_crud" } -lemmy_apub = { version = "=0.18.0-rc.4", path = "./crates/apub" } -lemmy_utils = { version = "=0.18.0-rc.4", path = "./crates/utils" } -lemmy_db_schema = { version = "=0.18.0-rc.4", path = "./crates/db_schema" } -lemmy_api_common = { version = "=0.18.0-rc.4", path = "./crates/api_common" } -lemmy_routes = { version = "=0.18.0-rc.4", path = "./crates/routes" } -lemmy_db_views = { version = "=0.18.0-rc.4", path = "./crates/db_views" } -lemmy_db_views_actor = { version = "=0.18.0-rc.4", path = "./crates/db_views_actor" } -lemmy_db_views_moderator = { version = "=0.18.0-rc.4", path = "./crates/db_views_moderator" } +lemmy_api = { version = "=0.18.0-rc.5", path = "./crates/api" } +lemmy_api_crud = { version = "=0.18.0-rc.5", path = "./crates/api_crud" } +lemmy_apub = { version = "=0.18.0-rc.5", path = "./crates/apub" } +lemmy_utils = { version = "=0.18.0-rc.5", path = "./crates/utils" } +lemmy_db_schema = { version = "=0.18.0-rc.5", path = "./crates/db_schema" } +lemmy_api_common = { version = "=0.18.0-rc.5", path = "./crates/api_common" } +lemmy_routes = { version = "=0.18.0-rc.5", path = "./crates/routes" } +lemmy_db_views = { version = "=0.18.0-rc.5", path = "./crates/db_views" } +lemmy_db_views_actor = { version = "=0.18.0-rc.5", path = "./crates/db_views_actor" } +lemmy_db_views_moderator = { version = "=0.18.0-rc.5", path = "./crates/db_views_moderator" } activitypub_federation = { version = "0.4.1", default-features = false, features = ["actix-web"] } diesel = "2.1.0" diesel_migrations = "2.1.0" From da3e3b6d8a6684d58eecef91c675a696005f8330 Mon Sep 17 00:00:00 2001 From: Scott <97430840+scme0@users.noreply.github.com> Date: Thu, 22 Jun 2023 05:44:12 +0930 Subject: [PATCH 3/5] Ensure site can only either be a private instance or federated when creating or editing site (#3237) * Add site visibility validation * Fix formatting * linter changes * Update error message to match existing check * Remove existing check --------- Co-authored-by: Scott Merchant <97430840+scottmerchant@users.noreply.github.com> --- crates/api_crud/src/site/create.rs | 15 ++++++++++---- crates/api_crud/src/site/update.rs | 25 ++++++++++------------ crates/utils/src/utils/validation.rs | 31 ++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+), 18 deletions(-) diff --git a/crates/api_crud/src/site/create.rs b/crates/api_crud/src/site/create.rs index af8540669..2a51309a4 100644 --- a/crates/api_crud/src/site/create.rs +++ b/crates/api_crud/src/site/create.rs @@ -29,7 +29,7 @@ use lemmy_utils::{ error::LemmyError, utils::{ slurs::{check_slurs, check_slurs_opt}, - validation::is_valid_body_field, + validation::{check_site_visibility_valid, is_valid_body_field}, }, }; use url::Url; @@ -50,6 +50,16 @@ impl PerformCrud for CreateSite { let local_user_view = local_user_view_from_jwt(&data.auth, context).await?; + // Make sure user is an admin + is_admin(&local_user_view)?; + + check_site_visibility_valid( + local_site.private_instance, + local_site.federation_enabled, + &data.private_instance, + &data.federation_enabled, + )?; + let sidebar = diesel_option_overwrite(&data.sidebar); let description = diesel_option_overwrite(&data.description); let icon = diesel_option_overwrite_to_url(&data.icon)?; @@ -59,9 +69,6 @@ impl PerformCrud for CreateSite { check_slurs(&data.name, &slur_regex)?; check_slurs_opt(&data.description, &slur_regex)?; - // Make sure user is an admin - is_admin(&local_user_view)?; - if let Some(Some(desc)) = &description { site_description_length_check(desc)?; } diff --git a/crates/api_crud/src/site/update.rs b/crates/api_crud/src/site/update.rs index ac1544ffc..fadde0a0b 100644 --- a/crates/api_crud/src/site/update.rs +++ b/crates/api_crud/src/site/update.rs @@ -30,7 +30,10 @@ use lemmy_db_schema::{ use lemmy_db_views::structs::SiteView; use lemmy_utils::{ error::LemmyError, - utils::{slurs::check_slurs_opt, validation::is_valid_body_field}, + utils::{ + slurs::check_slurs_opt, + validation::{check_site_visibility_valid, is_valid_body_field}, + }, }; #[async_trait::async_trait(?Send)] @@ -48,6 +51,13 @@ impl PerformCrud for EditSite { // Make sure user is an admin is_admin(&local_user_view)?; + check_site_visibility_valid( + local_site.private_instance, + local_site.federation_enabled, + &data.private_instance, + &data.federation_enabled, + )?; + let slur_regex = local_site_to_slur_regex(&local_site); check_slurs_opt(&data.name, &slur_regex)?; @@ -76,19 +86,6 @@ impl PerformCrud for EditSite { } } - let enabled_private_instance_with_federation = data.private_instance == Some(true) - && data - .federation_enabled - .unwrap_or(local_site.federation_enabled); - let enabled_federation_with_private_instance = data.federation_enabled == Some(true) - && data.private_instance.unwrap_or(local_site.private_instance); - - if enabled_private_instance_with_federation || enabled_federation_with_private_instance { - return Err(LemmyError::from_message( - "cant_enable_private_instance_and_federation_together", - )); - } - if let Some(discussion_languages) = data.discussion_languages.clone() { SiteLanguage::update(context.pool(), discussion_languages.clone(), &site).await?; } diff --git a/crates/utils/src/utils/validation.rs b/crates/utils/src/utils/validation.rs index c4feb467b..41103332c 100644 --- a/crates/utils/src/utils/validation.rs +++ b/crates/utils/src/utils/validation.rs @@ -149,10 +149,29 @@ pub fn build_totp_2fa(site_name: &str, username: &str, secret: &str) -> Result, + new_federation_enabled: &Option, +) -> LemmyResult<()> { + let private_instance = new_private_instance.unwrap_or(current_private_instance); + let federation_enabled = new_federation_enabled.unwrap_or(current_federation_enabled); + + if private_instance && federation_enabled { + return Err(LemmyError::from_message( + "cant_enable_private_instance_and_federation_together", + )); + } + + Ok(()) +} + #[cfg(test)] mod tests { use super::build_totp_2fa; use crate::utils::validation::{ + check_site_visibility_valid, clean_url_params, generate_totp_2fa_secret, is_valid_actor_name, @@ -226,4 +245,16 @@ mod tests { let totp = build_totp_2fa("lemmy", "my_name", &generated_secret); assert!(totp.is_ok()); } + + #[test] + fn test_check_site_visibility_valid() { + assert!(check_site_visibility_valid(true, true, &None, &None).is_err()); + assert!(check_site_visibility_valid(true, false, &None, &Some(true)).is_err()); + assert!(check_site_visibility_valid(false, true, &Some(true), &None).is_err()); + assert!(check_site_visibility_valid(false, false, &Some(true), &Some(true)).is_err()); + assert!(check_site_visibility_valid(true, false, &None, &None).is_ok()); + assert!(check_site_visibility_valid(false, true, &None, &None).is_ok()); + assert!(check_site_visibility_valid(false, false, &Some(true), &None).is_ok()); + assert!(check_site_visibility_valid(false, false, &None, &Some(true)).is_ok()); + } } From c9d1fec117264543e591f1dd12d2eb2077f63af7 Mon Sep 17 00:00:00 2001 From: Bnyro <82752168+Bnyro@users.noreply.github.com> Date: Wed, 21 Jun 2023 22:15:10 +0200 Subject: [PATCH 4/5] docs: Add Lemoa to lemmy projects section (#3247) --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 724e8d315..30248e46a 100644 --- a/README.md +++ b/README.md @@ -122,6 +122,7 @@ Each Lemmy server can set its own moderation policy; appointing site-wide admins - [lemmyBB - A Lemmy forum UI based on phpBB](https://github.com/LemmyNet/lemmyBB) - [Jerboa - A native Android app made by Lemmy's developers](https://github.com/dessalines/jerboa) - [Mlem - A Lemmy client for iOS](https://github.com/buresdv/Mlem) +- [Lemoa - A Gtk client for Lemmy on Linux](https://github.com/lemmy-gtk/lemoa) ### Libraries From ef3544bac476552313b22864da99635e803cdbb4 Mon Sep 17 00:00:00 2001 From: kartikynwa Date: Thu, 22 Jun 2023 02:02:06 +0530 Subject: [PATCH 5/5] Put /admin/purge routes before /admin routes (#3244) --- src/api_routes_http.rs | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/api_routes_http.rs b/src/api_routes_http.rs index faf08938b..a2abfa690 100644 --- a/src/api_routes_http.rs +++ b/src/api_routes_http.rs @@ -335,16 +335,15 @@ pub fn config(cfg: &mut web::ServiceConfig, rate_limit: &RateLimitCell) { .route( "/registration_application/approve", web::put().to(route_post::), + ) + .service( + web::scope("/purge") + .route("/person", web::post().to(route_post::)) + .route("/community", web::post().to(route_post::)) + .route("/post", web::post().to(route_post::)) + .route("/comment", web::post().to(route_post::)), ), ) - .service( - web::scope("/admin/purge") - .wrap(rate_limit.message()) - .route("/person", web::post().to(route_post::)) - .route("/community", web::post().to(route_post::)) - .route("/post", web::post().to(route_post::)) - .route("/comment", web::post().to(route_post::)), - ) .service( web::scope("/custom_emoji") .wrap(rate_limit.message())