This repository has been archived on 2021-05-18. You can view files and clone it, but cannot push or open issues or pull requests.
website/index.php

349 lines
12 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en">
<head>
<title>FediBlock</title>
<meta charset="utf-8">
<meta name="robots" content="noindex, nofollow">
<style>
body
{
max-width: 100ch;
}
p
{
text-indent: 2ch;
margin: 0 auto;
text-align: justify;
}
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 are a small group of people aiming to build a comprehensive list of #FediBlock posts in order to provide it to
especially new instance admins. The intention is to provide safe spaces in the Fediverse.
</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>
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="criteria">How is it decided what goes on the list and what doesn't?</h2>
<p>Every entry needs the approval of at least 2 moderators.</p>
<h3>Stuff that gets on the list</h3>
<p>
Discriminatory behaviour and content promoting or advocating the oppression of members of marginalised groups.
These groups may be characterised by any of the following (though this list is naturally incomplete):
</p>
<ul>
<li>ethnicity</li>
<li>gender identity or expression</li>
<li>sexual identity or expression</li>
<li>physical characteristics or age</li>
<li>disability or illness</li>
<li>nationality, residency, citizen status</li>
<li>wealth or education</li>
<li>religious affiliation, agnosticism or atheism</li>
</ul>
<p>Also:</p>
<ul>
<li>threatening behaviour, stalking, and doxxing</li>
<li>
harassment, including brigading, dogpiling, or any other form of contact with a user who has stated that they do
not wish to be contacted
</li>
<li>mobbing, including name-calling, intentional misgendering or deadnaming</li>
<li>
violent nationalist propaganda, Nazi symbolism or promoting the ideology of National Socialism and fascism."
</li>
</ul>
<h3>Stuff that does not get on the list</h3>
<ul>
<li>“The admin is blocking my instance just because I used the n-word.”</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>
Proposed entries are converted to Pull Requests on our <a href="https://schlomp.space/FediBlock/data/pulls">data
repository</a>, where we discuss any issues with them. You can join the discussion there or reach out to us at
<a rel="me" href="https://botsin.space/@fediblock_archive">@fediblock_archive@botsin.space</a>.
</p>
<h2 id="suggest">Suggest instance</h2>
<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>