317 lines
11 KiB
PHP
317 lines
11 KiB
PHP
<!doctype html>
|
||
<html lang="en">
|
||
<head>
|
||
<title>FediBlock</title>
|
||
<meta charset="utf-8">
|
||
<meta name="robots" content="noindex, nofollow">
|
||
<style>
|
||
body
|
||
{
|
||
max-width: 100ch;
|
||
}
|
||
label
|
||
{
|
||
display: block;
|
||
float: left;
|
||
width: 12ch;
|
||
text-align: right;
|
||
margin-right: 1ch;
|
||
}
|
||
input[type=text], input[type=url]
|
||
{
|
||
width: 60ch;
|
||
}
|
||
input[type=button]
|
||
{
|
||
padding: 0;
|
||
}
|
||
input[type=file], input[list=list_tags], input[type=url]
|
||
{
|
||
margin-left: 10ch;
|
||
}
|
||
span.hint
|
||
{
|
||
font-style: italic;
|
||
}
|
||
p.footer
|
||
{
|
||
text-align: right;
|
||
}
|
||
table
|
||
{
|
||
width: 80%;
|
||
margin: auto auto;
|
||
}
|
||
table caption, table tr:first-of-type td
|
||
{
|
||
border-bottom: 1px solid;
|
||
}
|
||
table td:first-of-type
|
||
{
|
||
border-right: 1px solid;
|
||
}
|
||
</style>
|
||
<link rel="alternate" type="application/rss+xml" title="The newest FediBlock entries. All tags."
|
||
href="/rss">
|
||
</head>
|
||
<body>
|
||
<h1>FediBlock</h1>
|
||
|
||
<!-- <p>
|
||
<a href="https://fediblock.org/">FediBlock.org</a> ·
|
||
<a href="http://mzz6cduobh3oemtlou2sssbr4wteglmcabq5exrln3v7puwegfn4qqyd.onion/">
|
||
Onion service</a> (Tor)
|
||
</p> -->
|
||
|
||
<h2 id="what">What is this?</h2>
|
||
|
||
<p>
|
||
We aim to build a comprehensive list of #FediBlock posts in order to provide it to –
|
||
especially new – instance admins.
|
||
</p>
|
||
|
||
<p>
|
||
The idea of this project is to provide a list of bad actor instances in the Fediverse, in
|
||
order to enable instance admins to keep their instances clean of those actors without having
|
||
to go through endless and incomplete pages of #FediBlock posts.
|
||
</p>
|
||
|
||
<p>
|
||
Everyone can submit instances they suggest to block and provide receipts and reasoning.
|
||
Instance admins can subscribe to updates and decide for themselves whether they want to block
|
||
that instance or not. Those subscriptions can be limited to specific reasons (enables racism,
|
||
“free speech champions”, homomisia, no moderation, etc) or for all block suggestions.
|
||
</p>
|
||
|
||
<p>
|
||
The intention is to provide safe spaces in the Fediverse. The blocking suggestions should have
|
||
reasons like the above mentioned. If you want to suggest something like “The admin is blocking
|
||
my instance just because I used the n-word”, this is no place for you and your suggestion
|
||
might be deleted.
|
||
</p>
|
||
|
||
<p>
|
||
We recognize the work that others put into the #FediBlock hashtag. This is supposed to be an
|
||
archive or extension.
|
||
</p>
|
||
|
||
<h3>What are the advantages over the #FediBlock hashtag?</h3>
|
||
|
||
<ul>
|
||
<li>A list of all instances at a glance. Great for pointing admins of new instances to.</li>
|
||
<li>You get all block recommendations, not just the ones that federate to your instance.</li>
|
||
<li>Every recommendation has at least one receipt attached.</li>
|
||
<li>Entries are editable (with a git pull-request).</li>
|
||
<li>
|
||
Subscribe to the RSS feed to get all new recommendations or subscribe only to specific tags.
|
||
</li>
|
||
</ul>
|
||
|
||
<h2 id="list">Blocklist</h2>
|
||
|
||
<ul>
|
||
<li>Look at <a href="/blocklist/">all block recommendations in one page</a>.</li>
|
||
<li>
|
||
<a href="/rss">Subscribe to all new recommendations via RSS</a>, or<br>
|
||
<form method="get" action="/rss">
|
||
<label for="tags_rss" style="width: auto;">subscribe only to these tags:</label>
|
||
<input type="text" id="tags_rss" name="tags[]" placeholder="tag1,tag2,tag3"
|
||
style="width: 42ch;">
|
||
<input type="submit">
|
||
</form>
|
||
</li>
|
||
</ul>
|
||
|
||
<h2 id="api">API</h2>
|
||
|
||
<p><a href="/api/v1/list">/api/v1/list</a> returns an array of objects with these properties:</p>
|
||
|
||
<table>
|
||
<tr>
|
||
<td id="list_property">Property (type)</td>
|
||
<td id="list_description">Description</td>
|
||
</tr>
|
||
<tr>
|
||
<td headers="list_property">instance (string)</td>
|
||
<td headers="list_description">The hostname of the instance.</td>
|
||
</tr>
|
||
<tr>
|
||
<td headers="list_property">url (string)</td>
|
||
<td headers="list_description">The location of the full data set.</td>
|
||
</tr>
|
||
</table>
|
||
|
||
<p>The full data set is an object with these properties:</p>
|
||
|
||
<table>
|
||
<tr>
|
||
<td id="data_property">Property (type)</td>
|
||
<td id="data_description">Description</td>
|
||
</tr>
|
||
<tr>
|
||
<td headers="data_property">description (string)</td>
|
||
<td headers="data_description">The reasons the instance is listed. Can be long. Not sanitized.</td>
|
||
</tr>
|
||
<tr>
|
||
<td headers="data_property">instance (string)</td>
|
||
<td headers="data_description">The hostname of the instance. Can be more than one, separated by comma.</td>
|
||
</tr>
|
||
<tr>
|
||
<td headers="data_property">receipts (array of strings)</td>
|
||
<td headers="data_description">URLs to prove the claims made in the description and tags.</td>
|
||
</tr>
|
||
<tr>
|
||
<td headers="data_property">report_time (string)</td>
|
||
<td headers="data_description">Date and time of reporting, UTC. Format:
|
||
<a href="https://man7.org/linux/man-pages/man3/strftime.3.html">%Y-%m-%dT%H:%M:%S</a>.</td>
|
||
</tr>
|
||
<tr>
|
||
<td headers="data_property">screenshots (array of strings)</td>
|
||
<td headers="data_description">The file names of the screenshots. Prepend
|
||
<code>https://fediblock.org/blocklist/</code> and you have the URL.</td>
|
||
</tr>
|
||
<tr>
|
||
<td headers="data_property">tags (array of strings)</td>
|
||
<td headers="data_description">Tags to classify the problems with the instance.</td>
|
||
</tr>
|
||
<tr>
|
||
<td headers="data_property">unreachable (boolean)</td>
|
||
<td headers="data_description"><code>true</code> if instance is unreachable. This property may not exist.</td>
|
||
</tr>
|
||
</table>
|
||
|
||
<h2 id="contact">Contact</h2>
|
||
|
||
<p>
|
||
You can reach us in the Fediverse at
|
||
<a rel="me" href="https://botsin.space/@fediblock_archive">@fediblock_archive@botsin.space</a>.
|
||
</p>
|
||
|
||
<h2 id="suggest"><del>Suggest instance</del></h2>
|
||
<div style="font-size: 200%; font-weight: bold;">
|
||
<p>
|
||
The project is inactive and will be for the forseeable future. You can't
|
||
suggest instances at the moment.
|
||
</p>
|
||
<p>
|
||
If you want to adopt the project, get in touch with
|
||
<a rel="me" href="https://botsin.space/@fediblock_archive">@fediblock_archive@botsin.space</a>.
|
||
</p>
|
||
</div>
|
||
|
||
<!-- <p>
|
||
Please make sure to include receipts (hyperlinks and/or screenshots) for all claims you make. We
|
||
don't want trust to be necessary to use this list.
|
||
</p>
|
||
|
||
<form method="post" action="/add" enctype="multipart/form-data" id="form_add">
|
||
<label for="instance">Instance:</label>
|
||
<input type="text" id="instance" name="instance" placeholder="example.com" required>
|
||
<span class="hint">(Without the “https://”)</span>
|
||
<br>
|
||
|
||
<label for="tags">Tags:</label><span class="hint">(One tag per field or comma separated)</span><br>
|
||
<input type="text" list="list_tags" id="tags" name="tags[]" required>
|
||
<input type="button" id="add_tag" value="➕" title="Add tag" onclick="javascript:add_input_tag();">
|
||
<br>
|
||
|
||
<label for="receipts">Receipts:</label><span class="hint">(One receipt per field or comma separated)</span><br>
|
||
<input type="url" id="receipts" name="receipts[]" required>
|
||
<input type="button" id="add_receipt" value="➕" title="Add receipt" onclick="javascript:add_input_receipt();">
|
||
<br>
|
||
|
||
<label for="screenshot1">Screenshots:</label><span class="hint">(optional)</span>
|
||
<br>
|
||
<input type="file" id="screenshot1" name="screenshots[]" accept="image/*">
|
||
<br>
|
||
<input type="file" id="screenshot2" name="screenshots[]" accept="image/*">
|
||
<br>
|
||
<input type="file" id="screenshot3" name="screenshots[]" accept="image/*">
|
||
<br>
|
||
<input type="file" id="screenshot4" name="screenshots[]" accept="image/*">
|
||
<br>
|
||
|
||
<label for="description">Description:</label><br>
|
||
<textarea id="description" name="description" cols="80" rows="20" required></textarea><br>
|
||
|
||
<div style="display:none;">
|
||
<label for="url" style="width: 18ch;">Leave this empty:</label>
|
||
<input type="text" id="url" name="url">
|
||
</div>
|
||
|
||
<div>Please solve this mathematical question:</div>
|
||
<?php
|
||
$array = array
|
||
(
|
||
0 => "1 + 1",
|
||
1 => "4 + 2",
|
||
2 => "12 + 5",
|
||
3 => "15 - 3",
|
||
4 => "2 x 2",
|
||
5 => "2 - 1"
|
||
);
|
||
$random_number = rand(0, 5);
|
||
|
||
printf('<input type="text" id="captcha_id" name="captcha_id" value="%s" style="display:none;">',
|
||
$random_number);
|
||
printf('<label for="captcha_answer">%s:</label>', $array[$random_number]);
|
||
?>
|
||
<input type="text" id="captcha_answer" name="captcha_answer" required>
|
||
<br>
|
||
|
||
<input type="submit">
|
||
</form> -->
|
||
|
||
<p class="footer">
|
||
<a href="https://schlomp.space/FediBlock">Sourcecode</a> licensed under the
|
||
<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL-3.0-only</a>.
|
||
</p>
|
||
|
||
<script>
|
||
function add_input_tag()
|
||
{
|
||
const input_text = document.createElement("input");
|
||
input_text.setAttribute("type", "text");
|
||
input_text.setAttribute("list", "list_tags");
|
||
input_text.setAttribute("name", "tags[]");
|
||
|
||
const form = document.getElementById("form_add");
|
||
const btn = document.getElementById("add_tag");
|
||
form.insertBefore(document.createElement("br"), btn);
|
||
form.insertBefore(input_text, btn);
|
||
input_text.focus();
|
||
}
|
||
|
||
function add_input_receipt()
|
||
{
|
||
const input_text = document.createElement("input");
|
||
input_text.setAttribute("type", "url");
|
||
input_text.setAttribute("name", "receipts[]");
|
||
|
||
const form = document.getElementById("form_add");
|
||
const btn = document.getElementById("add_receipt");
|
||
form.insertBefore(document.createElement("br"), btn);
|
||
form.insertBefore(input_text, btn);
|
||
input_text.focus();
|
||
}
|
||
</script>
|
||
|
||
<datalist id="list_tags">
|
||
<?php
|
||
if ($file = fopen("tags.lst", "r"))
|
||
{
|
||
while(!feof($file))
|
||
{
|
||
$tag = rtrim(fgets($file));
|
||
if ($tag != "")
|
||
{
|
||
printf("<option value=\"%s\">\n", $tag);
|
||
}
|
||
}
|
||
fclose($file);
|
||
}
|
||
?>
|
||
</datalist>
|
||
</body>
|
||
</html>
|