#!/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