scripts/send.to.0x0.sh

155 lines
4.3 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/sh
# .. vim: foldmarker=[[[,]]]:foldmethod=marker
# This script will try to:
## Get first argument
## Or get clipboard content if no argument
## Send this data to a file hosting service
## Print the generate url that hosting the content to stdout
## Or put it in the clipboard if no argument was given
# Vars [[[
debug=false
flag_clipboard=false
flag_inline=false
flag_file=false
flag_url=false
flag_text=false
null_service_url="https://null.101010.fr"
## Colors [[[
c_redb='\033[1;31m'
c_magentab='\033[1;35m'
c_reset='\033[0m'
## ]]]
# ]]]
# Functions
# Function to print a debug message [[[
debug_message() {
_message="${1}"
[ "${debug}" = "true" ] && printf "${c_magentab}%-6b${c_reset}\n" "DEBUG ${_message}"
}
# ]]]
# Function to check if the argument is a existent file [[[
is_file_exist() {
_file="${1}"
## If it's a non-empty file
if [ -s "${_file}" ]; then
flag_file=true
debug_message " Func is_file_exist: ${_file} seems to be a file and it's non-empty."
else
debug_message " Func is_file_exist: The content is not a file."
fi
}
# ]]]
# Function to check if the argument looks like a remote URL [[[
is_remote_url() {
_url="${1}"
## The variable will be considered as an URL if it's:
## Start with 1 to 5 alpha caracters followed by "://"
## Start with "www"
if printf -- '%s' "${_url}" | grep -q -E -- "^([[:alpha:]]{1,5}://|www)"
then
### Verify doesn't already comes from the 0x0 service
if printf -- '%s' "${_url}" | grep -q -E -- "${null_service_url}"
then
flag_url=false
debug_message " Func is_remote_url: The url (${_url}) seems to already point to the 0x0 service (${null_service_url})."
else
flag_url=true
debug_message " Func is_remote_url: The url (${_url}) seems to be a remote url."
fi
else
debug_message " Func is_remote_url: The content is not an URL."
fi
}
# ]]]
# Function to get content type [[[
determine_content_type() {
_content="${1}"
_content_nb_line=$(printf -- '%s\n' "${_content}" | wc -l)
debug_message " Determine type: Content has ${_content_nb_line} line(s) to send."
## If it's a one line content
if [ "${_content_nb_line}" -eq "1" ]; then
### Verify if it's a path to a existent file
is_file_exist "${_content}"
### Verify if it's a remote URL
is_remote_url "${_content}"
fi
}
# ]]]
# Verify argument [[[
case "$#" in
0 )
flag_clipboard=true
debug_message " Verify arg: No argument was given, try to use clipboard."
;;
1 )
flag_inline=true
debug_message " Verify arg: One argument was given, use it."
;;
* )
printf "${c_redb}%b${c_reset}\n" "Error: Expect one argument or a content in clipboard."
exit 1
;;
esac
# ]]]
# Get the content to be sended [[[
# Try to get content from first argument
if [ "${flag_inline}" = "true" ]; then
content_to_send="${1}"
fi
# Try to get content from clipboard
if [ "${flag_clipboard}" = "true" ]; then
content_to_send=$(xclip -out -selection clipboard)
fi
debug_message " Get Content: content to be sended: ${content_to_send}"
# ]]]
# Try to determine the type of the content (file, remote URL or text)
determine_content_type "${content_to_send}"
# Try to send the content according to it's type [[[
if [ "${flag_file}" = "true" ]; then
## Command to send a local file to 0x0 service
debug_message " send data: Send it as a file"
content_url=$(curl -sF"file=@${content_to_send}" "${null_service_url}")
elif [ "${flag_url}" = "true" ]; then
## Command to send a remote URL to 0x0 service
debug_message " send data: Send it as a remote URL"
content_url=$(curl -sF"url=${content_to_send}" "${null_service_url}")
else
## Otherwise, it's a content
flag_text=true
debug_message " send data: Send it as a text"
content_url=$(printf "%b" "${content_to_send}" | curl -sF'file=@-;' "${null_service_url}")
fi
# ]]]
# Manage the result [[[
## If the URL should simply be printed to stdout
if [ "${flag_inline}" = "true" ]; then
debug_message " Manage result: Print the result on stdout:"
printf "%b\n" "${content_url}"
fi
# If the URL should remplace the previous content of the clipboard
if [ "${flag_clipboard}" = "true" ]; then
debug_message " Manage result: Put the result in clipboard."
echo "${content_url}" | xclip -rmlastnl -selection clipboard
fi
# ]]]
exit 0