Merge branch 'follows' into 'master'
authorHaelwenn <contact+git.pleroma.social@hacktivis.me>
Thu, 12 Nov 2020 13:43:09 +0000 (13:43 +0000)
committerHaelwenn <contact+git.pleroma.social@hacktivis.me>
Thu, 12 Nov 2020 13:43:09 +0000 (13:43 +0000)
remove unnecessary actor checking for (un)follows

See merge request pleroma/relay!22

1  2 
relay/actor.py

diff --combined relay/actor.py
@@@ -6,17 -6,12 +6,17 @@@ import uui
  import re
  import simplejson as json
  import cgi
 +import datetime
 +
  from urllib.parse import urlsplit
  from Crypto.PublicKey import RSA
 +from cachetools import LFUCache
 +
 +from . import app, CONFIG
  from .database import DATABASE
  from .http_debug import http_debug
 -
 -from cachetools import LFUCache
 +from .remote_actor import fetch_actor
 +from .http_signatures import sign_headers, generate_body_digest
  
  
  # generate actor keys if not present
@@@ -34,12 -29,19 +34,12 @@@ if "actorKeys" not in DATABASE
  
  PRIVKEY = RSA.importKey(DATABASE["actorKeys"]["privateKey"])
  PUBKEY = PRIVKEY.publickey()
 -
 -sem = asyncio.Semaphore(500)
 -
 -from . import app, CONFIG
 -from .remote_actor import fetch_actor
 -
 -
  AP_CONFIG = CONFIG['ap']
  CACHE_SIZE = CONFIG.get('cache-size', 16384)
 -
 -
  CACHE = LFUCache(CACHE_SIZE)
  
 +sem = asyncio.Semaphore(500)
 +
  
  async def actor(request):
      data = {
  
  
  app.router.add_get('/actor', actor)
 -
 -
 -from .http_signatures import sign_headers
 -
 -
  get_actor_inbox = lambda actor: actor.get('endpoints', {}).get('sharedInbox', actor['inbox'])
  
  
@@@ -79,14 -86,10 +79,14 @@@ async def push_message_to_actor(actor, 
          '(request-target)': 'post {}'.format(url.path),
          'Content-Length': str(len(data)),
          'Content-Type': 'application/activity+json',
 -        'User-Agent': 'ActivityRelay'
 +        'User-Agent': 'ActivityRelay',
 +        'Host': url.netloc,
 +        'Digest': 'SHA-256={}'.format(generate_body_digest(data)),
 +        'Date': datetime.datetime.utcnow().strftime('%a, %d %b %Y %H:%M:%S GMT')
      }
      headers['signature'] = sign_headers(headers, PRIVKEY, our_key_id)
      headers.pop('(request-target)')
 +    headers.pop('Host')
  
      logging.debug('%r >> %r', inbox, message)
  
@@@ -242,8 -245,7 +242,7 @@@ async def handle_follow(actor, data, re
          following += [inbox]
          DATABASE['relay-list'] = following
  
-         if data['object'].endswith('/actor'):
-             asyncio.ensure_future(follow_remote_actor(actor['id']))
+         asyncio.ensure_future(follow_remote_actor(actor['id']))
  
      message = {
          "@context": "https://www.w3.org/ns/activitystreams",
  
          # this is wrong per litepub, but mastodon < 2.4 is not compliant with that profile.
          "object": {
-              "type": "Follow",
-              "id": data["id"],
-              "object": "https://{}/actor".format(request.host),
-              "actor": actor["id"]
+             "type": "Follow",
+             "id": data["id"],
+             "object": "https://{}/actor".format(request.host),
+             "actor": actor["id"]
          },
  
          "id": "https://{}/activities/{}".format(request.host, uuid.uuid4()),
@@@ -278,8 -280,7 +277,7 @@@ async def handle_undo(actor, data, requ
              following.remove(inbox)
              DATABASE['relay-list'] = following
  
-         if child['object'].endswith('/actor'):
-             await unfollow_remote_actor(actor['id'])
+         await unfollow_remote_actor(actor['id'])
  
  
  processors = {