fediverse-scripts/instanceinfo.sh

121 lines
4.2 KiB
Bash
Executable File

#!/bin/bash
# Print some basic info about fediverse instances.
# Version: 2019-06-24_6
if [[ -z "${1}" ]]; then
echo "usage: ${0} DOMAIN" >&2
exit 1
fi
if ! command -v jq > /dev/null; then
echo "You need to install jq (https://stedolan.github.com/jq/)" >&2
exit 2
fi
function striphtml()
{
local extract="${*}"
echo "${extract}" | sed 's/\\u003c/</g' | sed 's/\\u003e/>/g' | sed -E 's/<[^>]+>//g' | sed 's/\\r\\n/ /g'
}
function main()
{
local instance="${1}"
# shellcheck disable=SC2155
local nodeinfo=$(curl -s "https://${instance}/.well-known/nodeinfo" | jq -r '.links[-1].href' 2> /dev/null)
local mastoinfo="https://${instance}/api/v1/instance"
local misskeyinfo="https://${instance}/api/meta"
if curl -sIf -X POST "${misskeyinfo}" | grep -iq 'Content-Type: application/json'; then
echo "Misskey API found."
json=$(curl -s -X POST "${misskeyinfo}")
# shellcheck disable=SC2155
local email=$(jq -r ".maintainerEmail" <<<"${json}")
[[ -n "${email}" ]] && echo "E-Mail: ${email}"
# shellcheck disable=SC2155
local users=$(curl -s -X POST "https://${instance}/api/stats" | jq -r ".usersCount")
[[ -n ${users} ]] && echo "Number of users: ${users}"
# NOTE: I'm not sure what the returned data means exactly and I couldn't find the API-documentation. So I commented it out for now.
# # shellcheck disable=SC2155
# local federation=$(curl -s -X POST "https://${instance}/api/federation/instances" | jq ".[].host")
# # shellcheck disable=SC2046
# [[ -n ${federation} ]] && echo -n "Federates with: " && echo "${federation}"
# shellcheck disable=SC2155
local tos=$(jq -r ".ToSUrl" <<<"${json}")
[[ -n "${tos}" ]] && echo "ToS: ${tos}"
elif curl -sIf "${nodeinfo}" | grep -iq 'Content-Type: application/json'; then
echo "Nodeinfo found."
json=$(curl -s "${nodeinfo}")
local implementation=""
if [[ $(jq -r ".software.name" <<<"${json}") == "pleroma" ]]; then
implementation="Pleroma"
fi
[[ -n "${implementation}" ]] && echo "${implementation} detected."
echo -n "Description: "
jq -r ".metadata.nodeDescription" <<<"${json}"
echo "Admins: "
# shellcheck disable=SC2046
jq -r ".metadata.staffAccounts" <<<"${json}"
echo -n "Number of users: "
jq -r ".usage.users.total" <<<"${json}"
echo "Federation restrictions: "
# shellcheck disable=SC2046
jq -r ".metadata.federation.mrf_simple" <<<"${json}"
if [[ "${implementation}" == "Pleroma" ]]; then
echo "Further info, maybe: https://${instance}/about"
fi
elif curl -sIf "${mastoinfo}" | grep -iq 'Content-Type: application/json'; then
echo "Mastodon API found."
json=$(curl -s "${mastoinfo}")
local implementation=""
if grep -Eq '"is_(pro|verified)"' <<<"${json}"; then
implementation="Gab"
elif grep -Eq '"version":"[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\."' <<<"${json}"; then
implementation="Florence"
elif grep -Eq '"version":"[0-9]+\.[0-9]+\.[0-9]+"' <<<"${json}"; then
implementation="Mastodon"
fi
[[ -n "${implementation}" ]] && echo "${implementation} detected."
echo -n "Description: "
# shellcheck disable=SC2046
striphtml $(jq -r ".description" <<<"${json}")
# shellcheck disable=SC2155
local admin=$(jq -r ".contact_account.acct" <<<"${json}")
[[ -n "${admin}" ]] && echo "Admin: https://${instance}/users/${admin}"
# shellcheck disable=SC2155
local email=$(jq -r ".email" <<<"${json}")
[[ -n "${email}" ]] && echo "E-Mail: ${email}"
echo -n "Number of users: "
jq -r ".stats.user_count" <<<"${json}"
if [[ "${implementation}" == "Mastodon"
|| "${implementation}" == "Florence"
|| "${implementation}" == "Gab" ]]; then
echo "Further info, maybe: https://${instance}/about/more"
fi
else
echo "Could not detect type of server."
curl -I "https://${instance}/"
fi
echo "See also: https://fediverse.network/${instance}"
}
main "${1}"