forked from indymedia/epicyon
Check capabilities at a later stage in inbox queue processing
parent
533d9de8be
commit
d3c64fa797
110
inbox.py
110
inbox.py
|
@ -330,61 +330,6 @@ def runInboxQueue(baseDir: str,httpPrefix: str,sendThreads: [],postLog: [],cache
|
||||||
with open(queueFilename, 'r') as fp:
|
with open(queueFilename, 'r') as fp:
|
||||||
queueJson=commentjson.load(fp)
|
queueJson=commentjson.load(fp)
|
||||||
|
|
||||||
# get recipients list
|
|
||||||
recipientsDict=inboxPostRecipients(baseDir,queueJson['post'],httpPrefix,domain,port)
|
|
||||||
|
|
||||||
print('*************************************')
|
|
||||||
print('Resolved recipients list:')
|
|
||||||
pprint(recipientsDict)
|
|
||||||
print('*************************************')
|
|
||||||
|
|
||||||
# is this sent to the shared inbox? (actor is the 'inbox' account)
|
|
||||||
sentToSharedInbox=False
|
|
||||||
if queueJson['post'].get('actor'):
|
|
||||||
if queueJson['post']['actor'].endswith('/inbox'):
|
|
||||||
sentToSharedInbox=True
|
|
||||||
|
|
||||||
if sentToSharedInbox:
|
|
||||||
# if this is arriving at the shared inbox then
|
|
||||||
# don't do the capabilities checks
|
|
||||||
capabilitiesPassed=True
|
|
||||||
# TODO how to handle capabilities in the shared inbox scenario?
|
|
||||||
# should 'capability' be a list instead of a single value?
|
|
||||||
else:
|
|
||||||
# check that capabilities are accepted
|
|
||||||
capabilitiesPassed=False
|
|
||||||
if queueJson['post'].get('capability'):
|
|
||||||
if not isinstance(queueJson['post']['capability'], list):
|
|
||||||
if debug:
|
|
||||||
print('DEBUG: capability on post should be a list')
|
|
||||||
os.remove(queueFilename)
|
|
||||||
queue.pop(0)
|
|
||||||
continue
|
|
||||||
capabilityIdList=queueJson['post']['capability']
|
|
||||||
|
|
||||||
if capabilityIdList:
|
|
||||||
capabilitiesPassed= \
|
|
||||||
inboxCheckCapabilities(baseDir,queueJson['nickname'], \
|
|
||||||
queueJson['domain'], \
|
|
||||||
queueJson['post']['actor'], \
|
|
||||||
queue,queueJson, \
|
|
||||||
capabilityIdList[0],debug)
|
|
||||||
|
|
||||||
if ocapAlways and not capabilitiesPassed:
|
|
||||||
# Allow follow types through
|
|
||||||
# i.e. anyone can make a follow request
|
|
||||||
if queueJson['post'].get('type'):
|
|
||||||
if queueJson['post']['type']=='Follow' or \
|
|
||||||
queueJson['post']['type']=='Accept':
|
|
||||||
capabilitiesPassed=True
|
|
||||||
if not capabilitiesPassed:
|
|
||||||
if debug:
|
|
||||||
print('DEBUG: object capabilities check failed')
|
|
||||||
pprint(queueJson['post'])
|
|
||||||
os.remove(queueFilename)
|
|
||||||
queue.pop(0)
|
|
||||||
continue
|
|
||||||
|
|
||||||
# Try a few times to obtain the public key
|
# Try a few times to obtain the public key
|
||||||
pubKey=None
|
pubKey=None
|
||||||
keyId=None
|
keyId=None
|
||||||
|
@ -465,6 +410,61 @@ def runInboxQueue(baseDir: str,httpPrefix: str,sendThreads: [],postLog: [],cache
|
||||||
queue.pop(0)
|
queue.pop(0)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
# get recipients list
|
||||||
|
recipientsDict=inboxPostRecipients(baseDir,queueJson['post'],httpPrefix,domain,port)
|
||||||
|
|
||||||
|
print('*************************************')
|
||||||
|
print('Resolved recipients list:')
|
||||||
|
pprint(recipientsDict)
|
||||||
|
print('*************************************')
|
||||||
|
|
||||||
|
# is this sent to the shared inbox? (actor is the 'inbox' account)
|
||||||
|
sentToSharedInbox=False
|
||||||
|
if queueJson['post'].get('actor'):
|
||||||
|
if queueJson['post']['actor'].endswith('/inbox'):
|
||||||
|
sentToSharedInbox=True
|
||||||
|
|
||||||
|
if sentToSharedInbox:
|
||||||
|
# if this is arriving at the shared inbox then
|
||||||
|
# don't do the capabilities checks
|
||||||
|
capabilitiesPassed=True
|
||||||
|
# TODO how to handle capabilities in the shared inbox scenario?
|
||||||
|
# should 'capability' be a list instead of a single value?
|
||||||
|
else:
|
||||||
|
# check that capabilities are accepted
|
||||||
|
capabilitiesPassed=False
|
||||||
|
if queueJson['post'].get('capability'):
|
||||||
|
if not isinstance(queueJson['post']['capability'], list):
|
||||||
|
if debug:
|
||||||
|
print('DEBUG: capability on post should be a list')
|
||||||
|
os.remove(queueFilename)
|
||||||
|
queue.pop(0)
|
||||||
|
continue
|
||||||
|
capabilityIdList=queueJson['post']['capability']
|
||||||
|
|
||||||
|
if capabilityIdList:
|
||||||
|
capabilitiesPassed= \
|
||||||
|
inboxCheckCapabilities(baseDir,queueJson['nickname'], \
|
||||||
|
queueJson['domain'], \
|
||||||
|
queueJson['post']['actor'], \
|
||||||
|
queue,queueJson, \
|
||||||
|
capabilityIdList[0],debug)
|
||||||
|
|
||||||
|
if ocapAlways and not capabilitiesPassed:
|
||||||
|
# Allow follow types through
|
||||||
|
# i.e. anyone can make a follow request
|
||||||
|
if queueJson['post'].get('type'):
|
||||||
|
if queueJson['post']['type']=='Follow' or \
|
||||||
|
queueJson['post']['type']=='Accept':
|
||||||
|
capabilitiesPassed=True
|
||||||
|
if not capabilitiesPassed:
|
||||||
|
if debug:
|
||||||
|
print('DEBUG: object capabilities check failed')
|
||||||
|
pprint(queueJson['post'])
|
||||||
|
os.remove(queueFilename)
|
||||||
|
queue.pop(0)
|
||||||
|
continue
|
||||||
|
|
||||||
if debug:
|
if debug:
|
||||||
print('DEBUG: Queue post accepted')
|
print('DEBUG: Queue post accepted')
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue