diff --git a/setup.sh b/setup.sh index ac07142..1eab429 100644 --- a/setup.sh +++ b/setup.sh @@ -19,145 +19,145 @@ # Email: oneseveneight@airmail.cc is_substring(){ - case $2 in - *$1*) - return 0 - ;; - *) - return 1 - ;; - esac + case $2 in + *$1*) + return 0 + ;; + *) + return 1 + ;; + esac } configure_directories() { - server_name="$1" - local_dir="" - remote_dir="" - - echo "What would you like to call the local directory? (~/Remote/...)" - read -r answer - local_dir="$HOME/Remote/$answer" - mkdir -p "$local_dir" - echo "Created directory $local_dir" - echo "What directory on \"$server_name\" would you like to link it to? (Absolute path)" - read -r answer - remote_dir="$answer" - echo "Linking directory $local_dir to $remote_dir on \"$server_name\"" - sshfs "$server_name:$remote_dir" "$local_dir" - echo "Done, enjoy!" + server_name="$1" + local_dir="" + remote_dir="" + + echo "What would you like to call the local directory? (~/Remote/...)" + read -r answer + local_dir="$HOME/Remote/$answer" + mkdir -p "$local_dir" + echo "Created directory $local_dir" + echo "What directory on \"$server_name\" would you like to link it to? (Absolute path)" + read -r answer + remote_dir="$answer" + echo "Linking directory $local_dir to $remote_dir on \"$server_name\"" + sshfs "$server_name:$remote_dir" "$local_dir" + echo "Done, enjoy!" } attempt_login() { - server_name="$1" - ssh_temp_config="$2" - ssh_config="$3" + server_name="$1" + ssh_temp_config="$2" + ssh_config="$3" - echo "Attempting to log in with configuration for \"$server_name\"" - if ssh -qF "$ssh_temp_config" "$server_name" exit - then - echo "Login successful! Writing ssh config..." - cp "$ssh_temp_config" "$ssh_config" - echo "Would you like to configure sshfs for this server? (y/n)" - read -r answer - case "$answer" in - "y") - configure_directories "$server_name" - ;; - "n") - echo "All right, you're all done!" - echo "Exiting..." - ;; - "*") - echo "\"$answer\" was not recognized as an answer, please enter 'y' or 'n'" - esac - else - echo "Login failed, what would you like to do?" - echo " 1) Try logging in again" - echo " 2) Re-configure my credentials" - read -r answer - case "$answer" in - "1") - attempt_login "$server_name" "$ssh_temp_config" "$ssh_config" - ;; - "2") - setup_keys "$server_address" - ;; - esac - fi + echo "Attempting to log in with configuration for \"$server_name\"" + if ssh -qF "$ssh_temp_config" "$server_name" exit + then + echo "Login successful! Writing ssh config..." + cp "$ssh_temp_config" "$ssh_config" + echo "Would you like to configure sshfs for this server? (y/n)" + read -r answer + case "$answer" in + "y") + configure_directories "$server_name" + ;; + "n") + echo "All right, you're all done!" + echo "Exiting..." + ;; + "*") + echo "\"$answer\" was not recognized as an answer, please enter 'y' or 'n'" + esac + else + echo "Login failed, what would you like to do?" + echo " 1) Try logging in again" + echo " 2) Re-configure my credentials" + read -r answer + case "$answer" in + "1") + attempt_login "$server_name" "$ssh_temp_config" "$ssh_config" + ;; + "2") + setup_keys "$server_address" + ;; + esac + fi } setup_keys() { - server_address="$1" - server_name="$2" - login="" - key_path="" - ssh_dir="" - key_type="" + server_address="$1" + server_name="$2" + login="" + key_path="" + ssh_dir="" + key_type="" - echo "Configuring \"$server_address\" as \"$server_name\"" - echo "What is your login name for this server?" - read -r login - echo "Where is the pivate key you use for this account (Absolute path)" - read -r key_path - if test -r "$key_path" - then - echo "File found, configuring ssh..." - ssh_dir="$HOME/.ssh" - ssh_host_dir="$HOME/.ssh/$server_name" - key_type=$(head -n 1 "$key_path" \ - | cut -f 2 -d ' ' \ - | tr '[:upper:]' '[:lower:]') - test -d "$ssh_dir" || mkdir "$ssh_dir" - test -d "$ssh_host_dir" || mkdir "$ssh_host_dir" - echo "Key appears to be of type \"$key_type\"" - echo "Generating public key..." - ssh-keygen -y -f "$key_path" > "$ssh_host_dir/id_$key_type.pub" - echo "Copying private key..." - cp "$key_path" "$ssh_host_dir/id_$key_type" - echo "Saving configuration..." - test -e "$ssh_dir/config" || touch "$ssh_dir/config" + echo "Configuring \"$server_address\" as \"$server_name\"" + echo "What is your login name for this server?" + read -r login + echo "Where is the pivate key you use for this account (Absolute path)" + read -r key_path + if test -r "$key_path" + then + echo "File found, configuring ssh..." + ssh_dir="$HOME/.ssh" + ssh_host_dir="$HOME/.ssh/$server_name" + key_type=$(head -n 1 "$key_path" \ + | cut -f 2 -d ' ' \ + | tr '[:upper:]' '[:lower:]') + test -d "$ssh_dir" || mkdir "$ssh_dir" + test -d "$ssh_host_dir" || mkdir "$ssh_host_dir" + echo "Key appears to be of type \"$key_type\"" + echo "Generating public key..." + ssh-keygen -y -f "$key_path" > "$ssh_host_dir/id_$key_type.pub" + echo "Copying private key..." + cp "$key_path" "$ssh_host_dir/id_$key_type" + echo "Saving configuration..." + test -e "$ssh_dir/config" || touch "$ssh_dir/config" - cp "$ssh_dir/config" "$ssh_dir/config.tmp" - { - echo "Host $server_name" - echo " HostName $server_address" - echo " port 22" - echo " User $login" - echo " IdentityFile $ssh_host_dir/id_$key_type" - } >> "$ssh_dir/config.tmp" - echo "Right now your configuration looks like this:" - cat "$ssh_dir/config.tmp" + cp "$ssh_dir/config" "$ssh_dir/config.tmp" + { + echo "Host $server_name" + echo " HostName $server_address" + echo " port 22" + echo " User $login" + echo " IdentityFile $ssh_host_dir/id_$key_type" + } >> "$ssh_dir/config.tmp" + echo "Right now your configuration looks like this:" + cat "$ssh_dir/config.tmp" - attempt_login "$server_name" "$ssh_dir/config.tmp" "$ssh_dir/config" - else - echo "$key_path could not be read." - echo "Either it doesn't exist, or you dont have the correct permissions, please try again." - setup_keys "$server_address" "$server_name" - fi + attempt_login "$server_name" "$ssh_dir/config.tmp" "$ssh_dir/config" + else + echo "$key_path could not be read." + echo "Either it doesn't exist, or you dont have the correct permissions, please try again." + setup_keys "$server_address" "$server_name" + fi } pick_account() { - answers="1 2" - answer="" - echo "What account would you like to configure?" - echo " 1) tilde.town" - echo " 2) tilde.team" - read -r answer - - if is_substring "$answer" "$answers" - then - case "$answer" in - "1") - setup_keys "tilde.town" "town" - ;; - "2") - setup_keys "tilde.team" "team" - ;; - esac - else - echo "\"$answer\" is not a valid option" - pick_account - fi + answers="1 2" + answer="" + echo "What account would you like to configure?" + echo " 1) tilde.town" + echo " 2) tilde.team" + read -r answer + + if is_substring "$answer" "$answers" + then + case "$answer" in + "1") + setup_keys "tilde.town" "town" + ;; + "2") + setup_keys "tilde.team" "team" + ;; + esac + else + echo "\"$answer\" is not a valid option" + pick_account + fi } pick_account diff --git a/setup_gui.sh b/setup_gui.sh index f6bd1b9..99ebf36 100644 --- a/setup_gui.sh +++ b/setup_gui.sh @@ -12,177 +12,177 @@ ssh_dir="$HOME/.ssh" priv_key_path=" " get_field(){ - field_num="$1" - info="$2" + field_num="$1" + info="$2" - echo "$info" | cut -f "$field_num" -d '|' + echo "$info" | cut -f "$field_num" -d '|' } error_box(){ - error_text="$1" - yad \ - --posx="$mouse_x" \ - --posy="$mouse_y" \ - --width 250 \ - --image "dialog-error" \ - --title "Error!" \ - --text "$error_text" \ - --button="OK":0 + error_text="$1" + yad \ + --posx="$mouse_x" \ + --posy="$mouse_y" \ + --width 250 \ + --image "dialog-error" \ + --title "Error!" \ + --text "$error_text" \ + --button="OK":0 } succ_box(){ - succ_text="$1" - yad \ - --posx="$mouse_x" \ - --posy="$mouse_y" \ - --width 250 \ - --image "dialog-info" \ - --title "Success!" \ - --text "$succ_text" \ - --button="OK":0 + succ_text="$1" + yad \ + --posx="$mouse_x" \ + --posy="$mouse_y" \ + --width 250 \ + --image "dialog-info" \ + --title "Success!" \ + --text "$succ_text" \ + --button="OK":0 } dec_box(){ - error_text="$1" - yad \ - --posx="$mouse_x" \ - --posy="$mouse_y" \ - --width 250 \ - --image "dialog-error" \ - --title "Error!" \ - --text "$error_text" \ - --button="No":1 \ - --button="Yes":0 - return $? + error_text="$1" + yad \ + --posx="$mouse_x" \ + --posy="$mouse_y" \ + --width 250 \ + --image "dialog-error" \ + --title "Error!" \ + --text "$error_text" \ + --button="No":1 \ + --button="Yes":0 + return $? } info_box(){ - info_text="$1" - yad \ - --posx="$mouse_x" \ - --posy="$mouse_y" \ - --no-buttons \ - --width 250 \ - --image "dialog-info" \ - --title "Info" \ - --text "$info_text" + info_text="$1" + yad \ + --posx="$mouse_x" \ + --posy="$mouse_y" \ + --no-buttons \ + --width 250 \ + --image "dialog-info" \ + --title "Info" \ + --text "$info_text" } get_info() { - error_num=0 - error_msg="" + error_num=0 + error_msg="" - info=$(yad \ - --posx="$mouse_x" \ - --posy="$mouse_y" \ - --title="New server setup" \ - --text="Add a new server" \ - --form \ - --field="Server":CB \ - --field="Short Name" \ - --field="Login" \ - --field="Port" \ - --field="SSH Directory":DIR \ - --field="Private key":FL \ - --button="Cancel":1 \ - --button="Continue":0 \ - "$server_address" "$server_name" "$login" "$ssh_port" "$ssh_dir" "$priv_key_path") - [ $? -ne 0 ] && exit # Shellcheck will yell at me for this, perhaps find a better way? - - server_address=$(get_field 1 "$info") - server_name=$(get_field 2 "$info") - login=$(get_field 3 "$info") - ssh_port=$(get_field 4 "$info") - ssh_dir=$(get_field 5 "$info") - priv_key_path=$(get_field 6 "$info") - - if test -z "$login" - then - error_msg="No login provided!" - error_num=$(( error_num + 1)) - fi + info=$(yad \ + --posx="$mouse_x" \ + --posy="$mouse_y" \ + --title="New server setup" \ + --text="Add a new server" \ + --form \ + --field="Server":CB \ + --field="Short Name" \ + --field="Login" \ + --field="Port" \ + --field="SSH Directory":DIR \ + --field="Private key":FL \ + --button="Cancel":1 \ + --button="Continue":0 \ + "$server_address" "$server_name" "$login" "$ssh_port" "$ssh_dir" "$priv_key_path") + [ $? -ne 0 ] && exit # Shellcheck will yell at me for this, perhaps find a better way? + + server_address=$(get_field 1 "$info") + server_name=$(get_field 2 "$info") + login=$(get_field 3 "$info") + ssh_port=$(get_field 4 "$info") + ssh_dir=$(get_field 5 "$info") + priv_key_path=$(get_field 6 "$info") + + if test -z "$login" + then + error_msg="No login provided!" + error_num=$(( error_num + 1)) + fi - if test -d "$(echo "$priv_key_path" | sed 's/\/ *$//')" - then - error_msg="$error_msg\\nNo private key provided!" - error_num=$(( error_num + 1)) - fi + if test -d "$(echo "$priv_key_path" | sed 's/\/ *$//')" + then + error_msg="$error_msg\\nNo private key provided!" + error_num=$(( error_num + 1)) + fi - if [ $error_num -gt 0 ] - then - error_box "$error_msg" \ - && get_info - fi + if [ $error_num -gt 0 ] + then + error_box "$error_msg" \ + && get_info + fi - configure_server + configure_server } configure_server() { - ssh_current_config="$ssh_dir/config" - ssh_temp_config="$ssh_dir/config.tmp" - ssh_host_dir="$ssh_dir/$server_address" - key_type=$(head -n 1 "$priv_key_path" \ - | cut -f 2 -d ' ' \ - | tr '[:upper:]' '[:lower:]') + ssh_current_config="$ssh_dir/config" + ssh_temp_config="$ssh_dir/config.tmp" + ssh_host_dir="$ssh_dir/$server_address" + key_type=$(head -n 1 "$priv_key_path" \ + | cut -f 2 -d ' ' \ + | tr '[:upper:]' '[:lower:]') - test -e "$ssh_current_config" \ - || touch "$ssh_current_config" - cp "$ssh_current_config" "$ssh_temp_config" + test -e "$ssh_current_config" \ + || touch "$ssh_current_config" + cp "$ssh_current_config" "$ssh_temp_config" - if grep -qi "Host $server_name" "$ssh_current_config" - then - dec_box "Host named $server_name already exists, overwrite?" \ - || get_info + if grep -qi "Host $server_name" "$ssh_current_config" + then + dec_box "Host named $server_name already exists, overwrite?" \ + || get_info - if ! dec_box "Keep old config in file? (ssh will use the new one)" - then - IFS="" - in_old_host_block=0 - while read -r line - do - if echo "$line" | grep -q "Host $server_name" - then - in_old_host_block=0 - elif echo "$line" | grep -q "Host " - then - in_old_host_block=1 - fi - - [ $in_old_host_block -eq 1 ] \ - && echo "$line" - done < "$ssh_current_config" > "$ssh_temp_config" - fi - fi + if ! dec_box "Keep old config in file? (ssh will use the new one)" + then + IFS="" + in_old_host_block=0 + while read -r line + do + if echo "$line" | grep -q "Host $server_name" + then + in_old_host_block=0 + elif echo "$line" | grep -q "Host " + then + in_old_host_block=1 + fi + + [ $in_old_host_block -eq 1 ] \ + && echo "$line" + done < "$ssh_current_config" > "$ssh_temp_config" + fi + fi - mkdir -p "$ssh_host_dir" - cp "$priv_key_path" "$ssh_host_dir/id_$key_type" + mkdir -p "$ssh_host_dir" + cp "$priv_key_path" "$ssh_host_dir/id_$key_type" - { - echo "Host $server_name" - echo " HostName $server_address" - echo " Port $ssh_port" - echo " User $login" - echo " IdentityFile $ssh_host_dir/id_$key_type" - } >> "$ssh_temp_config" + { + echo "Host $server_name" + echo " HostName $server_address" + echo " Port $ssh_port" + echo " User $login" + echo " IdentityFile $ssh_host_dir/id_$key_type" + } >> "$ssh_temp_config" - info_box "Attempting to log in with the provided credentials" & - info_pid=$(( $! + 2 )) # yikes, is this safe? - echo "$ssh_temp_config" - echo "$server_address" - if ssh -qF "$ssh_temp_config" "$server_name" exit - then - kill $info_pid - succ_box "Login success!\\nAccount for $server_address created!" - cp "$ssh_temp_config" "$ssh_current_config" - rm "$ssh_temp_config" - exit # Without this the "Host already exists" box appears, investigate. - else - kill $info_pid - error_box "Login failed, please try again" - get_info - fi + info_box "Attempting to log in with the provided credentials" & + info_pid=$(( $! + 2 )) # yikes, is this safe? + echo "$ssh_temp_config" + echo "$server_address" + if ssh -qF "$ssh_temp_config" "$server_name" exit + then + kill $info_pid + succ_box "Login success!\\nAccount for $server_address created!" + cp "$ssh_temp_config" "$ssh_current_config" + rm "$ssh_temp_config" + exit # Without this the "Host already exists" box appears, investigate. + else + kill $info_pid + error_box "Login failed, please try again" + get_info + fi } get_info diff --git a/yad.sh b/yad.sh index 1f86001..90c4b54 100644 --- a/yad.sh +++ b/yad.sh @@ -6,76 +6,76 @@ ssh_dir="$HOME/.ssh" priv_key_path=" " get_field(){ - field_num="$1" - info="$2" + field_num="$1" + info="$2" - echo "$info" | cut -f "$field_num" -d '|' + echo "$info" | cut -f "$field_num" -d '|' } error_box(){ - error_text="$1" - echo "Error: $error_text" - yad \ - --width "250" \ - --image "dialog-error" \ - --title "Error!" \ - --text "$error_text" + error_text="$1" + echo "Error: $error_text" + yad \ + --width "250" \ + --image "dialog-error" \ + --title "Error!" \ + --text "$error_text" } info_box(){ - info_text="$1" - echo "$info_text" - yad \ - --no-buttons \ - --width "250" \ - --image "dialog-info" \ - --title "Info" \ - --text "$info_text" + info_text="$1" + echo "$info_text" + yad \ + --no-buttons \ + --width "250" \ + --image "dialog-info" \ + --title "Info" \ + --text "$info_text" } get_info() { - error_num="0" - error_msg="" - info=$(yad \ - --title="New server setup" \ - --text="Add a new server" \ - --form \ - --field="Server":CB \ - --field="Login" \ - --field="SSH Directory":DIR \ - --field="Private key":FL \ - "$server_address" "$login" "$ssh_dir" "$priv_key_path") - - server_address=$(get_field "1" "$info") - login=$(get_field "2" "$info") - ssh_dir=$(get_field "3" "$info") - priv_key_path=$(get_field "4" "$info") - - if test -z "$login" - then - error_msg="No login provided!" - error_num=$(( error_num + 1)) - fi + error_num="0" + error_msg="" + info=$(yad \ + --title="New server setup" \ + --text="Add a new server" \ + --form \ + --field="Server":CB \ + --field="Login" \ + --field="SSH Directory":DIR \ + --field="Private key":FL \ + "$server_address" "$login" "$ssh_dir" "$priv_key_path") + + server_address=$(get_field "1" "$info") + login=$(get_field "2" "$info") + ssh_dir=$(get_field "3" "$info") + priv_key_path=$(get_field "4" "$info") + + if test -z "$login" + then + error_msg="No login provided!" + error_num=$(( error_num + 1)) + fi - if test -d "$(echo "$priv_key_path" | sed 's/\/ *$//')" - then - error_msg="$error_msg\nNo private key provided!" - error_num=$(( error_num + 1)) - fi + if test -d "$(echo "$priv_key_path" | sed 's/\/ *$//')" + then + error_msg="$error_msg\nNo private key provided!" + error_num=$(( error_num + 1)) + fi - if [ $error_num -gt '0' ] - then - error_box "$error_msg" - get_info - fi + if [ $error_num -gt '0' ] + then + error_box "$error_msg" + get_info + fi } test_info() { - info_box "Attempting to log in with the provided credentials" - if ssh -qF "$ssh_temp_config" "$server_name" exit - then - info_box "Login success! writing config..." - fi + info_box "Attempting to log in with the provided credentials" + if ssh -qF "$ssh_temp_config" "$server_name" exit + then + info_box "Login success! writing config..." + fi } get_info