diff --git a/cloudsend.py b/cloudsend.py new file mode 100755 index 0000000..366b5ee --- /dev/null +++ b/cloudsend.py @@ -0,0 +1,98 @@ +#!/usr/bin/env python3 +import argparse +import logging +import owncloud +import gnupg +import os +import requests +import re +from icecream import ic + + +def isurl(text): + pattern = 'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+' + matcher = re.compile(pattern) + return matcher.match(text) + +def upload(file,url): + try: + oc = owncloud.Client.from_public_link(args.url) + ic(oc) + response = oc.drop_file(fn) + ic(response) + return response + except owncloud.owncloud.HTTPResponseError as e: + logging.error(f'Error while uploading file {fn} <{e}>') + +def upload_rq(file,url): + CLOUDURL="" + FOLDERTOKEN="" + +# FILENAME="$1" + +# CLOUDURL='' +# # if we have index.php in the URL, process accordingly +# if [[ $2 == *"index.php"* ]]; then +# CLOUDURL="${2%/index.php/s/*}" +# else +# CLOUDURL="${2%/s/*}" +# fi + +# FOLDERTOKEN="${2##*/s/}" +# -T "$FILENAME" -u "$FOLDERTOKEN":"$PASSWORD" -H "$HEADER" "$CLOUDURL/$PUBSUFFIX/$BFILENAME" +# if [ ! -f "$FILENAME" ]; then +# initError "Invalid input file: $FILENAME" +# fi + +# if [ -z "$CLOUDURL" ]; then +# initError "Empty URL! Nowhere to send..." +# fi + +# if [ -z "$FOLDERTOKEN" ]; then +# initError "Empty Folder Token! Nowhere to send..." +# fi + + + PUBSUFFIX="public.php/webdav" + HEADER='X-Requested-With: XMLHttpRequest' + INSECURE='' + + headers = { + 'X-Requested-With': 'XMLHttpRequest', + } + + + response = requests.put('https://nextcloud.exampyocclientple.com/public.php/webdav/testfile.txt', headers=headers, verify=args.insecure, auth=('AtAxVrKorgC5YJf', '')) + + + +parser = argparse.ArgumentParser() +parser.add_argument("-k","--insecure",action="store_false") +parser.add_argument("-x","--encryption",action="store",default=None,const='*',nargs="?",type=str) +parser.add_argument("url") +parser.add_argument("file",nargs="+") +args=parser.parse_args() + +if args.encryption is not None: + ic(args.encryption) + +if not isurl(args.url): + logging.warning(f"URL '{args.url}' is not valid") + +ic(args) +for fn in args.file: + ic(os.path.isdir(fn)) + ic(os.path.isfile(fn)) + if os.path.isdir(fn): + logging.warning("Foldersupport not implemented yet") + continue + if upload(fn,args.url): + logging.info(f"{fn} successfully uploaded") + else: + logging.warning(f"Error uploading {fn}") + + + + + + diff --git a/cloudsend.sh b/cloudsend.sh new file mode 100755 index 0000000..1dc1c38 --- /dev/null +++ b/cloudsend.sh @@ -0,0 +1,151 @@ +#!/usr/bin/env bash +############################################################ +# MIGRATED TO REPOSITORY +# https://github.com/tavinus/cloudsend.sh +# +# This gist will NOT be updated anymore +############################################################ + + +############################################################ +# +# cloudsend.sh +# +# Uses curl to send files to a shared +# Nextcloud/Owncloud folder +# +# Usage: ./cloudsend.sh +# Help: ./cloudsend.sh -h +# +# Gustavo Arnosti Neves +# https://github.com/tavinus +# +# Contributors: +# @MG2R @gessel +# +# Get this script to current folder with: +# curl -O 'https://raw.githubusercontent.com/tavinus/cloudsend.sh/master/cloudsend.sh' && chmod +x cloudsend.sh +# +############################################################ + + +CS_VERSION="0.1.6" + + + +# https://cloud.mydomain.net/s/fLDzToZF4MLvG28 +# curl -k -T myFile.ext -u "fLDzToZF4MLvG28:" -H 'X-Requested-With: XMLHttpRequest' https://cloud.mydomain.net/public.php/webdav/myFile.ext + +log() { + [ "$VERBOSE" == " -s" ] || printf "%s\n" "$1" +} + +printVersion() { + printf "%s\n" "CloudSender v$CS_VERSION" +} + +initError() { + printVersion >&2 + printf "%s\n" "Init Error! $1" >&2 + printf "%s\n" "Try: $0 --help" >&2 + exit 1 +} + +usage() { + printVersion + printf "\n%s%s\n" "Parameters:" " + -h | --help Print this help and exits + -q | --quiet Be quiet + -x | --encrypt Encrypt Upload with Password + -V | --version Prints version and exits + -k | --insecure Uses curl with -k option (https insecure) + -p | --password Uses env var \$CLOUDSEND_PASSWORD as share password + You can 'export CLOUDSEND_PASSWORD' at your system, or set it at the call. + Please remeber to also call -p to use the password set." + printf "\n%s\n%s\n%s\n" "Use:" " $0 " " CLOUDSEND_PASSWORD='MySecretPass' $0 -p " + printf "\n%s\n%s\n%s\n" "Example:" " $0 './myfile.txt' 'https://cloud.mydomain.net/s/fLDzToZF4MLvG28'" " CLOUDSEND_PASSWORD='MySecretPass' $0 -p './myfile.txt' 'https://cloud.mydomain.net/s/fLDzToZF4MLvG28'" +} + +########################## +# Process parameters + + +if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then + usage + exit 0 +fi + +if [ "$1" = "-V" ] || [ "$1" = "--version" ]; then + printVersion + exit 0 +fi + +if [ "$1" = "-q" ] || [ "$1" = "--quiet" ]; then + VERBOSE=" -s" + shift +fi + +if [ "$1" = "-k" ] || [ "$1" = "--insecure" ]; then + INSECURE=' -k' + log " > Insecure mode ON" + shift +fi + +if [ "$1" = "-p" ] || [ "$1" = "--password" ]; then + PASSWORD=${CLOUDSEND_PASSWORD} + log " > Using password from env" + shift +fi + + +########################## +# Validate input + +FILENAME="$1" + +CLOUDURL='' +# if we have index.php in the URL, process accordingly +if [[ $2 == *"index.php"* ]]; then + CLOUDURL="${2%/index.php/s/*}" +else + CLOUDURL="${2%/s/*}" +fi + +FOLDERTOKEN="${2##*/s/}" + +if [ ! -f "$FILENAME" ]; then + initError "Invalid input file: $FILENAME" +fi + +if [ -z "$CLOUDURL" ]; then + initError "Empty URL! Nowhere to send..." +fi + +if [ -z "$FOLDERTOKEN" ]; then + initError "Empty Folder Token! Nowhere to send..." +fi + + +########################## +# Check for curl + +CURLBIN='/usr/bin/curl' +if [ ! -x "$CURLBIN" ]; then + CURLBIN="$(which curl 2>/dev/null)" + if [ ! -x "$CURLBIN" ]; then + initError "No curl found on system!" + fi +fi + + +########################## +# Extract base filename + +BFILENAME=$(/usr/bin/basename $FILENAME) + + +########################## +# Send file + +#echo "$CURLBIN"$INSECURE$VERBOSE -T "$FILENAME" -u "$FOLDERTOKEN":"$PASSWORD" -H "$HEADER" "$CLOUDURL/$PUBSUFFIX/$BFILENAME" +"$CURLBIN"$INSECURE$VERBOSE -T "$FILENAME" -u "$FOLDERTOKEN":"$PASSWORD" -H "$HEADER" "$CLOUDURL/$PUBSUFFIX/$BFILENAME"