#!/bin/bash db="friendica" tmpfile="/tmp/sitesdown.txt" idsdownfile="/tmp/idsdown.txt" loop_1() { sitereq=$(curl -s -L --head -m 20 --request GET "${a}") status=$(echo "${sitereq}" | grep -e "200" -e "cloudflare") if [[ -z ${status} ]] then echo "${a}" >> "${tmpfile}" echo "Added ${a}" fi } loop_2() { echo "Finding users for ${b}" "${dbengine}" "${db}" -N -B -q -e "select \`id\`, \`name\` from contact c where c.\`id\` not in (select \`contact-id\` from group_member) and (c.baseurl = \"${b}\" or c.url = \"${b}\")" | sudo tee -a "${idsdownfile}" #&> /dev/null } loop_3() { baseurltrimmed=$(echo "${baseurl}" | sed -e "s/http[s]*:\/\///g") echo "Deleting user ${lineb} - ${nick}@${baseurltrimmed}" "${dbengine}" "${db}" -N -B -q -e "delete from \`post-thread\` where \`author-id\` = ${lineb} or \`causer-id\` = ${lineb} or \`owner-id\` = ${lineb}" "${dbengine}" "${db}" -N -B -q -e "delete from \`post-thread-user\` where \`author-id\` = ${lineb} or \`causer-id\` = ${lineb} or \`owner-id\` = ${lineb}" "${dbengine}" "${db}" -N -B -q -e "delete from \`post-user\` where \`author-id\` = ${lineb} or \`causer-id\` = ${lineb} or \`owner-id\` = ${lineb}" "${dbengine}" "${db}" -N -B -q -e "delete from \`post-tag\` where cid = ${lineb}" "${dbengine}" "${db}" -N -B -q -e "delete from \`post\` where \`owner-id\` = ${lineb} or \`author-id\` = ${lineb} or \`causer-id\` = ${lineb}" "${dbengine}" "${db}" -N -B -q -e "delete from \`photo\` where \`contact-id\` = ${lineb}" "${dbengine}" "${db}" -N -B -q -e "delete from \`contact\` where \`id\` = ${lineb}" } #Check for mariadb vs. mysql dbengine="" if [[ -n $(type mariadb) ]] then dbengine="mariadb" elif [[ -n $(type mysql) ]] then dbengine="mysql" fi #Check if our dependencies are installed if [[ -n $(type curl) && -n "${dbengine}" && -n $(type "${dbengine}") && -n $(type date) ]] then date if [[ ! -f "${tmpfile}" ]] then echo "Listing sites" sites=($("${dbengine}" "${db}" -N -B -q -e "select distinct baseurl from contact" | sort -n | uniq )) echo "Amount of unique sites: ${#sites[@]}" for a in "${sites[@]}" do loop_1 "${a}" & if [[ $(jobs -r -p | wc -l) -ge $(expr $(getconf _NPROCESSORS_ONLN)*2) ]] then wait -n fi done wait fi sitesdown=() while read -r line; do sitesdown+=(${line}) done < "${tmpfile}" echo "Amount of sites down: ${#sitesdown[@]} / ${#sites[@]}" if [[ ! -f "${idsdownfile}" ]] then for b in "${sitesdown[@]}" do loop_2 "${b}" & if [[ $(jobs -r -p | wc -l) -ge $(expr $(getconf _NPROCESSORS_ONLN)/2) ]] then wait -n fi done wait #cat "$idsdownfile" | sort -n | uniq > "$idsdownfile" fi #idsdown=() #echo "$idsdownfile" | sort | uniq > "$idsdownfile" while read -r lineb nick baseurl; do #idsdown+=($lineb) #The community no longer exists, delete loop_3 "${lineb}" "${nick}" "${baseurl}" & if [[ $(jobs -r -p | wc -l) -ge $(expr $(getconf _NPROCESSORS_ONLN)/2) ]] then wait -n fi wait done < "${idsdownfile}" rm "${tmpfile}" 2> /dev/null rm "${idsdownfile}" 2> /dev/null date fi