diff --git a/internal/target/service_list_ext_test.go b/internal/target/service_list_ext_test.go index 8e0339de71..d84c210d40 100644 --- a/internal/target/service_list_ext_test.go +++ b/internal/target/service_list_ext_test.go @@ -183,6 +183,16 @@ func TestService_List(t *testing.T) { _, err = target.ListPage(ctx, []byte("some hash"), 1, filterFunc, tok, nil) require.ErrorContains(t, err, "missing repo") }) + t.Run("wrong token resource type", func(t *testing.T) { + t.Parallel() + filterFunc := func(_ context.Context, t target.Target) (bool, error) { + return true, nil + } + tok, err := listtoken.NewPagination(ctx, fiveDaysAgo, resource.Session, []byte("some hash"), "some-id", fiveDaysAgo) + require.NoError(t, err) + _, err = target.ListPage(ctx, []byte("some hash"), 1, filterFunc, tok, repo) + require.ErrorContains(t, err, "token did not have a target resource type") + }) }) t.Run("ListRefresh validation", func(t *testing.T) { t.Parallel() @@ -251,6 +261,16 @@ func TestService_List(t *testing.T) { _, err = target.ListRefresh(ctx, []byte("some hash"), 1, filterFunc, tok, nil) require.ErrorContains(t, err, "missing repo") }) + t.Run("wrong token resource type", func(t *testing.T) { + t.Parallel() + filterFunc := func(_ context.Context, t target.Target) (bool, error) { + return true, nil + } + tok, err := listtoken.NewStartRefresh(ctx, fiveDaysAgo, resource.Session, []byte("some hash"), fiveDaysAgo, fiveDaysAgo) + require.NoError(t, err) + _, err = target.ListRefresh(ctx, []byte("some hash"), 1, filterFunc, tok, repo) + require.ErrorContains(t, err, "token did not have a target resource type") + }) }) t.Run("ListRefreshPage validation", func(t *testing.T) { t.Parallel() @@ -319,6 +339,16 @@ func TestService_List(t *testing.T) { _, err = target.ListRefreshPage(ctx, []byte("some hash"), 1, filterFunc, tok, nil) require.ErrorContains(t, err, "missing repo") }) + t.Run("wrong token resource type", func(t *testing.T) { + t.Parallel() + filterFunc := func(_ context.Context, t target.Target) (bool, error) { + return true, nil + } + tok, err := listtoken.NewRefresh(ctx, fiveDaysAgo, resource.Session, []byte("some hash"), fiveDaysAgo, fiveDaysAgo, fiveDaysAgo, "some other id", fiveDaysAgo) + require.NoError(t, err) + _, err = target.ListRefreshPage(ctx, []byte("some hash"), 1, filterFunc, tok, repo) + require.ErrorContains(t, err, "token did not have a target resource type") + }) }) t.Run("simple pagination", func(t *testing.T) { diff --git a/internal/target/service_list_page.go b/internal/target/service_list_page.go index 4e5d900b47..3e8066381a 100644 --- a/internal/target/service_list_page.go +++ b/internal/target/service_list_page.go @@ -10,6 +10,7 @@ import ( "github.com/hashicorp/boundary/internal/errors" "github.com/hashicorp/boundary/internal/listtoken" "github.com/hashicorp/boundary/internal/pagination" + "github.com/hashicorp/boundary/internal/types/resource" ) // ListPage lists up to page size targets, filtering out entries that @@ -39,6 +40,8 @@ func ListPage( return nil, errors.New(ctx, errors.InvalidParameter, op, "missing token") case repo == nil: return nil, errors.New(ctx, errors.InvalidParameter, op, "missing repo") + case tok.ResourceType != resource.Target: + return nil, errors.New(ctx, errors.InvalidParameter, op, "token did not have a target resource type") } if _, ok := tok.Subtype.(*listtoken.PaginationToken); !ok { return nil, errors.New(ctx, errors.InvalidParameter, op, "token did not have a pagination token component") diff --git a/internal/target/service_list_refresh.go b/internal/target/service_list_refresh.go index 60afac82a5..257265541e 100644 --- a/internal/target/service_list_refresh.go +++ b/internal/target/service_list_refresh.go @@ -11,6 +11,7 @@ import ( "github.com/hashicorp/boundary/internal/errors" "github.com/hashicorp/boundary/internal/listtoken" "github.com/hashicorp/boundary/internal/pagination" + "github.com/hashicorp/boundary/internal/types/resource" ) // ListRefresh lists up to page size targets, filtering out entries that @@ -43,6 +44,8 @@ func ListRefresh( return nil, errors.New(ctx, errors.InvalidParameter, op, "missing token") case repo == nil: return nil, errors.New(ctx, errors.InvalidParameter, op, "missing repo") + case tok.ResourceType != resource.Target: + return nil, errors.New(ctx, errors.InvalidParameter, op, "token did not have a target resource type") } rt, ok := tok.Subtype.(*listtoken.StartRefreshToken) if !ok { diff --git a/internal/target/service_list_refresh_page.go b/internal/target/service_list_refresh_page.go index 71a92b3459..8c77bc24ca 100644 --- a/internal/target/service_list_refresh_page.go +++ b/internal/target/service_list_refresh_page.go @@ -11,6 +11,7 @@ import ( "github.com/hashicorp/boundary/internal/errors" "github.com/hashicorp/boundary/internal/listtoken" "github.com/hashicorp/boundary/internal/pagination" + "github.com/hashicorp/boundary/internal/types/resource" ) // ListRefreshPage lists up to page size targets, filtering out entries that @@ -43,6 +44,8 @@ func ListRefreshPage( return nil, errors.New(ctx, errors.InvalidParameter, op, "missing token") case repo == nil: return nil, errors.New(ctx, errors.InvalidParameter, op, "missing repo") + case tok.ResourceType != resource.Target: + return nil, errors.New(ctx, errors.InvalidParameter, op, "token did not have a target resource type") } rt, ok := tok.Subtype.(*listtoken.RefreshToken) if !ok {