# 🔑 Matrix Get-Token Toolbox (`get-token.sh`) Ein interaktives, universelles Bash-Skript zum Generieren von dauerhaften, langlebigen API-Access-Tokens (Sitzungs-Tokens) für deinen **Matrix-Server** (z. B. Conduit). Dieses Skript ist vollkommen flexibel: Es funktioniert sowohl im **lokalen Netzwerk (Heimnetz/WLAN)** als auch **von unterwegs (öffentliches Internet)** und bietet intelligente Standardwerte für dein Setup. ## 🚀 Features - **Universell & Dynamisch:** Fragt Domain, IP, Benutzername und Passwort interaktiv ab. - **Intelligente Standardwerte:** Bei Drücken der `Enter`-Taste werden automatisch deine vorkonfigurierten Heimnetz-Daten ausgewählt. - **Hybrid-Netzwerk-Modus (Drinnen & Draußen):** - *Zuhause:* Nutzt eine `--resolve`-Regel für `curl`, um NAT-Loopback-Sperren deines Routers zu umgehen. - *Unterwegs:* Lässt die IP-Auflösung einfach weg und funkt direkt sicher über das Internet. - **Fehler-Debugging:** Zeigt dir exakte Server-Rückmeldungen (wie `M_FORBIDDEN` bei falschem Passwort) anstatt stumm abzustürzen. - **Kugelsicheres JSON:** Verhindert durch clevere Maskierung (`'"$VARIABLE"'`), dass Sonderzeichen im Passwort die JSON-Struktur zerstören. ## 🛠️ Voraussetzungen Das Skript benötigt lediglich `curl` und `grep`: ```bash sudo apt update && sudo apt install curl grep -y ``` ## 🔧 Installation & Verwendung 1. Erstelle die Datei auf deinem System: ```bash micro get-token.sh ``` 2. Kopiere den Code des Skripts hinein und speichere die Datei. 3. Mach das Skript ausführbar: ```bash chmod +x get-token.sh ``` 4. Starte den Token-Generator: ```bash ./get-token.sh ``` ## 📝 Das aktuelle Skript (`get-token.sh`) ```bash #!/bin/bash # --- EINGABE: SERVER-DATEN --- read -p "Matrix-Domain [https://matrix-client.matrix.org]: " DOMAIN DOMAIN=${DOMAIN:-matrix-client.matrix.org} # Wenn du unterwegs bist, drücke hier einfach direkt Enter (leer lassen) read -p "Lokale Server-IP (Leer lassen, wenn du unterwegs bist!): " SERVER_IP # --- EINGABE: BENUTZER-DATEN --- read -p "Matrix-Benutzername: " USERNAME read -s -p "Matrix-Passwort: " PASSWORD echo "" echo "Verbinde mit Matrix-Server https://$DOMAIN ..." # --- RESOLVE LOGIK PRÜFEN --- # Wenn eine IP eingegeben wurde, nutzen wir --resolve. Wenn nicht, fragen wir direkt das Internet ab. if [ -n "$SERVER_IP" ]; then # Wichtig: Nur die reine IP eintragen (z.B. 192.168.10.118), ohne Port (:6167)! RESOLVE_PARAM="--resolve ${DOMAIN}:443:${SERVER_IP}" else RESOLVE_PARAM="" fi # --- API-ABRUF --- RESPONSE=$(curl -k -s -X POST $RESOLVE_PARAM "https://${DOMAIN}/_matrix/client/v3/login" -H "Content-Type: application/json" -d '{ "type": "m.login.password", "identifier": { "type": "m.id.user", "user": "'"$USERNAME"'" }, "password": "'"$PASSWORD"'" }') # --- TOKEN EXTRAKTION --- TOKEN=$(echo "$RESPONSE" | grep -o '"access_token":"[^"]*' | grep -o '[^0-9a-zA-Z]*$' | grep -o '[^"]*$') if [ -n "$TOKEN" ]; then echo "✅ Login für @${USERNAME} auf ${DOMAIN} erfolgreich!" echo "Dein Token lautet:" echo "$TOKEN" else echo "❌ Fehler beim Login für @${USERNAME}!" echo "Antwort vom Server war:" if [ -z "$RESPONSE" ]; then echo "[Keine Antwort vom Server – Internetverbindung, IP oder Portfreigabe prüfen]" else echo "$RESPONSE" fi fi ``` ## 💡 Richtig ausfüllen (Spickzettel) | Szenario | Matrix-Domain | Lokale Server-IP | | :--- | :--- | :--- | | **Im Heimnetz (WLAN/Keller)** | `Enter` drücken *(Nutzt Standard)* | `192.168.1.1` *(Reine Matrix-IP, kein Port!)* | | **Von unterwegs (Mobiles Netz)** | `Enter` drücken *(Nutzt Standard)* | `Enter` drücken *(Leer lassen!)* | > ⚠️ **Achtung Verwechslungsgefahr:** Trag bei der lokalen IP niemals den Port deiner Element-Web-App (`:6167`) ein! Das Skript muss direkt mit der Backend-IP deines Conduit-Servers sprechen. --- 🌟 **Hinweis:** Dieses Skript wurde mit viel Herzblut, terminaler Leidenschaft und der tatkräftigen Unterstützung von **Gemini** geschmiedet. Mögen deine Skripte niemals wieder ein `M_UNKNOWN_TOKEN` werfen! 🚀🤖