2020-03-12 07:31:37 +01:00
|
|
|
|
#!/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=true
|
|
|
|
|
flag_clipboard=false
|
|
|
|
|
flag_inline=false
|
2020-03-12 09:30:00 +01:00
|
|
|
|
flag_file=false
|
2020-03-12 10:13:34 +01:00
|
|
|
|
flag_url=false
|
2020-03-12 10:36:10 +01:00
|
|
|
|
flag_text=false
|
2020-03-12 07:31:37 +01:00
|
|
|
|
|
|
|
|
|
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}"
|
|
|
|
|
}
|
|
|
|
|
# ]]]
|
2020-03-12 09:30:00 +01:00
|
|
|
|
# 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."
|
2020-03-12 10:16:21 +01:00
|
|
|
|
else
|
|
|
|
|
debug_message "− Func is_file_exist : The content is not a file."
|
2020-03-12 09:30:00 +01:00
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
# ]]]
|
2020-03-12 10:13:34 +01:00
|
|
|
|
# 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=true
|
|
|
|
|
debug_message "− Func is_remote_url : The url (${_url}) seems to already point to the 0x0 service (${null_service_url})."
|
|
|
|
|
else
|
|
|
|
|
flag_url=false
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
# ]]]
|
2020-03-12 07:51:48 +01:00
|
|
|
|
# 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
|
2020-03-12 09:30:00 +01:00
|
|
|
|
is_file_exist "${_content}"
|
2020-03-12 10:13:34 +01:00
|
|
|
|
### Verify if it's a remote URL
|
|
|
|
|
is_remote_url "${_content}"
|
2020-03-12 07:51:48 +01:00
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
# ]]]
|
2020-03-12 07:31:37 +01:00
|
|
|
|
|
|
|
|
|
# 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}"
|
|
|
|
|
# ]]]
|
|
|
|
|
|
2020-03-12 07:51:48 +01:00
|
|
|
|
# Try to determine the type of the content (file, remote URL or text)
|
|
|
|
|
determine_content_type "${content_to_send}"
|
|
|
|
|
|
2020-03-12 10:36:10 +01:00
|
|
|
|
# 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
|
|
|
|
|
# ]]]
|
2020-03-12 07:31:37 +01:00
|
|
|
|
|
|
|
|
|
# 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
|