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); }
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); }