forked from creations/grabit
Compare commits
6 commits
Author | SHA1 | Date | |
---|---|---|---|
6ea44a5bf0 | |||
c5cc8bc4ff | |||
8760f14b9e | |||
1a31b8441d | |||
6040cb0142 | |||
270d531d6e |
6 changed files with 62 additions and 29 deletions
41
LICENSE
41
LICENSE
|
@ -1,21 +1,28 @@
|
|||
MIT License
|
||||
BSD 3-Clause License
|
||||
|
||||
Copyright (c) 2025 Creation's
|
||||
Copyright (c) 2025, [fullname]
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
1. Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
3. Neither the name of the copyright holder nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
|
|
@ -51,4 +51,4 @@ Upload clipboard image:
|
|||
- Shows a preview of the uploaded image.
|
||||
|
||||
## License
|
||||
[MIT](LICENSE)
|
||||
[BSD-3](LICENSE)
|
||||
|
|
|
@ -123,6 +123,24 @@ setup_domain() {
|
|||
done
|
||||
|
||||
if [[ "$change_options" =~ ^(y|Y)$ ]]; then
|
||||
while true; do
|
||||
echo -ne "${CYAN}Enter override domain for accessing files (e.g. random.domain.com): ${RESET}"
|
||||
read override_domain
|
||||
|
||||
if [[ -z "$override_domain" ]]; then
|
||||
echo -e "${YELLOW}No override domain set.${RESET}"
|
||||
break
|
||||
fi
|
||||
|
||||
if [[ "$override_domain" =~ ^[a-zA-Z0-9.-]+$ ]]; then
|
||||
set_value "x-zipline-domain" "$override_domain"
|
||||
echo -e "${GREEN}x-zipline-domain set to: $override_domain${RESET}"
|
||||
break
|
||||
else
|
||||
echo -e "${YELLOW}Invalid format. Must be like: domain.tld (no https, no trailing slash). Try again or press Enter to skip.${RESET}"
|
||||
fi
|
||||
done
|
||||
|
||||
echo -ne "${CYAN}Enter the number of max views (default: 0): ${RESET}"
|
||||
read max_views
|
||||
while [[ -n "$max_views" && ! "$max_views" =~ ^[0-9]+$ ]]; do
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
VENV_DIR="$SCRIPT_DIR/.venv"
|
||||
VENV_DIR="$HOME/.config/grabIT/.venv"
|
||||
|
||||
setup_venv() {
|
||||
if [[ ! -d "$VENV_DIR" ]]; then
|
||||
|
|
|
@ -25,6 +25,7 @@ declare -A ALLOWED_KEYS=(
|
|||
["x-zipline-image-compression-percent"]="^.+$"
|
||||
["x-zipline-original-name"]="^.+$"
|
||||
["x-zipline-format"]="^.+$"
|
||||
["x-zipline-domain"]="^.+$"
|
||||
)
|
||||
|
||||
REQUIRED_KEYS=(
|
||||
|
|
27
main.sh
27
main.sh
|
@ -1,6 +1,7 @@
|
|||
#!/bin/bash
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
[[ "$SCRIPT_DIR" == "/usr/bin" ]] && SCRIPT_DIR="/usr/share/grabit"
|
||||
|
||||
source "$SCRIPT_DIR/helpers/variables.sh"
|
||||
source "$SCRIPT_DIR/helpers/installer.sh"
|
||||
|
@ -136,7 +137,10 @@ if [[ ${#MISSING_COMMANDS[@]} -gt 0 ]]; then
|
|||
fi
|
||||
|
||||
send_notification() {
|
||||
[[ "$SHOW_NOTIFICATIONS" == "false" ]] && return
|
||||
local force="$4"
|
||||
if [[ "$SHOW_NOTIFICATIONS" == "false" && "$force" != "true" ]]; then
|
||||
return
|
||||
fi
|
||||
|
||||
local title="$1"
|
||||
local message="$2"
|
||||
|
@ -320,19 +324,16 @@ fi
|
|||
|
||||
HEADERS=()
|
||||
if [[ "$SERVICE" == "zipline" ]]; then
|
||||
declare -A ZIPLINE_HEADERS
|
||||
ZIPLINE_HEADERS=$(get_starting_with "x-zipline")
|
||||
for key in "${!ZIPLINE_HEADERS[@]}"; do
|
||||
header_name="${key#ZIPLINE__}" | tr '[:upper:]' '[:lower:]' | tr '_' '-'
|
||||
header_value="${ZIPLINE_HEADERS[$key]}"
|
||||
headers+=("-H" "$header_name: $header_value")
|
||||
mapfile -t zipline_keys < <(get_starting_with "x-zipline" | jq -r 'to_entries[] | "\(.key)=\(.value)"')
|
||||
for entry in "${zipline_keys[@]}"; do
|
||||
key="${entry%%=*}"
|
||||
value="${entry#*=}"
|
||||
headers+=("-H" "$key: $value")
|
||||
done
|
||||
fi
|
||||
|
||||
headers+=("-H" "${UPLOAD_HEADERS[$SERVICE]}: $AUTH")
|
||||
|
||||
echo headers "${headers[@]}"
|
||||
|
||||
FILE_URL=""
|
||||
RESPONSE=$(curl -s -w "%{http_code}" -o /tmp/upload_response.json \
|
||||
-X POST -F "file=@$FILE" "${headers[@]}" "$DOMAIN")
|
||||
|
@ -344,12 +345,14 @@ rm /tmp/upload_response.json
|
|||
if [[ "$HTTP_CODE" -ne 200 ]]; then
|
||||
echo -e "${RED}Error: Upload failed with status code $HTTP_CODE.${RESET}"
|
||||
echo "$BODY"
|
||||
send_notification "Upload failed" "Status code: $HTTP_CODE" "" "true"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! echo "$BODY" | jq . &>/dev/null; then
|
||||
echo -e "${RED}Error: Invalid JSON response from server.${RESET}"
|
||||
echo "$BODY"
|
||||
send_notification "Upload failed" "Invalid JSON from $SERVICE" "" "true"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
@ -357,6 +360,7 @@ FILE_URL=$(echo "$BODY" | jq -r ".${UPLOAD_JSON_KEYS[$SERVICE]}")
|
|||
if [[ "$FILE_URL" == "null" || -z "$FILE_URL" ]]; then
|
||||
echo -e "${RED}Error: File URL not found in response.${RESET}"
|
||||
echo "$BODY"
|
||||
send_notification "Upload failed" "Missing file URL in response" "" "true"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
@ -385,7 +389,10 @@ if [[ "$MIME_TYPE" == image/* ]]; then
|
|||
else
|
||||
if [[ "$SHOW_NOTIFICATIONS" == "true" ]]; then
|
||||
send_notification "Uploaded to $SERVICE" "$FILE_URL"
|
||||
play_sound
|
||||
play_sound
|
||||
else
|
||||
send_notification "Uploaded to $SERVICE" "$FILE_URL" "" "true"
|
||||
play_sound
|
||||
fi
|
||||
fi
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue