uncia/uncia/processing.py

61 lines
1.4 KiB
Python

from izzylib import logging
from . import messages
from .database import db
from .functions import fetch_actor, get_inbox, push_message
class ProcessData:
def __init__(self, request, response, data):
self.request = request
self.response = response
self.signature = request.ctx.signature
self.instance = request.ctx.instance
self.type = data.type.lower()
self.data = data
self.actor = fetch_actor(data.actor)
if not self.actor:
logging.verbose(f'Failed to fetch actor on instance follow: {actor.data}')
self.new_response = response.json('Failed to fetch actor.', status=400)
return
self.new_response = getattr(self, f'cmd_{self.type}')()
def cmd_follow(self):
if self.instance and not self.instance.followid:
return
data = [
get_inbox(self.actor),
self.actor.id
]
with db.session as s:
req_app = s.get.config('require_approval')
if req_app:
data.append(self.data.id)
instance = s.put.instance(*data)
if not instance:
logging.error(f'Something messed up when inserting "{self.signature.domain}" into the database')
return self.response.json('Internal error', status=500)
if not req_app:
accept_msg = messages.accept(self.data.id, instance)
resp = push_message(instance.inbox, accept_msg)
if resp.status not in [200, 202]:
raise ValueError(f'Error when pushing to "{instance.inbox}"')
def cmd_undo(self):
pass
def cmd_announce(self):
pass