#!/usr/bin/env bash set -euo pipefail LOG="/tmp/backtunnel-access-gui.$UID.log" exec > >(tee -a "$LOG") 2>&1 export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:${PATH:-}" FOLDER="${1:-}" if [[ -z "$FOLDER" ]]; then kdialog --error "No folder selected." || true exit 1 fi # Defaults REMOTE_DEFAULT="user@vps.example.com" PORT_DEFAULT="2222" MOUNT_DEFAULT="/mnt/remote-rssh" # Profiles (read-only prefill; access side does not use @profile) PROFILES_USER="${XDG_CONFIG_HOME:-$HOME/.config}/backtunnel/profiles.ini" PROFILES_SYS="/etc/backtunnel/profiles.ini" PROFILES_PKG="/usr/share/backtunnel/profiles.ini" if [[ -f "$PROFILES_USER" ]]; then PROFILES_FILE="$PROFILES_USER" elif [[ -f "$PROFILES_SYS" ]]; then PROFILES_FILE="$PROFILES_SYS" else PROFILES_FILE="$PROFILES_PKG" fi if [[ -f "$PROFILES_FILE" ]]; then # pick one to prefill user@host (optional) mapfile -t profs < <(awk '/^\[/{gsub(/^\[|\]$/,"",$1); if ($1!="default") print $1}' "$PROFILES_FILE") if (( ${#profs[@]} )); then choice="$(kdialog --combobox "Prefill from profile (optional)" "${profs[@]}")" || choice="" if [[ -n "$choice" ]]; then getval() { awk -v s="[""$choice""]" -v k="$1" ' $0==s{ok=1; next} /^\[/{ok=0} ok && $0 ~ /^[[:alnum:]_.-]+[[:space:]]*=/ { line=$0; sub(/[[:space:]]*=[[:space:]]*/, "=", line) split(line,a,"="); if(a[1]==k){val=substr(line,index(line,"=")+1); gsub(/^[[:space:]]+|[[:space:]]+$/,"",val); print val; exit} }' "$PROFILES_FILE" 2>/dev/null; } u="$(getval user)"; h="$(getval host)"; p="$(getval tunnel_port)"; m="$(getval invite_mount)" [[ -n "$u" && -n "$h" ]] && REMOTE_DEFAULT="$u@$h" [[ -n "$p" ]] && PORT_DEFAULT="$p" [[ -n "$m" ]] && MOUNT_DEFAULT="$m" fi fi fi REMOTE="$(kdialog --inputbox "Remote (user@host or user:host):" "$REMOTE_DEFAULT")" || exit 0 PORT="$(kdialog --inputbox "Tunnel port on remote:" "$PORT_DEFAULT")" || exit 0 MP="$(kdialog --getexistingdirectory --title "Choose mount point" "$MOUNT_DEFAULT")" || exit 0 cmd=( backtunnel-access "$FOLDER" from "$REMOTE" -p "$PORT" -m "$MP" ) if command -v konsole >/dev/null 2>&1; then exec konsole --noclose -e "${cmd[@]}" elif command -v xterm >/dev/null 2>&1; then exec xterm -hold -e "${cmd[@]}" else nohup "${cmd[@]}" >>"$LOG" 2>&1 & kdialog --msgbox "Mount started in background.\nSee log: $LOG" fi