diff --git a/docker/travis/docker-compose.yml b/docker/travis/docker-compose.yml index 7314e495d..9aa7750c0 100644 --- a/docker/travis/docker-compose.yml +++ b/docker/travis/docker-compose.yml @@ -7,16 +7,20 @@ services: - "8540:8540" - "8550:8550" - "8560:8560" + - "8570:8570" + - "8580:8580" volumes: # Hack to make this work from both docker/federation/ and docker/federation-test/ - ../federation/nginx.conf:/etc/nginx/nginx.conf restart: on-failure depends_on: - - lemmy-alpha - pictrs + - iframely + - lemmy-alpha - lemmy-beta - lemmy-gamma - - iframely + - lemmy-delta + - lemmy-epsilon pictrs: restart: always @@ -34,7 +38,7 @@ services: - LEMMY_FRONT_END_DIR=/app/dist - LEMMY_FEDERATION__ENABLED=true - LEMMY_FEDERATION__TLS_ENABLED=false - - LEMMY_FEDERATION__ALLOWED_INSTANCES=lemmy-beta,lemmy-gamma + - LEMMY_FEDERATION__ALLOWED_INSTANCES=lemmy-beta,lemmy-gamma,lemmy-delta,lemmy-epsilon - LEMMY_PORT=8540 - LEMMY_SETUP__ADMIN_USERNAME=lemmy_alpha - LEMMY_SETUP__ADMIN_PASSWORD=lemmy @@ -64,7 +68,7 @@ services: - LEMMY_FRONT_END_DIR=/app/dist - LEMMY_FEDERATION__ENABLED=true - LEMMY_FEDERATION__TLS_ENABLED=false - - LEMMY_FEDERATION__ALLOWED_INSTANCES=lemmy-alpha,lemmy-gamma + - LEMMY_FEDERATION__ALLOWED_INSTANCES=lemmy-alpha,lemmy-gamma,lemmy-delta,lemmy-epsilon - LEMMY_PORT=8550 - LEMMY_SETUP__ADMIN_USERNAME=lemmy_beta - LEMMY_SETUP__ADMIN_PASSWORD=lemmy @@ -94,7 +98,7 @@ services: - LEMMY_FRONT_END_DIR=/app/dist - LEMMY_FEDERATION__ENABLED=true - LEMMY_FEDERATION__TLS_ENABLED=false - - LEMMY_FEDERATION__ALLOWED_INSTANCES=lemmy-alpha,lemmy-beta + - LEMMY_FEDERATION__ALLOWED_INSTANCES=lemmy-alpha,lemmy-beta,lemmy-delta,lemmy-epsilon - LEMMY_PORT=8560 - LEMMY_SETUP__ADMIN_USERNAME=lemmy_gamma - LEMMY_SETUP__ADMIN_PASSWORD=lemmy @@ -115,6 +119,68 @@ services: volumes: - ./volumes/postgres_gamma:/var/lib/postgresql/data + # An instance with only an allowlist for beta + lemmy-delta: + image: dessalines/lemmy:travis + environment: + - LEMMY_HOSTNAME=lemmy-delta:8570 + - LEMMY_DATABASE_URL=postgres://lemmy:password@postgres_delta:5432/lemmy + - LEMMY_JWT_SECRET=changeme + - LEMMY_FRONT_END_DIR=/app/dist + - LEMMY_FEDERATION__ENABLED=true + - LEMMY_FEDERATION__TLS_ENABLED=false + - LEMMY_FEDERATION__ALLOWED_INSTANCES=lemmy-beta + - LEMMY_PORT=8570 + - LEMMY_SETUP__ADMIN_USERNAME=lemmy_delta + - LEMMY_SETUP__ADMIN_PASSWORD=lemmy + - LEMMY_SETUP__SITE_NAME=lemmy-delta + - LEMMY_RATE_LIMIT__POST=99999 + - LEMMY_RATE_LIMIT__REGISTER=99999 + - LEMMY_CAPTCHA__ENABLED=false + - RUST_BACKTRACE=1 + - RUST_LOG=debug + depends_on: + - postgres_delta + postgres_delta: + image: postgres:12-alpine + environment: + - POSTGRES_USER=lemmy + - POSTGRES_PASSWORD=password + - POSTGRES_DB=lemmy + volumes: + - ./volumes/postgres_delta:/var/lib/postgresql/data + + # An instance who has a blocklist, with lemmy-alpha blocked + lemmy-epsilon: + image: dessalines/lemmy:travis + environment: + - LEMMY_HOSTNAME=lemmy-epsilon:8580 + - LEMMY_DATABASE_URL=postgres://lemmy:password@postgres_epsilon:5432/lemmy + - LEMMY_JWT_SECRET=changeme + - LEMMY_FRONT_END_DIR=/app/dist + - LEMMY_FEDERATION__ENABLED=true + - LEMMY_FEDERATION__TLS_ENABLED=false + - LEMMY_FEDERATION__BLOCKED_INSTANCES=lemmy-alpha + - LEMMY_PORT=8580 + - LEMMY_SETUP__ADMIN_USERNAME=lemmy_epsilon + - LEMMY_SETUP__ADMIN_PASSWORD=lemmy + - LEMMY_SETUP__SITE_NAME=lemmy-epsilon + - LEMMY_RATE_LIMIT__POST=99999 + - LEMMY_RATE_LIMIT__REGISTER=99999 + - LEMMY_CAPTCHA__ENABLED=false + - RUST_BACKTRACE=1 + - RUST_LOG=debug + depends_on: + - postgres_epsilon + postgres_epsilon: + image: postgres:12-alpine + environment: + - POSTGRES_USER=lemmy + - POSTGRES_PASSWORD=password + - POSTGRES_DB=lemmy + volumes: + - ./volumes/postgres_epsilon:/var/lib/postgresql/data + iframely: image: dogbin/iframely:latest volumes: diff --git a/docker/travis/run-tests.sh b/docker/travis/run-tests.sh index f09b73c2b..658ffc0e4 100755 --- a/docker/travis/run-tests.sh +++ b/docker/travis/run-tests.sh @@ -5,8 +5,8 @@ set -e sudo docker-compose down sudo rm -rf volumes -mkdir -p volumes/pictrs_{alpha,beta,gamma} -sudo chown -R 991:991 volumes/pictrs_{alpha,beta,gamma} +mkdir -p volumes/pictrs_{alpha,beta,gamma,delta,epsilon} +sudo chown -R 991:991 volumes/pictrs_{alpha,beta,gamma,delta,epsilon} sudo docker build ../../ --file ../prod/Dockerfile --tag dessalines/lemmy:travis @@ -17,6 +17,8 @@ echo "Waiting for Lemmy to start..." while [[ "$(curl -s -o /dev/null -w '%{http_code}' 'localhost:8540/api/v1/site')" != "200" ]]; do sleep 1; done while [[ "$(curl -s -o /dev/null -w '%{http_code}' 'localhost:8550/api/v1/site')" != "200" ]]; do sleep 1; done while [[ "$(curl -s -o /dev/null -w '%{http_code}' 'localhost:8560/api/v1/site')" != "200" ]]; do sleep 1; done +while [[ "$(curl -s -o /dev/null -w '%{http_code}' 'localhost:8570/api/v1/site')" != "200" ]]; do sleep 1; done +while [[ "$(curl -s -o /dev/null -w '%{http_code}' 'localhost:8580/api/v1/site')" != "200" ]]; do sleep 1; done yarn yarn api-test popd diff --git a/server/src/api/comment.rs b/server/src/api/comment.rs index 1e7028c44..24055d4d7 100644 --- a/server/src/api/comment.rs +++ b/server/src/api/comment.rs @@ -1,6 +1,7 @@ use crate::{ api::{ check_community_ban, + get_post, get_user_from_jwt, get_user_from_jwt_opt, is_mod_or_admin, @@ -151,10 +152,7 @@ impl Perform for CreateComment { // Check for a community ban let post_id = data.post_id; - let post = match blocking(context.pool(), move |conn| Post::read(conn, post_id)).await? { - Ok(post) => post, - Err(_e) => return Err(APIError::err("couldnt_find_post").into()), - }; + let post = get_post(post_id, context.pool()).await?; check_community_ban(user.id, post.community_id, context.pool()).await?; @@ -286,10 +284,7 @@ impl Perform for EditComment { // Do the mentions / recipients let post_id = orig_comment.post_id; - let post = match blocking(context.pool(), move |conn| Post::read(conn, post_id)).await? { - Ok(post) => post, - Err(_e) => return Err(APIError::err("couldnt_find_post").into()), - }; + let post = get_post(post_id, context.pool()).await?; let updated_comment_content = updated_comment.content.to_owned(); let mentions = scrape_text_for_mentions(&updated_comment_content); @@ -385,10 +380,7 @@ impl Perform for DeleteComment { // Build the recipients let post_id = comment_view.post_id; - let post = match blocking(context.pool(), move |conn| Post::read(conn, post_id)).await? { - Ok(post) => post, - Err(_e) => return Err(APIError::err("couldnt_find_post").into()), - }; + let post = get_post(post_id, context.pool()).await?; let mentions = vec![]; let recipient_ids = send_local_notifs( mentions, @@ -485,10 +477,7 @@ impl Perform for RemoveComment { // Build the recipients let post_id = comment_view.post_id; - let post = match blocking(context.pool(), move |conn| Post::read(conn, post_id)).await? { - Ok(post) => post, - Err(_e) => return Err(APIError::err("couldnt_find_post").into()), - }; + let post = get_post(post_id, context.pool()).await?; let mentions = vec![]; let recipient_ids = send_local_notifs( mentions, @@ -667,10 +656,7 @@ impl Perform for CreateCommentLike { .await??; let post_id = orig_comment.post_id; - let post = match blocking(context.pool(), move |conn| Post::read(conn, post_id)).await? { - Ok(post) => post, - Err(_e) => return Err(APIError::err("couldnt_find_post").into()), - }; + let post = get_post(post_id, context.pool()).await?; check_community_ban(user.id, post.community_id, context.pool()).await?; let comment_id = data.comment_id; diff --git a/server/src/api/mod.rs b/server/src/api/mod.rs index 6fed9d05d..c64707f94 100644 --- a/server/src/api/mod.rs +++ b/server/src/api/mod.rs @@ -11,6 +11,7 @@ use lemmy_db::{ community::*, community_view::*, moderator::*, + post::Post, site::*, user::*, user_view::*, @@ -73,6 +74,13 @@ pub async fn is_admin(pool: &DbPool, user_id: i32) -> Result<(), LemmyError> { Ok(()) } +pub(in crate::api) async fn get_post(post_id: i32, pool: &DbPool) -> Result { + match blocking(pool, move |conn| Post::read(conn, post_id)).await? { + Ok(post) => Ok(post), + Err(_e) => Err(APIError::err("couldnt_find_post").into()), + } +} + pub(in crate::api) async fn get_user_from_jwt( jwt: &str, pool: &DbPool,