From 3bb23e8e316452c40eaa0917c8f4be1a2f59ff38 Mon Sep 17 00:00:00 2001 From: Luiz <40257388+luizfelipevbll@users.noreply.github.com> Date: Wed, 29 Dec 2021 06:32:29 -0300 Subject: [PATCH] feat(transfer): allow encryption of uploads using GPG (#9983) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Marc Cornellà --- plugins/transfer/README.md | 39 +++++--- plugins/transfer/transfer.plugin.zsh | 140 ++++++++++++++++----------- 2 files changed, 112 insertions(+), 67 deletions(-) diff --git a/plugins/transfer/README.md b/plugins/transfer/README.md index 5fa064445..825c9a283 100644 --- a/plugins/transfer/README.md +++ b/plugins/transfer/README.md @@ -2,23 +2,40 @@ [`transfer.sh`](https://transfer.sh) is an easy to use file sharing service from the command line -## Usage +To use it, add `transfer` to the plugins array in your zshrc file: -Add `transfer` to your plugins array in your zshrc file: ```zsh plugins=(... transfer) ``` -Then you can: +## Usage -- transfer a file: +- Transfer a file: `transfer file.txt`. -```zsh -transfer file.txt -``` +- Transfer a whole directory (it will be automatically compressed): `transfer dir`. -- transfer a whole directory (it will be automatically compressed): +### Encryption / Decryption -```zsh -transfer directory/ -``` +- Encrypt and upload a file with symmetric cipher and create ASCII armored output: + + ```zsh + transfer file -ca + ``` + +- Encrypt and upload directory with symmetric cipher and gpg output: + + ```zsh + transfer directory -ca + ``` + +- Decrypt file: + + ```zsh + gpg -d file -ca + ``` + +- Decrypt directory: + + ```zsh + gpg -d your_archive.tgz.gpg | tar xz + ``` diff --git a/plugins/transfer/transfer.plugin.zsh b/plugins/transfer/transfer.plugin.zsh index db744b0cd..b34e115ce 100644 --- a/plugins/transfer/transfer.plugin.zsh +++ b/plugins/transfer/transfer.plugin.zsh @@ -1,69 +1,97 @@ -# transfer.sh Easy file sharing from the command line -# transfer Plugin -# Usage Example : -# > transfer file.txt -# > transfer directory/ - - - # Author: # Remco Verhoef # https://gist.github.com/nl5887/a511f172d3fb3cd0e42d # Modified to use tar command instead of zip # -curl --version 2>&1 > /dev/null -if [ $? -ne 0 ]; then - echo "Could not find curl." +transfer() { + # check arguments + if [[ $# -eq 0 ]]; then + cat <> $tmpfile + else + curl --progress-bar --upload-file - "https://transfer.sh/$item" >> $tmpfile + fi + else + basename=$(basename "$item" | sed -e 's/[^a-zA-Z0-9._-]/-/g') + + if [[ ! -e $item ]]; then + echo "File $item doesn't exist." + return 1 + fi + + if [[ -d $item ]]; then + # tar directory and transfer + tarfile=$(mktemp -t transferXXX.tar.gz) + cd $(dirname $item) || { + echo "Error: Could not change to directory $(dirname $item)" return 1 + } + + tar -czf $tarfile $(basename $item) + if (( crypt )); then + gpg -cao - "$tarfile" | curl --progress-bar -T "-" "https://transfer.sh/$basename.tar.gz.gpg" >> $tmpfile + else + curl --progress-bar --upload-file "$tarfile" "https://transfer.sh/$basename.tar.gz" >> $tmpfile + fi + rm -f $tarfile + else + # transfer file + if (( crypt )); then + gpg -cao - "$item" | curl --progress-bar -T "-" "https://transfer.sh/$basename.gpg" >> $tmpfile + else + curl --progress-bar --upload-file "$item" "https://transfer.sh/$basename" >> $tmpfile + fi fi + fi - # get temporarily filename, output is written to this file show progress can be showed - tmpfile=$( mktemp -t transferXXX ) - - # upload stdin or file - file=$1 + # cat output link + cat $tmpfile + # add newline + echo - if tty -s; - then - basefile=$(basename "$file" | sed -e 's/[^a-zA-Z0-9._-]/-/g') - - if [ ! -e $file ]; - then - echo "File $file doesn't exists." - return 1 - fi - - if [ -d $file ]; - then - echo $file - # tar directory and transfer - tarfile=$( mktemp -t transferXXX.tar.gz ) - cd $(dirname $file) && tar -czf $tarfile $(basename $file) - curl --progress-bar --upload-file "$tarfile" "https://transfer.sh/$basefile.tar.gz" >> $tmpfile - rm -f $tarfile - else - # transfer file - curl --progress-bar --upload-file "$file" "https://transfer.sh/$basefile" >> $tmpfile - fi - else - # transfer pipe - curl --progress-bar --upload-file "-" "https://transfer.sh/$file" >> $tmpfile - fi - - # cat output link - cat $tmpfile - # add newline - echo - - # cleanup - rm -f $tmpfile + # cleanup + rm -f $tmpfile }