Files
Hermes_rocket.chat_Plugin/install.sh
T

187 lines
5.6 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/usr/bin/env bash
# install.sh
# Rocket.Chat Plugin für Hermes Agent — Interaktives Setup
# Voraussetzungen: bash, curl, git, python3
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PLUGIN_NAME="rocketchat"
HERMES_HOME="${HERMES_HOME:-$HOME/.hermes}"
PLUGIN_DEST="$HERMES_HOME/hermes-agent/plugins/platforms/$PLUGIN_NAME"
ECHO_OK() { echo -e "$1"; }
ECHO_ERR() { echo -e "$1"; }
ECHO_INFO() { echo -e " $1"; }
ECHO_STEP() { echo -e "\n🔵 $1"; }
ECHO_WARN() { echo -e " ⚠️ $1"; }
# ── Schritt 1: Prerequisites ──
ECHO_STEP "1/7 Prüfe Voraussetzungen"
MISSING=""
for cmd in curl git python3; do
if command -v "$cmd" &>/dev/null; then
ECHO_OK "$cmd installiert"
else
ECHO_ERR "$cmd fehlt"
MISSING="$MISSING $cmd"
fi
done
if [[ -n "$MISSING" ]]; then
ECHO_WARN "Folgende Pakete müssen nachinstalliert werden:"
echo " sudo apt update && sudo apt install -y$MISSING"
read -rp " Pakete jetzt installieren? [j/N] " ans
if [[ "$ans" =~ ^[Jj]$ ]]; then
sudo apt update && sudo apt install -y $MISSING
else
echo "Abbruch. Bitte installiere:$MISSING"
exit 1
fi
fi
# ── Schritt 2: Zielverzeichnis anlegen ──
ECHO_STEP "2/7 Erstelle Plugin-Verzeichnis"
if [[ -d "$PLUGIN_DEST" ]]; then
ECHO_WARN "Verzeichnis existiert bereits: $PLUGIN_DEST"
read -rp " Überschreiben? [j/N] " ans
if [[ "$ans" =~ ^[Jj]$ ]]; then
rm -rf "$PLUGIN_DEST"
else
echo "Abbruch."
exit 1
fi
fi
mkdir -p "$PLUGIN_DEST"
ECHO_OK "Verzeichnis angelegt: $PLUGIN_DEST"
# ── Schritt 3: Dateien kopieren ──
ECHO_STEP "3/7 Kopiere Plugin-Dateien"
for f in plugin.yaml __init__.py adapter.py; do
if [[ -f "$SCRIPT_DIR/$f" ]]; then
cp "$SCRIPT_DIR/$f" "$PLUGIN_DEST/"
ECHO_OK "$f kopiert"
else
ECHO_ERR "$f nicht im aktuellen Verzeichnis gefunden"
exit 1
fi
done
# ── Schritt 4: Konfiguration erfragen ──
ECHO_STEP "4/7 Konfiguration"
read -rp " Rocket.Chat Basis-URL (z.B. https://chat.example.com): " RC_URL
[[ -z "$RC_URL" ]] && { ECHO_ERR "URL darf nicht leer sein"; exit 1; }
read -rp " Rocket.Chat Benutzername: " RC_USER
[[ -z "$RC_USER" ]] && { ECHO_ERR "Benutzername darf nicht leer sein"; exit 1; }
read -rsp " Rocket.Chat Passwort: " RC_PASS
echo
[[ -z "$RC_PASS" ]] && { ECHO_ERR "Passwort darf nicht leer sein"; exit 1; }
read -rp " Standard-Raumname (z.B. #ki-assistent) [optional]: " RC_ROOM
# ── Schritt 5: Verbindungstest ──
ECHO_STEP "5/7 Teste Verbindung zu Rocket.Chat"
LOGIN_RESP=$(curl -s -H "Content-Type: application/json" \
-d "{\"user\":\"$RC_USER\",\"password\":\"$RC_PASS\"}" \
"${RC_URL%/}/api/v1/login" 2>/dev/null) || true
if [[ -z "$LOGIN_RESP" ]] || ! echo "$LOGIN_RESP" | grep -q '"status":"success"'; then
ECHO_ERR "Login fehlgeschlagen"
echo " URL : $RC_URL"
echo " User: $RC_USER"
read -rp " Parameter bearbeiten? [j/N] " ans
if [[ "$ans" =~ ^[Jj]$ ]]; then
exec "$0" # Neustart
fi
exit 1
fi
AUTH_TOKEN=$(echo "$LOGIN_RESP" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['data']['authToken'])")
USER_ID=$(echo "$LOGIN_RESP" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['data']['userId'])")
ECHO_OK "Login erfolgreich (UserID: $USER_ID)"
# Raum auflösen, wenn angegeben
ROOM_ID=""
if [[ -n "$RC_ROOM" ]]; then
ROOM_QUERY="${RC_ROOM/#\#}"
ROOM_RESP=$(curl -s -H "X-Auth-Token: $AUTH_TOKEN" -H "X-User-Id: $USER_ID" \
"${RC_URL%/}/api/v1/rooms.info?roomName=$ROOM_QUERY" 2>/dev/null) || true
if echo "$ROOM_RESP" | grep -q '"success":true'; then
ROOM_ID=$(echo "$ROOM_RESP" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['room']['_id'])")
ECHO_OK "Raum gefunden: #$ROOM_QUERY (RoomID: $ROOM_ID)"
else
ECHO_WARN "Raum '#$ROOM_QUERY' nicht gefunden — überspringe"
fi
fi
# ── Schritt 6: Env-Variablen setzen ──
ECHO_STEP "6/7 Schreibe Konfiguration"
ENV_FILE="$HERMES_HOME/.env"
mkdir -p "$HERMES_HOME"
touch "$ENV_FILE"
# Alte Einträge entfernen
sed -i '/^ROCKETCHAT_/d' "$ENV_FILE" 2>/dev/null || true
{
echo ""
echo "# Rocket.Chat Plugin — generiert von install.sh am $(date +%Y-%m-%d)"
echo "export ROCKETCHAT_BASE_URL=\"$RC_URL\""
echo "export ROCKETCHAT_USER=\"$RC_USER\""
echo "export ROCKETCHAT_PASSWORD=\"$RC_PASS\""
[[ -n "$ROOM_ID" ]] && echo "export ROCKETCHAT_ROOM_ID=\"$ROOM_ID\""
echo "export ROCKETCHAT_ALLOW_ALL_USERS=\"false\""
} >> "$ENV_FILE"
ECHO_OK "~/.hermes/.env aktualisiert"
# Optional: config.yaml Eintrag anzeigen
ECHO_INFO "Falls du config.yaml bevorzugst, füge Folgendes hinzu:"
cat <<EOF
plugins:
platforms:
rocketchat:
enabled: true
base_url: "$RC_URL"
user: "$RC_USER"
password: "$RC_PASS"
room_id: "${ROOM_ID:-optional}"
allowed_users: []
allow_all_users: false
EOF
# ── Schritt 7: Hermes Gateway Neustart ──
ECHO_STEP "7/7 Hermes Gateway Neustart"
if command -v hermes &>/dev/null; then
# Versuche Gateway sauber neu zu starten
hermes gateway stop 2>/dev/null || true
sleep 1
ECHO_OK "Hermes Gateway gestoppt"
echo ""
echo " Starte neu mit:"
echo " hermes gateway start"
echo ""
else
ECHO_WARN "'hermes' Befehl nicht im PATH gefunden"
echo " Bitte starte Hermes Gateway manuell:"
echo " hermes gateway start"
fi
ECHO_STEP "✨ Fertig!"
ECHO_OK "Plugin installiert unter: $PLUGIN_DEST"
ECHO_INFO "Env-Variablen geladen in: $ENV_FILE"
ECHO_INFO "Rocket.Chat Plugin ist bereit."