Skip to content

Commit

Permalink
fix(logbook): Only a single Logbook method, owner check in logsync
Browse files Browse the repository at this point in the history
  • Loading branch information
dustmop committed Jun 25, 2020
1 parent 35205ac commit c741ef0
Show file tree
Hide file tree
Showing 6 changed files with 32 additions and 42 deletions.
2 changes: 1 addition & 1 deletion base/remove.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ func RemoveEntireDataset(ctx context.Context, r repo.Repo, ref dsref.Ref, histor
removeErr = err
}
} else {
if err := book.RemoveAnyoneLog(ctx, ref); err == nil {
if err := book.RemoveLog(ctx, ref); err == nil {
didRemove = appendString(didRemove, "logbook")
} else {
log.Debugf("Remove, logbook.RemoveLog failed, error: %s", err)
Expand Down
2 changes: 1 addition & 1 deletion fsi/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ to create a working directory for an existing dataset`
rollback = concatFunc(
func() {
log.Debugf("removing log from logbook %q", ref)
if err := book.RemoveLog(ctx, book.Author(), ref); err != nil {
if err := book.RemoveLog(ctx, ref); err != nil {
log.Error(err)
}
}, rollback)
Expand Down
38 changes: 1 addition & 37 deletions logbook/logbook.go
Original file line number Diff line number Diff line change
Expand Up @@ -826,43 +826,7 @@ func (book *Book) MergeLog(ctx context.Context, sender identity.Author, lg *oplo
}

// RemoveLog removes an entire log from a logbook
func (book *Book) RemoveLog(ctx context.Context, sender identity.Author, ref dsref.Ref) error {
if book == nil {
return ErrNoLogbook
}

l, err := book.BranchRef(ctx, ref)
if err != nil {
return err
}

// eventually access control will dictate which logs can be written by whom.
// For now we only allow users to merge logs they've written
// book will need access to a store of public keys before we can verify
// signatures non-same-senders
// if err := l.Verify(sender.AuthorPubKey()); err != nil {
// return err
// }

root := l
for {
p := root.Parent()
if p == nil {
break
}
root = p
}

if root.ID() != sender.AuthorID() {
return fmt.Errorf("authors can only remove logs they own")
}

book.store.RemoveLog(ctx, dsRefToLogPath(ref)...)
return book.save(ctx)
}

// RemoveAnyoneLog removes a log owned by anyone.
func (book *Book) RemoveAnyoneLog(ctx context.Context, ref dsref.Ref) error {
func (book *Book) RemoveLog(ctx context.Context, ref dsref.Ref) error {
if book == nil {
return ErrNoLogbook
}
Expand Down
2 changes: 1 addition & 1 deletion logbook/logbook_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,7 @@ func TestNilCallable(t *testing.T) {
if err = book.MergeLog(ctx, nil, &oplog.Log{}); err != logbook.ErrNoLogbook {
t.Errorf("expected '%s', got: %v", logbook.ErrNoLogbook, err)
}
if err = book.RemoveLog(ctx, nil, dsref.Ref{}); err != logbook.ErrNoLogbook {
if err = book.RemoveLog(ctx, dsref.Ref{}); err != logbook.ErrNoLogbook {
t.Errorf("expected '%s', got: %v", logbook.ErrNoLogbook, err)
}
if err = book.ConstructDatasetLog(ctx, dsref.Ref{}, nil); err != logbook.ErrNoLogbook {
Expand Down
28 changes: 27 additions & 1 deletion logbook/logsync/logsync.go
Original file line number Diff line number Diff line change
Expand Up @@ -271,7 +271,33 @@ func (lsync *Logsync) del(ctx context.Context, sender identity.Author, ref dsref
}
}

if err := lsync.book.RemoveLog(ctx, sender, ref); err != nil {
l, err := lsync.book.BranchRef(ctx, ref)
if err != nil {
return err
}

// eventually access control will dictate which logs can be written by whom.
// For now we only allow users to merge logs they've written
// book will need access to a store of public keys before we can verify
// signatures non-same-senders
// if err := l.Verify(sender.AuthorPubKey()); err != nil {
// return err
// }

root := l
for {
p := root.Parent()
if p == nil {
break
}
root = p
}

if root.ID() != sender.AuthorID() {
return fmt.Errorf("authors can only remove logs they own")
}

if err := lsync.book.RemoveLog(ctx, ref); err != nil {
return err
}

Expand Down
2 changes: 1 addition & 1 deletion remote/mock_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ func (c *MockClient) FetchLogs(ctx context.Context, ref dsref.Ref, remoteAddr st
return nil, ErrNotImplemented
}

// CloneLogs is not implemented
// CloneLogs creates a log from a temp logbook, and merges those into the client's logbook
func (c *MockClient) CloneLogs(ctx context.Context, ref dsref.Ref, remoteAddr string) error {
tmpdir, err := ioutil.TempDir("", "")
if err != nil {
Expand Down

0 comments on commit c741ef0

Please sign in to comment.