8 Commits

Author SHA1 Message Date
fbt
3ac25bbeb2 simpler sugar
Signed-off-by: fbt <fbt@fleshless.org>
2020-05-24 03:57:17 +03:00
fbt
522dc0e1f6 group curl settings and make em configurable at the same time
Signed-off-by: fbt <fbt@fleshless.org>
2020-05-24 03:43:39 +03:00
fbt
6e9046367f wut
Signed-off-by: fbt <fbt@fleshless.org>
2019-12-04 14:14:13 +03:00
fbt
67ddff1306 indentation
Signed-off-by: fbt <fbt@fleshless.org>
2019-12-04 14:13:03 +03:00
fbt
c89d90f67c Just use this in a wrapper; this was a bad idea
Signed-off-by: fbt <fbt@fleshless.org>
2019-12-04 14:12:01 +03:00
fbt
2beb1c0638 these have no reason not to be flags
Signed-off-by: fbt <fbt@fleshless.org>
2019-11-26 01:53:22 +03:00
fbt
8804a855b3 and some other stuff
Signed-off-by: fbt <fbt@fleshless.org>
2019-11-26 01:49:12 +03:00
fbt
7858829ec4 support setting the secret in env vars
Signed-off-by: fbt <fbt@fleshless.org>
2019-11-26 01:46:00 +03:00
2 changed files with 69 additions and 88 deletions

5
config/ufw Normal file
View File

@@ -0,0 +1,5 @@
# Put your actual secret here, this is just a random string
secret = 'rooxoosh7Aese7phiPh3Choh3uthiTha'
# Override the default common curl behaviour:
#curl() { command curl -sL "$@"; }

100
ufw
View File

@@ -23,15 +23,16 @@ msg() {
err() { printf '(error) %s\n' "$*" >&2; } err() { printf '(error) %s\n' "$*" >&2; }
curl() { command curl -sL "$@"; }
secret() { shift; secret=( "$@" ); }
usage() { usage() {
_cat <<- EOF _cat <<- EOF
Usage: ufw [-RsF] [-D num] [file/url]" Usage: ufw [-RsF] [-D num] [file/url]
Flags: Flags:
-R|--remove-file # Remove the file after uploading. -R|--remove-file # Remove the file after uploading.
-s|--screenshot # Make a screenshot and upload it instead of a file.
-F|--fullscreen # Make a fullscreen shot instead of prompting for a window/area. Implies -s.
-d|--description # Supply a description. -d|--description # Supply a description.
-D|--screenshot-delay <num> # Delay the shot by <num> seconds.
-p|--public # Make the file public. -p|--public # Make the file public.
-n|--no-notify # Don't send immediate notifications for this upload. -n|--no-notify # Don't send immediate notifications for this upload.
--notify # Force a notification for this upload. --notify # Force a notification for this upload.
@@ -47,7 +48,6 @@ usage() {
Config options (~/.config/ufw): Config options (~/.config/ufw):
secret # Your personal token. Get it at https://zfh.so/settings_form secret # Your personal token. Get it at https://zfh.so/settings_form
cfg_screenshot_ext # Screenshot file type, used by maim.
cfg_max_filesize # Maximum filesize (takes K, M and G suffixes). cfg_max_filesize # Maximum filesize (takes K, M and G suffixes).
# Others are self-explanatory: # Others are self-explanatory:
cfg_url_regex cfg_url_regex
@@ -56,6 +56,9 @@ usage() {
Environment variables: Environment variables:
UFW_CFG_FILE # Config file to read, defaults to \$XDG_CONFIG_DIR/ufw UFW_CFG_FILE # Config file to read, defaults to \$XDG_CONFIG_DIR/ufw
UFW_SECRET # Your API secret
UFW_TMP_DIR
UFW_URL
EOF EOF
} }
@@ -82,7 +85,7 @@ get_max_filesize() {
get_album_id() { get_album_id() {
declare api_response api_status api_status_message declare api_response api_status api_status_message
api_response=$( curl -fsL "$cfg_service_url/albumctl.json?m=new&name=$1&secret=$secret" ) api_response=$( curl -f "$cfg_service_url/albumctl.json?m=new&name=$1&secret=$secret" )
get_api_status <<< "$api_response" get_api_status <<< "$api_response"
@@ -98,10 +101,6 @@ get_album_id() {
upload() { upload() {
declare api_response api_status api_status_message declare api_response api_status api_status_message
if (( flag_scn )); then
flag_rm=1
file=$(take_screenshot) || { return 1; }
else
(( $# )) || { (( $# )) || {
usage usage
return 1 return 1
@@ -115,7 +114,7 @@ upload() {
get_max_filesize || { return 1; } get_max_filesize || { return 1; }
curl --max-filesize "$max_filesize_bytes" -sL "$target" > "$file" curl --max-filesize "$max_filesize_bytes" "$target" > "$file"
curl_result=$? curl_result=$?
if (( curl_result )); then if (( curl_result )); then
@@ -134,7 +133,6 @@ upload() {
return 1 return 1
} }
fi fi
fi
get_file_hash "$file" get_file_hash "$file"
@@ -142,7 +140,7 @@ upload() {
get_album_id "$album_name" get_album_id "$album_name"
fi fi
api_response=$( curl -sL \ api_response=$( curl \
-F file="@$file" \ -F file="@$file" \
-F api_format='json' \ -F api_format='json' \
-F flag_private="$flag_private" \ -F flag_private="$flag_private" \
@@ -189,7 +187,7 @@ upload() {
get_shortlink() { get_shortlink() {
declare url=$1 api_response api_status api_status_message declare url=$1 api_response api_status api_status_message
api_response=$( curl -sL "$cfg_service_url/shrink.json?url=${url}&secret=$secret" ) api_response=$( curl "$cfg_service_url/shrink.json?url=${url}&secret=$secret" )
get_api_status <<< "$api_response" get_api_status <<< "$api_response"
if (( api_status == 200 )); then if (( api_status == 200 )); then
@@ -203,28 +201,6 @@ get_shortlink() {
fi fi
} }
take_screenshot() {
declare tmp_file
[[ "$scn_exec" ]] || { scn_exec=$(type -P maim); }
[[ "$scn_exec" ]] || {
err "Please install maim to use this function"
return 1
}
(( "$flag_scn_fullscreen" )) || { scn_args+=( '-s' ); }
[[ "$cfg_scn_delay" ]] && { scn_args+=( "-d" "$cfg_scn_delay" ); }
tmp_file="$(_mktemp "${cfg_tmp_dir}" ".${cfg_screenshot_ext}")"
maim "${scn_args[@]}" "$tmp_file" || {
err "Failed to take a screenshot."
return 1
}
printf '%s\n' "$tmp_file"
}
get_api_status() { get_api_status() {
read -d '' -r api_status api_status_message < <( read -d '' -r api_status api_status_message < <(
jq -r '.status.code, .status.message' jq -r '.status.code, .status.message'
@@ -253,7 +229,7 @@ _mktemp() {
get_my_ip() { get_my_ip() {
declare api_response api_status api_status_message my_ip declare api_response api_status api_status_message my_ip
api_response=$( curl -sl "$cfg_service_url/ip.json" ) api_response=$( curl "$cfg_service_url/ip.json" )
get_api_status <<< "$api_response" get_api_status <<< "$api_response"
@@ -268,7 +244,7 @@ get_my_ip() {
login() { login() {
declare api_response declare api_response
api_response=$( curl -sl "$cfg_service_url/token_request.json?login=$login" ) api_response=$( curl "$cfg_service_url/token_request.json?login=$login" )
if get_api_status <<< "$api_response"; then if get_api_status <<< "$api_response"; then
printf 'Check your email.\n' printf 'Check your email.\n'
@@ -344,7 +320,7 @@ set_argv() {
} }
main() { main() {
declare args file target flag_private flag_rm flag_scn flag_scn_fullscreen cfg_scn_delay flag_notify declare args file target flag_private flag_rm flag_notify
declare flag_shortlink declare flag_shortlink
# Defaults for XDG # Defaults for XDG
@@ -359,6 +335,10 @@ main() {
cfg_url_regex='^[A-Za-z]([A-Za-z0-9+.-]+)?://.+' cfg_url_regex='^[A-Za-z]([A-Za-z0-9+.-]+)?://.+'
cfg_file=${UFW_CFG_FILE:-"$XDG_CONFIG_DIR/ufw"} cfg_file=${UFW_CFG_FILE:-"$XDG_CONFIG_DIR/ufw"}
[[ $UFW_SECRET ]] && secret=$UFW_SECRET
[[ $UFW_TMP_DIR ]] && cfg_tmp_dir=$UFW_TMP_DIR
[[ $UFW_URL ]] && cfg_service_url=$UFW_URL
[[ $1 ]] || { usage; return 1; } [[ $1 ]] || { usage; return 1; }
if [[ -f "$cfg_file" ]]; then if [[ -f "$cfg_file" ]]; then
@@ -372,44 +352,40 @@ main() {
: ${cfg_file:="$XDG_CONFIG_DIR/ufw"} : ${cfg_file:="$XDG_CONFIG_DIR/ufw"}
: ${cfg_tmp_dir:="$XDG_RUNTIME_DIR/ufw"} : ${cfg_tmp_dir:="$XDG_RUNTIME_DIR/ufw"}
: ${cfg_service_url:='https://8fw.me'} : ${cfg_service_url:='https://8fw.me'}
: ${cfg_screenshot_ext:='png'}
: ${cfg_max_filesize:='200M'} : ${cfg_max_filesize:='200M'}
: ${flag_shortlink:=0} : ${flag_shortlink:=0}
: ${flag_directlink:=1} : ${flag_directlink:=1}
while [[ "$1" ]]; do while [[ "$1" ]]; do
case "$1" in case "$1" in
-h|--help|--usage) usage; return;; (-h|--help|--usage) usage; return;;
-D|--screenshot-delay) cfg_scn_delay="$2"; shift;; (-m|--max-filesize) cfg_max_filesize=$2; shift;;
-m|--max-filesize) cfg_max_filesize=$2; shift;; (-A|--album-name) album_name=$2; shift;;
-A|--album-name) album_name=$2; shift;; (-t|--tags) tags=$2; shift;;
-t|--tags) tags=$2; shift;;
-i|--my-ip) action='getmyip';; (--tmp-dir) cfg_tmp_dir=$2; shift;;
-u|--shorten) action='url';; (--url) cfg_service_url=$2; shift;;
(--max-filesize) cfg_max_filesize=$2; shift;;
-p|--public) flag_private='false';; (-i|--my-ip) action='getmyip';;
-R|--remove-file) flag_rm='1';; (-u|--shorten) action='url';;
-s|--screenshot) flag_scn='1';;
-S|--short-url) flag_shortlink=1;;
-P|--page-url) flag_directlink=0;;
-q|--quiet) flag_quiet=1;;
-v|--void) flag_void=1;;
--notify) flag_notify=1;; (-p|--public) flag_private='false';;
--no-notify|-n) flag_notify=0;; (-R|--remove-file) flag_rm='1';;
(-S|--short-url) flag_shortlink=1;;
(-P|--page-url) flag_directlink=0;;
(-q|--quiet) flag_quiet=1;;
(-v|--void) flag_void=1;;
-F|--fullscreen) (--notify) flag_notify=1;;
flag_scn='1' (--no-notify|-n) flag_notify=0;;
flag_scn_fullscreen='1'
;;
-a|--album-id) (-a|--album-id)
misc_curl_args+=( -F "album_id=$2" ) misc_curl_args+=( -F "album_id=$2" )
shift shift
;; ;;
-d|--description) (-d|--description)
misc_curl_args+=( -F "description=$2" ) misc_curl_args+=( -F "description=$2" )
shift shift
;; ;;