automated commit on 2023-04-30 21:27:42

This commit is contained in:
Oliphant 2023-04-30 21:27:42 +00:00
parent a60cc84440
commit b7465e5052
19 changed files with 1064 additions and 0 deletions

6
.gitignore vendored Normal file
View File

@ -0,0 +1,6 @@
exports/**
logs/**
# used for local secrets and modifications to scripts
secretconfig/**
local/**

24
RUNNING.md Normal file
View File

@ -0,0 +1,24 @@
# Running the Blocklists
1. Setup Fediblockhole
```bash
python3 -m pip install fediblockhole
```
2. Clone this Repo
```bash
mkdir /fediblockhole
cd /fediblockhole
git clone git@codeberg.org:oliphant/blocklists.git .
```
3. Execute
`./fedisync.sh`
That's it. Blocklists will be written to the
You can use `local` and `secretconfig` as subfolders that aren't tracked by git to create your own versions of these scripts and config.
4. Optional
`./fedisync-push.sh`
This will sync up a specified blocklist (any blocklist you want) to a specified destination. This is not required to generate blocklists.

View File

@ -0,0 +1,74 @@
## Fedi Council 100% file
# List of instances to read blocklists from.
# If the instance makes its blocklist public, no authorization token is needed.
# Otherwise, `token` is a Bearer token authorised to read domain_blocks.
# If `admin` = True, use the more detailed admin API, which requires a token with a
# higher level of authorization.
# If `import_fields` are provided, only import these fields from the instance.
# Overrides the global `import_fields` setting.
blocklist_instance_sources = []
# List of URLs to read csv blocklists from
# Format tells the parser which format to use when parsing the blocklist
# max_severity tells the parser to override any severities that are higher than this value
# import_fields tells the parser to only import that set of fields from a specific source
blocklist_url_sources = [
{ url = 'file:///fediblockhole/blocklists/pleroma.envs.net.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/turtle.garden.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/union.place.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/sunny.garden.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/toot.wales.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/mastodon.art.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/rage.love.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/artisan.chat.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/solarpunk.moe.csv', format = 'csv' },
]
# assumes a git pull will proceed this check and bring down the most recent allowlist
allowlist_url_sources = [
{ url = 'file:///fediblockhole/blocklists/__allowlist.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/birdsite.csv', format = 'csv' },
]
# List of instances to write blocklist to
blocklist_instance_destinations = [
# { domain = 'eigenmagic.net', token = '<read_write_token>', max_followed_severity = 'silence'},
]
## Store a local copy of the remote blocklists after we fetch them
save_intermediate = false
## Directory to store the local blocklist copies
savedir = '/fediblockhole/blocklists/'
## File to save the fully merged blocklist into
blocklist_savefile = '/fediblockhole/blocklists/100.percent.csv'
## Don't push blocklist to instances, even if they're defined above
no_push_instance = true
## Don't fetch blocklists from URLs, even if they're defined above
# no_fetch_url = false
## Don't fetch blocklists from instances, even if they're defined above
# no_fetch_instance = false
## Set the mergeplan to use when dealing with overlaps between blocklists
# The default 'max' mergeplan will use the harshest severity block found for a domain.
# The 'min' mergeplan will use the lightest severity block found for a domain.
mergeplan = 'min'
merge_threshold_type = 'pct'
merge_threshold = 100
## Set which fields we import
## 'domain' and 'severity' are always imported, these are additional
##
import_fields = ['reject_media', 'reject_reports', 'obfuscate']
#import_fields = ['public_comment', 'reject_media', 'reject_reports', 'obfuscate']
## Set which fields we export
## 'domain' and 'severity' are always exported, these are additional
##
export_fields = ['reject_media', 'reject_reports', 'public_comment', 'obfuscate']

View File

@ -0,0 +1,74 @@
## Fedi Council Tier 0 File
# List of instances to read blocklists from.
# If the instance makes its blocklist public, no authorization token is needed.
# Otherwise, `token` is a Bearer token authorised to read domain_blocks.
# If `admin` = True, use the more detailed admin API, which requires a token with a
# higher level of authorization.
# If `import_fields` are provided, only import these fields from the instance.
# Overrides the global `import_fields` setting.
blocklist_instance_sources = []
# List of URLs to read csv blocklists from
# Format tells the parser which format to use when parsing the blocklist
# max_severity tells the parser to override any severities that are higher than this value
# import_fields tells the parser to only import that set of fields from a specific source
blocklist_url_sources = [
{ url = 'file:///fediblockhole/blocklists/pleroma.envs.net.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/turtle.garden.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/union.place.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/sunny.garden.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/toot.wales.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/mastodon.art.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/rage.love.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/artisan.chat.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/solarpunk.moe.csv', format = 'csv' },
]
# assumes a git pull will proceed this check and bring down the most recent allowlist
allowlist_url_sources = [
{ url = 'file:///fediblockhole/blocklists/__allowlist.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/birdsite.csv', format = 'csv' },
]
# List of instances to write blocklist to
blocklist_instance_destinations = [
# { domain = 'eigenmagic.net', token = '<read_write_token>', max_followed_severity = 'silence'},
]
## Store a local copy of the remote blocklists after we fetch them
save_intermediate = false
## Directory to store the local blocklist copies
savedir = '/fediblockhole/blocklists/'
## File to save the fully merged blocklist into
blocklist_savefile = '/fediblockhole/blocklists/tier0-council.csv'
## Don't push blocklist to instances, even if they're defined above
no_push_instance = true
## Don't fetch blocklists from URLs, even if they're defined above
# no_fetch_url = false
## Don't fetch blocklists from instances, even if they're defined above
# no_fetch_instance = false
## Set the mergeplan to use when dealing with overlaps between blocklists
# The default 'max' mergeplan will use the harshest severity block found for a domain.
# The 'min' mergeplan will use the lightest severity block found for a domain.
mergeplan = 'min'
merge_threshold_type = 'pct'
merge_threshold = 80
## Set which fields we import
## 'domain' and 'severity' are always imported, these are additional
##
import_fields = ['reject_media', 'reject_reports', 'obfuscate']
#import_fields = ['public_comment', 'reject_media', 'reject_reports', 'obfuscate']
## Set which fields we export
## 'domain' and 'severity' are always exported, these are additional
##
export_fields = ['reject_media', 'reject_reports', 'public_comment', 'obfuscate']

View File

@ -0,0 +1,61 @@
## Example Server Export File
# List of instances to read blocklists from.
# If the instance makes its blocklist public, no authorization token is needed.
# Otherwise, `token` is a Bearer token authorised to read domain_blocks.
# If `admin` = True, use the more detailed admin API, which requires a token with a
# higher level of authorization.
# If `import_fields` are provided, only import these fields from the instance.
# Overrides the global `import_fields` setting.
blocklist_instance_sources = []
# List of URLs to read csv blocklists from
# Format tells the parser which format to use when parsing the blocklist
# max_severity tells the parser to override any severities that are higher than this value
# import_fields tells the parser to only import that set of fields from a specific source
blocklist_url_sources = [
{ url = 'file:///fediblockhole/blocklists/_unified_tier0_blocklist.csv', format = 'csv' },
]
# List of instances to write blocklist to
blocklist_instance_destinations = [
{ domain = 'server.example.com', token = '<your server token>', max_followed_severity = 'silence'},
]
allowlist_url_sources = [
{ url = 'file:///fediblockhole/blocklists/__allowlist.csv', format = 'csv' },
]
## Store a local copy of the remote blocklists after we fetch them
save_intermediate = false
## Directory to store the local blocklist copies
savedir = '/fediblockhole/blocklists/'
## File to save the fully merged blocklist into
blocklist_savefile = '/fediblockhole/exports/example_server_blocklist.csv'
## Don't push blocklist to instances, even if they're defined above
no_push_instance = false
## Don't fetch blocklists from URLs, even if they're defined above
# no_fetch_url = false
## Don't fetch blocklists from instances, even if they're defined above
# no_fetch_instance = false
## Set the mergeplan to use when dealing with overlaps between blocklists
# The default 'max' mergeplan will use the harshest severity block found for a domain.
# The 'min' mergeplan will use the lightest severity block found for a domain.
mergeplan = 'min'
## Set which fields we import
## 'domain' and 'severity' are always imported, these are additional
##
#import_fields = ['reject_media', 'reject_reports', 'obfuscate']
import_fields = ['public_comment', 'reject_media', 'reject_reports', 'obfuscate']
## Set which fields we export
## 'domain' and 'severity' are always exported, these are additional
##
export_fields = ['reject_media', 'reject_reports', 'obfuscate']

View File

@ -0,0 +1,63 @@
## All the T0 stuff m.s. doesn't block
# List of instances to read blocklists from.
# If the instance makes its blocklist public, no authorization token is needed.
# Otherwise, `token` is a Bearer token authorised to read domain_blocks.
# If `admin` = True, use the more detailed admin API, which requires a token with a
# higher level of authorization.
# If `import_fields` are provided, only import these fields from the instance.
# Overrides the global `import_fields` setting.
blocklist_instance_sources = []
# List of URLs to read csv blocklists from
# Format tells the parser which format to use when parsing the blocklist
# max_severity tells the parser to override any severities that are higher than this value
# import_fields tells the parser to only import that set of fields from a specific source
blocklist_url_sources = [
{ url = 'file:///fediblockhole/blocklists/_unified_tier0_blocklist.csv', format = 'csv' },
]
# List of instances to write blocklist to
blocklist_instance_destinations = [
# { domain = 'eigenmagic.net', token = '<read_write_token>', max_followed_severity = 'silence'},
]
allowlist_url_sources = [
{ url = 'file:///fediblockhole/blocklists/__allowlist.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/birdsite.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/mastodon.social.csv', format = 'csv' },
]
## Store a local copy of the remote blocklists after we fetch them
save_intermediate = false
## Directory to store the local blocklist copies
savedir = '/fediblockhole/blocklists/'
## File to save the fully merged blocklist into
blocklist_savefile = '/fediblockhole/blocklists/missing-tier0-mastodon.social.csv'
## Don't push blocklist to instances, even if they're defined above
no_push_instance = true
## Don't fetch blocklists from URLs, even if they're defined above
# no_fetch_url = false
## Don't fetch blocklists from instances, even if they're defined above
# no_fetch_instance = false
## Set the mergeplan to use when dealing with overlaps between blocklists
# The default 'max' mergeplan will use the harshest severity block found for a domain.
# The 'min' mergeplan will use the lightest severity block found for a domain.
mergeplan = 'max'
## Set which fields we import
## 'domain' and 'severity' are always imported, these are additional
##
import_fields = ['reject_media', 'reject_reports', 'obfuscate']
#import_fields = ['public_comment', 'reject_media', 'reject_reports', 'obfuscate']
## Set which fields we export
## 'domain' and 'severity' are always exported, these are additional
##
export_fields = ['reject_media', 'reject_reports', 'public_comment', 'obfuscate']

View File

@ -0,0 +1,62 @@
## All the T0 stuff m.s. doesn't block
# List of instances to read blocklists from.
# If the instance makes its blocklist public, no authorization token is needed.
# Otherwise, `token` is a Bearer token authorised to read domain_blocks.
# If `admin` = True, use the more detailed admin API, which requires a token with a
# higher level of authorization.
# If `import_fields` are provided, only import these fields from the instance.
# Overrides the global `import_fields` setting.
blocklist_instance_sources = []
# List of URLs to read csv blocklists from
# Format tells the parser which format to use when parsing the blocklist
# max_severity tells the parser to override any severities that are higher than this value
# import_fields tells the parser to only import that set of fields from a specific source
blocklist_url_sources = [
{ url = 'file:///fediblockhole/blocklists/mastodon.social.csv', format = 'csv' },
]
# List of instances to write blocklist to
blocklist_instance_destinations = [
# { domain = 'eigenmagic.net', token = '<read_write_token>', max_followed_severity = 'silence'},
]
allowlist_url_sources = [
{ url = 'file:///fediblockhole/blocklists/birdsite.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/_unified_tier0_blocklist.csv', format = 'csv' },
]
## Store a local copy of the remote blocklists after we fetch them
save_intermediate = false
## Directory to store the local blocklist copies
savedir = '/fediblockhole/blocklists/'
## File to save the fully merged blocklist into
blocklist_savefile = '/fediblockhole/blocklists/council-missing-mastodon.social.csv'
## Don't push blocklist to instances, even if they're defined above
no_push_instance = true
## Don't fetch blocklists from URLs, even if they're defined above
# no_fetch_url = false
## Don't fetch blocklists from instances, even if they're defined above
# no_fetch_instance = false
## Set the mergeplan to use when dealing with overlaps between blocklists
# The default 'max' mergeplan will use the harshest severity block found for a domain.
# The 'min' mergeplan will use the lightest severity block found for a domain.
mergeplan = 'max'
## Set which fields we import
## 'domain' and 'severity' are always imported, these are additional
##
import_fields = ['reject_media', 'reject_reports', 'obfuscate']
#import_fields = ['public_comment', 'reject_media', 'reject_reports', 'obfuscate']
## Set which fields we export
## 'domain' and 'severity' are always exported, these are additional
##
export_fields = ['reject_media', 'reject_reports', 'public_comment', 'obfuscate']

77
config/pull.conf.toml Normal file
View File

@ -0,0 +1,77 @@
## Pull Trusted Sources - Retrieve all sources and write MAX merge file
# List of instances to read blocklists from.
# If the instance makes its blocklist public, no authorization token is needed.
# Otherwise, `token` is a Bearer token authorised to read domain_blocks.
# If `admin` = True, use the more detailed admin API, which requires a token with a
# higher level of authorization.
# If `import_fields` are provided, only import these fields from the instance.
# Overrides the global `import_fields` setting.
blocklist_instance_sources = [
{ domain = 'mastodon.social' },
{ domain = 'mastodon.online' },
{ domain = 'union.place' },
{ domain = 'sunny.garden' },
{ domain = 'toot.wales' },
{ domain = 'mastodon.art'},
{ domain = 'rage.love' },
{ domain = 'artisan.chat'},
{ domain = 'solarpunk.moe'},
]
# List of URLs to read csv blocklists from
# Format tells the parser which format to use when parsing the blocklist
# max_severity tells the parser to override any severities that are higher than this value
# import_fields tells the parser to only import that set of fields from a specific source
blocklist_url_sources = [
# tier 0
{ url = 'https://seirdy.one/pb/tier0.csv', format = 'csv'},
{ url = 'https://raw.githubusercontent.com/gardenfence/blocklist/main/gardenfence-fediblocksync.csv', format = 'csv'},
# other sources
{ url = 'https://seirdy.one/pb/pleroma.envs.net.csv', format = 'csv' },
{ url = 'https://turtle.garden/blocklist.csv', format = 'csv' },
]
# assumes a git pull will proceed this check and bring down the most recent allowlist
allowlist_url_sources = [
{ url = 'file:///fediblockhole/blocklists/__allowlist.csv', format = 'csv' },
]
# List of instances to write blocklist to
blocklist_instance_destinations = [
# { domain = 'eigenmagic.net', token = '<read_write_token>', max_followed_severity = 'silence'},
]
## Store a local copy of the remote blocklists after we fetch them
save_intermediate = true
## Directory to store the local blocklist copies
savedir = '/fediblockhole/blocklists/'
## File to save the fully merged blocklist into
blocklist_savefile = '/fediblockhole/blocklists/_unified_max_blocklist.csv'
## Don't push blocklist to instances, even if they're defined above
no_push_instance = true
## Don't fetch blocklists from URLs, even if they're defined above
# no_fetch_url = false
## Don't fetch blocklists from instances, even if they're defined above
# no_fetch_instance = false
## Set the mergeplan to use when dealing with overlaps between blocklists
# The default 'max' mergeplan will use the harshest severity block found for a domain.
# The 'min' mergeplan will use the lightest severity block found for a domain.
mergeplan = 'max'
## Set which fields we import
## 'domain' and 'severity' are always imported, these are additional
##
import_fields = ['reject_media', 'reject_reports', 'obfuscate']
#import_fields = ['public_comment', 'reject_media', 'reject_reports', 'obfuscate']
## Set which fields we export
## 'domain' and 'severity' are always exported, these are additional
##
export_fields = ['reject_media', 'reject_reports', 'public_comment', 'obfuscate']

64
config/tier0.conf.toml Normal file
View File

@ -0,0 +1,64 @@
## TIER0 File
# List of instances to read blocklists from.
# If the instance makes its blocklist public, no authorization token is needed.
# Otherwise, `token` is a Bearer token authorised to read domain_blocks.
# If `admin` = True, use the more detailed admin API, which requires a token with a
# higher level of authorization.
# If `import_fields` are provided, only import these fields from the instance.
# Overrides the global `import_fields` setting.
blocklist_instance_sources = []
# List of URLs to read csv blocklists from
# Format tells the parser which format to use when parsing the blocklist
# max_severity tells the parser to override any severities that are higher than this value
# import_fields tells the parser to only import that set of fields from a specific source
blocklist_url_sources = [
{ url = 'file:///fediblockhole/blocklists/tier0.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/gardenfence.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/tier0-council.csv', format = 'csv' },
]
# List of instances to write blocklist to
blocklist_instance_destinations = [
# { domain = 'eigenmagic.net', token = '<read_write_token>', max_followed_severity = 'silence'},
]
allowlist_url_sources = [
{ url = 'file:///fediblockhole/blocklists/__allowlist.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/birdsite.csv', format = 'csv' },
]
## Store a local copy of the remote blocklists after we fetch them
save_intermediate = false
## Directory to store the local blocklist copies
savedir = '/fediblockhole/blocklists/'
## File to save the fully merged blocklist into
blocklist_savefile = '/fediblockhole/blocklists/_unified_tier0_blocklist.csv'
## Don't push blocklist to instances, even if they're defined above
no_push_instance = true
## Don't fetch blocklists from URLs, even if they're defined above
# no_fetch_url = false
## Don't fetch blocklists from instances, even if they're defined above
# no_fetch_instance = false
## Set the mergeplan to use when dealing with overlaps between blocklists
# The default 'max' mergeplan will use the harshest severity block found for a domain.
# The 'min' mergeplan will use the lightest severity block found for a domain.
mergeplan = 'max'
## Set which fields we import
## 'domain' and 'severity' are always imported, these are additional
##
import_fields = ['reject_media', 'reject_reports', 'obfuscate']
#import_fields = ['public_comment', 'reject_media', 'reject_reports', 'obfuscate']
## Set which fields we export
## 'domain' and 'severity' are always exported, these are additional
##
export_fields = ['reject_media', 'reject_reports', 'public_comment', 'obfuscate']

View File

@ -0,0 +1,88 @@
## MAX Unified File
# List of instances to read blocklists from.
# If the instance makes its blocklist public, no authorization token is needed.
# Otherwise, `token` is a Bearer token authorised to read domain_blocks.
# If `admin` = True, use the more detailed admin API, which requires a token with a
# higher level of authorization.
# If `import_fields` are provided, only import these fields from the instance.
# Overrides the global `import_fields` setting.
blocklist_instance_sources = []
# List of URLs to read csv blocklists from
# Format tells the parser which format to use when parsing the blocklist
# max_severity tells the parser to override any severities that are higher than this value
# import_fields tells the parser to only import that set of fields from a specific source
blocklist_url_sources = [
{ url = 'file:///fediblockhole/blocklists/union.place.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/sunny.garden.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/mastodon.art.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/artisan.chat.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/toot.wales.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/rage.love.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/pleroma.envs.net.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/turtle.garden.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/solarpunk.moe.csv', format = 'csv' },
]
# List of instances to write blocklist to
blocklist_instance_destinations = [
# { domain = 'eigenmagic.net', token = '<read_write_token>', max_followed_severity = 'silence'},
]
allowlist_url_sources = [
{ url = 'file:///fediblockhole/blocklists/__allowlist.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/birdsite.csv', format = 'csv' },
]
## Store a local copy of the remote blocklists after we fetch them
save_intermediate = false
## Directory to store the local blocklist copies
savedir = '/fediblockhole/blocklists/'
## File to save the fully merged blocklist into
blocklist_savefile = '/fediblockhole/blocklists/_working_tier1.csv'
## Don't push blocklist to instances, even if they're defined above
no_push_instance = true
## Don't fetch blocklists from URLs, even if they're defined above
# no_fetch_url = false
## Don't fetch blocklists from instances, even if they're defined above
# no_fetch_instance = false
## Set the mergeplan to use when dealing with overlaps between blocklists
# The default 'max' mergeplan will use the harshest severity block found for a domain.
# The 'min' mergeplan will use the lightest severity block found for a domain.
mergeplan = 'min'
## Optional threshold-based merging.
# Only merge in domain blocks if the domain is mentioned in
# at least `threshold` blocklists.
# `merge_thresold` is an integer, with a default value of 0.
# The `merge_threshold_type` can be `count` or `pct`.
# If `count` type is selected, the threshold is reached when the domain
# is mentioned in at least `merge_threshold` blocklists. The default value
# of 0 means that every block in every list will be merged in.
# If `pct` type is selected, `merge_threshold` is interpreted as a percentage,
# i.e. if `merge_threshold` = 20, blocks will only be merged in if the domain
# is present in at least 20% of blocklists.
# Percentage calculated as number_of_mentions / total_number_of_blocklists.
# The percentage method is more flexibile, but also more complicated, so take care
# when using it.
#
merge_threshold_type = 'pct'
merge_threshold = 50
## Set which fields we import
## 'domain' and 'severity' are always imported, these are additional
##
import_fields = ['reject_media', 'reject_reports', 'obfuscate']
#import_fields = ['public_comment', 'reject_media', 'reject_reports', 'obfuscate']
## Set which fields we export
## 'domain' and 'severity' are always exported, these are additional
##
export_fields = ['reject_media', 'reject_reports', 'public_comment', 'obfuscate']

65
config/tier1.conf.toml Normal file
View File

@ -0,0 +1,65 @@
## Tier1
# List of instances to read blocklists from.
# If the instance makes its blocklist public, no authorization token is needed.
# Otherwise, `token` is a Bearer token authorised to read domain_blocks.
# If `admin` = True, use the more detailed admin API, which requires a token with a
# higher level of authorization.
# If `import_fields` are provided, only import these fields from the instance.
# Overrides the global `import_fields` setting.
blocklist_instance_sources = []
# List of URLs to read csv blocklists from
# Format tells the parser which format to use when parsing the blocklist
# max_severity tells the parser to override any severities that are higher than this value
# import_fields tells the parser to only import that set of fields from a specific source
blocklist_url_sources = [
# bring in tier0
{ url = 'file:///fediblockhole/blocklists/_unified_tier0_blocklist.csv', format = 'csv' },
# tier 1
{ url = 'file:///fediblockhole/blocklists/_working_tier1.csv', format = 'csv' },
]
allowlist_url_sources = [
{ url = 'file:///fediblockhole/blocklists/__allowlist.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/birdsite.csv', format = 'csv' },
]
# List of instances to write blocklist to
blocklist_instance_destinations = [
# { domain = 'eigenmagic.net', token = '<read_write_token>', max_followed_severity = 'silence'},
]
## Store a local copy of the remote blocklists after we fetch them
save_intermediate = false
## Directory to store the local blocklist copies
savedir = '/fediblockhole/blocklists/'
## File to save the fully merged blocklist into
blocklist_savefile = '/fediblockhole/blocklists/_unified_tier1_blocklist.csv'
## Don't push blocklist to instances, even if they're defined above
no_push_instance = true
## Don't fetch blocklists from URLs, even if they're defined above
# no_fetch_url = false
## Don't fetch blocklists from instances, even if they're defined above
# no_fetch_instance = false
## Set the mergeplan to use when dealing with overlaps between blocklists
# The default 'max' mergeplan will use the harshest severity block found for a domain.
# The 'min' mergeplan will use the lightest severity block found for a domain.
mergeplan = 'min'
## Set which fields we import
## 'domain' and 'severity' are always imported, these are additional
##
import_fields = ['reject_media', 'reject_reports', 'obfuscate']
#import_fields = ['public_comment', 'reject_media', 'reject_reports', 'obfuscate']
## Set which fields we export
## 'domain' and 'severity' are always exported, these are additional
##
export_fields = ['reject_media', 'reject_reports', 'public_comment', 'obfuscate']

View File

@ -0,0 +1,88 @@
## Tier 2 threshold file
# List of instances to read blocklists from.
# If the instance makes its blocklist public, no authorization token is needed.
# Otherwise, `token` is a Bearer token authorised to read domain_blocks.
# If `admin` = True, use the more detailed admin API, which requires a token with a
# higher level of authorization.
# If `import_fields` are provided, only import these fields from the instance.
# Overrides the global `import_fields` setting.
blocklist_instance_sources = []
# List of URLs to read csv blocklists from
# Format tells the parser which format to use when parsing the blocklist
# max_severity tells the parser to override any severities that are higher than this value
# import_fields tells the parser to only import that set of fields from a specific source
blocklist_url_sources = [
{ url = 'file:///fediblockhole/blocklists/union.place.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/sunny.garden.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/mastodon.art.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/artisan.chat.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/toot.wales.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/rage.love.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/pleroma.envs.net.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/turtle.garden.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/solarpunk.moe.csv', format = 'csv' },
]
# List of instances to write blocklist to
blocklist_instance_destinations = [
# { domain = 'eigenmagic.net', token = '<read_write_token>', max_followed_severity = 'silence'},
]
allowlist_url_sources = [
{ url = 'file:///fediblockhole/blocklists/__allowlist.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/birdsite.csv', format = 'csv' },
]
## Store a local copy of the remote blocklists after we fetch them
save_intermediate = false
## Directory to store the local blocklist copies
savedir = '/fediblockhole/blocklists/'
## File to save the fully merged blocklist into
blocklist_savefile = '/fediblockhole/blocklists/_working_tier2.csv'
## Don't push blocklist to instances, even if they're defined above
no_push_instance = true
## Don't fetch blocklists from URLs, even if they're defined above
# no_fetch_url = false
## Don't fetch blocklists from instances, even if they're defined above
# no_fetch_instance = false
## Set the mergeplan to use when dealing with overlaps between blocklists
# The default 'max' mergeplan will use the harshest severity block found for a domain.
# The 'min' mergeplan will use the lightest severity block found for a domain.
mergeplan = 'min'
## Optional threshold-based merging.
# Only merge in domain blocks if the domain is mentioned in
# at least `threshold` blocklists.
# `merge_thresold` is an integer, with a default value of 0.
# The `merge_threshold_type` can be `count` or `pct`.
# If `count` type is selected, the threshold is reached when the domain
# is mentioned in at least `merge_threshold` blocklists. The default value
# of 0 means that every block in every list will be merged in.
# If `pct` type is selected, `merge_threshold` is interpreted as a percentage,
# i.e. if `merge_threshold` = 20, blocks will only be merged in if the domain
# is present in at least 20% of blocklists.
# Percentage calculated as number_of_mentions / total_number_of_blocklists.
# The percentage method is more flexibile, but also more complicated, so take care
# when using it.
#
merge_threshold_type = 'pct'
merge_threshold = 33
## Set which fields we import
## 'domain' and 'severity' are always imported, these are additional
##
import_fields = ['reject_media', 'reject_reports', 'obfuscate']
#import_fields = ['public_comment', 'reject_media', 'reject_reports', 'obfuscate']
## Set which fields we export
## 'domain' and 'severity' are always exported, these are additional
##
export_fields = ['reject_media', 'reject_reports', 'public_comment', 'obfuscate']

65
config/tier2.conf.toml Normal file
View File

@ -0,0 +1,65 @@
## Tier2
# List of instances to read blocklists from.
# If the instance makes its blocklist public, no authorization token is needed.
# Otherwise, `token` is a Bearer token authorised to read domain_blocks.
# If `admin` = True, use the more detailed admin API, which requires a token with a
# higher level of authorization.
# If `import_fields` are provided, only import these fields from the instance.
# Overrides the global `import_fields` setting.
blocklist_instance_sources = []
# List of URLs to read csv blocklists from
# Format tells the parser which format to use when parsing the blocklist
# max_severity tells the parser to override any severities that are higher than this value
# import_fields tells the parser to only import that set of fields from a specific source
blocklist_url_sources = [
# bring in tier0
{ url = 'file:///fediblockhole/blocklists/_unified_tier0_blocklist.csv', format = 'csv' },
# tier 2
{ url = 'file:///fediblockhole/blocklists/_working_tier2.csv', format = 'csv' },
]
allowlist_url_sources = [
{ url = 'file:///fediblockhole/blocklists/__allowlist.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/birdsite.csv', format = 'csv' },
]
# List of instances to write blocklist to
blocklist_instance_destinations = [
# { domain = 'eigenmagic.net', token = '<read_write_token>', max_followed_severity = 'silence'},
]
## Store a local copy of the remote blocklists after we fetch them
save_intermediate = false
## Directory to store the local blocklist copies
savedir = '/fediblockhole/blocklists/'
## File to save the fully merged blocklist into
blocklist_savefile = '/fediblockhole/blocklists/_unified_tier2_blocklist.csv'
## Don't push blocklist to instances, even if they're defined above
no_push_instance = true
## Don't fetch blocklists from URLs, even if they're defined above
# no_fetch_url = false
## Don't fetch blocklists from instances, even if they're defined above
# no_fetch_instance = false
## Set the mergeplan to use when dealing with overlaps between blocklists
# The default 'max' mergeplan will use the harshest severity block found for a domain.
# The 'min' mergeplan will use the lightest severity block found for a domain.
mergeplan = 'min'
## Set which fields we import
## 'domain' and 'severity' are always imported, these are additional
##
import_fields = ['reject_media', 'reject_reports', 'obfuscate']
#import_fields = ['public_comment', 'reject_media', 'reject_reports', 'obfuscate']
## Set which fields we export
## 'domain' and 'severity' are always exported, these are additional
##
export_fields = ['reject_media', 'reject_reports', 'public_comment', 'obfuscate']

View File

@ -0,0 +1,88 @@
## Tier 3 Threshold file
# List of instances to read blocklists from.
# If the instance makes its blocklist public, no authorization token is needed.
# Otherwise, `token` is a Bearer token authorised to read domain_blocks.
# If `admin` = True, use the more detailed admin API, which requires a token with a
# higher level of authorization.
# If `import_fields` are provided, only import these fields from the instance.
# Overrides the global `import_fields` setting.
blocklist_instance_sources = []
# List of URLs to read csv blocklists from
# Format tells the parser which format to use when parsing the blocklist
# max_severity tells the parser to override any severities that are higher than this value
# import_fields tells the parser to only import that set of fields from a specific source
blocklist_url_sources = [
{ url = 'file:///fediblockhole/blocklists/union.place.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/sunny.garden.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/mastodon.art.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/artisan.chat.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/toot.wales.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/rage.love.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/pleroma.envs.net.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/turtle.garden.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/solarpunk.moe.csv', format = 'csv' },
]
# List of instances to write blocklist to
blocklist_instance_destinations = [
# { domain = 'eigenmagic.net', token = '<read_write_token>', max_followed_severity = 'silence'},
]
allowlist_url_sources = [
{ url = 'file:///fediblockhole/blocklists/__allowlist.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/birdsite.csv', format = 'csv' },
]
## Store a local copy of the remote blocklists after we fetch them
save_intermediate = false
## Directory to store the local blocklist copies
savedir = '/fediblockhole/blocklists/'
## File to save the fully merged blocklist into
blocklist_savefile = '/fediblockhole/blocklists/_working_tier3.csv'
## Don't push blocklist to instances, even if they're defined above
no_push_instance = true
## Don't fetch blocklists from URLs, even if they're defined above
# no_fetch_url = false
## Don't fetch blocklists from instances, even if they're defined above
# no_fetch_instance = false
## Set the mergeplan to use when dealing with overlaps between blocklists
# The default 'max' mergeplan will use the harshest severity block found for a domain.
# The 'min' mergeplan will use the lightest severity block found for a domain.
mergeplan = 'min'
## Optional threshold-based merging.
# Only merge in domain blocks if the domain is mentioned in
# at least `threshold` blocklists.
# `merge_thresold` is an integer, with a default value of 0.
# The `merge_threshold_type` can be `count` or `pct`.
# If `count` type is selected, the threshold is reached when the domain
# is mentioned in at least `merge_threshold` blocklists. The default value
# of 0 means that every block in every list will be merged in.
# If `pct` type is selected, `merge_threshold` is interpreted as a percentage,
# i.e. if `merge_threshold` = 20, blocks will only be merged in if the domain
# is present in at least 20% of blocklists.
# Percentage calculated as number_of_mentions / total_number_of_blocklists.
# The percentage method is more flexibile, but also more complicated, so take care
# when using it.
#
merge_threshold_type = 'count'
merge_threshold = 2
## Set which fields we import
## 'domain' and 'severity' are always imported, these are additional
##
import_fields = ['reject_media', 'reject_reports', 'obfuscate']
#import_fields = ['public_comment', 'reject_media', 'reject_reports', 'obfuscate']
## Set which fields we export
## 'domain' and 'severity' are always exported, these are additional
##
export_fields = ['reject_media', 'reject_reports', 'public_comment', 'obfuscate']

65
config/tier3.conf.toml Normal file
View File

@ -0,0 +1,65 @@
## Tier3
# List of instances to read blocklists from.
# If the instance makes its blocklist public, no authorization token is needed.
# Otherwise, `token` is a Bearer token authorised to read domain_blocks.
# If `admin` = True, use the more detailed admin API, which requires a token with a
# higher level of authorization.
# If `import_fields` are provided, only import these fields from the instance.
# Overrides the global `import_fields` setting.
blocklist_instance_sources = []
# List of URLs to read csv blocklists from
# Format tells the parser which format to use when parsing the blocklist
# max_severity tells the parser to override any severities that are higher than this value
# import_fields tells the parser to only import that set of fields from a specific source
blocklist_url_sources = [
# bring in tier0
{ url = 'file:///fediblockhole/blocklists/_unified_tier0_blocklist.csv', format = 'csv' },
# tier 0
{ url = 'file:///fediblockhole/blocklists/_working_tier3.csv', format = 'csv' },
]
allowlist_url_sources = [
{ url = 'file:///fediblockhole/blocklists/__allowlist.csv', format = 'csv' },
{ url = 'file:///fediblockhole/blocklists/birdsite.csv', format = 'csv' },
]
# List of instances to write blocklist to
blocklist_instance_destinations = [
# { domain = 'eigenmagic.net', token = '<read_write_token>', max_followed_severity = 'silence'},
]
## Store a local copy of the remote blocklists after we fetch them
save_intermediate = false
## Directory to store the local blocklist copies
savedir = '/fediblockhole/blocklists/'
## File to save the fully merged blocklist into
blocklist_savefile = '/fediblockhole/blocklists/_unified_tier3_blocklist.csv'
## Don't push blocklist to instances, even if they're defined above
no_push_instance = true
## Don't fetch blocklists from URLs, even if they're defined above
# no_fetch_url = false
## Don't fetch blocklists from instances, even if they're defined above
# no_fetch_instance = false
## Set the mergeplan to use when dealing with overlaps between blocklists
# The default 'max' mergeplan will use the harshest severity block found for a domain.
# The 'min' mergeplan will use the lightest severity block found for a domain.
mergeplan = 'min'
## Set which fields we import
## 'domain' and 'severity' are always imported, these are additional
##
import_fields = ['reject_media', 'reject_reports', 'obfuscate']
#import_fields = ['public_comment', 'reject_media', 'reject_reports', 'obfuscate']
## Set which fields we export
## 'domain' and 'severity' are always exported, these are additional
##
export_fields = ['reject_media', 'reject_reports', 'public_comment', 'obfuscate']

9
fedisync-example-server.sh Executable file
View File

@ -0,0 +1,9 @@
#!/bin/bash
set -e
# export to production servers
SYNC=`which fediblock-sync`
# use secretconfig subfolder
${SYNC} -c /fediblockhole/config/example-server-export.conf.toml

18
fedisync-git.sh Executable file
View File

@ -0,0 +1,18 @@
#!/bin/bash
set -e
# generate files
#exec > >(tee /fediblockhole/logs/fedisync.log) 2>&1
exec 2> >(tee /fediblockhole/logs/fedisync-git.log)
echo "Pushing up git changes..."
cd /fediblockhole
date=$(date '+%Y-%m-%d %H:%M:%S')
GIT=`which git`
${GIT} add --all
${GIT} commit -m "automated commit on $date"
${GIT} push
#${GIT} pushall
echo "Push complete."

11
fedisync-push.sh Executable file
View File

@ -0,0 +1,11 @@
#!/bin/bash
set -e
# generate files
exec > >(tee /fediblockhole/logs/fedisync-production.log) 2>&1
# push to github and codeberg
# note: copy your own version to /fediblockhole/local
/fediblockhole/fedisync-git.sh
# push to remote servers
/fediblockhole/fedisync-example-server.sh

62
fedisync.sh Executable file
View File

@ -0,0 +1,62 @@
#!/bin/bash
set -e
# generate files
#exec > >(tee /fediblockhole/logs/fedisync.log) 2>&1
exec 2> >(tee /fediblockhole/logs/fedisync.log)
echo "Pulling down all blocklist sources..."
cd /fediblockhole
GIT=`which git`
${GIT} fetch
#${GIT} fetchall
SYNC=`which fediblock-sync`
${SYNC} -c /fediblockhole/config/pull.conf.toml # pull down all files, create max list
# rename and remove intermediate files
rm -f /fediblockhole/blocklists/file:---fediblockhole-blocklists-__allowlist.csv.csv
mv /fediblockhole/blocklists/https:--seirdy.one-pb-tier0.csv.csv /fediblockhole/blocklists/tier0.csv
mv /fediblockhole/blocklists/https:--seirdy.one-pb-pleroma.envs.net.csv.csv /fediblockhole/blocklists/pleroma.envs.net.csv
mv /fediblockhole/blocklists/https:--turtle.garden-blocklist.csv.csv /fediblockhole/blocklists/turtle.garden.csv
mv /fediblockhole/blocklists/https:--raw.githubusercontent.com-gardenfence-blocklist-main-gardenfence-fediblocksync.csv.csv /fediblockhole/blocklists/gardenfence.csv
mv /fediblockhole/blocklists/https:--artisan.chat-api-v1-instance-domain_blocks.csv /fediblockhole/blocklists/artisan.chat.csv
mv /fediblockhole/blocklists/https:--mastodon.art-api-v1-instance-domain_blocks.csv /fediblockhole/blocklists/mastodon.art.csv
mv /fediblockhole/blocklists/https:--mastodon.online-api-v1-instance-domain_blocks.csv /fediblockhole/blocklists/mastodon.online.csv
mv /fediblockhole/blocklists/https:--mastodon.social-api-v1-instance-domain_blocks.csv /fediblockhole/blocklists/mastodon.social.csv
mv /fediblockhole/blocklists/https:--rage.love-api-v1-instance-domain_blocks.csv /fediblockhole/blocklists/rage.love.csv
mv /fediblockhole/blocklists/https:--sunny.garden-api-v1-instance-domain_blocks.csv /fediblockhole/blocklists/sunny.garden.csv
mv /fediblockhole/blocklists/https:--toot.wales-api-v1-instance-domain_blocks.csv /fediblockhole/blocklists/toot.wales.csv
mv /fediblockhole/blocklists/https:--union.place-api-v1-instance-domain_blocks.csv /fediblockhole/blocklists/union.place.csv
mv /fediblockhole/blocklists/https:--solarpunk.moe-api-v1-instance-domain_blocks.csv /fediblockhole/blocklists/solarpunk.moe.csv
# destroy the 'max' list
rm -f /fediblockhole/blocklists/_unified_max_blocklist.csv
# create fedi council tier0 file and 100% file
${SYNC} -c /fediblockhole/config/council.tier0.conf.toml && \
${SYNC} -c /fediblockhole/config/100.percent.conf.toml
# create unified tier0 file
${SYNC} -c /fediblockhole/config/tier0.conf.toml
# create missing from mastodon.social blocklist file, and the inverse file
${SYNC} -c /fediblockhole/config/ms-noblock.conf.toml && \
${SYNC} -c /fediblockhole/config/ms-we-block.conf.toml
# create intermediate working tier files
${SYNC} -c /fediblockhole/config/tier1-threshold.conf.toml -m min && \
${SYNC} -c /fediblockhole/config/tier2-threshold.conf.toml -m min && \
${SYNC} -c /fediblockhole/config/tier3-threshold.conf.toml -m min
# merge in associated tier file with tier0 blocks
${SYNC} -c /fediblockhole/config/tier1.conf.toml -m min && \
${SYNC} -c /fediblockhole/config/tier2.conf.toml -m min && \
${SYNC} -c /fediblockhole/config/tier3.conf.toml -m min && \
cp /fediblockhole/blocklists/_unified_tier0_blocklist.csv /fediblockhole/blocklists/_unified_min_blocklist.csv
# cleanup working tier files
rm -f /fediblockhole/blocklists/_working_*.csv
echo "Pull complete."