126 lines
2.3 KiB
Python
126 lines
2.3 KiB
Python
import json
|
|
|
|
from datetime import datetime
|
|
from izzylib import DotDict, logging
|
|
from urllib.parse import urlparse
|
|
|
|
|
|
def cmd_ban(self, handle=None, domain=None, reason=None):
|
|
row = self.get.ban(handle, domain)
|
|
|
|
if row:
|
|
if reason:
|
|
row = self.update(row=row, reason=reason, return_row=True)
|
|
|
|
else:
|
|
logging.verbose('Banned user or instance already exists')
|
|
return
|
|
|
|
else:
|
|
row = self.insert('ban',
|
|
handle = handle,
|
|
domain = domain,
|
|
reason = reason,
|
|
timestamp = datetime.now(),
|
|
return_row = True
|
|
)
|
|
|
|
return row
|
|
|
|
|
|
def cmd_actor(self, url, actor):
|
|
row = self.get.actor(url)
|
|
|
|
if row:
|
|
row = self.update(
|
|
row = row,
|
|
data = actor,
|
|
timestamp = datetime.now(),
|
|
return_row = True
|
|
)
|
|
|
|
else:
|
|
row = self.insert('actor_cache',
|
|
url = url,
|
|
data = actor,
|
|
timestamp = datetime.now(),
|
|
return_row = True
|
|
)
|
|
|
|
self.cache.actor_cache.store(url, row)
|
|
return row
|
|
|
|
|
|
def cmd_config(self, key, value=None):
|
|
row = self.fetch('config', key=key)
|
|
|
|
if not value:
|
|
value = self.config_defaults[key][0]
|
|
|
|
if type(value) == DotDict:
|
|
value = value.to_json()
|
|
|
|
elif type(value) in [dict, list, set, tuple]:
|
|
value = json.dumps(value)
|
|
|
|
if row:
|
|
self.update(row=row, value=value)
|
|
|
|
else:
|
|
self.insert('config', key=key, value=value)
|
|
|
|
self.cache.config.store(key, value)
|
|
return value
|
|
|
|
|
|
def cmd_instance(self, inbox, actor, followid=None):
|
|
if self.get.instance(inbox):
|
|
logging.verbose(f'Inbox already in database: {inbox}')
|
|
return
|
|
|
|
row = self.insert('inbox',
|
|
domain = urlparse(inbox).netloc,
|
|
inbox = inbox,
|
|
actor = actor,
|
|
followid = followid,
|
|
timestamp = datetime.now(),
|
|
return_row = True
|
|
)
|
|
|
|
return row
|
|
|
|
|
|
def cmd_retry(self, inbox, data, headers={}, timestamp=None):
|
|
instance = self.get.instance(inbox)
|
|
row = instance.retry(data.id)
|
|
|
|
if not row:
|
|
logging.verbose(f'Putting new retry in db for {instance.domain}: {data.id}')
|
|
|
|
row = self.insert('retry',
|
|
msgid = data.id,
|
|
inboxid = instance.id,
|
|
data = data,
|
|
headers = headers,
|
|
timestamp = timestamp or datetime.now(),
|
|
return_row = True
|
|
)
|
|
|
|
else:
|
|
logging.verbose(f'Retry for {instance.domain} already in db: {data.id}')
|
|
|
|
return row
|
|
|
|
|
|
def cmd_whitelist(self, domain):
|
|
row = self.fetch('whitelist', domain=domain)
|
|
|
|
if row:
|
|
logging.verbose(f'Domain already in the whitelist: {domain}')
|
|
return
|
|
|
|
self.insert('whitelist',
|
|
domain = domain,
|
|
timestamp = datetime.now()
|
|
)
|