Merge branch 'add_blocklist' into 'master'

Add blocklist

See merge request pleroma/relay!3
This commit is contained in:
kaniini 2018-11-10 21:56:26 +00:00
commit dfee3d3658
4 changed files with 21 additions and 6 deletions

View file

@ -14,3 +14,7 @@ ap:
# this is used for generating activitypub messages, as well as instructions for # this is used for generating activitypub messages, as well as instructions for
# linking AP identities. it should be an SSL-enabled domain reachable by https. # linking AP identities. it should be an SSL-enabled domain reachable by https.
host: 'relay.example.com' host: 'relay.example.com'
blocked_instances:
- 'bad-instance.example.com'
- 'another-bad-instance.example.com'

View file

@ -3,9 +3,9 @@ import aiohttp.web
import asyncio import asyncio
import logging import logging
import uuid import uuid
import re
import urllib.parse import urllib.parse
import simplejson as json import simplejson as json
import re
import cgi import cgi
from Crypto.PublicKey import RSA from Crypto.PublicKey import RSA
from .database import DATABASE from .database import DATABASE
@ -32,7 +32,7 @@ from . import app, CONFIG
from .remote_actor import fetch_actor from .remote_actor import fetch_actor
AP_CONFIG = CONFIG.get('ap', {'host': 'localhost'}) AP_CONFIG = CONFIG.get('ap', {'host': 'localhost','blocked_instances':[]})
async def actor(request): async def actor(request):
@ -186,6 +186,9 @@ async def handle_follow(actor, data, request):
following = DATABASE.get('relay-list', []) following = DATABASE.get('relay-list', [])
inbox = get_actor_inbox(actor) inbox = get_actor_inbox(actor)
if urllib.parse.urlsplit(inbox).hostname in AP_CONFIG['blocked_instances']:
return
if inbox not in following: if inbox not in following:
following += [inbox] following += [inbox]
DATABASE['relay-list'] = following DATABASE['relay-list'] = following

View file

@ -1,5 +1,6 @@
import asyncio import asyncio
import logging import logging
import urllib.parse
import simplejson as json import simplejson as json
@ -13,6 +14,11 @@ except:
logging.info('No database was found, making a new one.') logging.info('No database was found, making a new one.')
DATABASE = {} DATABASE = {}
following = DATABASE.get('relay-list', [])
for inbox in following:
if urllib.parse.urlsplit(inbox).hostname in CONFIG['ap']['blocked_instances']:
following.remove(inbox)
DATABASE['relay-list'] = following
async def database_save(): async def database_save():
while True: while True:

View file

@ -1,11 +1,13 @@
import aiohttp.web import aiohttp.web
import re import urllib.parse
from . import app, CONFIG from . import app, CONFIG
from .database import DATABASE from .database import DATABASE
host = CONFIG['ap']['host'] host = CONFIG['ap']['host']
note = CONFIG['note'] note = CONFIG['note']
targets = '<br>'.join([re.search('https://(.*)/inbox',target).group(1) for target in DATABASE.get('relay-list', [])])
inboxes = DATABASE.get('relay-list', [])
targets = '<br>'.join([urllib.parse.urlsplit(target).hostname for target in inboxes])
async def default(request): async def default(request):
return aiohttp.web.Response( return aiohttp.web.Response(
@ -26,9 +28,9 @@ async def default(request):
<p>For Mastodon instances, you may subscribe to this relay with the address: <a href="https://{host}/inbox">https://{host}/inbox</a></p> <p>For Mastodon instances, you may subscribe to this relay with the address: <a href="https://{host}/inbox">https://{host}/inbox</a></p>
<p>For Pleroma and other instances, you may subscribe to this relay with the address: <a href="https://{host}/actor">https://{host}/actor</a></p> <p>For Pleroma and other instances, you may subscribe to this relay with the address: <a href="https://{host}/actor">https://{host}/actor</a></p>
<p>To host your own relay, you may download the code at this address: <a href="https://git.pleroma.social/pleroma/relay">https://git.pleroma.social/pleroma/relay</a></p> <p>To host your own relay, you may download the code at this address: <a href="https://git.pleroma.social/pleroma/relay">https://git.pleroma.social/pleroma/relay</a></p>
<br><p>List of registered instances:<br>{targets}</p> <br><p>List of {count} registered instances:<br>{targets}</p>
</body></html> </body></html>
""".format(host=host, note=note,targets=targets)) """.format(host=host, note=note,targets=targets,count=len(inboxes)))
app.router.add_get('/', default) app.router.add_get('/', default)