2019-06-28 21:59:54 +00:00
|
|
|
__filename__ = "inbox.py"
|
|
|
|
__author__ = "Bob Mottram"
|
|
|
|
__license__ = "AGPL3+"
|
|
|
|
__version__ = "0.0.1"
|
|
|
|
__maintainer__ = "Bob Mottram"
|
|
|
|
__email__ = "bob@freedombone.net"
|
|
|
|
__status__ = "Production"
|
|
|
|
|
|
|
|
import json
|
|
|
|
import os
|
2019-06-29 10:08:59 +00:00
|
|
|
import datetime
|
2019-07-02 10:39:55 +00:00
|
|
|
from utils import urlPermitted
|
2019-06-28 21:59:54 +00:00
|
|
|
|
2019-07-02 15:07:27 +00:00
|
|
|
def inboxMessageHasParams(messageJson: {}) -> bool:
|
|
|
|
"""Checks whether an incoming message contains expected parameters
|
|
|
|
"""
|
|
|
|
expectedParams=['type','to','actor','object']
|
|
|
|
for param in expectedParams:
|
|
|
|
if not messageJson.get(param):
|
|
|
|
return False
|
|
|
|
return True
|
|
|
|
|
2019-07-01 11:48:54 +00:00
|
|
|
def inboxPermittedMessage(domain: str,messageJson: {},federationList: []) -> bool:
|
2019-06-28 21:59:54 +00:00
|
|
|
""" check that we are receiving from a permitted domain
|
|
|
|
"""
|
|
|
|
testParam='actor'
|
|
|
|
if not messageJson.get(testParam):
|
|
|
|
return False
|
|
|
|
actor=messageJson[testParam]
|
|
|
|
# always allow the local domain
|
2019-07-01 11:48:54 +00:00
|
|
|
if domain in actor:
|
2019-06-28 21:59:54 +00:00
|
|
|
return True
|
|
|
|
|
2019-07-02 10:39:55 +00:00
|
|
|
if not urlPermitted(actor,federationList):
|
2019-06-28 21:59:54 +00:00
|
|
|
return False
|
|
|
|
|
|
|
|
if messageJson.get('object'):
|
|
|
|
if messageJson['object'].get('inReplyTo'):
|
|
|
|
inReplyTo=messageJson['object']['inReplyTo']
|
2019-07-02 10:39:55 +00:00
|
|
|
if not urlPermitted(inReplyTo, federationList):
|
2019-06-28 21:59:54 +00:00
|
|
|
return False
|
|
|
|
|
|
|
|
return True
|
2019-06-29 10:08:59 +00:00
|
|
|
|
2019-07-02 20:54:22 +00:00
|
|
|
def validPublishedDate(published) -> bool:
|
2019-06-29 10:08:59 +00:00
|
|
|
currTime=datetime.datetime.utcnow()
|
|
|
|
pubDate=datetime.datetime.strptime(published,"%Y-%m-%dT%H:%M:%SZ")
|
|
|
|
daysSincePublished = (currTime - pubTime).days
|
|
|
|
if daysSincePublished>30:
|
|
|
|
return False
|
|
|
|
return True
|