Merge branch 'dev' into websocket_scopes

This commit is contained in:
Dessalines 2020-02-01 00:37:34 -05:00
commit 9f2b61708e
11 changed files with 154 additions and 15 deletions

2
README.md vendored
View File

@ -1,5 +1,5 @@
<p align="center"> <p align="center">
<a href="" rel="noopener"> <a href="https://dev.lemmy.ml/" rel="noopener">
<img width=200px height=200px src="ui/assets/favicon.svg"></a> <img width=200px height=200px src="ui/assets/favicon.svg"></a>
</p> </p>

15
ansible/lemmy.yml vendored
View File

@ -29,12 +29,15 @@
- { path: '/lemmy/' } - { path: '/lemmy/' }
- { path: '/lemmy/volumes/' } - { path: '/lemmy/volumes/' }
- name: add all template files - block:
template: src={{item.src}} dest={{item.dest}} - name: add template files
with_items: template: src={{item.src}} dest={{item.dest}} mode={{item.mode}}
- { src: '../docker/prod/docker-compose.yml', dest: '/lemmy/docker-compose.yml' } with_items:
- { src: 'templates/config.hjson', dest: '/lemmy/lemmy.hjson' } - { src: 'templates/docker-compose.yml', dest: '/lemmy/docker-compose.yml', mode: '0600' }
- { src: 'templates/nginx.conf', dest: '/etc/nginx/sites-enabled/lemmy.conf' } - { src: 'templates/nginx.conf', dest: '/etc/nginx/sites-enabled/lemmy.conf', mode: '0644' }
- name: add config file (only during initial setup)
template: src='templates/config.hjson' dest='/lemmy/lemmy.hjson' mode='0600' force='no' owner='1000' group='1000'
vars: vars:
postgres_password: "{{ lookup('password', 'passwords/{{ inventory_hostname }}/postgres 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') }}" jwt_password: "{{ lookup('password', 'passwords/{{ inventory_hostname }}/jwt chars=ascii_letters,digits') }}"

35
ansible/templates/docker-compose.yml vendored Normal file
View File

@ -0,0 +1,35 @@
version: '3.3'
services:
lemmy:
image: dessalines/lemmy:v0.6.5
ports:
- "127.0.0.1:8536:8536"
restart: always
volumes:
- ./lemmy.hjson:/config/config.hjson:ro
depends_on:
- lemmy_db
- lemmy_pictshare
lemmy_db:
image: postgres:12-alpine
environment:
- POSTGRES_USER=lemmy
- POSTGRES_PASSWORD={{ postgres_password }}
- POSTGRES_DB=lemmy
volumes:
- lemmy_db:/var/lib/postgresql/data
restart: always
lemmy_pictshare:
image: shtripok/pictshare:latest
ports:
- "127.0.0.1:8537:80"
volumes:
- lemmy_pictshare:/usr/share/nginx/html/data
restart: always
volumes:
lemmy_db:
lemmy_pictshare:

48
ansible/uninstall.yml vendored Normal file
View File

@ -0,0 +1,48 @@
---
- hosts: all
vars_prompt:
- name: confirm_uninstall
prompt: "Do you really want to uninstall Lemmy? This will delete all data and can not be reverted [yes/no]"
private: no
- name: delete_certs
prompt: "Delete certificates? Select 'no' if you want to reinstall Lemmy [yes/no]"
private: no
tasks:
- name: end play if no confirmation was given
debug:
msg: "Uninstall cancelled, doing nothing"
when: not confirm_uninstall|bool
- meta: end_play
when: not confirm_uninstall|bool
- name: stop docker-compose
docker_compose:
project_src: /lemmy/
state: absent
- name: delete data
file: path={{item.path}} state=absent
with_items:
- { 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:
name=certbot-renew-lemmy
state=absent

View File

@ -1,4 +1,5 @@
#!/bin/sh #!/bin/bash
set -e
declare -a arr=( declare -a arr=(
"https://mastodon.social/" "https://mastodon.social/"

34
server/query_testing/api_benchmark.sh vendored Executable file
View File

@ -0,0 +1,34 @@
#!/bin/bash
set -e
# By default, this script runs against `http://127.0.0.1:8536`, but you can pass a different Lemmy instance,
# eg `./api_benchmark.sh "https://example.com"`.
DOMAIN=${1:-"http://127.0.0.1:8536"}
declare -a arr=(
"/api/v1/site"
"/api/v1/categories"
"/api/v1/modlog"
"/api/v1/search?q=test&type_=Posts&sort=Hot"
"/api/v1/community"
"/api/v1/community/list?sort=Hot"
"/api/v1/post/list?sort=Hot&type_=All"
)
## now loop through the above array
for path in "${arr[@]}"
do
URL="$DOMAIN$path"
printf "\n\n\n"
echo "testing $URL"
curl --show-error --fail --silent "$URL" >/dev/null
ab -c 64 -t 10 "$URL" > out.abtest
grep "Server Hostname:" out.abtest
grep "Document Path:" out.abtest
grep "Requests per second" out.abtest
grep "(mean, across all concurrent requests)" out.abtest
grep "Transfer rate:" out.abtest
echo "---"
done
rm *.abtest

View File

@ -1,4 +1,5 @@
#!/bin/sh #!/bin/bash
set -e
# Do the views first # Do the views first

View File

@ -3,7 +3,7 @@ use diesel::PgConnection;
use std::str::FromStr; use std::str::FromStr;
#[derive(Serialize, Deserialize)] #[derive(Serialize, Deserialize)]
pub struct ListCategories; pub struct ListCategories {}
#[derive(Serialize, Deserialize)] #[derive(Serialize, Deserialize)]
pub struct ListCategoriesResponse { pub struct ListCategoriesResponse {
@ -72,7 +72,7 @@ pub struct EditSite {
} }
#[derive(Serialize, Deserialize)] #[derive(Serialize, Deserialize)]
pub struct GetSite; pub struct GetSite {}
#[derive(Serialize, Deserialize)] #[derive(Serialize, Deserialize)]
pub struct SiteResponse { pub struct SiteResponse {

View File

@ -84,7 +84,7 @@ export class Navbar extends Component<any, NavbarState> {
} }
render() { render() {
return <div>{this.navbar()}</div>; return this.navbar();
} }
componentWillUnmount() { componentWillUnmount() {

View File

@ -130,7 +130,7 @@ export class WebSocketService {
public listCategories() { public listCategories() {
this.subject.next( this.subject.next(
this.wsSendWrapper(UserOperation.ListCategories, undefined) this.wsSendWrapper(UserOperation.ListCategories, {})
); );
} }
@ -264,7 +264,7 @@ export class WebSocketService {
} }
public getSite() { public getSite() {
this.subject.next(this.wsSendWrapper(UserOperation.GetSite, undefined)); this.subject.next(this.wsSendWrapper(UserOperation.GetSite, {}));
} }
public search(form: SearchForm) { public search(form: SearchForm) {

View File

@ -211,6 +211,23 @@ export const nl = {
open_registration: 'Open registratie', open_registration: 'Open registratie',
registration_closed: 'Registratie gesloten', registration_closed: 'Registratie gesloten',
enable_nsfw: 'NSFW toestaan', enable_nsfw: 'NSFW toestaan',
theme: 'Thema' theme: 'Thema',
create_private_message: 'Maak een beveiligd bericht',
send_secure_message: 'Verstuur beveiligd bericht',
send_message: 'Verstuur bericht',
message: 'Bericht',
old: 'Oud',
message_sent: 'Bericht verstuurd',
messages: 'Berichten',
matrix_user_id: 'Matrix gebruikers-id',
private_message_disclaimer: 'Waarschuwing: Privé berichten in Lemmy zijn niet beveiligd. Maak een account aan op <1>Riot.im</1> om veilig te communiceren',
donate_to_lemmy: 'Doneer aan Lemmy',
donate: 'Doneer',
from: 'van',
logged_in: 'Ingelogd',
email_already_exists: 'Email bestaat al',
couldnt_create_private_message: 'Kan beveiligd bericht niet maken',
no_private_message_edit_allowed: 'Niet toegestaan om privé berichten te wijzigen',
couldnt_update_private_message: 'Kan beveiligd bericht niet bijwerken'
}, },
}; };