diff --git a/documentation/README-upload_hosts.txt b/documentation/README-upload_hosts.txt index 590508b..fe79b2b 100755 --- a/documentation/README-upload_hosts.txt +++ b/documentation/README-upload_hosts.txt @@ -7,6 +7,7 @@ Max Size . HostCode . Nickname . Notes 300GB 1f 1fichier.com 15d expiry free accounts 300GB fh filehaus.top (.su) ?? expiry 20GB rz ranoz.gg ?? expiry + 20GB pd pixeldrain 120d expiry 10GB gofile gofile.io ?? expiry 10GB tmpme tempfile.me 3mo expiry (tend to ban 7z faster) 5GB uhive uploadhive diff --git a/hosts/up_filesquid.sh b/hosts/up_filesquid.sh old mode 100755 new mode 100644 index bc36228..8646fb0 --- a/hosts/up_filesquid.sh +++ b/hosts/up_filesquid.sh @@ -1,6 +1,6 @@ #! Name: up_filesquid.sh #! Author: kittykat -#! Version: 2024.10.23 +#! Version: 2024.11.13 #! Desc: Add support for uploading files to filesquid.net #! Info: Files are accessible at https://address/f.php?h=&p=1 #! MaxSize: 5GB @@ -95,18 +95,34 @@ squid_PostFile() { local pline=${7} UploadTicket="${WorkDir}/.flocks/upload_${_hostCode}_${filepath//[^a-zA-Z0-9]/}" echo -e "[${YELLOW}${_hostCode}${NC}] Uploading ${GREEN}${filename}${NC}" - tor_identity="${RANDOM}" - PostUrlHost='https://filesquid.net/script.php' - arrFiles=("$filepath") - trap "rm -f ${UploadTicket}; echo ""; tput cnorm; exit" 0 1 2 3 6 15 - response=$(tor_curl_upload --insecure -i \ - -H "Content-Type: multipart/form-data" \ - -F "time=month" \ - -F "file=@${filepath}" \ - "${PostUrlHost}") - if [ "${DebugAllEnabled}" == "true" ] ; then - debugHtml "${filepath##*/}" "${_hostCode}_upload" "post_url: ${PostUrlHost}"$'\n'"${response}" - fi + maxretries=4 + for ((i=1; i<=$maxretries; i++)); do + tor_identity="${RANDOM}" + PostUrlHost='https://filesquid.net/script.php' + arrFiles=("$filepath") + trap "rm -f ${UploadTicket}; echo ""; tput cnorm; exit" 0 1 2 3 6 15 + response=$(tor_curl_upload --insecure -i \ + -H "Content-Type: multipart/form-data" \ + -F "time=month" \ + -F "file=@${filepath}" \ + "${PostUrlHost}") + if [ "${DebugAllEnabled}" == "true" ] ; then + debugHtml "${filepath##*/}" "${_hostCode}_upload" "post_url: ${PostUrlHost}"$'\n'"${response}" + fi + if grep -Eqi 'No password nor allowed IP' <<< "$response"; then + if ((i >= maxretries)) ; then + echo -e "${RED}| Upload failed. No password nor allowed IP.${NC}" + failedRetryUpload "$pline" "${filepath}" "${_hostCode}" "Failed to upload file" "No password nor allowed IP." + exitUploadError=true + return 1 + else + echo -n "${YELLOW}No password nor allowed IP${NC} (retry)..." + continue + fi + else + break + fi + done if grep -Eqi ' 200 ' <<< "${response}" ; then hash=$(echo "$response" | tail -2 | head -1) hash=${hash//[$'\t\r\n']} diff --git a/hosts/up_pixeldrain.sh b/hosts/up_pixeldrain.sh new file mode 100644 index 0000000..91f77f2 --- /dev/null +++ b/hosts/up_pixeldrain.sh @@ -0,0 +1,165 @@ +#! Name: up_pixeldrain.sh +#! Author: kittykat +#! Version: 2024.11.13 +#! Desc: Add support for uploading files to pixeldrain.com +#! Info: Files are accessible at https://pixeldrain.com/u/ +#! MaxSize: 20GB +#! Expire: 120d expiry +#! Usage: Copy this file into the ./${ScriptDir}/hosts/ folder +#! +#! +#! ------------ REQUIRED SECTION --------------- +#! @[UPDATE] ListUploadHosts: This string is loaded into mad.sh and allows dynamic handling of new url data +#! Format: '/HostCode/HostNick/HostFuncPrefix@' +#! HostCode: (ie. 'fh' for filehaus -- cannot be used by other hosts) +#! HostNick: What is displayed throughout MAD output +#! HostFuncPrefix: ie. 'fh' -- fh_UploadFile() +#! * Note: Must begin with a letter a-z (functions beginning with numbers are no bueno) +HostCode='pd' +HostNick='pixeldrain' +HostFuncPrefix='pd' +#! +#! !! DO NOT UPDATE OR REMOVE !! +#! This merges the Required HostAndDomainRegexes into mad.sh +ListUploadHosts=${ListUploadHosts}'/'${HostCode}'/'${HostNick}'/'${HostFuncPrefix}'@' +#! +#! +#! Configurables +#! ------------- +#! +#! ------------ (1) Host Main Upload Function --------------- # +#! +#! @REQUIRED: Host Main Upload function +#! Must be named specifically as such: +#! _UploadFile() +pd_UploadFile() { + local _hostCode=${1} + local filepath=${2} + local filecnt=${3} + local pline=${4} + local filename="${filepath##*/}" + warnAndRetryUnknownError=false + exitUploadError=false + exitUploadNotAvailable=false + fileAlreadyDone=false + tor_identity="${RANDOM}" + UploadTicket="${WorkDir}/.flocks/upload_${_hostCode}_${filepath//[^a-zA-Z0-9]/}" + MaxUploadSizeInBytes=21474836480 + fsize=$(GetFileSize "$filepath" "false") + if ((fsize > MaxUploadSizeInBytes)); then + m -f "${UploadTicket}" + echo -e "${YELLOW}| SKIP${NC}: The size of $filename is to large for $_hostCode. ($fsize > $MaxUploadSizeInBytes)" + failedUpload "$pline" "${filepath}" "${_hostCode}" "Skipping upload. The size of $filename is to large for $_hostCode. ($fsize > $MaxUploadSizeInBytes)" + return 1 + fi + if [ -z "$RandomPdKey" ]; then + printf "\\n" + echo -e "${RED}| No Api Key provided in config.${NC}" + failedRetryUpload "$pline" "${filepath}" "${_hostCode}" "Upload failed." "No Api key." + exitUploadError=true + return 1 + fi + finalAttempt="false" + for ((z=0; z<=$MaxUploadRetries; z++)); do + if [ $z -eq $MaxUploadRetries ] ; then + finalAttempt="true" + fi + trap "rm -f "${UploadTicket}"; echo ""; tput cnorm; exit" 0 1 2 3 6 15 + if pd_PostFile "${filepath}" "${_hostCode}" "${filename}" "${filecnt}" $((z+1)) $finalAttempt $pline ; then + return 0 + elif [ $z -lt $MaxUploadRetries ]; then + if [ "${fileAlreadyDone}" == "true" ] ; then + break + fi + if [[ "${warnAndRetryUnknownError}" == "true" ]] ; then + if [ "${DebugAllEnabled}" == "true" ] ; then + debugHtml "${filepath##*/}" "error" "Retry due to an unknown issue: attempt #$((z+1)) of ${MaxUploadRetries}" + fi + fi + if [[ "${exitUploadError}" == "true" || "${exitUploadNotAvailable}" == "true" ]] ; then + if [ "${DebugAllEnabled}" == "true" ] ; then + debugHtml "${filepath##*/}" "error" "Exit due to unrecoverable issue" + fi + rm -f "${UploadTicket}" + break + fi + echo -e "\n${YELLOW}A recoverable error occurred, retry attempt $((z+1))/${MaxUploadRetries}${NC}" + sleep 3 + fi + done + rm -f "${UploadTicket}" +} +#! +#! ----------- (2) Post File / Upload File Function --------------- # +#! +pd_PostFile() { + local filepath=$1 + local _hostCode=$2 + local filename=$3 + local fileCnt=$4 + local retryCnt=$5 + local finalAttempt=$6 + local pline=${7} + UploadTicket="${WorkDir}/.flocks/upload_${_hostCode}_${filepath//[^a-zA-Z0-9]/}" + echo -e "[${YELLOW}${_hostCode}${NC}] Uploading ${GREEN}${filename}${NC}" + for ((i=1; i<=10; i++)); do + tor_identity="${RANDOM}" + PostUrlHost='https://pixeldrain.com/api/file' + arrFiles=("$filepath") + trap "rm -f ${UploadTicket}; echo ""; tput cnorm; exit" 0 1 2 3 6 15 + GetRandomPdKey + apikey="$RandomPdKey" + apikey_enc=$(echo -n ":$apikey" | base64) + response=$(tor_curl_upload --insecure -i \ + -H "Authorization: Basic $apikey_enc" \ + "${PostUrlHost}" \ + -F "file=@$filepath") + if [ "${DebugAllEnabled}" == "true" ] ; then + debugHtml "${filepath##*/}" "${_hostCode}_upload" "post_url: ${PostUrlHost}"$'\n'"apikey: ${apikey}"$'\n'"${response}" + fi + if grep -Eqi '"success":false,"value":"ip_banned"' <<< "$response"; then + echo -n "${YELLOW}Banned IP${NC} (retry)..." + continue + else + break + fi + if grep -Eqi '"success":false,"value":"authentication_failed"' <<< "$response"; then + printf "\\n" + echo -e "${RED}| Upload failed. Invalid Api key ($apikey)${NC}" + failedRetryUpload "$pline" "${filepath}" "${_hostCode}" "Upload failed." "Invalid Api key ($apikey)" + exitUploadError=true + return 1 + fi + done + if grep -Eqi '"success":true,"id":"' <<< "${response}" ; then + hash=$(grep -oPi '(?<="success":true,"id":").*?(?=".*$)' <<< "$response") + filesize=$(GetFileSize "$filepath" "false") + downloadLink="https://pixeldrain.com/u/${hash}" + echo -e "${GREEN}| Upload Success${NC}" + echo -e "| Size: ${BLUE}${filesize}${NC} bytes${NC}" + echo -e "| Link: ${YELLOW}${downloadLink}${NC}" + successUpload "$pline" "${filepath}" "${_hostCode}" "${filesize}" "${downloadLink}" "{$response}" + return 0 + else + err=$(grep -oPi '(?<="success":false,"value":").*?(?=".*$)' <<< "$response") + if [ "${finalAttempt}" == "true" ] ; then + printf "\\n" + echo -e "${RED}| Upload failed. Error: ${err}${NC}" + failedRetryUpload "$pline" "${filepath}" "${_hostCode}" "Failed to upload file" "Error: $err" + exitUploadError=true + return 1 + else + return 1 + fi + fi +} +#! +#! --------------- Host Extra Functions ------------------- # +#! +GetRandomPdKey() { + arrSize=${#ar_pdKey[@]} + index=$(($RANDOM % $arrSize)) + RandomPdKey=${ar_pdKey[$index]} +} +#! Initialize ar_pdKey and get a random key +GetRandomPdKey diff --git a/mad.sh b/mad.sh index fc609b9..07787cc 100644 --- a/mad.sh +++ b/mad.sh @@ -31,9 +31,12 @@ # * klonkerz - feedback and suggestions, url only processing # * Everyone who provided feedback and helped test.. and those who wish to remain anonymous -ScriptVersion=2024.11.12 +ScriptVersion=2024.11.13 #================================================= # Recent Additions +# 2024.11.13 - [up_pixeldrain] Add pixeldrain as an upload host +# 2024.11.13 - [mad] Add pixeldrain apikey section to allow pd uploads +# 2024.11.13 - [up_filesquid] Add "No password nor allowed IP" response handling # 2024.11.12 - [mad] Fix uploads.txt status marking (urls / messages) containg '&' chars # 2024.11.12 - [up_torup] Max upload filesize changed to 150MB # 2024.11.12 - [up_uploadee] Add upload.ee as an upload host @@ -75,29 +78,6 @@ ScriptVersion=2024.11.12 # 2024.10.17 - [dailyuploads] Add recaptcha detection and abort (js required) # * Working on possible PJSCloud solution # 2024.10.16 - [mad] Remove tor_curl_upload duplicate connect-timeout (thanks PeachX) -# 2024.10.14 - [pjscloud] Create pjscloud.sh plugin -- use PhantomJSCloud to get a response from a url -# * Change pixeldrain ViewPump to use pjscloud.sh plugin. (default enabled) -# * Testing usage on other javascript required response hosts (ie. daily, hexload) -# 2024.10.13 - [hexload] Add detection of new download2 type: Wait x seconds to create download link -# * Add detection of download2b type loop (still working on solution, exit loop for now) -# 2024.10.13 - [ocr_captcha] Add tessdata_type: NUMBERONLY, ALPHAONLY, ALPHANUMERIC, and not specified -# 2024.10.12 - [mad] Alternate with nohead function on direct download for hosts that do not allow head -# 2024.10.12 - [turboonion/up_turboonion] Add turbo.onion as an upload and download host -# 2024.10.12 - [tempfileme/up_tempfileme] Add tempfile.me as upload and download host -# 2024.10.11 - [tempsh/up_tempsh] Add temp.sh as upload and download host -# 2024.10.10 - [mad] Add cleanup of input file on processing (remove trailing whitespace) -# 2024.10.08 - [_audit] Add _audit.sh in release bundle which creates mad-audit-*.log for http/curl calls -# * ./_audit.sh -# 2024.10.07 - [mad] Add mad audit. Prints all lines that use http, curl, tor_curl in script files -# * Displays color hightlighted, file, line #, and matches in scripts. -# * ./mad.sh audit -# 2024.10.06 - [1fichier] Add new removal response "..file has been deleted following a notification .." -# 2024.10.06 - [mad] Update direct download no response processing to fail / retry -# 2024.10.05 - [dailyuploads] Fix head request, filename fallback, and add head retries -# 2024.10.05 - [dailyuploads] Add wrong captcha response -# 2024.10.04 - Add README-uploads.txt in ./documentation (cheat sheet of hosts, retention, max size) -# 2024.10.02 - [up_kouploader] Add kouploader.jp as upload host (240MB node) -# 2024.10.01 - [up_axfc] Add axfc.net as upload host # -- See ./documentation/!Changelog (Historical).txt for further changes -- # @@ -305,11 +285,23 @@ ar_fdUP[0]="user1|pass1" # - Setup free accounts: https://files.offshore.cat/register (use any username/pass - not verified) # - Get apikey: https://files.offshore.cat/dashboard/account (use login created above) # - The accounts are randomly selected for every download. -ar_oscKey[0]="CJZaU3yCQXZrozRmgXOLHjKqP1bbqbvEbJgOZig53WRgEHFHRTh5kIbEWbhEdyLq" # Shared general -#ar_oscKey[1]="apikey" # Uncomment line to use a 2nd -#ar_oscKey[2]="apikey" # Uncomment line to use a 3rd -#ar_oscKey[3]="apikey" # Uncomment line to use a 4th -#ar_oscKey[4]="apikey" # Uncomment line to use a 5th +ar_oscKey[0]='CJZaU3yCQXZrozRmgXOLHjKqP1bbqbvEbJgOZig53WRgEHFHRTh5kIbEWbhEdyLq' # Shared general +#ar_oscKey[1]='apikey' # Uncomment line to use a 2nd +#ar_oscKey[2]='apikey' # Uncomment line to use a 3rd +#ar_oscKey[3]='apikey' # Uncomment line to use a 4th +#ar_oscKey[4]='apikey' # Uncomment line to use a 5th + +# [pixeldrain.com Upload ApiKeys] +# ! If you wish to use pixeldrain uploading, you must create an account and get an apikey (or use the general public +# one shared here. +# - Setup free accounts:https://pixeldrain.com/register (use any username/pass - not verified) +# - Get apikey: https://pixeldrain.com/user/api_keys (use login created above) +# - The accounts are randomly selected for every download. +ar_pdKey[0]='6a7c5c4e-aeb4-45ab-a11b-96799da02922' # Shared general +#ar_pdKey[1]='apikey' # Uncomment line to use a 2nd +#ar_pdKey[2]='apikey' # Uncomment line to use a 3rd +#ar_pdKey[3]='apikey' # Uncomment line to use a 4th +#ar_pdKey[4]='apikey' # Uncomment line to use a 5th # [PhantomJS Keys]: pjscloud.sh plugin # ! Required for pixeldrain ViewPump and pjscloud functionality (enable / disable each in the pjscloud.sh file) diff --git a/uploads.txt b/uploads.txt index a802a4a..27c4c8c 100755 --- a/uploads.txt +++ b/uploads.txt @@ -12,6 +12,7 @@ # 10GB raja uploadraja.com 240MB ko kouploader.jp 4GB tmpsh temp.sh # 10GB tmpme tempfile.me 300MB trbo turbo.onion 100MB inno innocent.onion # 1GB ansh anonsharing.com 1GB torp TorUp.onion 4GB offcat offshore.cat +# 20GB pd pixeldrain # ?? fr4e sendfree4e.fr ?? harr harrault.fr ?? acid dl.acid.fr # (Require js -- do not use) # 4GB daily dailyuploads 1GB kraken krakenfiles 2GB hex hexload