pleroma-fe/instance/pleroma-mods/pleroma-mod-favicon/fetch.sh

66 lines
2.1 KiB
Bash
Executable File

#!/usr/bin/bash
echo "[-] generating cache"
SCRIPTPATH="$( cd "$(dirname "$0")" > /dev/null 2>&1 ; pwd -P )"
INSTANCES=$(sudo -u pleroma psql -d pleroma_dev -c "copy (select ap_id from users) to STDOUT DELIMITER ';'" | sed 's|^https://||' | sed 's|/.*$||' | sort | uniq)
#INSTANCES=$(cat $SCRIPTPATH/cache/instance.list)
mkdir -p $SCRIPTPATH/cache/
echo "[-] fetching icons"
while read -r instance
do
rm -Rf $SCRIPTPATH/cache/$instance
STATUS_CODE=$(curl -sL -m 10 -o /tmp/$instance.html -w '%{http_code}' "https://$instance")
FAVICON=$(xmllint --html --nowarning --xpath '(//link[contains(concat(" ", @rel, " "), "icon")])[1]/@href' /tmp/$instance.html 2>/dev/null | sed 's|^ href="||' | sed 's|"$||')
if [ -f /tmp/$instance.html ] ; then
rm /tmp/$instance.html
fi
if [ $STATUS_CODE -eq 200 ] ; then
if [ "$FAVICON" != "" ] ; then
rm -Rf $SCRIPTPATH/cache/$instance.png
EXT="${FAVICON##*.}"
URL="https://$instance$FAVICON"
case $FAVICON in
/*)
URL="https://$instance$FAVICON"
;;
http*)
URL=$FAVICON
;;
*)
URL="https://$instance/$FAVICON"
;;
esac
ICON_CODE=$(curl -sL -m 10 -o "/tmp/$instance.$EXT" -w '%{http_code}' "$URL")
if [ $ICON_CODE -eq 200 ] ; then
if [ "$EXT" == "png" ] ; then
cp "/tmp/$instance.$EXT" $SCRIPTPATH/cache/$instance.$EXT
else
convert "/tmp/$instance.$EXT" "$SCRIPTPATH/cache/$instance.png"
LAST_IMAGE=$(ls $SCRIPTPATH/cache/$instance-* 2>/dev/null | tail -n1)
if [ ! -z "$LAST_IMAGE" ] ; then
mv $LAST_IMAGE $SCRIPTPATH/cache/$instance.png
rm $SCRIPTPATH/cache/$instance-*
fi
fi
echo "[o] $instance: done"
else
echo "[x] $instance: can't fetch $FAVICON ( $ICON_CODE )"
fi
else
echo "[x] $instance: no favicon found"
fi
else
echo "[x] $instance: can't fetch index ( $STATUS_CODE )"
fi
done < <(echo "$INSTANCES")
echo "[-] copying own favicon"
cp $SCRIPTPATH/../../../favicon.png $SCRIPTPATH/cache/default.png