source $stdenv/setup # Curl flags to handle redirects, not use EPSV, handle cookies for # servers to need them during redirects, and work on SSL without a # certificate (this isn't a security problem because we check the # cryptographic hash of the output anyway). set -o noglob curl="curl \ --location \ --max-redirs 20 \ --retry 2 \ --disable-epsv \ --cookie-jar cookies \ --insecure \ --speed-time 5 \ -# \ --fail \ $curlOpts \ $NIX_CURL_FLAGS" finish() { runHook postFetch set +o noglob exit 0 } ipfs_add() { if curl --retry 0 --head --silent "localhost:5001" > /dev/null; then echo "=IPFS= add $ipfs" tar --owner=root --group=root -cWf "source.tar" $(echo *) res=$(curl -# -F "file=@source.tar" "localhost:5001/api/v0/tar/add" | sed 's/.*"Hash":"\(.*\)".*/\1/') if [ $ipfs != $res ]; then echo "\`ipfs tar add' results in $res when $ipfs is expected" exit 1 fi rm "source.tar" fi } echo mkdir download cd download if curl --retry 0 --head --silent "localhost:5001" > /dev/null; then curlexit=18; echo "=IPFS= get $ipfs" # if we get error code 18, resume partial download while [ $curlexit -eq 18 ]; do # keep this inside an if statement, since on failure it doesn't abort the script if $curl -C - "http://localhost:5001/api/v0/tar/cat?arg=$ipfs" --output "$ipfs.tar"; then unpackFile "$ipfs.tar" rm "$ipfs.tar" set +o noglob mv $(echo *) "$out" finish else curlexit=$?; fi done fi if test -n "$url"; then curlexit=18; echo "Downloading $url" while [ $curlexit -eq 18 ]; do # keep this inside an if statement, since on failure it doesn't abort the script if $curl "$url" -O; then set +o noglob tmpfile=$(echo *) unpackFile $tmpfile rm $tmpfile ipfs_add mv $(echo *) "$out" finish else curlexit=$?; fi done fi echo "error: cannot download $ipfs from ipfs or the given url" echo set +o noglob exit 1