Ejemplo n.º 1
0
        public async Task <SalmonKey> GetKey(string entityId)
        {
            var inverse = await _connection.QuerySingleOrDefaultAsync <TripleAttribute>("select * from \"Attributes\" where \"Uri\" = @Uri", new { Uri = entityId });

            if (inverse == null)
            {
                return(null);
            }

            var entity = await _connection.QuerySingleOrDefaultAsync <APTripleEntity>("select * from \"TripleEntities\" where \"IdId\" = @Id", new { Id = inverse.AttributeId });

            if (entity == null)
            {
                return(null);
            }

            var res = await _connection.QuerySingleOrDefaultAsync <SalmonKey>("select * from \"SalmonKeys\" where \"EntityId\" = @Id", new { Id = entity.EntityId });

            if (res != null)
            {
                return(res);
            }

            res = new SalmonKey()
            {
                EntityId   = entity.EntityId,
                PrivateKey = Salmon.MagicKey.Generate().PrivateKey
            };

            await _connection.ExecuteAsync("insert into \"SalmonKeys\" (\"EntityId\", \"PrivateKey\") values (@EntityId, @PrivateKey)", res);

            return(res);
        }
Ejemplo n.º 2
0
        public override async Task <bool> Handle()
        {
            if (MainObject.Type != "Create")
            {
                return(true);
            }

            var activityData = MainObject.Data;
            var objectEntity = await EntityStore.GetEntity((string)activityData["object"].First().Primitive, false);

            if (!_entityData.IsActor(objectEntity.Data))
            {
                return(true);
            }
            var objectData = objectEntity.Data;
            var id         = objectEntity.Id;

            await AddCollection(objectData, "inbox", id);
            await AddCollection(objectData, "outbox", id);
            await AddCollection(objectData, "following", id);
            await AddCollection(objectData, "followers", id);
            await AddCollection(objectData, "likes", id);

            var blocks = await AddCollection(objectData, "blocks", id);

            var blocked = await _collection.NewCollection(EntityStore, null, "_blocked", blocks.Id);

            var blocksData = blocks.Data;

            blocksData["_blocked"].Add(new ASTerm(blocked.Id));
            blocks.Data = blocksData;

            objectEntity.Data = objectData;

            await EntityStore.StoreEntity(blocked);

            await EntityStore.StoreEntity(blocks);

            await EntityStore.StoreEntity(objectEntity);

            var userId = User.FindFirst(ClaimTypes.NameIdentifier).Value;

            _context.UserActorPermissions.Add(new UserActorPermission {
                UserId = userId, ActorId = objectEntity.Id, IsAdmin = true
            });

            var key    = new SalmonKey();
            var salmon = MagicKey.Generate();

            key.EntityId   = objectEntity.Id;
            key.PrivateKey = salmon.PrivateKey;

            _context.SalmonKeys.Add(key);

            if (!activityData["locked"].Any() && !activityData["_:locked"].Any())
            {
                activityData.Replace("_:locked", new ASTerm(false));
            }

            if (!activityData["actor"].Any())
            {
                activityData["actor"].Add(new ASTerm(objectEntity.Id));
            }

            MainObject.Data = activityData;
            await EntityStore.StoreEntity(MainObject);

            await EntityStore.CommitChanges();

            await _context.SaveChangesAsync();

            return(true);
        }