public override async Task <bool> Handle() { await Task.Yield(); var data = MainObject.Data; if (data["actor"].Count != 1) { throw new InvalidOperationException("Cannot create an activity with no or more than one actor!"); } if (data["actor"].First().Id != User.FindFirstValue("actor")) { throw new InvalidOperationException("Cannot create an activity with an actor that isn't the one you log in to"); } // add published and updated. data.Replace("published", ASTerm.MakeDateTime(DateTime.Now)); MainObject.Data = data; return(true); }
public override async Task <bool> Handle() { if (MainObject.Type != "https://www.w3.org/ns/activitystreams#Create") { return(true); } var activityData = MainObject.Data; var objectEntity = await EntityStore.GetEntity(activityData["object"].First().Id, false); var objectData = objectEntity.Data; if (_entityData.IsActivity(objectData)) { throw new InvalidOperationException("Cannot Create another activity!"); } objectData["attributedTo"].AddRange(activityData["actor"]); await AddCollection(objectData, "likes", "_likes", objectEntity.Id); await AddCollection(objectData, "shares", "_shares", objectEntity.Id); await AddCollection(objectData, "replies", "_replies", objectEntity.Id); _merge(activityData["to"], objectData["to"]); _merge(activityData["bto"], objectData["bto"]); _merge(activityData["cc"], objectData["cc"]); _merge(activityData["bcc"], objectData["bcc"]); _merge(activityData["audience"], objectData["audience"]); objectData.Replace("published", ASTerm.MakeDateTime(DateTime.Now)); objectEntity.Data = objectData; MainObject.Data = activityData; return(true); }