summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDessalines <tyhou13@gmx.com>2020-04-02 15:11:11 -0400
committerDessalines <tyhou13@gmx.com>2020-04-02 15:11:11 -0400
commit31f835db86eb78765191c8beaf16adf3f9fd0f50 (patch)
treef716182866beb6ce03b6ab19f26a96b2fe1b11d5
parent5ca466117d63ec479bc886b2cff389aa1f0918dc (diff)
parent9ea104b165020c37eb9c4ea7f50a25a2730623e4 (diff)
Merge branch 'master' into federation
-rw-r--r--.gitignore1
-rw-r--r--.travis.yml1
-rw-r--r--ansible/lemmy_dev.yml50
-rw-r--r--ansible/templates/docker-compose.yml6
-rw-r--r--ansible/templates/nginx.conf14
-rw-r--r--ansible/uninstall.yml16
-rw-r--r--docker/lemmy.hjson11
-rw-r--r--docs/src/SUMMARY.md1
-rw-r--r--docs/src/about_goals.md1
-rw-r--r--docs/src/administration_install_ansible.md9
-rw-r--r--docs/src/administration_install_docker.md18
-rw-r--r--docs/src/contributing_federation_development.md37
-rw-r--r--server/Cargo.lock251
-rw-r--r--server/Cargo.toml3
-rw-r--r--server/config/defaults.hjson11
-rw-r--r--server/src/api/site.rs48
-rw-r--r--server/src/api/user.rs14
-rw-r--r--server/src/apub/community.rs2
-rw-r--r--server/src/apub/puller.rs6
-rw-r--r--server/src/db/mod.rs1
-rw-r--r--server/src/lib.rs6
-rw-r--r--server/src/routes/feeds.rs205
-rw-r--r--server/src/routes/nodeinfo.rs1
-rw-r--r--server/src/settings.rs10
-rw-r--r--ui/src/components/navbar.tsx5
-rw-r--r--ui/src/components/post-listing.tsx8
-rw-r--r--ui/src/components/symbols.tsx6
-rw-r--r--ui/src/utils.ts4
-rw-r--r--ui/translations/ka.json2
-rw-r--r--ui/translations/pl.json256
-rw-r--r--ui/translations/pt_BR.json3
31 files changed, 763 insertions, 244 deletions
diff --git a/.gitignore b/.gitignore
index 92377b4b..5e221b03 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,7 +2,6 @@
ansible/inventory
ansible/inventory_dev
ansible/passwords/
-ansible/vars/
# docker build files
docker/lemmy_mine.hjson
diff --git a/.travis.yml b/.travis.yml
index d765ecb4..602a8613 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -12,7 +12,6 @@ before_cache:
- rm -rfv target/debug/build/lemmy_server-*
- rm -rfv target/debug/deps/lemmy_server-*
- rm -rfv target/debug/lemmy_server.d
- - cargo clean
before_script:
- psql -c "create user lemmy with password 'password' superuser;" -U postgres
- psql -c 'create database lemmy with owner lemmy;' -U postgres
diff --git a/ansible/lemmy_dev.yml b/ansible/lemmy_dev.yml
index 1d8e40ae..e9b8364f 100644
--- a/ansible/lemmy_dev.yml
+++ b/ansible/lemmy_dev.yml
@@ -16,32 +16,6 @@
- setup: # gather facts
tasks:
- # TODO: this task is running on all hosts at the same time so there is a race condition
- - name: xxx
- shell: |
- mkdir -p "vars/{{ inventory_hostname }}/"
- if [ ! -f "vars/{{ inventory_hostname }}/port_counter" ]; then
- if [ -f "vars/max_port_counter" ]; then
- MAX_PORT=$(cat vars/max_port_counter)
- else
- MAX_PORT=8000
- fi
- OUR_PORT=$(expr $MAX_PORT + 10)
- echo $OUR_PORT > "vars/{{ inventory_hostname }}/port_counter"
- echo $OUR_PORT > "vars/max_port_counter"
- fi
- cat "vars/{{ inventory_hostname }}/port_counter"
- args:
- executable: /bin/bash
- delegate_to: localhost
- register: lemmy_port
-
- - set_fact: "lemmy_port={{ lemmy_port.stdout_lines[0] }}"
- - set_fact: "pictshare_port={{ lemmy_port|int + 1 }}"
- - set_fact: "iframely_port={{ lemmy_port|int + 2 }}"
- - debug:
- msg: "lemmy_port={{ lemmy_port }} pictshare_port={{pictshare_port}} iframely_port={{iframely_port}}"
-
- name: install dependencies
apt:
pkg: ['nginx', 'docker-compose', 'docker.io', 'certbot', 'python-certbot-nginx']
@@ -51,29 +25,25 @@
args:
creates: '/etc/letsencrypt/live/{{domain}}/privkey.pem'
- # TODO: need to use different path per domain
- name: create lemmy folder
file: path={{item.path}} state=directory
with_items:
- - { path: '/lemmy/{{ domain }}/' }
- - { path: '/lemmy/{{ domain }}/volumes/' }
- - { path: '/var/cache/lemmy/{{ domain }}/' }
+ - { path: '/lemmy/' }
+ - { path: '/lemmy/volumes/' }
- block:
- name: add template files
template: src={{item.src}} dest={{item.dest}} mode={{item.mode}}
with_items:
- - { src: 'templates/docker-compose.yml', dest: '/lemmy/{{domain}}/docker-compose.yml', mode: '0600' }
- - { src: 'templates/nginx.conf', dest: '/etc/nginx/sites-enabled/lemmy-{{ domain }}.conf', mode: '0644' }
- - { src: '../docker/iframely.config.local.js', dest: '/lemmy/{{ domain }}/iframely.config.local.js', mode: '0600' }
+ - { src: 'templates/docker-compose.yml', dest: '/lemmy/docker-compose.yml', mode: '0600' }
+ - { src: 'templates/nginx.conf', dest: '/etc/nginx/sites-enabled/lemmy.conf', mode: '0644' }
+ - { src: '../docker/iframely.config.local.js', dest: '/lemmy/iframely.config.local.js', mode: '0600' }
- name: add config file (only during initial setup)
- template: src='templates/config.hjson' dest='/lemmy/{{domain}}/lemmy.hjson' mode='0600' force='no' owner='1000' group='1000'
+ template: src='templates/config.hjson' dest='/lemmy/lemmy.hjson' mode='0600' force='no' owner='1000' group='1000'
vars:
- # TODO: these paths are changed, need to move the files
- # TODO: not sure what to call the local var folder, its not mentioned in the ansible docs
- postgres_password: "{{ lookup('password', 'vars/{{ inventory_hostname }}/postgres_password chars=ascii_letters,digits') }}"
- jwt_password: "{{ lookup('password', 'vars/{{ inventory_hostname }}/jwt_password chars=ascii_letters,digits') }}"
+ postgres_password: "{{ lookup('password', 'passwords/{{ inventory_hostname }}/postgres chars=ascii_letters,digits') }}"
+ jwt_password: "{{ lookup('password', 'passwords/{{ inventory_hostname }}/jwt chars=ascii_letters,digits') }}"
- name: build the dev docker image
local_action: shell cd .. && sudo docker build . -f docker/dev/Dockerfile -t lemmy:dev
@@ -115,7 +85,7 @@
# be a problem for testing
- name: start docker-compose
docker_compose:
- project_src: "/lemmy/{{ domain }}/"
+ project_src: /lemmy/
state: present
recreate: always
ignore_errors: yes
@@ -126,6 +96,6 @@
- name: certbot renewal cronjob
cron:
special_time=daily
- name=certbot-renew-lemmy-{{ domain }}
+ name=certbot-renew-lemmy
user=root
job="certbot certonly --nginx -d '{{ domain }}' --deploy-hook 'nginx -s reload'"
diff --git a/ansible/templates/docker-compose.yml b/ansible/templates/docker-compose.yml
index d6afd253..a4d54f6d 100644
--- a/ansible/templates/docker-compose.yml
+++ b/ansible/templates/docker-compose.yml
@@ -4,7 +4,7 @@ services:
lemmy:
image: {{ lemmy_docker_image }}
ports:
- - "127.0.0.1:{{ lemmy_port }}:8536"
+ - "127.0.0.1:8536:8536"
restart: always
environment:
- RUST_LOG=error
@@ -28,7 +28,7 @@ services:
pictshare:
image: shtripok/pictshare:latest
ports:
- - "127.0.0.1:{{ pictshare_port }}:80"
+ - "127.0.0.1:8537:80"
volumes:
- ./volumes/pictshare:/usr/share/nginx/html/data
restart: always
@@ -36,7 +36,7 @@ services:
iframely:
image: dogbin/iframely:latest
ports:
- - "127.0.0.1:{{ iframely_port }}:80"
+ - "127.0.0.1:8061:80"
volumes:
- ./iframely.config.local.js:/iframely/config.local.js:ro
restart: always
diff --git a/ansible/templates/nginx.conf b/ansible/templates/nginx.conf
index 003720bc..04e5a643 100644
--- a/ansible/templates/nginx.conf
+++ b/ansible/templates/nginx.conf
@@ -1,4 +1,4 @@
-proxy_cache_path /var/cache/lemmy/{{ domain }} levels=1:2 keys_zone=lemmy_frontend_cache_{{ domain }}:10m max_size=100m use_temp_path=off;
+proxy_cache_path /var/cache/lemmy_frontend levels=1:2 keys_zone=lemmy_frontend_cache:10m max_size=100m use_temp_path=off;
server {
listen 80;
@@ -52,7 +52,7 @@ server {
client_max_body_size 50M;
location / {
- proxy_pass http://0.0.0.0:{{ lemmy_port }};
+ proxy_pass http://0.0.0.0:8536;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
@@ -63,7 +63,7 @@ server {
proxy_set_header Connection "upgrade";
# Proxy Cache
- proxy_cache lemmy_frontend_cache_{{ domain }};
+ proxy_cache lemmy_frontend_cache;
proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
proxy_cache_revalidate on;
proxy_cache_lock on;
@@ -71,7 +71,7 @@ server {
}
location /pictshare/ {
- proxy_pass http://0.0.0.0:{{ pictshare_port }}/;
+ proxy_pass http://0.0.0.0:8537/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
@@ -82,7 +82,7 @@ server {
}
location /iframely/ {
- proxy_pass http://0.0.0.0:{{ iframely_port }}/;
+ proxy_pass http://0.0.0.0:8061/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
@@ -98,6 +98,6 @@ map $remote_addr $remote_addr_anon {
::1 $remote_addr;
default 0.0.0.0;
}
-log_format main_{{ domain }} '$remote_addr_anon - $remote_user [$time_local] "$request" '
+log_format main '$remote_addr_anon - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" "$http_user_agent"';
-access_log /var/log/nginx/access.log main_{{ domain }};
+access_log /var/log/nginx/access.log main;
diff --git a/ansible/uninstall.yml b/ansible/uninstall.yml
index 08d5316c..252c5bd1 100644
--- a/ansible/uninstall.yml
+++ b/ansible/uninstall.yml
@@ -22,14 +22,24 @@
- name: stop docker-compose
docker_compose:
- project_src: /lemmy/{{domain}}/
+ project_src: /lemmy/
state: absent
- name: delete data
file: path={{item.path}} state=absent
with_items:
- - { path: '/lemmy/{{domain}}/' }
- - { path: '/etc/nginx/sites-enabled/lemmy-{{ domain }}.conf' }
+ - { path: '/lemmy/' }
+ - { path: '/etc/nginx/sites-enabled/lemmy.conf' }
+
+ - name: Remove a volume
+ docker_volume: name={{item.name}} state=absent
+ with_items:
+ - { name: 'lemmy_lemmy_db' }
+ - { name: 'lemmy_lemmy_pictshare' }
+
+ - name: delete entire ecloud folder
+ file: path='/mnt/repo-base/' state=absent
+ when: delete_certs|bool
- name: remove certbot cronjob
cron:
diff --git a/docker/lemmy.hjson b/docker/lemmy.hjson
index 5a6d1ff1..b61ea826 100644
--- a/docker/lemmy.hjson
+++ b/docker/lemmy.hjson
@@ -41,7 +41,16 @@
# interval length for registration limit
register_per_second: 3600
}
-# # email sending configuration
+# # optional: parameters for automatic configuration of new instance (only used at first start)
+# setup: {
+# # username for the admin user
+# admin_username: "lemmy"
+# # password for the admin user
+# admin_password: "lemmy"
+# # name of the site (can be changed later)
+# site_name: "Lemmy Test"
+# }
+# # optional: email sending configuration
# email: {
# # hostname of the smtp server
# smtp_server: ""
diff --git a/docs/src/SUMMARY.md b/docs/src/SUMMARY.md
index 10a6153e..70c423c7 100644
--- a/docs/src/SUMMARY.md
+++ b/docs/src/SUMMARY.md
@@ -13,6 +13,7 @@
- [Contributing](contributing.md)
- [Docker Development](contributing_docker_development.md)
- [Local Development](contributing_local_development.md)
+ - [Federation Development](contributing_federation_development.md)
- [Websocket/HTTP API](contributing_websocket_http_api.md)
- [ActivityPub API Outline](contributing_apub_api_outline.md)
- [Theming Guide](contributing_theming.md)
diff --git a/docs/src/about_goals.md b/docs/src/about_goals.md
index b78c7818..caa6948a 100644
--- a/docs/src/about_goals.md
+++ b/docs/src/about_goals.md
@@ -50,3 +50,4 @@
- [Federation.md](https://github.com/dariusk/gathio/blob/7fc93dbe9d4d99457a0e85c6c532112f415b7af2/FEDERATION.md)
- [Activitypub implementers guide](https://socialhub.activitypub.rocks/t/draft-guide-for-new-activitypub-implementers/479)
- [Data storage questions](https://socialhub.activitypub.rocks/t/data-storage-questions/579/3)
+- [Activitypub as it has been understood](https://flak.tedunangst.com/post/ActivityPub-as-it-has-been-understood)
diff --git a/docs/src/administration_install_ansible.md b/docs/src/administration_install_ansible.md
index 875dae6a..bf5e6749 100644
--- a/docs/src/administration_install_ansible.md
+++ b/docs/src/administration_install_ansible.md
@@ -1,5 +1,7 @@
# Ansible Installation
+This is the same as the [Docker installation](administration_install_docker.md), except that Ansible handles all of it automatically. It also does some extra things like setting up TLS and email for your Lemmy instance.
+
First, you need to [install Ansible on your local computer](https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html) (e.g. using `sudo apt install ansible`) or the equivalent for you platform.
Then run the following commands on your local computer:
@@ -11,3 +13,10 @@ cp inventory.example inventory
nano inventory # enter your server, domain, contact email
ansible-playbook lemmy.yml --become
```
+
+To update to a new version, just run the following in your local Lemmy repo:
+```bash
+git pull origin master
+cd ansible
+ansible-playbook lemmy.yml --become
+``` \ No newline at end of file
diff --git a/docs/src/administration_install_docker.md b/docs/src/administration_install_docker.md
index 99204983..391299b3 100644
--- a/docs/src/administration_install_docker.md
+++ b/docs/src/administration_install_docker.md
@@ -1,29 +1,33 @@
# Docker Installation
-Make sure you have both docker and docker-compose(>=`1.24.0`) installed:
+Make sure you have both docker and docker-compose(>=`1.24.0`) installed. On Ubuntu, just run `apt install docker-compose docker.io`. Next,
```bash
-mkdir lemmy/
-cd lemmy/
+# create a folder for the lemmy files. the location doesnt matter, you can put this anywhere you want
+mkdir /lemmy
+cd /lemmy
+# download default config files
wget https://raw.githubusercontent.com/dessalines/lemmy/master/docker/prod/docker-compose.yml
wget https://raw.githubusercontent.com/dessalines/lemmy/master/docker/lemmy.hjson
wget https://raw.githubusercontent.com/dessalines/lemmy/master/docker/iframely.config.local.js
-# Edit lemmy.hjson, and docker-compose.yml to do more configuration (like adding a custom password)
docker-compose up -d
```
-and go to http://localhost:8536.
+After this, have a look at the [config file](administration_configuration.md) named `lemmy.hjson`, and adjust it, in particular the hostname.
-[A sample nginx config](/ansible/templates/nginx.conf) (Note: Avatar / Image uploading won't work without this), could be setup with:
+To make Lemmy available outside the server, you need to setup a reverse proxy, like Nginx. [A sample nginx config](/ansible/templates/nginx.conf), could be setup with:
```bash
wget https://raw.githubusercontent.com/dessalines/lemmy/master/ansible/templates/nginx.conf
# Replace the {{ vars }}
sudo mv nginx.conf /etc/nginx/sites-enabled/lemmy.conf
```
+
+You will also need to setup TLS, for example with [Let's Encrypt](https://letsencrypt.org/). After this you need to restart Nginx to reload the config.
+
## Updating
-To update to the newest version, run:
+To update to the newest version, you can manually change the version in `docker-compose.yml`. Alternatively, fetch the latest version from our git repo:
```bash
wget https://raw.githubusercontent.com/dessalines/lemmy/master/docker/prod/docker-compose.yml
diff --git a/docs/src/contributing_federation_development.md b/docs/src/contributing_federation_development.md
new file mode 100644
index 00000000..13a047d0
--- /dev/null
+++ b/docs/src/contributing_federation_development.md
@@ -0,0 +1,37 @@
+# Federation Development
+
+## Setup
+
+If you don't have a local clone of the Lemmy repo yet, just run the following command:
+
+```bash
+git clone https://yerbamate.dev/nutomic/lemmy.git -b federation
+```
+
+If you already have the Lemmy repo cloned, you need to add a new remote:
+```bash
+git remote add federation https://yerbamate.dev/nutomic/lemmy.git
+git checkout federation
+git pull federation federation
+```
+
+## Running
+
+You need to have the following packages installed, the Docker service needs to be running.
+
+- docker
+- docker-compose
+- cargo
+- yarn
+
+Then run the following
+```bash
+cd dev/federation-test
+./run-federation-test.bash
+```
+
+After the build is finished and the docker-compose setup is running, open [127.0.0.1:8540](http://127.0.0.1:8540) and
+[127.0.0.1:8541](http://127.0.0.1:8541) in your browser to use the test instances. You can login as admin with
+username `lemmy` and password `lemmy`, or create new accounts.
+
+Please get in touch if you want to contribute to this, so we can coordinate things and avoid duplicate work. \ No newline at end of file
diff --git a/server/Cargo.lock b/server/Cargo.lock
index 78e7ee1e..ceb09b75 100644
--- a/server/Cargo.lock
+++ b/server/Cargo.lock
@@ -2,9 +2,9 @@
# It is not intended for manual editing.
[[package]]
name = "activitystreams"
-version = "0.5.0-alpha.11"
+version = "0.5.0-alpha.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f0fb876395ae7a1dd1c7d7de38f2cdb583918db16b46ee5b75d2e9bf7af1ef9f"
+checksum = "e7173513c9d586a1157f375835777e3b50498b6b7aab4411a7098b455ba995f0"
dependencies = [
"activitystreams-derive",
"chrono",
@@ -17,9 +17,9 @@ dependencies = [
[[package]]
name = "activitystreams-derive"
-version = "0.5.0-alpha.4"
+version = "0.5.0-alpha.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c2bc640808dceb2efac81e6bcb77a7f4e2e76af7fb60e88f966b48123b625d2f"
+checksum = "c7ff4a2be3b67d763e78794f622ef2d53da077521229774837f61963c4067b36"
dependencies = [
"proc-macro2",
"quote",
@@ -46,7 +46,7 @@ dependencies = [
"pin-project",
"smallvec",
"tokio",
- "tokio-util",
+ "tokio-util 0.2.0",
"trust-dns-proto",
"trust-dns-resolver",
]
@@ -63,7 +63,7 @@ dependencies = [
"futures-sink",
"log",
"tokio",
- "tokio-util",
+ "tokio-util 0.2.0",
]
[[package]]
@@ -379,6 +379,15 @@ dependencies = [
]
[[package]]
+name = "ansi_term"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
+dependencies = [
+ "winapi 0.3.8",
+]
+
+[[package]]
name = "arc-swap"
version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -401,9 +410,9 @@ checksum = "71938f30533e4d95a6d17aa530939da3842c2ab6f4f84b9dae68447e4129f74a"
[[package]]
name = "async-trait"
-version = "0.1.26"
+version = "0.1.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "21a03abb7c9b93ae229356151a083d26218c0358866a2a59d4280c856e9482e6"
+checksum = "bab5c215748dc1ad11a145359b1067107ae0f8ca5e99844fa64067ed5bf198e3"
dependencies = [
"proc-macro2",
"quote",
@@ -621,9 +630,9 @@ checksum = "130aac562c0dd69c56b3b1cc8ffd2e17be31d0b6c25b61c96b76231aa23e39e1"
[[package]]
name = "bytestring"
-version = "0.1.4"
+version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fc267467f58ef6cc8874064c62a0423eb0d099362c8a23edd1c6d044f46eead4"
+checksum = "fc7c05fa5172da78a62d9949d662d2ac89d4cc7355d7b49adee5163f1fb3f363"
dependencies = [
"bytes",
]
@@ -653,6 +662,21 @@ dependencies = [
]
[[package]]
+name = "clap"
+version = "2.33.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags",
+ "strsim 0.8.0",
+ "textwrap",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
name = "cloudabi"
version = "0.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -662,6 +686,23 @@ dependencies = [
]
[[package]]
+name = "comrak"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e17058cc536cf290563e88787d7b9e6030ce4742943017cc2ffb71f88034021c"
+dependencies = [
+ "clap",
+ "entities",
+ "lazy_static 1.4.0",
+ "pest",
+ "pest_derive",
+ "regex 1.3.6",
+ "twoway",
+ "typed-arena",
+ "unicode_categories",
+]
+
+[[package]]
name = "config"
version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1000,6 +1041,12 @@ dependencies = [
]
[[package]]
+name = "entities"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5320ae4c3782150d900b79807611a59a99fc9a1d61d686faafc24b93fc8d7ca"
+
+[[package]]
name = "enum-as-inner"
version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1238,9 +1285,9 @@ dependencies = [
[[package]]
name = "h2"
-version = "0.2.3"
+version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7938e6aa2a31df4e21f224dc84704bd31c089a6d1355c535b03667371cccc843"
+checksum = "377038bf3c89d18d6ca1431e7a5027194fbd724ca10592b9487ede5e8e144f42"
dependencies = [
"bytes",
"fnv",
@@ -1252,7 +1299,7 @@ dependencies = [
"log",
"slab",
"tokio",
- "tokio-util",
+ "tokio-util 0.3.1",
]
[[package]]
@@ -1266,9 +1313,9 @@ dependencies = [
[[package]]
name = "hermit-abi"
-version = "0.1.8"
+version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1010591b26bbfe835e9faeabeb11866061cc7dcebffd56ad7d0942d0e61aefd8"
+checksum = "725cf19794cf90aa94e65050cb4191ff5d8fa87a498383774c47b332e3af952e"
dependencies = [
"libc",
]
@@ -1483,6 +1530,7 @@ dependencies = [
"actix-web-actors",
"bcrypt",
"chrono",
+ "comrak",
"config",
"diesel",
"diesel_migrations",
@@ -1626,6 +1674,12 @@ dependencies = [
]
[[package]]
+name = "maplit"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
+
+[[package]]
name = "match_cfg"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1932,6 +1986,49 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
[[package]]
+name = "pest"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53"
+dependencies = [
+ "ucd-trie",
+]
+
+[[package]]
+name = "pest_derive"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0"
+dependencies = [
+ "pest",
+ "pest_generator",
+]
+
+[[package]]
+name = "pest_generator"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99b8db626e31e5b81787b9783425769681b347011cc59471e33ea46d2ea0cf55"
+dependencies = [
+ "pest",
+ "pest_meta",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "pest_meta"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54be6e404f5317079812fc8f9f5279de376d8856929e21c184ecf6bbd692a11d"
+dependencies = [
+ "maplit",
+ "pest",
+ "sha-1",
+]
+
+[[package]]
name = "pin-project"
version = "0.4.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1986,9 +2083,9 @@ dependencies = [
[[package]]
name = "proc-macro-hack"
-version = "0.5.14"
+version = "0.5.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fcfdefadc3d57ca21cf17990a28ef4c0f7c61383a28cb7604cf4a18e6ede1420"
+checksum = "0d659fe7c6d27f25e9d80a1a094c223f5246f6a6596453e09d7229bf42750b63"
[[package]]
name = "proc-macro-nested"
@@ -1998,9 +2095,9 @@ checksum = "8e946095f9d3ed29ec38de908c22f95d9ac008e424c7bcae54c75a79c527c694"
[[package]]
name = "proc-macro2"
-version = "1.0.9"
+version = "1.0.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6c09721c6781493a2a492a96b5a5bf19b65917fe6728884e7c44dd0c60ca3435"
+checksum = "df246d292ff63439fea9bc8c0a270bed0e390d5ebd4db4ba15aba81111b5abe3"
dependencies = [
"unicode-xid",
]
@@ -2363,21 +2460,22 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
[[package]]
name = "security-framework"
-version = "0.4.1"
+version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "97bbedbe81904398b6ebb054b3e912f99d55807125790f3198ac990d98def5b0"
+checksum = "572dfa3a0785509e7a44b5b4bebcf94d41ba34e9ed9eb9df722545c3b3c4144a"
dependencies = [
"bitflags",
"core-foundation",
"core-foundation-sys",
+ "libc",
"security-framework-sys",
]
[[package]]
name = "security-framework-sys"
-version = "0.4.1"
+version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "06fd2f23e31ef68dd2328cc383bd493142e46107a3a0e24f7d734e3f3b80fe4c"
+checksum = "8ddb15a5fec93b7021b8a9e96009c5d8d51c15673569f7c0f6b7204e5b7b404f"
dependencies = [
"core-foundation-sys",
"libc",
@@ -2496,6 +2594,18 @@ dependencies = [
]
[[package]]
+name = "sha-1"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df"
+dependencies = [
+ "block-buffer",
+ "digest",
+ "fake-simd",
+ "opaque-debug",
+]
+
+[[package]]
name = "sha1"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2560,9 +2670,9 @@ checksum = "5c2fb2ec9bcd216a5b0d0ccf31ab17b5ed1d627960edff65bbe95d3ce221cefc"
[[package]]
name = "socket2"
-version = "0.3.11"
+version = "0.3.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e8b74de517221a2cb01a53349cf54182acdc31a074727d3079068448c0676d85"
+checksum = "03088793f677dce356f3ccc2edb1b314ad191ab702a5de3faf49304f7e104918"
dependencies = [
"cfg-if",
"libc",
@@ -2590,6 +2700,12 @@ checksum = "67f84c44fbb2f91db7fef94554e6b2ac05909c9c0b0bc23bb98d3a1aebfe7f7c"
[[package]]
name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "strsim"
version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c"
@@ -2659,19 +2775,28 @@ dependencies = [
]
[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
name = "thiserror"
-version = "1.0.13"
+version = "1.0.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e3711fd1c4e75b3eff12ba5c40dba762b6b65c5476e8174c1a664772060c49bf"
+checksum = "f0570dc61221295909abdb95c739f2e74325e14293b2026b0a7e195091ec54ae"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
-version = "1.0.13"
+version = "1.0.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ae2b85ba4c9aa32dd3343bd80eb8d22e9b54b7688c17ea3907f236885353b233"
+checksum = "227362df41d566be41a28f64401e07a043157c21c14b9785a0d8e256f940a8fd"
dependencies = [
"proc-macro2",
"quote",
@@ -2728,9 +2853,9 @@ dependencies = [
[[package]]
name = "tokio"
-version = "0.2.13"
+version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0fa5e81d6bc4e67fe889d5783bd2a128ab2e0cfa487e0be16b6a8d177b101616"
+checksum = "619cdb2245c40c42d563089b72e80c5df659513d667a017598439ef7a7b1ffe1"
dependencies = [
"bytes",
"fnv",
@@ -2762,6 +2887,20 @@ dependencies = [
]
[[package]]
+name = "tokio-util"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be8242891f2b6cbef26a2d7e8605133c2c554cd35b3e4948ea892d6d68436499"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "log",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
name = "toml"
version = "0.5.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2810,12 +2949,40 @@ dependencies = [
]
[[package]]
+name = "twoway"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b40075910de3a912adbd80b5d8bad6ad10a23eeb1f5bf9d4006839e899ba5bc"
+dependencies = [
+ "memchr 2.3.3",
+ "unchecked-index",
+]
+
+[[package]]
+name = "typed-arena"
+version = "1.7.0"
+source = "registry+https://github.co