173 lines
6 KiB
Markdown
173 lines
6 KiB
Markdown
# Brew Server Blocklist
|
|
|
|
Friendica publishes the server wide blocklists for other servers in the
|
|
Fediverse. This script will collect the blocklists of servers of your
|
|
choice and create a merged blocklist from them that you can then import
|
|
into your own Friendica server.
|
|
|
|
To make certain that you don't block just any instance in the Fediverse
|
|
because $somebody has it on their blocklist you assign _trust levels_ to
|
|
the correctness of the blocklists of the other servers. Only when a server
|
|
is blocked with a total trust level that is above a confidence level, it
|
|
will be added to resulting blocklist automatically. Otherwise the user
|
|
will be ask if they want to add a node to their blocklist or not.
|
|
|
|
## Config file
|
|
|
|
To use the script you have to create a config file. The structure of the
|
|
file is the following
|
|
|
|
```
|
|
[soc1.example.com]
|
|
trust = 40
|
|
|
|
[soc2.example.com]
|
|
trust = 50
|
|
|
|
[soc3.example.com]
|
|
trust = 50
|
|
|
|
[soc4.example.com]
|
|
trust = 90
|
|
```
|
|
|
|
it assigns _trust_ values to nodes in the network. The node domain names
|
|
are given in the `[]`. These are the nodes that the script will collect
|
|
the server blocklists from.
|
|
|
|
Trust levels can be negative. Once their summed value does reach a value of
|
|
100 the blocklist entry is trusted automatically without user interaction.
|
|
|
|
## Installation
|
|
|
|
You can install the script with [pipx](https://github.com/pypa/pipx) by running
|
|
|
|
```
|
|
pipx install git+https://git.friendi.ca/tobias/brewserverblocklist.git
|
|
```
|
|
|
|
Assuming pipx was installed correctly the script `brewserverblocklist` is now
|
|
available on your system (or for your user) to be executed.
|
|
|
|
## Usage
|
|
|
|
### Creating a config file
|
|
|
|
Before you can use the script, you have to define a configuration file.
|
|
For details of the format of the file, see the section above. You might
|
|
want to enter your own Friendica node and assigning it a trust value of 100.
|
|
|
|
Trust values can have negative values. If you know an admin that has the
|
|
opposite preference on their blocklist, you can add their node and assign
|
|
a trust value of -100 to it.
|
|
|
|
An example config file (lets call it `test.config`) might look like:
|
|
|
|
```
|
|
[myfriendicanode.com]
|
|
trust = 100
|
|
|
|
[coolnode.net]
|
|
trust = 60
|
|
|
|
[nicenode.net]
|
|
trust = 40
|
|
|
|
[othernicenode.com]
|
|
trust = 30
|
|
|
|
[bullshitnode.com]
|
|
trust = -50
|
|
```
|
|
|
|
You can also add a list of protected nodes to the config file. To do so add a
|
|
section `[safe harbor]` to the config file. This section has only one entry
|
|
called `domains` and the value of this entry is a comma separated list of domains
|
|
that should never get on your blocklist.
|
|
|
|
For example
|
|
|
|
```
|
|
[safe harbor]
|
|
domains = friendica.example.com
|
|
```
|
|
|
|
You can also add Mastodon instances you trust. In addition to the configuration
|
|
needed for Friendica nodes you have to add the `type = mastodon` entry to the
|
|
config section. *Please note* that the used API endpoint is not available on
|
|
all Mastodon instances.
|
|
|
|
Please note only suspended entries from the Mastodon blocklist will be added to
|
|
the blocklist. Silenced entries will be ignored.
|
|
|
|
### Running the script
|
|
|
|
You have to supply the file name of the configuration file on the command
|
|
line when you run the script. This is done using the `-c` parameter.
|
|
|
|
The script will then collect all the blocklists from the Friendica nodes in
|
|
the configuration file and merge the lists. While merging, each entry in the
|
|
combined blocklist is assigned a trust value that is equal to the trust values
|
|
of the node that have the entry in their blocklist.
|
|
|
|
Say `coolnode.net` and `othernicenode.com` both have `example.com` on their
|
|
blocklists. Their combined trust level to block the node would be `60 + 30 = 90`.
|
|
This combined value is compared to the *confidence level* that by default is 100.
|
|
In this example `example.com` has a lower combined trust level then the confidence
|
|
level - so the script will ask you about your opinion - do you want to include the
|
|
entry in your new blocklist or not.
|
|
|
|
Another node is on the blocklists of `coolnode.net` and `nicenode.net` thus has
|
|
a combined trust level of 100 which is equal to the confidence level. So the
|
|
script will automatically assume that this node should be included on the new
|
|
blocklist.
|
|
|
|
If you and the admin of `bullshitnode.com` both add a node on the blocklist the
|
|
combined trust level for automatically blocking it would be `50`.
|
|
|
|
### Other parameters
|
|
|
|
* `-o filename` will cause the script to write the list into the passed file
|
|
* `-C N` will set the confidence level to the value N
|
|
* `-y` and `-n` activate the auto-mode of the script, either accepting or discarding all entries to the blocklist with a trust level smaller then the confidence level
|
|
|
|
## Author
|
|
|
|
* Tobias Diekershoff <tobias(dot)diekershoff(att)gmx(dot)net>
|
|
|
|
## LICENSE
|
|
|
|
berewserverblocklist Copyright (C) 2023 Tobias Diekershoff
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or (at
|
|
your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful, but
|
|
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
|
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
for more details.
|
|
|
|
You should have received a copy of the GNU General Public License along
|
|
with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
### REUSE compliance
|
|
|
|
[![REUSE status](https://api.reuse.software/badge/git.friendi.ca/tobias/brewserverblocklist)](https://api.reuse.software/info/git.friendi.ca/tobias/brewserverblocklist)
|
|
|
|
This project uses [REUSE](https://reuse.software/) to ensure that all components
|
|
are release under a FLOSS compatible license. If you contribute to the project,
|
|
please ensure that your contribution is REUSE compliant.
|
|
|
|
This can be done by adding the following to your `.git/hooks/pre-commit` hook.
|
|
|
|
``` shell
|
|
#!/usr/bin/env bash
|
|
reuse lint
|
|
```
|
|
|
|
## Credits
|
|
|
|
`brewserverblocklist` was created with [`cookiecutter`](https://cookiecutter.readthedocs.io/en/latest/) and the `py-pkgs-cookiecutter` [template](https://github.com/py-pkgs/py-pkgs-cookiecutter).
|