slitaz-tools annotate boxes/scp-box @ rev 759

Add new scp-box
author Christophe Lincoln <pankso@slitaz.org>
date Wed May 02 15:56:39 2012 +0200 (2012-05-02)
parents
children 75e873df3022
rev   line source
pankso@759 1 #!/bin/sh
pankso@759 2 #
pankso@759 3 # SCP Box - Small front end to the secure file copy utility.
pankso@759 4 #
pankso@759 5 # Copyright (C) 2008-2012 SliTaz GNU/Linux - BSD License
pankso@759 6 #
pankso@759 7 # Author: Christophe Lincoln <pankso@slitaz.org>
pankso@759 8 #
pankso@759 9 . /lib/libtaz.sh
pankso@759 10
pankso@759 11 [ "$file" ] || file="$HOME"
pankso@759 12 [ "$dir" ] || dir="$HOME"
pankso@759 13
pankso@759 14 # Internal variables (we need a space before options).
pankso@759 15 config=$HOME/.config/scpbox
pankso@759 16 icon=/usr/share/pixmaps/slitaz-icon.png
pankso@759 17 term="xterm -geometry 80x16"
pankso@759 18 scpopts=" -r -P 22"
pankso@759 19
pankso@759 20 # Make sure we have a config files.
pankso@759 21 if [ ! -d "$config" ] || [ -f "$config/hosts" ]; then
pankso@759 22 mkdir -p $config
pankso@759 23 touch $config/hosts && chmod 0600 $config/hosts
pankso@759 24 fi
pankso@759 25
pankso@759 26 #
pankso@759 27 # Functions
pankso@759 28 #
pankso@759 29
pankso@759 30 # Help and usage
pankso@759 31 usage() {
pankso@759 32 cat << EOT
pankso@759 33
pankso@759 34 $(gettext "Usage:") $(basename $0) [command|option]
pankso@759 35
pankso@759 36 $(gettext "Commands:")
pankso@759 37 list-hosts $(gettext "List all know hosts")
pankso@759 38
pankso@759 39 $(gettext "Options:")
pankso@759 40 --file=/path/to/file
pankso@759 41 --dir=/path/to/directory
pankso@759 42
pankso@759 43 $(gettext "Examples:")
pankso@759 44 $(basename $0) --file=/path/to/file
pankso@759 45
pankso@759 46 EOT
pankso@759 47 }
pankso@759 48
pankso@759 49 # List last used hosts.
pankso@759 50 list_hosts() {
pankso@759 51 for h in $(cat $config/hosts)
pankso@759 52 do
pankso@759 53 echo -n "!$h"
pankso@759 54 done
pankso@759 55 }
pankso@759 56
pankso@759 57 # Main GUI box function with pure Yad spec
pankso@759 58 scpbox_main() {
pankso@759 59 text=$(gettext "<b>Secure copy</b> - Copy files remotly with scp")
pankso@759 60 yad --form --title="SCP Box" --window-icon=$icon \
pankso@759 61 --image=folder-remote --image-on-top \
pankso@759 62 --height=320 --width=500 --text="$text" \
pankso@759 63 --field="$(gettext "User name:")" \
pankso@759 64 --field="$(gettext "Hostname:")" \
pankso@759 65 --field="$(gettext "Know hosts:")":CB \
pankso@759 66 --field="$(gettext "Options:")" \
pankso@759 67 --field="$(gettext "Local file:")":FL \
pankso@759 68 --field="$(gettext "Local directory:")":DIR \
pankso@759 69 --field="$(gettext "Remote path:")" \
pankso@759 70 --button="$(gettext "Download")":2 \
pankso@759 71 --button="$(gettext "Upload")":0 \
pankso@759 72 --button="gtk-close":1 \
pankso@759 73 "$USER" "" "$(list_hosts)" "$scpopts" "$file" "$dir" ""
pankso@759 74 }
pankso@759 75
pankso@759 76 # Main function
pankso@759 77 scpbox() {
pankso@759 78 # Store box results
pankso@759 79 main=$(scpbox_main)
pankso@759 80 ret=$?
pankso@759 81 [ "$debug" ] && echo "DEBUG: main=$main"
pankso@759 82
pankso@759 83 user=$(echo $main | cut -d "|" -f 1)
pankso@759 84 hostname=$(echo $main | cut -d "|" -f 2)
pankso@759 85 options=$(echo $main | cut -d "|" -f 4)
pankso@759 86 remote=$(echo $main | cut -d "|" -f 7)
pankso@759 87
pankso@759 88 # Use and store new hostname.
pankso@759 89 if [ "$hostname" ]; then
pankso@759 90 echo "$hostname" >> $config/hosts
pankso@759 91 host="$hostname"
pankso@759 92 else
pankso@759 93 host=$(echo $main | cut -d "|" -f 3)
pankso@759 94 fi
pankso@759 95 if [ "$host" == "(null)" ] || [ ! "$host" ]; then
pankso@759 96 echo "No host: exit" && exit 0
pankso@759 97 fi
pankso@759 98
pankso@759 99 # Deal with --button values
pankso@759 100 case $ret in
pankso@759 101 0)
pankso@759 102 # Upload: do we have a single file or a directory (skip $HOME)
pankso@759 103 file=$(echo $main | cut -d "|" -f 5)
pankso@759 104 dir=$(echo $main | cut -d "|" -f 6)
pankso@759 105 if [ -f "$file" ]; then
pankso@759 106 local="$file"
pankso@759 107 elif [ "$dir" != "$HOME" ]; then
pankso@759 108 local="$dir"
pankso@759 109 else
pankso@759 110 echo "No file: exit" && exit 0
pankso@759 111 fi
pankso@759 112 cmd="scp $options $local $user@$host:$remote"
pankso@759 113 [ "$debug" ] && echo "DEBUG: $cmd"
pankso@759 114 $term -e "$cmd" ;;
pankso@759 115 2)
pankso@759 116 # Download: we need a remote a file.
pankso@759 117 local=$(echo $main | cut -d "|" -f 6)
pankso@759 118 if [ ! "$remote" ]; then
pankso@759 119 echo "No remote file: exit" && exit 0
pankso@759 120 fi
pankso@759 121 cmd="scp $options $user@$host:$remote $local"
pankso@759 122 [ "$debug" ] && echo "DEBUG: $cmd"
pankso@759 123 $term -e "$cmd" ;;
pankso@759 124 *)
pankso@759 125 exit 0 ;;
pankso@759 126 esac
pankso@759 127 }
pankso@759 128
pankso@759 129 #
pankso@759 130 # Commands
pankso@759 131 #
pankso@759 132
pankso@759 133 case "$1" in
pankso@759 134 list-hosts)
pankso@759 135 list_hosts ;;
pankso@759 136 ""|--*)
pankso@759 137 scpbox ;;
pankso@759 138 *)
pankso@759 139 usage ;;
pankso@759 140 esac
pankso@759 141
pankso@759 142 exit 0