##########
GoToSocial
##########
GoToSocial is ein ActivityPub Server. Was das ist und was GTS alles kann am besten in der `offiziellen Dokumentation `_ nachlesen.
Installation
++++++++++++
Damit GoToSocial auf social.queereszentrumtuebingen.de laufen kann mussten wir zwei Dinge machen
**Hostname und Account Domain spezifizieren**
.. code-block:: yaml
gotosocial_hostname: 'social.queereszentrumtuebingen.de'
gotosocial_account_domain: queereszentrumtuebingen.de
**Redirect Regeln auf der Hauptdomain**
Das ist möglich indem die Datei :file:`STRATO-apps/wordpress_01/app/.htaccess` bearbeitet wird und Weiterleitungen für ``.well-known/webfinger``, ``well-known/nodeinfo`` und ``/.well-known/host-meta`` eingerichtet werden.
Das ``[R,L]`` am Ende bedeutet, dass das danach keine andere Weiterleitungsregel mehr beachtet wird (``L``) und dass der Rewrite dauerhaft ist (``R``).
.. code-block::
queereszentrumtuebingen.de> cat STRATO-apps/wordpress_01/app/.htaccess
# Block the include-only files.
RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]
RewriteRule ^.well-known/webfinger$ https://social.queereszentrumtuebingen.de/.well-known/webfinger [R,L]
RewriteRule ^.well-known/nodeinfo$ https://social.queereszentrumtuebingen.de/.well-known/nodeinfo [R,L]
RewriteRule ^.well-known/host-meta$ https://social.queereszentrumtuebingen.de/.well-known/host-meta [R,L]
# BEGIN WordPress
# Die Anweisungen (Zeilen) zwischen „BEGIN WordPress“ und „END WordPress“ sind
# dynamisch generiert und sollten nur über WordPress-Filter geändert werden.
# Alle Änderungen an den Anweisungen zwischen diesen Markierungen werden überschrieben.
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
Einbinden auf der Website
+++++++++++++++++++++++++
Der GoToSocial Feed vom Account @qzt@queereszentrumtuebingen.de ist auch auf der Website eingebunden.
An sich funktioniert das über die API :code:`/api/v1/accounts/{account_id}/statuses`. Das Problem an dieser API ist,
dass sie inzwischen durch "Authorized fetch" geschützt wird. Das bedeuted, jeder API call muss mit einem Access Token
unterschrieben sein. Ein Access Token ist spezifisch für einen Fediverse Account. Das ist das was auch Fediverse Apps wie
Tusky oder Phanpy tun. Sie nutzen den Access Token um in deinem Namen Posts zu lesen und abzuschicken.
Authorized Fetch hat folgende Vorteile
* Datensammlung ist nicht möglich wenn außer über Fediaccounts
* Block können nicht über die Public API umgangen werden werden
Leider verhindert es auch, dass wir unsere eigenen Post über die öffentliche API abrufen.
Wir könnten authorized fetch abschalten indem wir den GoToSocial code anpassen. Das ist aber nicht ideal, wir müssten ein
eigenes Docker Image bauen und das für jedes Update.
Der Punkt von authorized fetch ist, dass nur fedi-accounts (und Apps die ihr authorisiert) die API nutzen können. Also machen wir eben das!
Wir erstellen einen Account und eine App und autorisieren die `as described in the GoToSocial documentation `_.
Mit diesem Authorization-Code kannst du einen access token für die App erstellen
Wir könnten den jetzt einfach in den Javascript code den token einfügen und alles würde funktionieren. Aber es wäre nicht sicher.
Denn jede Person könnte diesen Access Token nehmen und im Namen dieses Accounts posten. Angreifer könnten so Datan über
unseren Account abrufen oder ihn gar zum versenden von Spam nutzen.
Stattdessen nutzen wir einen Proxy der den access token sicher verwahrt und nur bestimmte Aktionen zulässt.
Zu finden ist der Code dafür unter `moanos/FediProxy `_.
Auf unserem Server ist der Proxy zu finden unter :file:`/root/fediproxy`.
Gestartet wird er über Docker Compose
.. code-block ::
services:
fediproxy.queereszentrumtuebingen.de:
image: docker.io/moanos/fediproxy
container_name: "fediproxy.queereszentrumtuebingen.de"
restart: unless-stopped
environment:
EXTERNAL_API_BASE_URL: ${EXTERNAL_API_BASE_URL}
ACCESS_TOKEN: ${ACCESS_TOKEN}
ALLOWED_ACCOUNTS: ${ALLOWED_ACCOUNTS}
labels:
- "traefik.enable=true"
- "traefik.docker.network=traefik"
- "traefik.http.routers.fediproxy.rule=Host(`fediproxy.queereszentrumtuebingen.de`)"
- "traefik.http.routers.fediproxy.service=fediproxy-service"
- "traefik.http.routers.fediproxy.entrypoints=web-secure"
- "traefik.http.routers.fediproxy.tls=true"
- "traefik.http.routers.fediproxy.tls.certResolver=default"
- "traefik.http.services.fediproxy-service.loadbalancer.server.port=8000"
networks:
- traefik
networks:
traefik:
name: "traefik"
external: true
Konfiguriert wird über die Datei :file:`.env`
.. code-block::
ACCESS_TOKEN=VERYSECRETTOKENTHATISDEFINETLYREAL
EXTERNAL_API_BASE_URL=https://gay-pirate-assassins.de
ALLOWED_ACCOUNTS=ZGGZF4G8NNOTREAL81Z8G7RTC
Jetzt können wir endlich den Feed auf der Website einbinden. Dafür nuten wir das Plugin `Include Mastodon Feed `_.
Wenn das Plugin installiert ist können wir es per Shortcut nutzen
.. code-block:::
[include-mastodon-feed instance="fediproxy.queereszentrumtuebingen.de" account="ZGGZF4G8NNOTREAL81Z8G7RTC"]
Wenn du ein bisschen rumtesten willst kannst du https://git.hyteck.de/moanos/include-fedi nutzen.