#!/bin/bash if ! [ -x "$(command -v gum)" ]; then echo 'Error: gum is not installed.' >&2 echo 'See https://github.com/charmbracelet/gum' >&2 exit 1 fi if ! [ -x "$(command -v jq)" ]; then echo 'Error: jq is not installed.' >&2 echo 'See https://github.com/jqlang/jq' >&2 exit 1 fi CONFIG_FILE="$HOME/.config/ssh-portal.json" if [ ! -f "$CONFIG_FILE" ]; then echo "⚠ $CONFIG_FILE doesn't exist. Please create it." exit 1 fi INSTANCES=$(cat $CONFIG_FILE | jq .instances) ACTIONS=$(cat $CONFIG_FILE | jq .actions) CATEGORY=$(echo $INSTANCES| jq -r 'map(.category) | unique | .[]' | gum choose --header "📍 Catégorie") INSTANCE_NAME=$(echo $INSTANCES | jq -r ".[] | select(.category == \"$CATEGORY\") | .name" | gum choose --header "🔵 Instance") ACTION_NAME=$(echo $ACTIONS| jq -r .[].name | gum choose --header "$ Action") if [ -z "$INSTANCE_NAME" ] || [ -z "$ACTION_NAME" ]; then exit 0 fi INSTANCE=$(echo $INSTANCES | jq ".[] | select(.name == \"$INSTANCE_NAME\")") INSTANCE_USERNAME=$(echo $INSTANCE | jq -r '.username') ACTION_CMD=$(echo $ACTIONS | jq -r ".[] | select(.name == \"$ACTION_NAME\") | .cmd") SSH_HOST=$(echo $INSTANCE | jq -r '.host') SSH_PORT=$(echo $INSTANCE | jq -r '.port') if [ -z "$SSH_HOST" ] || [ "$SSH_HOST" = "null" ]; then SSH_HOST=$(cat $CONFIG_FILE | jq -r .defaultSSH.host) fi if [ -z "$SSH_PORT" ] || [ "$SSH_PORT" = "null" ]; then SSH_PORT=$(cat $CONFIG_FILE | jq -r .defaultSSH.port) fi echo "🚀 Connecting to $INSTANCE_NAME..." echo "$ $ACTION_CMD" ssh -p $SSH_PORT "$INSTANCE_USERNAME@$SSH_HOST" $ACTION_CMD