forked from forks/microblog.pub
Fix the Delete support for actors
This commit is contained in:
parent
f100750382
commit
8e43f4a230
1 changed files with 16 additions and 4 deletions
20
app.py
20
app.py
|
@ -289,10 +289,10 @@ def url_or_id(d):
|
||||||
|
|
||||||
@app.template_filter()
|
@app.template_filter()
|
||||||
def get_url(u):
|
def get_url(u):
|
||||||
print(f'GET_URL({u!r})')
|
print(f"GET_URL({u!r})")
|
||||||
if isinstance(u, list):
|
if isinstance(u, list):
|
||||||
for l in u:
|
for l in u:
|
||||||
if l.get('mimeType') == 'text/html':
|
if l.get("mimeType") == "text/html":
|
||||||
u = l
|
u = l
|
||||||
if isinstance(u, dict):
|
if isinstance(u, dict):
|
||||||
return u["href"]
|
return u["href"]
|
||||||
|
@ -1640,13 +1640,25 @@ def inbox():
|
||||||
except ActivityGoneError:
|
except ActivityGoneError:
|
||||||
# XXX Mastodon sends Delete activities that are not dereferencable, it's the actor url with #delete
|
# XXX Mastodon sends Delete activities that are not dereferencable, it's the actor url with #delete
|
||||||
# appended, so an `ActivityGoneError` kind of ensure it's "legit"
|
# appended, so an `ActivityGoneError` kind of ensure it's "legit"
|
||||||
if data["type"] == ActivityType.DELETE.value and data["id"].startswith(data["object"]):
|
if data["type"] == ActivityType.DELETE.value and data["id"].startswith(
|
||||||
|
data["object"]
|
||||||
|
):
|
||||||
logger.info(f"received a Delete for an actor {data!r}")
|
logger.info(f"received a Delete for an actor {data!r}")
|
||||||
if get_backend().inbox_check_duplicate(MY_PERSON, data["id"]):
|
if get_backend().inbox_check_duplicate(MY_PERSON, data["id"]):
|
||||||
# The activity is already in the inbox
|
# The activity is already in the inbox
|
||||||
logger.info(f"received duplicate activity {data!r}, dropping it")
|
logger.info(f"received duplicate activity {data!r}, dropping it")
|
||||||
|
|
||||||
get_backend().save(Box.INBOX, data)
|
DB.activities.insert_one(
|
||||||
|
{
|
||||||
|
"box": Box.INBOX.value,
|
||||||
|
"activity": data,
|
||||||
|
"type": _to_list(data["type"]),
|
||||||
|
"remote_id": data["id"],
|
||||||
|
"meta": {"undo": False, "deleted": False},
|
||||||
|
}
|
||||||
|
)
|
||||||
|
# TODO(tsileo): write the callback the the delete external actor event
|
||||||
|
return Response(status=201)
|
||||||
except Exception:
|
except Exception:
|
||||||
logger.exception(f'failed to fetch remote id at {data["id"]}')
|
logger.exception(f'failed to fetch remote id at {data["id"]}')
|
||||||
return Response(
|
return Response(
|
||||||
|
|
Loading…
Reference in a new issue