diff --git a/little_boxes/activitypub.py b/little_boxes/activitypub.py index 415db83..447e0e5 100644 --- a/little_boxes/activitypub.py +++ b/little_boxes/activitypub.py @@ -37,7 +37,11 @@ AS_PUBLIC = "https://www.w3.org/ns/activitystreams#Public" COLLECTION_CTX = [ "https://www.w3.org/ns/activitystreams", "https://w3id.org/security/v1", - {"Hashtag": "as:Hashtag", "sensitive": "as:sensitive"}, + { + "Hashtag": "as:Hashtag", + "sensitive": "as:sensitive", + "toot": "http://joinmastodon.org/ns#", + }, ] # Will be used to keep track of all the defined activities diff --git a/little_boxes/backend.py b/little_boxes/backend.py index e9c0d5a..818413b 100644 --- a/little_boxes/backend.py +++ b/little_boxes/backend.py @@ -14,6 +14,7 @@ from .__version__ import __version__ from .collection import parse_collection from .errors import ActivityGoneError from .errors import ActivityNotFoundError +from .errors import NotAnActivityError from .errors import ActivityUnavailableError from .urlutils import URLLookupFailedError from .urlutils import check_url as check_url @@ -75,6 +76,9 @@ class Backend(abc.ABC): pass # pragma: no cover def fetch_iri(self, iri: str, **kwargs) -> "ap.ObjectType": # pragma: no cover + if not iri.startswith('http'): + raise NotAnActivityError(f"{iri} is not a valid IRI") + try: self.check_url(iri) except URLLookupFailedError: @@ -111,9 +115,9 @@ class Backend(abc.ABC): try: out = resp.json() - except json.JSONDecodeError: + except (json.JSONDecodeError, ValueError): # TODO(tsileo): a special error type? - raise ActivityUnavailableError(f"{iri} is not JSON") + raise NotAnActivityError(f"{iri} is not JSON") return out diff --git a/little_boxes/errors.py b/little_boxes/errors.py index 19a0bc4..935ea57 100644 --- a/little_boxes/errors.py +++ b/little_boxes/errors.py @@ -83,3 +83,10 @@ class ActivityUnavailableError(ServerError): """Raises when fetching a remote activity times out.""" status_code = 503 + + +class NotAnActivityError(ServerError): + """Raised when no JSON can be decoded. + + Most likely raised when stumbling upon a OStatus notice or failed lookup. + """