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);
        }
Пример #2
0
        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);
        }