Skip to content

Commit

Permalink
feat(list): Add ProfileID restriction option to List
Browse files Browse the repository at this point in the history
  • Loading branch information
dustmop committed Mar 15, 2021
1 parent 9e8122b commit 774fa06
Show file tree
Hide file tree
Showing 7 changed files with 22 additions and 12 deletions.
7 changes: 6 additions & 1 deletion base/dataset.go
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ func CloseDataset(ds *dataset.Dataset) (err error) {
}

// ListDatasets lists datasets from a repo
func ListDatasets(ctx context.Context, r repo.Repo, term string, offset, limit int, RPC, publishedOnly, showVersions bool) ([]dsref.VersionInfo, error) {
func ListDatasets(ctx context.Context, r repo.Repo, term, profileID string, offset, limit int, RPC, publishedOnly, showVersions bool) ([]dsref.VersionInfo, error) {
fs := r.Filesystem()
num, err := r.RefCount()
if err != nil {
Expand Down Expand Up @@ -209,6 +209,11 @@ func ListDatasets(ctx context.Context, r repo.Repo, term string, offset, limit i
continue
}
}
if profileID != "" {
if profileID != ref.ProfileID.String() {
continue
}
}

if ref.Path != "" {
ds, err := dsfs.LoadDataset(ctx, fs, ref.Path)
Expand Down
12 changes: 6 additions & 6 deletions base/dataset_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ func TestListDatasets(t *testing.T) {
ref := addCitiesDataset(t, r)

// Limit to one
res, err := ListDatasets(ctx, r, "", 0, 1, false, false, false)
res, err := ListDatasets(ctx, r, "", "", 0, 1, false, false, false)
if err != nil {
t.Error(err.Error())
}
Expand All @@ -25,7 +25,7 @@ func TestListDatasets(t *testing.T) {
}

// Limit to published datasets
res, err = ListDatasets(ctx, r, "", 0, 1, false, true, false)
res, err = ListDatasets(ctx, r, "", "", 0, 1, false, true, false)
if err != nil {
t.Error(err.Error())
}
Expand All @@ -39,7 +39,7 @@ func TestListDatasets(t *testing.T) {
}

// Limit to published datasets, after publishing cities
res, err = ListDatasets(ctx, r, "", 0, 1, false, true, false)
res, err = ListDatasets(ctx, r, "", "", 0, 1, false, true, false)
if err != nil {
t.Error(err.Error())
}
Expand All @@ -49,7 +49,7 @@ func TestListDatasets(t *testing.T) {
}

// Limit to datasets with "city" in their name
res, err = ListDatasets(ctx, r, "city", 0, 1, false, false, false)
res, err = ListDatasets(ctx, r, "city", "", 0, 1, false, false, false)
if err != nil {
t.Error(err.Error())
}
Expand All @@ -58,15 +58,15 @@ func TestListDatasets(t *testing.T) {
}

// Limit to datasets with "cit" in their name
res, err = ListDatasets(ctx, r, "cit", 0, 1, false, false, false)
res, err = ListDatasets(ctx, r, "cit", "", 0, 1, false, false, false)
if err != nil {
t.Error(err.Error())
}
if len(res) != 1 {
t.Error(`expected one dataset with \"cit\" in their name`)
}

res, err = ListDatasets(ctx, r, "", 0, -1, false, false, false)
res, err = ListDatasets(ctx, r, "", "", 0, -1, false, false, false)
if err != nil {
t.Error(err)
}
Expand Down
7 changes: 6 additions & 1 deletion lib/datasets.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,11 @@ func (m *DatasetMethods) List(ctx context.Context, p *ListParams) ([]dsref.Versi
return res, nil
}

// TODO(dustmop): When List is converted to use scope, get the ProfileID from
// the scope if the user is authorized to only view their own datasets, as opposed
// to the full collection that exists in this node's repository.
restrictPid := ""

// ensure valid limit value
if p.Limit <= 0 {
p.Limit = 25
Expand Down Expand Up @@ -142,7 +147,7 @@ func (m *DatasetMethods) List(ctx context.Context, p *ListParams) ([]dsref.Versi
infos[i] = reporef.ConvertToVersionInfo(&r)
}
} else if listProfile.Peername == "" || reqProfile.Peername == listProfile.Peername {
infos, err = base.ListDatasets(ctx, m.inst.repo, p.Term, p.Offset, p.Limit, p.RPC, p.Public, p.ShowNumVersions)
infos, err = base.ListDatasets(ctx, m.inst.repo, p.Term, restrictPid, p.Offset, p.Limit, p.RPC, p.Public, p.ShowNumVersions)
if errors.Is(err, ErrListWarning) {
listWarning = err
err = nil
Expand Down
2 changes: 1 addition & 1 deletion p2p/datasets.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ func (n *QriNode) handleDatasetsList(ws *WrappedStream, msg Message) (hangup boo
dlp.Limit = listMax
}

refs, err := base.ListDatasets(context.TODO(), n.Repo, dlp.Term, dlp.Offset, dlp.Limit, false, true, false)
refs, err := base.ListDatasets(context.TODO(), n.Repo, dlp.Term, "", dlp.Offset, dlp.Limit, false, true, false)
if err != nil {
log.Error(err)
return
Expand Down
2 changes: 1 addition & 1 deletion registry/regserver/mock.go
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ type MockRepoSearch struct {
// Search implements the registry.Searchable interface
func (ss MockRepoSearch) Search(p registry.SearchParams) ([]*dataset.Dataset, error) {
ctx := context.Background()
infos, err := base.ListDatasets(ctx, ss.Repo, p.Q, 0, 1000, false, true, false)
infos, err := base.ListDatasets(ctx, ss.Repo, p.Q, "", 0, 1000, false, true, false)
if err != nil {
return nil, err
}
Expand Down
2 changes: 1 addition & 1 deletion remote/browse.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ func (rf RepoFeeds) Feed(ctx context.Context, userID, name string, offset, limit
if name != "recent" {
return nil, fmt.Errorf("unknown feed name '%s'", name)
}
return base.ListDatasets(ctx, rf.Repo, "", offset, limit, false, true, false)
return base.ListDatasets(ctx, rf.Repo, "", "", offset, limit, false, true, false)
}

// Previews is an interface for generating constant-size summaries of dataset
Expand Down
2 changes: 1 addition & 1 deletion remote/registry/regserver/mock.go
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ type MockRepoSearch struct {
// Search implements the registry.Searchable interface
func (ss MockRepoSearch) Search(p registry.SearchParams) ([]*dataset.Dataset, error) {
ctx := context.Background()
infos, err := base.ListDatasets(ctx, ss.Repo, p.Q, 0, 1000, false, true, false)
infos, err := base.ListDatasets(ctx, ss.Repo, p.Q, "", 0, 1000, false, true, false)
if err != nil {
return nil, err
}
Expand Down

0 comments on commit 774fa06

Please sign in to comment.