summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.dockerignore8
-rw-r--r--.gitignore14
-rw-r--r--README.md2
-rwxr-xr-xdocker/dev/test_deploy.sh15
-rwxr-xr-xdocker/federation-test/run-tests.sh23
-rw-r--r--docker/federation/Dockerfile17
-rw-r--r--docker/federation/docker-compose.yml121
-rw-r--r--docker/federation/nginx.conf125
-rwxr-xr-xdocker/federation/run-federation-test.bash28
-rw-r--r--docs/src/about_guide.md2
-rw-r--r--docs/src/contributing_federation_development.md31
-rw-r--r--server/.rustfmt.toml5
-rw-r--r--server/Cargo.lock2762
-rw-r--r--server/Cargo.toml27
-rw-r--r--server/config/config.hjson4
-rw-r--r--server/config/defaults.hjson14
-rw-r--r--server/migrations/2020-03-26-192410_add_activitypub_tables/down.sql16
-rw-r--r--server/migrations/2020-03-26-192410_add_activitypub_tables/up.sql36
-rw-r--r--server/migrations/2020-04-03-194936_add_activitypub_for_posts_and_comments/down.sql7
-rw-r--r--server/migrations/2020-04-03-194936_add_activitypub_for_posts_and_comments/up.sql14
-rw-r--r--server/migrations/2020-04-07-135912_add_user_community_apub_constraints/down.sql36
-rw-r--r--server/migrations/2020-04-07-135912_add_user_community_apub_constraints/up.sql38
-rw-r--r--server/migrations/2020-04-14-163701_update_views_for_activitypub/down.sql440
-rw-r--r--server/migrations/2020-04-14-163701_update_views_for_activitypub/up.sql497
-rw-r--r--server/migrations/2020-04-21-123957_remove_unique_user_constraints/down.sql4
-rw-r--r--server/migrations/2020-04-21-123957_remove_unique_user_constraints/up.sql2
-rw-r--r--server/migrations/2020-05-05-210233_add_activitypub_for_private_messages/down.sql21
-rw-r--r--server/migrations/2020-05-05-210233_add_activitypub_for_private_messages/up.sql25
-rw-r--r--server/src/api/comment.rs343
-rw-r--r--server/src/api/community.rs149
-rw-r--r--server/src/api/mod.rs44
-rw-r--r--server/src/api/post.rs100
-rw-r--r--server/src/api/site.rs82
-rw-r--r--server/src/api/user.rs240
-rw-r--r--server/src/apub/activities.rs73
-rw-r--r--server/src/apub/comment.rs510
-rw-r--r--server/src/apub/community.rs471
-rw-r--r--server/src/apub/community_inbox.rs123
-rw-r--r--server/src/apub/extensions/group_extensions.rs40
-rw-r--r--server/src/apub/extensions/mod.rs3
-rw-r--r--server/src/apub/extensions/page_extension.rs11
-rw-r--r--server/src/apub/extensions/signatures.rs136
-rw-r--r--server/src/apub/fetcher.rs327
-rw-r--r--server/src/apub/mod.rs348
-rw-r--r--server/src/apub/post.rs530
-rw-r--r--server/src/apub/private_message.rs211
-rw-r--r--server/src/apub/shared_inbox.rs1615
-rw-r--r--server/src/apub/user.rs261
-rw-r--r--server/src/apub/user_inbox.rs312
-rw-r--r--server/src/db/activity.rs149
-rw-r--r--server/src/db/category.rs11
-rw-r--r--server/src/db/code_migrations.rs192
-rw-r--r--server/src/db/comment.rs84
-rw-r--r--server/src/db/comment_view.rs77
-rw-r--r--server/src/db/community.rs63
-rw-r--r--server/src/db/community_view.rs44
-rw-r--r--server/src/db/mod.rs8
-rw-r--r--server/src/db/moderator.rs56
-rw-r--r--server/src/db/moderator_views.rs4
-rw-r--r--server/src/db/password_reset_request.rs19
-rw-r--r--server/src/db/post.rs92
-rw-r--r--server/src/db/post_view.rs61
-rw-r--r--server/src/db/private_message.rs64
-rw-r--r--server/src/db/private_message_view.rs23
-rw-r--r--server/src/db/site.rs5
-rw-r--r--server/src/db/site_view.rs3
-rw-r--r--server/src/db/user.rs74
-rw-r--r--server/src/db/user_mention.rs42
-rw-r--r--server/src/db/user_mention_view.rs23
-rw-r--r--server/src/db/user_view.rs17
-rw-r--r--server/src/lib.rs109
-rw-r--r--server/src/main.rs22
-rw-r--r--server/src/rate_limit/mod.rs23
-rw-r--r--server/src/rate_limit/rate_limiter.rs7
-rw-r--r--server/src/routes/api.rs23
-rw-r--r--server/src/routes/federation.rs57
-rw-r--r--server/src/routes/feeds.rs47
-rw-r--r--server/src/routes/index.rs4
-rw-r--r--server/src/routes/mod.rs35
-rw-r--r--server/src/routes/nodeinfo.rs85
-rw-r--r--server/src/routes/webfinger.rs131
-rw-r--r--server/src/routes/websocket.rs14
-rw-r--r--server/src/schema.rs31
-rw-r--r--server/src/settings.rs13
-rw-r--r--server/src/websocket/mod.rs12
-rw-r--r--server/src/websocket/server.rs19
-rw-r--r--ui/.eslintignore1
-rw-r--r--ui/.gitignore3
-rw-r--r--ui/jest.config.js10
-rw-r--r--ui/package.json8
-rw-r--r--ui/src/api_tests/api.spec.ts1487
-rw-r--r--ui/src/components/admin-settings.tsx6
-rw-r--r--ui/src/components/comment-node.tsx3
-rw-r--r--ui/src/components/communities.tsx5
-rw-r--r--ui/src/components/community-link.tsx38
-rw-r--r--ui/src/components/community.tsx5
-rw-r--r--ui/src/components/main.tsx17
-rw-r--r--ui/src/components/post-form.tsx7
-rw-r--r--ui/src/components/post-listing.tsx47
-rw-r--r--ui/src/components/private-message-form.tsx3
-rw-r--r--ui/src/components/search.tsx39
-rw-r--r--ui/src/components/sidebar.tsx25
-rw-r--r--ui/src/components/user-listing.tsx21
-rw-r--r--ui/src/components/user.tsx7
-rw-r--r--ui/src/env.ts2
-rw-r--r--ui/src/interfaces.ts34
-rw-r--r--ui/src/utils.ts35
-rw-r--r--ui/yarn.lock1892
108 files changed, 13307 insertions, 2394 deletions
diff --git a/.dockerignore b/.dockerignore
index a29cd2ec..255caf67 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -1,6 +1,12 @@
+# build folders and similar which are not needed for the docker build
ui/node_modules
-ui/dist
server/target
docker/dev/volumes
docker/federation/volumes
+docker/federation-test/volumes
.git
+ansible
+
+# exceptions, needed for federation-test build
+
+!server/target/debug/lemmy_server
diff --git a/.gitignore b/.gitignore
index 9f7fa1e3..236a729e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,10 +1,18 @@
+# local ansible configuration
ansible/inventory
ansible/inventory_dev
ansible/passwords/
+
+# docker build files
docker/lemmy_mine.hjson
docker/dev/env_deploy.sh
+docker/federation/volumes
+docker/federation-test/volumes
+docker/dev/volumes
+
+# local build files
build/
-.idea/
ui/src/translations
-docker/dev/volumes
-docker/federation-test/volumes
+
+# ide config
+.idea/
diff --git a/README.md b/README.md
index 09b2540f..41ba4809 100644
--- a/README.md
+++ b/README.md
@@ -73,7 +73,7 @@ Each lemmy server can set its own moderation policy; appointing site-wide admins
- Full vote scores `(+/-)` like old reddit.
- Themes, including light, dark, and solarized.
- Emojis with autocomplete support. Start typing `:`
- - User tagging using `@`, Community tagging using `#`.
+ - User tagging using `@`, Community tagging using `!`.
- Integrated image uploading in both posts and comments.
- A post can consist of a title and any combination of self text, a URL, or nothing else.
- Notifications, on comment replies and when you're tagged.
diff --git a/docker/dev/test_deploy.sh b/docker/dev/test_deploy.sh
index ce85f60c..c2ecc0c8 100755
--- a/docker/dev/test_deploy.sh
+++ b/docker/dev/test_deploy.sh
@@ -1,15 +1,18 @@
-#!/bin/sh
+#!/bin/bash
set -e
+BRANCH=$1
+
+git checkout $BRANCH
+
export COMPOSE_DOCKER_CLI_BUILD=1
export DOCKER_BUILDKIT=1
# Rebuilding dev docker
-docker-compose build
-docker tag dev_lemmy:latest dessalines/lemmy:test
-docker push dessalines/lemmy:test
+sudo docker build . -f "docker/dev/Dockerfile" -t "dessalines/lemmy:$BRANCH"
+sudo docker push "dessalines/lemmy:$BRANCH"
# Run the playbook
-pushd ../../../lemmy-ansible
-ansible-playbook -i test playbooks/site.yml --vault-password-file vault_pass
+pushd ../lemmy-ansible
+ansible-playbook -i test playbooks/site.yml
popd
diff --git a/docker/federation-test/run-tests.sh b/docker/federation-test/run-tests.sh
new file mode 100755
index 00000000..b2d319dd
--- /dev/null
+++ b/docker/federation-test/run-tests.sh
@@ -0,0 +1,23 @@
+#!/bin/bash
+set -e
+
+pushd ../../server/
+cargo build
+popd
+
+sudo docker build ../../ --file ../federation/Dockerfile --tag lemmy-federation:latest
+
+sudo docker-compose --file ../federation/docker-compose.yml --project-directory . up -d
+
+pushd ../../ui
+yarn
+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
+yarn api-test || true
+popd
+
+sudo docker-compose --file ../federation/docker-compose.yml --project-directory . down
+
+sudo rm -r volumes/
diff --git a/docker/federation/Dockerfile b/docker/federation/Dockerfile
new file mode 100644
index 00000000..ec7bf2d2
--- /dev/null
+++ b/docker/federation/Dockerfile
@@ -0,0 +1,17 @@
+FROM ekidd/rust-musl-builder:1.42.0-openssl11
+
+USER root
+RUN mkdir /app/dist/documentation/ -p \
+ && addgroup --gid 1001 lemmy \
+ && adduser --disabled-password --shell /bin/sh -u 1001 --ingroup lemmy lemmy
+
+# Copy resources
+COPY server/config/defaults.hjson /app/config/defaults.hjson
+COPY ui/dist /app/dist
+COPY server/target/debug/lemmy_server /app/lemmy
+
+RUN chown lemmy:lemmy /app/ -R
+USER lemmy
+EXPOSE 8536
+WORKDIR /app
+CMD ["/app/lemmy"]
diff --git a/docker/federation/docker-compose.yml b/docker/federation/docker-compose.yml
new file mode 100644
index 00000000..900f7c9c
--- /dev/null
+++ b/docker/federation/docker-compose.yml
@@ -0,0 +1,121 @@
+version: '3.3'
+
+services:
+ nginx:
+ image: nginx:1.17-alpine
+ ports:
+ - "8540:8540"
+ - "8550:8550"
+ - "8560:8560"
+ volumes:
+ # Hack to make this work from both docker/federation/ and docker/federation-test/
+ - ../federation/nginx.conf:/etc/nginx/nginx.conf
+ depends_on:
+ - lemmy_alpha
+ - pictrs_alpha
+ - lemmy_beta
+ - pictrs_beta
+ - lemmy_gamma
+ - pictrs_gamma
+ - iframely
+
+ lemmy_alpha:
+ image: lemmy-federation:latest
+ environment:
+ - LEMMY_HOSTNAME=lemmy_alpha:8540
+ - LEMMY_DATABASE_URL=postgres://lemmy:password@postgres_alpha: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_gamma
+ - LEMMY_PORT=8540
+ - LEMMY_SETUP__ADMIN_USERNAME=lemmy_alpha
+ - LEMMY_SETUP__ADMIN_PASSWORD=lemmy
+ - LEMMY_SETUP__SITE_NAME=lemmy_alpha
+ - RUST_BACKTRACE=1