lazily check if onion or i2p sites exist in instances.json before running jq.

This commit is contained in:
Sahal Ansari 2024-07-25 20:26:15 -05:00
parent f19da6ca8d
commit dfba0f285b

View File

@ -20,7 +20,7 @@
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along with
# this program. If not, see <https://www.gnu.org/licenses/>.
# this program. If not, see <https://www.gnu.org/licenses/>.
set -o pipefail
@ -117,7 +117,7 @@ read_csv_row ()
local opt=
local OPTIND
local OPTARG
local -i i=0
local -i quote=0
local -i esc=0
@ -154,7 +154,7 @@ read_csv_row ()
for (( i = 0; i < len; i++ ))
do
char="${row:${i}:1}"
# "Handle" escapes. Really, it just means writing the escape verbatim
# into the string. Yes, that includes ". Because this is ultimately
# going into JSON, and making this a fully-featured CSV reader would
@ -167,7 +167,7 @@ read_csv_row ()
# Escape handled. Move on to next character.
continue
fi
# \ triggers escape.
# shellcheck disable=SC1003
if [[ "${char}" == '\' ]]
@ -247,7 +247,7 @@ canonicalize_url ()
return 1
fi
url="${1}"
# Convert URL to lowercase.
url="${url,,}"
@ -256,7 +256,7 @@ canonicalize_url ()
then
return 2
fi
# Strip leading /, but only if the path is /.
if [[ "${url#*://*/}" =~ ^/*$ ]]
then
@ -292,7 +292,7 @@ get ()
local opt=
local OPTIND
local OPTARG
local no_tor=n
local no_i2p=n
local url=
@ -345,7 +345,7 @@ get ()
# - Increase curl max-time to 60 seconds.
if [[ "${zone,,}" == "onion" ]]
then
# Don't bother if tor isn't running. But if both are available,
# Don't bother if tor isn't running. But if both are available,
# make sure we warp curl with socks.
if [[ "${no_tor}" == "y" ]]
then
@ -424,11 +424,11 @@ create_instance_entry ()
local url_type="url"
local -i rc=0
local -a get_opts=()
local opt=
local OPTIND
local OPTARG
while getopts "IT" opt
do
case "${opt}" in
@ -438,7 +438,7 @@ create_instance_entry ()
esac
done
shift $((OPTIND-1))
local url="${1}"
local country="${2}"
local description="${4}"
@ -716,7 +716,7 @@ main ()
echo >&2 "For more information, run: ${BASH_SOURCE[0]} -h"
return 1
fi
# Set do_tor <- n so that we don't attempt to make tor connections.
do_tor=n
@ -728,14 +728,18 @@ main ()
# (a mapfile would not ideal here since a pipe is required, inducing a
# subshell, meaning nothing will actually get added to
# imported_nonwww)
IFS=$'\n' imported_nonwww=($(jq -Mcer '.instances[] | select(.onion or .i2p)' "${import_nonwww_from_file}"))
rc=$?
if [[ ${rc} -ne 0 ]]
then
echo >&2 "Failed to read onion instances from existing JSON file."
return 1
if grep -q ".onion" "${import_nonwww_from_file}" || grep -q ".i2p" "${import_nonwww_from_file}" ; then
IFS=$'\n' imported_nonwww=($(jq -Mcer '.instances[] | select(.onion or .i2p)' "${import_nonwww_from_file}"))
rc=$?
else
rc=0
fi
if [[ ${rc} -ne 0 ]]
then
echo >&2 "Failed to read onion instances from existing JSON file."
return 1
fi
fi
# Check to see if we have tor. If we don't, then we will have to import
@ -776,7 +780,7 @@ main ()
return 1
fi
fi
# Read in the CSV.
if [[ "${input_file}" == "/dev/stdin" ]]
then
@ -808,11 +812,11 @@ main ()
echo >&2 "Script will now terminate."
return 2
fi
# Print friendly message to log while processing row.
url="${values[0]}"
echo -n >&2 "${url}: "
instance_entry="$(IFS=$'\n' create_instance_entry "${get_opts[@]}" "${values[@]}")"
rc=$?
@ -827,7 +831,7 @@ main ()
echo "SKIPPED"
else
echo "FAILED"
if [[ "${failfast}" == "y" ]]
then
return 1