slitaz-tools annotate boxes/scp-box @ rev 1037
tazbox: lxpolkit support
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Sat Oct 23 10:41:01 2021 +0000 (2021-10-23) |
parents | bffe37afb546 |
children |
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 # |
al@939 | 5 # Copyright (C) 2008-2015 SliTaz GNU/Linux - BSD License |
pankso@759 | 6 # |
pankso@759 | 7 # Author: Christophe Lincoln <pankso@slitaz.org> |
pankso@759 | 8 # |
al@939 | 9 |
pankso@759 | 10 . /lib/libtaz.sh |
al@813 | 11 export TEXTDOMAIN='slitaz-boxes' # i18n |
pankso@759 | 12 |
pankso@759 | 13 [ "$file" ] || file="$HOME" |
pankso@759 | 14 [ "$dir" ] || dir="$HOME" |
pankso@759 | 15 |
al@939 | 16 |
pankso@759 | 17 # Internal variables (we need a space before options). |
al@939 | 18 |
pankso@759 | 19 config=$HOME/.config/scpbox |
al@813 | 20 term="terminal -geometry 80x16" |
pankso@759 | 21 scpopts=" -r -P 22" |
pankso@759 | 22 |
al@939 | 23 |
paul@763 | 24 # Make sure we have config files. |
al@939 | 25 |
pankso@759 | 26 if [ ! -d "$config" ] || [ -f "$config/hosts" ]; then |
pankso@759 | 27 mkdir -p $config |
pankso@759 | 28 touch $config/hosts && chmod 0600 $config/hosts |
pankso@759 | 29 fi |
pankso@759 | 30 |
al@939 | 31 |
pankso@759 | 32 # |
pankso@759 | 33 # Functions |
pankso@759 | 34 # |
pankso@759 | 35 |
al@939 | 36 |
pankso@759 | 37 # Help and usage |
al@939 | 38 |
pankso@759 | 39 usage() { |
pankso@759 | 40 cat << EOT |
pankso@759 | 41 |
al@813 | 42 $(_ 'SCP Box - Small front end to the secure file copy utility.') |
pankso@759 | 43 |
al@813 | 44 $(boldify "$(_ 'Usage:')") |
al@813 | 45 $(basename $0) [$(_n 'command')|$(_n 'option')] |
pankso@759 | 46 |
al@813 | 47 $(boldify "$(_ 'Commands:')") |
al@813 | 48 list-hosts $(_n 'List all known hosts') |
pankso@759 | 49 |
al@813 | 50 $(boldify "$(_ 'Options:')") |
al@813 | 51 --file=$(_n '/path/to/file') |
al@813 | 52 --dir=$(_n '/path/to/directory') |
al@813 | 53 |
al@813 | 54 $(boldify "$(_ 'Examples:')") |
al@813 | 55 $(basename $0) --file=$(_n '/path/to/file') |
pankso@759 | 56 |
pankso@759 | 57 EOT |
pankso@759 | 58 } |
pankso@759 | 59 |
al@939 | 60 |
pankso@759 | 61 # List last used hosts. |
al@939 | 62 |
pankso@759 | 63 list_hosts() { |
al@813 | 64 for h in $(cat $config/hosts); do |
pankso@759 | 65 echo -n "!$h" |
pankso@759 | 66 done |
pankso@759 | 67 } |
pankso@759 | 68 |
al@939 | 69 |
pankso@759 | 70 # Main GUI box function with pure Yad spec |
al@939 | 71 |
pankso@759 | 72 scpbox_main() { |
al@939 | 73 icon='folder-remote' |
al@813 | 74 yad --title="$(_n 'SCP Box')" --window-icon=$icon \ |
al@813 | 75 --width=400 \ |
al@813 | 76 --image=$icon --image-on-top \ |
al@813 | 77 --text="$(_n '<b>Secure copy</b> - Copy files remotely with scp')" \ |
al@813 | 78 --form \ |
al@813 | 79 --field="$(_n 'User name:')" "$USER" \ |
al@813 | 80 --field="$(_n 'Hostname:')" "" \ |
al@813 | 81 --field="$(_n 'Known hosts:'):CB" "$(list_hosts)" \ |
al@813 | 82 --field="$(_n 'Options:')" "$scpopts" \ |
al@813 | 83 --field="$(_n 'Local file:'):FL" "$file" \ |
al@813 | 84 --field="$(_n 'Local directory:'):DIR" "$dir" \ |
al@813 | 85 --field="$(_n 'Remote path:')" "" \ |
al@957 | 86 --button="$(_n 'Download')!go-down:2" \ |
al@957 | 87 --button="$(_n 'Upload')!go-up:0" \ |
al@813 | 88 --button="gtk-close:1" |
pankso@759 | 89 } |
pankso@759 | 90 |
al@939 | 91 |
pankso@759 | 92 # Main function |
al@939 | 93 |
pankso@759 | 94 scpbox() { |
pankso@759 | 95 # Store box results |
pankso@759 | 96 main=$(scpbox_main) |
pankso@759 | 97 ret=$? |
pankso@759 | 98 [ "$debug" ] && echo "DEBUG: main=$main" |
pankso@759 | 99 |
pankso@759 | 100 user=$(echo $main | cut -d "|" -f 1) |
pankso@759 | 101 hostname=$(echo $main | cut -d "|" -f 2) |
pankso@759 | 102 options=$(echo $main | cut -d "|" -f 4) |
pankso@759 | 103 remote=$(echo $main | cut -d "|" -f 7) |
pankso@759 | 104 |
pankso@759 | 105 # Use and store new hostname. |
pankso@759 | 106 if [ "$hostname" ]; then |
pankso@759 | 107 echo "$hostname" >> $config/hosts |
pankso@759 | 108 host="$hostname" |
pankso@759 | 109 else |
pankso@759 | 110 host=$(echo $main | cut -d "|" -f 3) |
pankso@759 | 111 fi |
pascal@1029 | 112 if [ "$host" = "(null)" ] || [ ! "$host" ]; then |
al@813 | 113 echo "No host, exit"; exit 0 |
pankso@759 | 114 fi |
pankso@759 | 115 |
pankso@759 | 116 # Deal with --button values |
pankso@759 | 117 case $ret in |
pankso@759 | 118 0) |
pankso@759 | 119 # Upload: do we have a single file or a directory (skip $HOME) |
pankso@759 | 120 file=$(echo $main | cut -d "|" -f 5) |
pankso@759 | 121 dir=$(echo $main | cut -d "|" -f 6) |
pankso@759 | 122 if [ -f "$file" ]; then |
pankso@759 | 123 local="$file" |
pankso@759 | 124 elif [ "$dir" != "$HOME" ]; then |
pankso@759 | 125 local="$dir" |
pankso@759 | 126 else |
al@813 | 127 echo "No file, exit"; exit 0 |
pankso@759 | 128 fi |
pankso@759 | 129 cmd="scp $options $local $user@$host:$remote" |
pankso@759 | 130 [ "$debug" ] && echo "DEBUG: $cmd" |
pankso@759 | 131 $term -e "$cmd" ;; |
pankso@759 | 132 2) |
paul@763 | 133 # Download: we need a remote file. |
pankso@759 | 134 local=$(echo $main | cut -d "|" -f 6) |
pankso@759 | 135 if [ ! "$remote" ]; then |
al@813 | 136 echo "No remote file, exit"; exit 0 |
pankso@759 | 137 fi |
pankso@759 | 138 cmd="scp $options $user@$host:$remote $local" |
pankso@759 | 139 [ "$debug" ] && echo "DEBUG: $cmd" |
pankso@759 | 140 $term -e "$cmd" ;; |
pankso@759 | 141 *) |
pankso@759 | 142 exit 0 ;; |
pankso@759 | 143 esac |
pankso@759 | 144 } |
pankso@759 | 145 |
al@939 | 146 |
pankso@759 | 147 # |
pankso@759 | 148 # Commands |
pankso@759 | 149 # |
pankso@759 | 150 |
pankso@759 | 151 case "$1" in |
al@813 | 152 -h|--help) usage ;; |
al@813 | 153 list-hosts) list_hosts ;; |
al@813 | 154 ""|--*) scpbox ;; |
al@813 | 155 *) usage ;; |
pankso@759 | 156 esac |
pankso@759 | 157 |
pankso@759 | 158 exit 0 |