#!/bin/bash _qCol() { # print "easier" mapping of ANSI colors and controls local K="\033[1;30m" local R="\033[1;31m" local G="\033[1;32m" local B="\033[1;34m" local Y="\033[1;33m" local M="\033[1;35m" local C="\033[1;36m" local W="\033[1;37m" local k="\033[2;30m" local r="\033[2;31m" local g="\033[2;32m" local b="\033[2;34m" local y="\033[2;33m" local m="\033[2;35m" local c="\033[2;36m" local w="\033[2;37m" local bk="\033[40m" local br="\033[41m" local bg="\033[42m" local by="\033[43m" local bb="\033[44m" local bm="\033[45m" local bc="\033[46m" local bw="\033[47m" local S='\033[1m' #strong local s='\033[2m' #strong off local U='\033[4m' #underline local u='\033[24m' #underline off local z='\033[0m' #zero colors local Z='\033[0m' #zero colors local ic='\033[7m' #inverse colors local io='\033[27m' #inverse off local st='\033[9m' #strike on local so='\033[29m' #strike off local CLR='\033[2J' # Clear screen local CLREND='\033[K' # Clear to end of line local CLRBEG='\033[1K' # Clear to beginning of line local CLRSCR="$CLR"'\033[0;0H' # Clear screen, reset cursor local color_keys=" K R G B Y M C W k r g b y m c w S s U u z Z ic io st so bk br bg by bb bm bc bw CLR CLREND CLRBEG CLRSCR " [[ "$1" = "export" ]] && { local key local prefix="$2" [[ -z "$2" ]] && prefix=_c for key in $color_keys; do eval export ${prefix}${key}=\'${!key}\' done return } local arg val for ((arg=1;arg<=$#;arg++)) { val=${!arg} [[ ${color_keys} = *" $val "* ]] || { echo "No such color code '${val}'" >&2; return 1; } printf ${!val} } } _cont() { set +x _qCol G echo Continue _qCol z read continue _qCol Y echo ========================================= _qCol z set -x } _title() { _qCol G echo "$1" _qCol Y echo ========================================= _qCol z } set -e BIG="big file(1).ext" BIGS="big_file1.ext" SMALL="small file" SMALLS="small_file" IMAGE="image.jpg" test -f "$BIG" || dd if=/dev/zero of="$BIG" bs=8192 count=40000 test -f "$SMALL" ||dd if=/dev/urandom of="$SMALL" bs=4096 count=400 test -f "$IMAGE" || convert -size 640x480 xc:gray $IMAGE . ../.env function t00-rebuild-docker() { CWD=$PWD cd .. docker-compose up --build -d --force-recreate cd "$CWD" } function t01-maintenance-begin() { curl -fL -w "\n" \ -H "Secret: $FLASK_ACCESS_TOKEN" \ "$FLASK_PUBLIC_URL"/maintenance } function t02-upload-small-image() { pv "$IMAGE" | \ curl -fL -w "\n" -F file="@-" -X POST \ -H "Name: $IMAGE" \ -H "Max-Downloads: 4" \ -H "Expires-Days: 1" \ -H "Secret: $FLASK_ACCESS_TOKEN" \ "$FLASK_PUBLIC_URL"/upload } function t03-upload-small-file() { pv "$SMALL" | \ curl -fL -w "\n" -F file="@-" -X POST \ -H "Name: $SMALL" \ -H "Secret: $FLASK_ACCESS_TOKEN" \ "$FLASK_PUBLIC_URL"/upload } function t04-upload-large-file() { pv "$BIG" | \ curl -fL -w "\n" -F file="@-" -X POST \ -H "Name: $BIG" \ -H "Max-Downloads: 4" \ -H "Expires-Days: 1" \ -H "Secret: $FLASK_ACCESS_TOKEN" \ "$FLASK_PUBLIC_URL"/upload } function t05-check-db-manually() { sqlite3 ../data/flees.db "select * FROM files" } function t06-list-files() { curl -fL -w "\n" \ -H "Secret: $FLASK_ACCESS_TOKEN" \ "$FLASK_PUBLIC_URL"/ls } function t07-file-download() { download_url=$( curl -fL -w "\n" \ -H "Secret: $FLASK_ACCESS_TOKEN" \ "$FLASK_PUBLIC_URL"/ls | grep "$BIGS" | tail -n 1 | sed s,.*http,http, ) rm -f "$BIGS" wget "$download_url" } function t08-file-details() { download_url=$( curl -fL -w "\n" \ -H "Secret: $FLASK_ACCESS_TOKEN" \ "$FLASK_PUBLIC_URL"/ls | grep "$BIGS" | tail -n 1 | sed s,.*http,http, ) token_name=$( echo $download_url | sed s,.*/dl/,, ) curl -fL -w "\n" \ -H "Secret: $FLASK_ACCESS_TOKEN" \ "$FLASK_PUBLIC_URL"/details/"$token_name" } function t09-file-delete() { download_url=$( curl -fL -w "\n" \ -H "Secret: $FLASK_ACCESS_TOKEN" \ "$FLASK_PUBLIC_URL"/ls | grep "$BIGS" | tail -n 1 | sed s,.*http,http, ) token_name=$( echo $download_url | sed s,.*/dl/,, ) curl -fL -w "\n" \ -H "Secret: $FLASK_ACCESS_TOKEN" \ "$FLASK_PUBLIC_URL"/delete/"$token_name" } function t09-unlimited-downloads() { pv "$SMALL" | \ curl -fL -w "\n" -F file="@-" -X POST \ -H "Name: $SMALL" \ -H "Max-Downloads: -1" \ -H "Expires-Days: 1" \ -H "Secret: $FLASK_ACCESS_TOKEN" \ "$FLASK_PUBLIC_URL"/upload download_url=$( curl -fL -w "\n" \ -H "Secret: $FLASK_ACCESS_TOKEN" \ "$FLASK_PUBLIC_URL"/ls | grep "$SMALLS" | tail -n 1 | sed s,.*http,http, ) token_name=$( echo $download_url | sed s,.*/dl/,, ) for ((i=0;i<10;i++)); do curl -fL -w "\n" \ -H "Secret: $FLASK_ACCESS_TOKEN" \ "$FLASK_PUBLIC_URL"/dl/"$token_name" > /dev/null curl -fL -w "\n" \ -H "Secret: $FLASK_ACCESS_TOKEN" \ "$FLASK_PUBLIC_URL"/details/"$token_name" done } function t10-maintenance-post() { pv "$SMALL" | \ curl -fL -w "\n" -F file="@-" -X POST \ -H "Name: $SMALL" \ -H "Max-Downloads: 4" \ -H "Expires-Days: -5" \ -H "Secret: $FLASK_ACCESS_TOKEN" \ "$FLASK_PUBLIC_URL"/upload pv "$SMALL" | \ curl -fL -w "\n" -F file="@-" -X POST \ -H "Name: $SMALL" \ -H "Max-Downloads: 0" \ -H "Expires-Days: 3" \ -H "Secret: $FLASK_ACCESS_TOKEN" \ "$FLASK_PUBLIC_URL"/upload curl -fL -w "\n" \ -H "Secret: $FLASK_ACCESS_TOKEN" \ "$FLASK_PUBLIC_URL"/maintenance curl -fL -w "\n" \ -H "Secret: $FLASK_ACCESS_TOKEN" \ "$FLASK_PUBLIC_URL"/ls } function t11-get-mfl() { curl -fL \ -H "Secret: $FLASK_ACCESS_TOKEN" \ "$FLASK_PUBLIC_URL"/script/mfl > mfl chmod +x mfl } function t12-mfl-update() { ./mfl update } function t13-mfl-list() { ./mfl list ./mfl } function t14-mfl-upload() { ./mfl w mfl ./mfl w -d 1 -m 1 mfl } _getlist() { declare -F | awk '{ print $3 }' | grep -v ^_ echo exit } _getnext() { hitfound=0 for line in $( _getlist ); do if [[ $hitfound -eq 1 ]]; then echo "$line" return fi if [[ "$line" = "$1" ]]; then hitfound=1 fi done } _getchoice() { _getlist | \ smenu -m "Pick task" -n 20 -t 1 -a c:2,b m:3,b -s '/'$1 } next_task=0 while true; do choice=$( _getchoice $next_task ) if [[ -z "$choice" ]]; then break; fi _title "$choice" set -x "$choice" set +x _title "" #~ next_task=$(( next_task + 1 )) next_task=$( _getnext "$choice" ) done