From 3404626dd6a4fd1733649ec2b4f05e9262537d18 Mon Sep 17 00:00:00 2001 From: mcrakhman Date: Sun, 3 Jul 2022 17:35:21 +0200 Subject: [PATCH] Fix threadbuilder and change examples --- data/threadbuilder/invalidsnapshotexample.yml | 6 +- data/threadbuilder/threadbuilder.go | 5 +- data/threadbuilder/userjoinexample.yml | 130 +++++++------ .../threadbuilder/userremovebeforeexample.yml | 131 ++++++------- data/threadbuilder/userremoveexample.yml | 122 ++++++------- data/threadbuilder/validsnapshotexample.yml | 172 +++++++++--------- data/threadbuilder/ymlentities.go | 2 +- data/threadbuilder/ymlentities_test.go | 2 +- 8 files changed, 284 insertions(+), 286 deletions(-) diff --git a/data/threadbuilder/invalidsnapshotexample.yml b/data/threadbuilder/invalidsnapshotexample.yml index 3a317ac0..eb49fa95 100644 --- a/data/threadbuilder/invalidsnapshotexample.yml +++ b/data/threadbuilder/invalidsnapshotexample.yml @@ -14,8 +14,7 @@ changes: encryptedReadKeys: [key.Read.1] permission: admin snapshot: - blocks: - - id: root + text: "some text" aclChanges: - userAdd: identity: A @@ -45,8 +44,7 @@ changes: encryptedReadKeys: [ key.Read.1 ] permission: admin snapshot: - blocks: - - id: root + text: "some text" aclChanges: - userAdd: identity: D diff --git a/data/threadbuilder/threadbuilder.go b/data/threadbuilder/threadbuilder.go index db3e35d1..5cb9ca1b 100644 --- a/data/threadbuilder/threadbuilder.go +++ b/data/threadbuilder/threadbuilder.go @@ -126,7 +126,7 @@ func (t *ThreadBuilder) Parse(thread *YMLThread) { newChange.readKey = k newChange.signKey = t.keychain.SigningKeys[ch.Identity] aclChange := &pb.ACLChange{} - aclChange.Identity = newChange.Identity + aclChange.Identity = ch.Identity if len(ch.AclChanges) > 0 || ch.AclSnapshot != nil { aclChange.AclData = &pb.ACLChangeACLData{} if ch.AclSnapshot != nil { @@ -368,7 +368,8 @@ func (t *ThreadBuilder) convertPermission(perm string) pb.ACLChangeUserPermissio func (t *ThreadBuilder) traverseFromHeads(f func(t *threadChange) error) error { uniqMap := map[string]struct{}{} - stack := t.heads + stack := make([]string, len(t.heads), 10) + copy(stack, t.heads) for len(stack) > 0 { id := stack[len(stack)-1] stack = stack[:len(stack)-1] diff --git a/data/threadbuilder/userjoinexample.yml b/data/threadbuilder/userjoinexample.yml index e70c9fc3..6df42e8f 100644 --- a/data/threadbuilder/userjoinexample.yml +++ b/data/threadbuilder/userjoinexample.yml @@ -1,75 +1,68 @@ thread: author: A -logs: - - id: A.1 +changes: + - id: A.1.1 identity: A - records: - - id: A.1.1 - aclSnapshot: - userStates: - - identity: A - encryptionKey: key.Enc.A - encryptedReadKeys: [key.Read.1] - permission: admin - snapshot: - blocks: - - id: root - aclChanges: - - userAdd: - identity: A - permission: admin - encryptionKey: key.Enc.A - encryptedReadKeys: [key.Read.1] - changes: - - blockAdd: - id: root - readKey: key.Read.1 - - id: A.1.2 - aclChanges: - - userInvite: - acceptKey: key.Sign.Onetime1 - encryptionKey: key.Enc.Onetime1 - encryptedReadKeys: [key.Read.1] - permissions: writer - - userAdd: - identity: C - permission: reader - encryptionKey: key.Enc.C - encryptedReadKeys: [ key.Read.1 ] - readKey: key.Read.1 - - id: A.1.3 - changes: - - blockAdd: - id: second - targetId: root - readKey: key.Read.1 - - id: B.1 + aclSnapshot: + userStates: + - identity: A + encryptionKey: key.Enc.A + encryptedReadKeys: [key.Read.1] + permission: admin + snapshot: + text: "some text" + aclChanges: + - userAdd: + identity: A + permission: admin + encryptionKey: key.Enc.A + encryptedReadKeys: [key.Read.1] + changes: + - textAppend: + text: "some text" + readKey: key.Read.1 + - id: A.1.2 + identity: A + aclChanges: + - userInvite: + acceptKey: key.Sign.Onetime1 + encryptionKey: key.Enc.Onetime1 + encryptedReadKeys: [key.Read.1] + permissions: writer + - userAdd: + identity: C + permission: reader + encryptionKey: key.Enc.C + encryptedReadKeys: [ key.Read.1 ] + readKey: key.Read.1 + - id: A.1.3 + identity: A + changes: + - textAppend: + text: "second" + readKey: key.Read.1 + - id: B.1.1 identity: B - records: - - id: B.1.1 - aclChanges: - - userJoin: - identity: B - encryptionKey: key.Enc.B - acceptSignature: key.Sign.Onetime1 - inviteId: A.1.2 - encryptedReadKeys: [key.Read.1] - readKey: key.Read.1 - - id: B.1.2 - changes: - - blockAdd: - id: first - targetId: root - readKey: key.Read.1 - - id: C.1 + aclChanges: + - userJoin: + identity: B + encryptionKey: key.Enc.B + acceptSignature: key.Sign.Onetime1 + inviteId: A.1.2 + encryptedReadKeys: [key.Read.1] + readKey: key.Read.1 + - id: B.1.2 + identity: B + changes: + - textAppend: + text: "first" + readKey: key.Read.1 + - id: C.1.1 identity: C - records: - - id: C.1.1 - changes: - - blockAdd: - id: third - targetId: root - readKey: key.Read.1 + changes: + - textAppend: + text: "third" + readKey: key.Read.1 keys: Enc: - A @@ -106,4 +99,5 @@ graph: baseSnapshot: A.1.1 aclHeads: [B.1.1] treeHeads: [B.1.1] - +heads: + - "A.1.3" diff --git a/data/threadbuilder/userremovebeforeexample.yml b/data/threadbuilder/userremovebeforeexample.yml index a5abfd13..fb214099 100644 --- a/data/threadbuilder/userremovebeforeexample.yml +++ b/data/threadbuilder/userremovebeforeexample.yml @@ -1,72 +1,70 @@ thread: author: A -logs: - - id: A.1 +changes: + - id: A.1.1 identity: A - records: - - id: A.1.1 - aclSnapshot: - userStates: - - identity: A - encryptionKey: key.Enc.A - encryptedReadKeys: [key.Read.1] - permission: admin - - identity: B - encryptionKey: key.Enc.B - encryptedReadKeys: [key.Read.1] - permission: admin - snapshot: - blocks: - - id: root - aclChanges: - - userAdd: - identity: A - permission: admin - encryptionKey: key.Enc.A - encryptedReadKeys: [key.Read.1] - - userAdd: - identity: B - permission: admin - encryptionKey: key.Enc.B - encryptedReadKeys: [key.Read.1] - changes: - - blockAdd: - id: root - readKey: key.Read.1 - - id: A.1.2 - aclChanges: - - userRemove: - removedIdentity: B - newReadKey: key.Read.2 - identitiesLeft: [A, C] - readKey: key.Read.2 - - id: A.1.3 - aclChanges: - - userAdd: - identity: E - permission: admin - encryptionKey: key.Enc.E - encryptedReadKeys: [key.Read.1, key.Read.2] - readKey: key.Read.2 - - id: B.1 + aclSnapshot: + userStates: + - identity: A + encryptionKey: key.Enc.A + encryptedReadKeys: [key.Read.1] + permission: admin + - identity: B + encryptionKey: key.Enc.B + encryptedReadKeys: [key.Read.1] + permission: admin + snapshot: + text: "some text" + aclChanges: + - userAdd: + identity: A + permission: admin + encryptionKey: key.Enc.A + encryptedReadKeys: [key.Read.1] + - userAdd: + identity: B + permission: admin + encryptionKey: key.Enc.B + encryptedReadKeys: [key.Read.1] + changes: + - textAppend: + text: "some text" + readKey: key.Read.1 + - id: A.1.2 + identity: A + aclChanges: + - userRemove: + removedIdentity: B + newReadKey: key.Read.2 + identitiesLeft: [A, C] + readKey: key.Read.2 + - id: A.1.3 + identity: A + aclChanges: + - userAdd: + identity: E + permission: admin + encryptionKey: key.Enc.E + encryptedReadKeys: [key.Read.1, key.Read.2] + readKey: key.Read.2 + - id: B.1.1 identity: B - records: - - id: B.1.1 - aclChanges: - - userAdd: - identity: C - permission: admin - encryptionKey: key.Enc.C - encryptedReadKeys: [ key.Read.1 ] - readKey: key.Read.1 - - id: B.1.2 - aclChanges: - - userAdd: - identity: D - permission: admin - encryptionKey: key.Enc.D - encryptedReadKeys: [ key.Read.1 ] - readKey: key.Read.1 + aclChanges: + - userAdd: + identity: C + permission: admin + encryptionKey: key.Enc.C + encryptedReadKeys: [ key.Read.1 ] + readKey: key.Read.1 + - id: B.1.2 + identity: B + aclChanges: + - userAdd: + identity: D + permission: admin + encryptionKey: key.Enc.D + encryptedReadKeys: [ key.Read.1 ] + readKey: key.Read.1 keys: Enc: - A @@ -103,3 +101,6 @@ graph: baseSnapshot: A.1.1 aclHeads: [A.1.2] treeHeads: [A.1.2] +heads: + - "A.1.3" + - "B.1.2" diff --git a/data/threadbuilder/userremoveexample.yml b/data/threadbuilder/userremoveexample.yml index 6176b0ac..51fa2d76 100644 --- a/data/threadbuilder/userremoveexample.yml +++ b/data/threadbuilder/userremoveexample.yml @@ -1,68 +1,65 @@ thread: author: A -logs: - - id: A.1 +changes: + - id: A.1.1 identity: A - records: - - id: A.1.1 - aclSnapshot: - userStates: - - identity: A - encryptionKey: key.Enc.A - encryptedReadKeys: [key.Read.1] - permission: admin - snapshot: - blocks: - - id: root - aclChanges: - - userAdd: - identity: A - permission: admin - encryptionKey: key.Enc.A - encryptedReadKeys: [key.Read.1] - changes: - - blockAdd: - id: root - readKey: key.Read.1 - - id: A.1.2 - aclChanges: - - userInvite: - acceptKey: key.Sign.Onetime1 - encryptionKey: key.Enc.Onetime1 - encryptedReadKeys: [key.Read.1] - permissions: writer - readKey: key.Read.1 - - id: A.1.3 - aclChanges: - - userRemove: - removedIdentity: B - newReadKey: key.Read.2 - identitiesLeft: [A] - readKey: key.Read.2 - - id: A.1.4 - changes: - - blockAdd: - id: second - targetId: root - readKey: key.Read.2 - - id: B.1 + aclSnapshot: + userStates: + - identity: A + encryptionKey: key.Enc.A + encryptedReadKeys: [key.Read.1] + permission: admin + snapshot: + text: "some text" + aclChanges: + - userAdd: + identity: A + permission: admin + encryptionKey: key.Enc.A + encryptedReadKeys: [key.Read.1] + changes: + - textAppend: + text: "some text" + readKey: key.Read.1 + - id: A.1.2 + identity: A + aclChanges: + - userInvite: + acceptKey: key.Sign.Onetime1 + encryptionKey: key.Enc.Onetime1 + encryptedReadKeys: [key.Read.1] + permissions: writer + readKey: key.Read.1 + - id: A.1.3 + identity: A + aclChanges: + - userRemove: + removedIdentity: B + newReadKey: key.Read.2 + identitiesLeft: [A] + readKey: key.Read.2 + - id: A.1.4 + identity: A + changes: + - textAppend: + text: "first" + readKey: key.Read.2 + - id: B.1.1 identity: B - records: - - id: B.1.1 - aclChanges: - - userJoin: - identity: B - encryptionKey: key.Enc.B - acceptSignature: key.Sign.Onetime1 - inviteId: A.1.2 - encryptedReadKeys: [key.Read.1] - readKey: key.Read.1 - - id: B.1.2 - changes: - - blockAdd: - id: first - targetId: root - readKey: key.Read.1 + aclChanges: + - userJoin: + identity: B + encryptionKey: key.Enc.B + acceptSignature: key.Sign.Onetime1 + inviteId: A.1.2 + encryptedReadKeys: [key.Read.1] + readKey: key.Read.1 + - id: B.1.2 + identity: B + changes: + - textAppend: + text: "second" + readKey: key.Read.1 keys: Enc: - A @@ -104,3 +101,6 @@ graph: aclSnapshot: A.1.1 aclHeads: [A.1.3] treeHeads: [A.1.3] +heads: + - "A.1.4" + - "B.1.2" diff --git a/data/threadbuilder/validsnapshotexample.yml b/data/threadbuilder/validsnapshotexample.yml index abdcd093..2e3c60c6 100644 --- a/data/threadbuilder/validsnapshotexample.yml +++ b/data/threadbuilder/validsnapshotexample.yml @@ -1,91 +1,91 @@ thread: author: A -logs: - - id: A.1 +changes: + - id: A.1.1 identity: A - records: - - id: A.1.1 - aclSnapshot: - userStates: - - identity: A - encryptionKey: key.Enc.A - encryptedReadKeys: [key.Read.1] - permission: admin - - identity: B - encryptionKey: key.Enc.B - encryptedReadKeys: [key.Read.1] - permission: admin - snapshot: - blocks: - - id: root - aclChanges: - - userAdd: - identity: A - permission: admin - encryptionKey: key.Enc.A - encryptedReadKeys: [key.Read.1] - - userAdd: - identity: B - permission: admin - encryptionKey: key.Enc.B - encryptedReadKeys: [key.Read.1] - readKey: key.Read.1 - - id: A.1.2 - aclSnapshot: - userStates: - - identity: A - encryptionKey: key.Enc.A - encryptedReadKeys: [key.Read.1] - permission: admin - - identity: B - encryptionKey: key.Enc.B - encryptedReadKeys: [key.Read.1] - permission: admin - - identity: C - encryptionKey: key.Enc.C - encryptedReadKeys: [ key.Read.1 ] - permission: admin - - identity: D - encryptionKey: key.Enc.D - encryptedReadKeys: [ key.Read.1 ] - permission: admin - snapshot: - blocks: - - id: root - aclChanges: - - userAdd: - identity: D - permission: admin - encryptionKey: key.Enc.D - encryptedReadKeys: [key.Read.1] - readKey: key.Read.1 - - id: A.1.3 - aclChanges: - - userAdd: - identity: E - permission: admin - encryptionKey: key.Enc.E - encryptedReadKeys: [key.Read.1] - readKey: key.Read.1 - - id: B.1 + aclSnapshot: + userStates: + - identity: A + encryptionKey: key.Enc.A + encryptedReadKeys: [key.Read.1] + permission: admin + - identity: B + encryptionKey: key.Enc.B + encryptedReadKeys: [key.Read.1] + permission: admin + snapshot: + text: "some text" + aclChanges: + - userAdd: + identity: A + permission: admin + encryptionKey: key.Enc.A + encryptedReadKeys: [key.Read.1] + - userAdd: + identity: B + permission: admin + encryptionKey: key.Enc.B + encryptedReadKeys: [key.Read.1] + readKey: key.Read.1 + changes: + - textAppend: + text: "some text" + - id: A.1.2 + identity: A + aclSnapshot: + userStates: + - identity: A + encryptionKey: key.Enc.A + encryptedReadKeys: [key.Read.1] + permission: admin + - identity: B + encryptionKey: key.Enc.B + encryptedReadKeys: [key.Read.1] + permission: admin + - identity: C + encryptionKey: key.Enc.C + encryptedReadKeys: [ key.Read.1 ] + permission: admin + - identity: D + encryptionKey: key.Enc.D + encryptedReadKeys: [ key.Read.1 ] + permission: admin + snapshot: + text: "some text" + aclChanges: + - userAdd: + identity: D + permission: admin + encryptionKey: key.Enc.D + encryptedReadKeys: [key.Read.1] + readKey: key.Read.1 + - id: A.1.3 + identity: A + aclChanges: + - userAdd: + identity: E + permission: admin + encryptionKey: key.Enc.E + encryptedReadKeys: [key.Read.1] + readKey: key.Read.1 + - id: B.1.1 identity: B - records: - - id: B.1.1 - aclChanges: - - userAdd: - identity: C - permission: admin - encryptionKey: key.Enc.C - encryptedReadKeys: [ key.Read.1 ] - readKey: key.Read.1 - - id: B.1.2 - aclChanges: - - userAdd: - identity: F - permission: admin - encryptionKey: key.Enc.F - encryptedReadKeys: [ key.Read.1 ] - readKey: key.Read.1 + aclChanges: + - userAdd: + identity: C + permission: admin + encryptionKey: key.Enc.C + encryptedReadKeys: [ key.Read.1 ] + readKey: key.Read.1 + - id: B.1.2 + identity: B + aclChanges: + - userAdd: + identity: F + permission: admin + encryptionKey: key.Enc.F + encryptedReadKeys: [ key.Read.1 ] + readKey: key.Read.1 keys: Enc: - A @@ -124,3 +124,7 @@ graph: baseSnapshot: A.1.2 aclHeads: [A.1.2] treeHeads: [A.1.2] +heads: + - "A.1.3" + - "B.1.2" + diff --git a/data/threadbuilder/ymlentities.go b/data/threadbuilder/ymlentities.go index 3ef03f05..8052deb4 100644 --- a/data/threadbuilder/ymlentities.go +++ b/data/threadbuilder/ymlentities.go @@ -67,7 +67,7 @@ type ACLChange struct { type PlainTextChange struct { TextAppend *struct { Text string `yaml:"text"` - } `yaml:"blockAdd"` + } `yaml:"textAppend"` } type YMLThread struct { diff --git a/data/threadbuilder/ymlentities_test.go b/data/threadbuilder/ymlentities_test.go index d2420eae..bd066301 100644 --- a/data/threadbuilder/ymlentities_test.go +++ b/data/threadbuilder/ymlentities_test.go @@ -6,7 +6,7 @@ import ( ) func Test_YamlParse(t *testing.T) { - tb, _ := NewThreadBuilderFromFile("userjoinexample.yml") + tb, _ := NewThreadBuilderFromFile("validsnapshotexample.yml") gr, _ := tb.Graph() fmt.Println(gr) }