diff --git a/tool/mastodonwch/index.php b/tool/mastodonwch/index.php
new file mode 100644
index 000000000..14481a151
--- /dev/null
+++ b/tool/mastodonwch/index.php
@@ -0,0 +1,136 @@
+connect_errno)
+{
+ exit;
+}
+$count_all = - 1;
+if ($r = $sqlme->query("SELECT count(id) FROM toot_scanned;"))
+{
+ $rr = mysqli_fetch_assoc($r);
+ $r->free();
+ $count_all = $rr['count(id)'];
+}
+$count_cf = - 1;
+if ($r = $sqlme->query("SELECT count(id) FROM toot_scanned WHERE iscf=1;"))
+{
+ $rr = mysqli_fetch_assoc($r);
+ $r->free();
+ $count_cf = $rr['count(id)'];
+}
+if ($count_all == - 1 || $count_cf == - 1)
+{
+ exit;
+}
+$count_acpct = round(($count_cf * 100) / $count_all, 2);
+$count_all = number_format($count_all);
+$count_cf = number_format($count_cf);
+$count_waitask = - 1;
+if ($r = $sqlme->query("SELECT count(fqdn) FROM toot_notcf_fqdn WHERE dl=0;"))
+{
+ $rr = mysqli_fetch_assoc($r);
+ $r->free();
+ $count_waitask = $rr['count(fqdn)'];
+}
+$count_waitask = number_format($count_waitask);
+$lastuptime = humanTiming(filemtime('/onion/sseeccrreett/data/mastodon.toot.scan'));
+$var_who = htmlspecialchars($_GET['who'], ENT_QUOTES);
+$resultHTML = '';
+if (strpos($var_who, '--') !== false)
+{
+ $var_who = '';
+}
+if (preg_match("/write_here_yourself/", $var_who))
+{
+ $resultHTML .= '
';
+ $person_a = 0;
+ if ($r = $sqlme->query("SELECT count(id) FROM toot_scanned WHERE who='{$var_who}';"))
+ {
+ $rr = mysqli_fetch_assoc($r);
+ $r->free();
+ $person_a = $rr['count(id)'];
+ }
+ $person_b = 0;
+ if ($r = $sqlme->query("SELECT count(id) FROM toot_scanned WHERE who='{$var_who}' AND iscf=1;"))
+ {
+ $rr = mysqli_fetch_assoc($r);
+ $r->free();
+ $person_b = $rr['count(id)'];
+ }
+ $person_c = round(($person_b * 100) / $person_a, 2);
+ if (is_nan($person_c))
+ {
+ $person_c = 0;
+ }
+ $person_a = number_format($person_a);
+ $person_b = number_format($person_b);
+ $resultHTML .= "About | {$var_who} |
";
+ $resultHTML .= "Toots has links | {$person_a} |
";
+ $resultHTML .= "⮡ Toots has Cloudflare link | {$person_b} [{$person_c}%] |
";
+ $resultHTML .= " | Detected (LIMIT 100) |
";
+ if ($r = $sqlme->query("SELECT url FROM toot_cfsaid WHERE who='{$var_who}' LIMIT 100;"))
+ {
+ while ($row = mysqli_fetch_assoc($r))
+ {
+ $vurl = htmlspecialchars($row['url'], ENT_QUOTES);
+ $resultHTML .= " | {$vurl} |
";
+ }
+ }
+ $resultHTML .= '
';
+}
+elseif ($var_who == 'a')
+{
+ $resultHTML .= '
Shared any links | Toots |
';
+ if ($r = $sqlme->query("SELECT who,count(*) as count FROM toot_scanned GROUP BY who ORDER BY count DESC LIMIT 100;"))
+ {
+ while ($row = mysqli_fetch_assoc($r))
+ {
+ $rcount = number_format($row['count']);
+ $resultHTML .= "{$row['who']} | {$rcount} |
";
+ }
+ }
+ $resultHTML .= '
';
+}
+elseif ($var_who == 'c')
+{
+ $resultHTML .= '
Shared Cloudflare links | Toots |
';
+ if ($r = $sqlme->query("SELECT who,count(*) as count FROM toot_scanned WHERE iscf=1 GROUP BY who ORDER BY count DESC LIMIT 100;"))
+ {
+ while ($row = mysqli_fetch_assoc($r))
+ {
+ $rcount = number_format($row['count']);
+ $resultHTML .= "{$row['who']} | {$rcount} |
";
+ }
+ }
+ $resultHTML .= '
';
+}
+elseif ($var_who == 'f')
+{
+ $resultHTML .= '
Shared FQDN | Cloudflare | Found in Toots |
';
+ if ($r = $sqlme->query("SELECT fqdn,count(*) as count FROM toot_sharefqdn GROUP BY fqdn ORDER BY count DESC LIMIT 50;"))
+ {
+ while ($row = mysqli_fetch_assoc($r))
+ {
+ $rcount = number_format($row['count']);
+ $riscf = is_known_cf(get_domainname($row['fqdn']) [1]) ? 'Yes' : 'No';
+ $resultHTML .= "{$row['fqdn']} | {$riscf} | {$rcount} |
";
+ }
+ }
+ $resultHTML .= '
';
+}
+else
+{
+ $resultHTML .= '';
+}
+$finalpage = <<Shared on Mastodon
+[
INDEX ] Update
{$lastuptime} ago
+
Toots has links: {$count_all}
+⮡
Toots has Cloudflare link: {$count_cf} [
{$count_acpct}%]
+
Pending Investigation: {$count_waitask}
+
{$resultHTML}