From 7d945ed31db98af5996b24528e18860311da0bd1 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Thu, 19 Dec 2019 15:01:36 +0100 Subject: [PATCH 01/68] Add acl iterator --- pkg/secrethub/acl.go | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/pkg/secrethub/acl.go b/pkg/secrethub/acl.go index 37f26cf6..8e182d4b 100644 --- a/pkg/secrethub/acl.go +++ b/pkg/secrethub/acl.go @@ -4,6 +4,7 @@ import ( "github.com/secrethub/secrethub-go/internals/api" "github.com/secrethub/secrethub-go/internals/api/uuid" "github.com/secrethub/secrethub-go/internals/errio" + "github.com/secrethub/secrethub-go/pkg/secrethub/iterator" ) // AccessRuleService handles operations on access rules from SecretHub. @@ -19,6 +20,11 @@ type AccessRuleService interface { // to true, it also includes rules for any parent directories. When the depth is // set to -1, all children are retrieved without limit. List(path string, depth int, ancestors bool) ([]*api.AccessRule, error) + // Iterator returns an iterator that retrieves all access rules that apply to a + // directory, including rules that apply to its children up to a specified depth. + // When ancestors is set to true, it also includes rules for any parent directories. + // When the depth is set to -1, all children are retrieved without limit. + Iterator(path string, depth int, ancestors bool) AccessRuleIterator // ListLevels lists the access levels on the given directory. ListLevels(path string) ([]*api.AccessLevel, error) } @@ -286,3 +292,35 @@ func (c *Client) getAccessLevel(path api.BlindNamePath, accountName api.AccountN return accessLevel, nil } + +func (s accessRuleService) Iterator(path string, depth int, ancestors bool) AccessRuleIterator { + data, err := s.List(path, depth, ancestors) + return &accessRuleIterator{ + index: 0, + data: data, + err: err, + } +} + +type AccessRuleIterator interface { + Next() (api.AccessRule, error) +} + +type accessRuleIterator struct { + index int + data []*api.AccessRule + err error +} + +func (it *accessRuleIterator) Next() (api.AccessRule, error) { + if it.err != nil { + return api.AccessRule{}, it.err + } + if it.index >= len(it.data) { + return api.AccessRule{}, iterator.Done + } + + element := *it.data[it.index] + it.index++ + return element, nil +} From 2f74f23974a27878b24875783c0e74d0afa5ed40 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Thu, 19 Dec 2019 15:11:42 +0100 Subject: [PATCH 02/68] Add acl access level iterator --- pkg/secrethub/acl.go | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/pkg/secrethub/acl.go b/pkg/secrethub/acl.go index 8e182d4b..cb14ce12 100644 --- a/pkg/secrethub/acl.go +++ b/pkg/secrethub/acl.go @@ -27,6 +27,7 @@ type AccessRuleService interface { Iterator(path string, depth int, ancestors bool) AccessRuleIterator // ListLevels lists the access levels on the given directory. ListLevels(path string) ([]*api.AccessLevel, error) + LevelIterator(path string) AccessLevelIterator } func newAccessRuleService(client *Client) AccessRuleService { @@ -324,3 +325,35 @@ func (it *accessRuleIterator) Next() (api.AccessRule, error) { it.index++ return element, nil } + +type AccessLevelIterator interface { + Next() (api.AccessLevel, error) +} + +type accessLevelIterator struct { + index int + data []*api.AccessLevel + err error +} + +func (it *accessLevelIterator) Next() (api.AccessLevel, error) { + if it.err != nil { + return api.AccessLevel{}, it.err + } + if it.index >= len(it.data) { + return api.AccessLevel{}, iterator.Done + } + + element := *it.data[it.index] + it.index++ + return element, nil +} + +func (s accessRuleService) LevelIterator(path string) AccessLevelIterator { + data, err := s.ListLevels(path) + return &accessLevelIterator{ + index: 0, + data: data, + err: err, + } +} From b6d8fc6b070ee0ef09bb03c7ea6f717a204c1107 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Thu, 19 Dec 2019 15:36:13 +0100 Subject: [PATCH 03/68] Add repo iterator to RepoService and MeService --- pkg/secrethub/me.go | 16 ++++++++++++++- pkg/secrethub/repo.go | 45 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/pkg/secrethub/me.go b/pkg/secrethub/me.go index 156fb434..5959c12d 100644 --- a/pkg/secrethub/me.go +++ b/pkg/secrethub/me.go @@ -1,6 +1,8 @@ package secrethub -import "github.com/secrethub/secrethub-go/internals/api" +import ( + "github.com/secrethub/secrethub-go/internals/api" +) // MeService handles operations on the authenticated account. type MeService interface { @@ -11,6 +13,8 @@ type MeService interface { SendVerificationEmail() error // ListRepos retrieves all repositories of the current user. ListRepos() ([]*api.Repo, error) + // Repo iterator returns a RepoIterator that retrieves all repos of the current user. + RepoIterator(_ *RepoIteratorParams) RepoIterator } type meService struct { @@ -42,3 +46,13 @@ func (ms meService) GetUser() (*api.User, error) { func (ms meService) SendVerificationEmail() error { return ms.client.httpClient.SendVerificationEmail() } + +func (ms meService) RepoIterator(params *RepoIteratorParams) RepoIterator { + data, err := ms.ListRepos() + + return &repoIterator{ + index: 0, + data: data, + err: err, + } +} diff --git a/pkg/secrethub/repo.go b/pkg/secrethub/repo.go index 6fa2f654..09606ac1 100644 --- a/pkg/secrethub/repo.go +++ b/pkg/secrethub/repo.go @@ -5,6 +5,7 @@ import ( "github.com/secrethub/secrethub-go/internals/crypto" "github.com/secrethub/secrethub-go/internals/errio" "github.com/secrethub/secrethub-go/pkg/secrethub/internals/http" + "github.com/secrethub/secrethub-go/pkg/secrethub/iterator" ) // RepoService handles operations on repositories from SecretHub. @@ -17,6 +18,8 @@ type RepoService interface { Delete(path string) error // List retrieves all repositories in the given namespace. List(namespace string) ([]*api.Repo, error) + // Iterator returns a new Iterator that retrieves all repos in the given namespace. + Iterator(namespace string, _ *RepoIteratorParams) RepoIterator // ListAccounts lists the accounts in the repository. ListAccounts(path string) ([]*api.Account, error) // EventIterator returns an iterator that retrieves all audit events for a given repo. @@ -309,3 +312,45 @@ func (c *Client) getRepoIndexKey(repoPath api.RepoPath) (*crypto.SymmetricKey, e return repoIndexKey, nil } + +func (s repoService) Iterator(namespace string, params *RepoIteratorParams) RepoIterator { + var data []*api.Repo + var err error + + if namespace != "" { + data, err = s.List(namespace) + } else { + data, err = s.ListMine() + } + + return &repoIterator{ + index: 0, + data: data, + err: err, + } +} + +type RepoIteratorParams struct{} + +type RepoIterator interface { + Next() (api.Repo, error) +} + +type repoIterator struct { + index int + data []*api.Repo + err error +} + +func (it *repoIterator) Next() (api.Repo, error) { + if it.err != nil { + return api.Repo{}, it.err + } + if it.index >= len(it.data) { + return api.Repo{}, iterator.Done + } + + element := *it.data[it.index] + it.index++ + return element, nil +} From a2962ec76347c1d5895362ea7cbfa862b2597f82 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Fri, 20 Dec 2019 10:55:52 +0100 Subject: [PATCH 04/68] Add repo iterators for repo service and me service --- pkg/secrethub/me.go | 3 ++- pkg/secrethub/repo.go | 22 +++++++++++++++------- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/pkg/secrethub/me.go b/pkg/secrethub/me.go index 5959c12d..bfa9fa4c 100644 --- a/pkg/secrethub/me.go +++ b/pkg/secrethub/me.go @@ -13,7 +13,7 @@ type MeService interface { SendVerificationEmail() error // ListRepos retrieves all repositories of the current user. ListRepos() ([]*api.Repo, error) - // Repo iterator returns a RepoIterator that retrieves all repos of the current user. + // RepoIterator returns a RepoIterator that retrieves all repos of the current user. RepoIterator(_ *RepoIteratorParams) RepoIterator } @@ -47,6 +47,7 @@ func (ms meService) SendVerificationEmail() error { return ms.client.httpClient.SendVerificationEmail() } +// RepoIterator returns a RepoIterator that retrieves all repos of the current user. func (ms meService) RepoIterator(params *RepoIteratorParams) RepoIterator { data, err := ms.ListRepos() diff --git a/pkg/secrethub/repo.go b/pkg/secrethub/repo.go index 09606ac1..94bf74de 100644 --- a/pkg/secrethub/repo.go +++ b/pkg/secrethub/repo.go @@ -41,6 +41,8 @@ type RepoService interface { ListEvents(path string, subjectTypes api.AuditSubjectTypeList) ([]*api.Audit, error) // ListMine retrieves all repositories of the current user. ListMine() ([]*api.Repo, error) + // IteratorMine returns an iterator that retrieves all repos of the current user. + IteratorMine(_ *RepoIteratorParams) RepoIterator // Users returns a RepoUserService that handles operations on users of a repository. Users() RepoUserService // Services returns a RepoServiceService that handles operations on services of a repository. @@ -313,16 +315,19 @@ func (c *Client) getRepoIndexKey(repoPath api.RepoPath) (*crypto.SymmetricKey, e return repoIndexKey, nil } +// Iterator returns a new Iterator that retrieves all repos in the given namespace. func (s repoService) Iterator(namespace string, params *RepoIteratorParams) RepoIterator { - var data []*api.Repo - var err error - - if namespace != "" { - data, err = s.List(namespace) - } else { - data, err = s.ListMine() + data, err := s.List(namespace) + return &repoIterator{ + index: 0, + data: data, + err: err, } +} +// IteratorMine returns an iterator that retrieves all repos of the current user. +func (s repoService) IteratorMine(_ *RepoIteratorParams) RepoIterator { + data, err := s.ListMine() return &repoIterator{ index: 0, data: data, @@ -330,8 +335,10 @@ func (s repoService) Iterator(namespace string, params *RepoIteratorParams) Repo } } +// RepoIteratorParams defines parameters used when listing repos. type RepoIteratorParams struct{} +// RepoIterator iterates over repositories. type RepoIterator interface { Next() (api.Repo, error) } @@ -342,6 +349,7 @@ type repoIterator struct { err error } +// Next returns the next repo or iterator.Done as an error if there are no more repos. func (it *repoIterator) Next() (api.Repo, error) { if it.err != nil { return api.Repo{}, it.err From d8ba77f8dcf8be3b3f80148999100500abfea280 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Fri, 20 Dec 2019 11:10:07 +0100 Subject: [PATCH 05/68] Update access rule and access level iterators --- pkg/secrethub/acl.go | 39 ++++++++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/pkg/secrethub/acl.go b/pkg/secrethub/acl.go index cb14ce12..84cf07f1 100644 --- a/pkg/secrethub/acl.go +++ b/pkg/secrethub/acl.go @@ -21,13 +21,12 @@ type AccessRuleService interface { // set to -1, all children are retrieved without limit. List(path string, depth int, ancestors bool) ([]*api.AccessRule, error) // Iterator returns an iterator that retrieves all access rules that apply to a - // directory, including rules that apply to its children up to a specified depth. - // When ancestors is set to true, it also includes rules for any parent directories. - // When the depth is set to -1, all children are retrieved without limit. - Iterator(path string, depth int, ancestors bool) AccessRuleIterator + // directory. + Iterator(path string, _ *AccessRuleIteratorParams) AccessRuleIterator // ListLevels lists the access levels on the given directory. ListLevels(path string) ([]*api.AccessLevel, error) - LevelIterator(path string) AccessLevelIterator + // LevelIterator returns an iterator that retrieves all access levels on the given directory. + LevelIterator(path string, _ *AccessLevelIteratorParams) AccessLevelIterator } func newAccessRuleService(client *Client) AccessRuleService { @@ -294,7 +293,19 @@ func (c *Client) getAccessLevel(path api.BlindNamePath, accountName api.AccountN return accessLevel, nil } -func (s accessRuleService) Iterator(path string, depth int, ancestors bool) AccessRuleIterator { +// Iterator returns an iterator that retrieves all access rules that apply to a +// directory. +func (s accessRuleService) Iterator(path string, params *AccessRuleIteratorParams) AccessRuleIterator { + var depth int + var ancestors bool + if params == nil { + depth = -1 + ancestors = false + } else { + depth = params.depth + ancestors = params.ancestors + } + data, err := s.List(path, depth, ancestors) return &accessRuleIterator{ index: 0, @@ -303,6 +314,13 @@ func (s accessRuleService) Iterator(path string, depth int, ancestors bool) Acce } } +// AccessRuleIteratorParams specify parameters used when listing access rules. +type AccessRuleIteratorParams struct { + depth int // depth defines the depth of traversal for the iterator, -1 means listing all subdirectories. + ancestors bool // ancestors defines whether the iterator should also list access rules of parent directories. +} + +// AccessLevelIterator iterates over access rules. type AccessRuleIterator interface { Next() (api.AccessRule, error) } @@ -313,6 +331,7 @@ type accessRuleIterator struct { err error } +// Next returns the next access rule or iterator.Done if the all of them have been returned. func (it *accessRuleIterator) Next() (api.AccessRule, error) { if it.err != nil { return api.AccessRule{}, it.err @@ -326,6 +345,10 @@ func (it *accessRuleIterator) Next() (api.AccessRule, error) { return element, nil } +// AccessLevelIteratorParams defines the parameters used when listing access levels. +type AccessLevelIteratorParams struct{} + +// AccessLevelIterator iterates over access levels. type AccessLevelIterator interface { Next() (api.AccessLevel, error) } @@ -336,6 +359,7 @@ type accessLevelIterator struct { err error } +// Next returns the next access level or iterator.Done if the all of them have been returned. func (it *accessLevelIterator) Next() (api.AccessLevel, error) { if it.err != nil { return api.AccessLevel{}, it.err @@ -349,7 +373,8 @@ func (it *accessLevelIterator) Next() (api.AccessLevel, error) { return element, nil } -func (s accessRuleService) LevelIterator(path string) AccessLevelIterator { +// LevelIterator returns an iterator that retrieves all access levels on the given directory. +func (s accessRuleService) LevelIterator(path string, params *AccessLevelIteratorParams) AccessLevelIterator { data, err := s.ListLevels(path) return &accessLevelIterator{ index: 0, From 2371156ff025cf427f213bfdf07e60f1627e9219 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Fri, 20 Dec 2019 11:14:41 +0100 Subject: [PATCH 06/68] Add org iterator --- pkg/secrethub/org.go | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/pkg/secrethub/org.go b/pkg/secrethub/org.go index e6c89bb8..0694f5b7 100644 --- a/pkg/secrethub/org.go +++ b/pkg/secrethub/org.go @@ -3,6 +3,7 @@ package secrethub import ( "github.com/secrethub/secrethub-go/internals/api" "github.com/secrethub/secrethub-go/internals/errio" + "github.com/secrethub/secrethub-go/pkg/secrethub/iterator" ) // OrgService handles operations on organisations on SecretHub. @@ -17,6 +18,8 @@ type OrgService interface { Delete(name string) error // ListMine returns the organizations of the current user. ListMine() ([]*api.Org, error) + // Iterator returns an iterator that lists all organizations of the current users. + Iterator() OrgIterator } func newOrgService(client *Client) OrgService { @@ -73,3 +76,41 @@ func (s orgService) Members() OrgMemberService { func (s orgService) ListMine() ([]*api.Org, error) { return s.client.httpClient.ListMyOrgs() } + +// Iterator returns an iterator that lists all organizations of the current users. +func (s orgService) Iterator() OrgIterator { + data, err := s.ListMine() + return &orgIterator{ + index: 0, + data: data, + err: err, + } +} + +// RepoIteratorParams defines parameters used when listing repos. +type OrgIteratorParams struct{} + +// RepoIterator iterates over repositories. +type OrgIterator interface { + Next() (api.Org, error) +} + +type orgIterator struct { + index int + data []*api.Org + err error +} + +// Next returns the next repo or iterator.Done as an error if there are no more repos. +func (it *orgIterator) Next() (api.Org, error) { + if it.err != nil { + return api.Org{}, it.err + } + if it.index >= len(it.data) { + return api.Org{}, iterator.Done + } + + element := *it.data[it.index] + it.index++ + return element, nil +} From 5886ec1ff1ffe8ce166486bbf06f4742798ac0cb Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Fri, 20 Dec 2019 11:19:25 +0100 Subject: [PATCH 07/68] Add org member iterator --- pkg/secrethub/org_member.go | 41 +++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/pkg/secrethub/org_member.go b/pkg/secrethub/org_member.go index dafa1869..8bb817e0 100644 --- a/pkg/secrethub/org_member.go +++ b/pkg/secrethub/org_member.go @@ -3,6 +3,7 @@ package secrethub import ( "github.com/secrethub/secrethub-go/internals/api" "github.com/secrethub/secrethub-go/internals/errio" + "github.com/secrethub/secrethub-go/pkg/secrethub/iterator" ) // OrgMemberService handles operations on organization members. @@ -17,6 +18,8 @@ type OrgMemberService interface { Revoke(org string, username string, opts *api.RevokeOpts) (*api.RevokeOrgResponse, error) // List retrieves all members of the given organization. List(org string) ([]*api.OrgMember, error) + // Iterator returns an iterator that lists all members of a given organization. + Iterator(org string, _ *OrgMemberIteratorParams) OrgMemberIterator } func newOrgMemberService(client *Client) OrgMemberService { @@ -112,3 +115,41 @@ func (s orgMemberService) Update(org string, username string, role string) (*api return s.client.httpClient.UpdateOrgMember(org, username, in) } + +// Iterator returns an iterator that lists all members of a given organization. +func (s orgMemberService) Iterator(org string, _ *OrgMemberIteratorParams) OrgMemberIterator { + data, err := s.List(org) + return &orgMemberIterator{ + index: 0, + data: data, + err: err, + } +} + +// OrgMemberIteratorParams defines parameters used when listing OrgMembers. +type OrgMemberIteratorParams struct{} + +// OrgMemberIterator iterates over OrgMembers. +type OrgMemberIterator interface { + Next() (api.OrgMember, error) +} + +type orgMemberIterator struct { + index int + data []*api.OrgMember + err error +} + +// Next returns the next OrgMember or iterator.Done as an error if there are no more OrgMembers. +func (it *orgMemberIterator) Next() (api.OrgMember, error) { + if it.err != nil { + return api.OrgMember{}, it.err + } + if it.index >= len(it.data) { + return api.OrgMember{}, iterator.Done + } + + element := *it.data[it.index] + it.index++ + return element, nil +} From 6001aab98961d2737f2dd7ab75818fd3e9ae445d Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Fri, 20 Dec 2019 11:23:32 +0100 Subject: [PATCH 08/68] Add repo account iterator --- pkg/secrethub/repo.go | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/pkg/secrethub/repo.go b/pkg/secrethub/repo.go index 94bf74de..3dd2593d 100644 --- a/pkg/secrethub/repo.go +++ b/pkg/secrethub/repo.go @@ -22,6 +22,8 @@ type RepoService interface { Iterator(namespace string, _ *RepoIteratorParams) RepoIterator // ListAccounts lists the accounts in the repository. ListAccounts(path string) ([]*api.Account, error) + // AccountIterator returns a new iterator that retrieves all accounts in the given namespace. + AccountIterator(namespace string, params *RepoIteratorParams) AccountIterator // EventIterator returns an iterator that retrieves all audit events for a given repo. // // Usage: @@ -335,6 +337,16 @@ func (s repoService) IteratorMine(_ *RepoIteratorParams) RepoIterator { } } +// AccountIterator returns a new iterator that retrieves all accounts in the given namespace. +func (s repoService) AccountIterator(namespace string, params *RepoIteratorParams) AccountIterator { + data, err := s.ListAccounts(namespace) + return &accountIterator{ + index: 0, + data: data, + err: err, + } +} + // RepoIteratorParams defines parameters used when listing repos. type RepoIteratorParams struct{} @@ -362,3 +374,31 @@ func (it *repoIterator) Next() (api.Repo, error) { it.index++ return element, nil } + +// AccountIteratorParams defines parameters used when listing Accounts. +type AccountIteratorParams struct{} + +// AccountIterator iterates over Accounts. +type AccountIterator interface { + Next() (api.Account, error) +} + +type accountIterator struct { + index int + data []*api.Account + err error +} + +// Next returns the next Account or iterator.Done as an error if there are no more Accounts. +func (it *accountIterator) Next() (api.Account, error) { + if it.err != nil { + return api.Account{}, it.err + } + if it.index >= len(it.data) { + return api.Account{}, iterator.Done + } + + element := *it.data[it.index] + it.index++ + return element, nil +} From 05c1ed49254cea09129ae8abc2ac19708371d4f0 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Fri, 20 Dec 2019 11:34:32 +0100 Subject: [PATCH 09/68] Add repo service iterator and service iterator --- pkg/secrethub/repo_service.go | 15 +++++++++++++ pkg/secrethub/service.go | 41 +++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/pkg/secrethub/repo_service.go b/pkg/secrethub/repo_service.go index e2a4122e..8ba7f0bf 100644 --- a/pkg/secrethub/repo_service.go +++ b/pkg/secrethub/repo_service.go @@ -9,6 +9,8 @@ import ( type RepoServiceService interface { // List lists the services of the given repository. List(path string) ([]*api.Service, error) + // Iterator returns an iterator that lists all services of the given repository. + Iterator(path string, _ *RepoServiceIteratorParams) ServiceIterator } func newRepoServiceService(client *Client) RepoServiceService { @@ -35,3 +37,16 @@ func (s repoServiceService) List(path string) ([]*api.Service, error) { return services, nil } + +// Iterator returns an iterator that lists all services of the given repository. +func (s repoServiceService) Iterator(path string, _ *RepoServiceIteratorParams) ServiceIterator { + data, err := s.List(path) + return &serviceIterator{ + index: 0, + data: data, + err: err, + } +} + +// RepoServiceIteratorParams defines parameters used when listing Services of a given repo. +type RepoServiceIteratorParams struct{} diff --git a/pkg/secrethub/service.go b/pkg/secrethub/service.go index 2a157306..3eff8b81 100644 --- a/pkg/secrethub/service.go +++ b/pkg/secrethub/service.go @@ -4,6 +4,7 @@ import ( "github.com/secrethub/secrethub-go/internals/api" "github.com/secrethub/secrethub-go/internals/errio" "github.com/secrethub/secrethub-go/pkg/secrethub/credentials" + "github.com/secrethub/secrethub-go/pkg/secrethub/iterator" ) // ServiceService handles operations on service accounts from SecretHub. @@ -16,6 +17,8 @@ type ServiceService interface { Delete(name string) (*api.RevokeRepoResponse, error) // List lists all service accounts in a given repository. List(path string) ([]*api.Service, error) + // Iterator returns an iterator that lists all service accounts in a given repository. + Iterator(path string, _ *ServiceIteratorParams) ServiceIterator } func newServiceService(client *Client) ServiceService { @@ -115,3 +118,41 @@ func (s serviceService) List(path string) ([]*api.Service, error) { repoServiceService := newRepoServiceService(s.client) return repoServiceService.List(path) } + +// Iterator returns an iterator that lists all service accounts in a given repository. +func (s serviceService) Iterator(path string, params *ServiceIteratorParams) ServiceIterator { + data, err := s.List(path) + return &serviceIterator{ + index: 0, + data: data, + err: err, + } +} + +// ServiceIteratorParams defines parameters used when listing Services. +type ServiceIteratorParams struct{} + +// ServiceIterator iterates over Services. +type ServiceIterator interface { + Next() (api.Service, error) +} + +type serviceIterator struct { + index int + data []*api.Service + err error +} + +// Next returns the next Service or iterator.Done as an error if there are no more Services. +func (it *serviceIterator) Next() (api.Service, error) { + if it.err != nil { + return api.Service{}, it.err + } + if it.index >= len(it.data) { + return api.Service{}, iterator.Done + } + + element := *it.data[it.index] + it.index++ + return element, nil +} From 5ece0c0fa42163aa9a2db7bcc703fc65c4f1a550 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Fri, 20 Dec 2019 11:39:41 +0100 Subject: [PATCH 10/68] Add repo user iterator --- pkg/secrethub/repo_user.go | 41 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/pkg/secrethub/repo_user.go b/pkg/secrethub/repo_user.go index 93ebaf0d..42862846 100644 --- a/pkg/secrethub/repo_user.go +++ b/pkg/secrethub/repo_user.go @@ -3,6 +3,7 @@ package secrethub import ( "github.com/secrethub/secrethub-go/internals/api" "github.com/secrethub/secrethub-go/internals/errio" + "github.com/secrethub/secrethub-go/pkg/secrethub/iterator" ) // RepoUserService handles operations on users of a repository. @@ -13,6 +14,8 @@ type RepoUserService interface { Revoke(path string, username string) (*api.RevokeRepoResponse, error) // List lists the users of the given repository. List(path string) ([]*api.User, error) + // Iterator returns an iterator that lists the users of a given repository. + Iterator(path string, params *UserIteratorParams) UserIterator } func newRepoUserService(client *Client) RepoUserService { @@ -104,3 +107,41 @@ func (s repoUserService) Revoke(path string, username string) (*api.RevokeRepoRe return resp, nil } + +// Iterator returns an iterator that lists the users of a given repository. +func (s repoUserService) Iterator(path string, params *UserIteratorParams) UserIterator { + data, err := s.List(path) + return &userIterator{ + index: 0, + data: data, + err: err, + } +} + +// UserIteratorParams defines parameters used when listing Users. +type UserIteratorParams struct{} + +// UserIterator iterates over Users. +type UserIterator interface { + Next() (api.User, error) +} + +type userIterator struct { + index int + data []*api.User + err error +} + +// Next returns the next User or iterator.Done as an error if there are no more Users. +func (it *userIterator) Next() (api.User, error) { + if it.err != nil { + return api.User{}, it.err + } + if it.index >= len(it.data) { + return api.User{}, iterator.Done + } + + element := *it.data[it.index] + it.index++ + return element, nil +} From 6b7313119261473a7710f070692a703b7b138c1b Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Fri, 20 Dec 2019 11:52:56 +0100 Subject: [PATCH 11/68] Add secret version iterator --- pkg/secrethub/secret_version.go | 51 +++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/pkg/secrethub/secret_version.go b/pkg/secrethub/secret_version.go index ff32ec79..dc59a073 100644 --- a/pkg/secrethub/secret_version.go +++ b/pkg/secrethub/secret_version.go @@ -3,6 +3,8 @@ package secrethub import ( "fmt" + "github.com/secrethub/secrethub-go/pkg/secrethub/iterator" + units "github.com/docker/go-units" "github.com/secrethub/secrethub-go/internals/api" "github.com/secrethub/secrethub-go/internals/crypto" @@ -33,6 +35,8 @@ type SecretVersionService interface { ListWithData(path string) ([]*api.SecretVersion, error) // ListWithoutData lists secret versions, without the sensitive data. ListWithoutData(path string) ([]*api.SecretVersion, error) + // Iterator returns a new iterator that retrieves all accounts in the given namespace. + Iterator(path string, params *SecretVersionIteratorParams) SecretVersionIterator } func newSecretVersionService(client *Client) SecretVersionService { @@ -272,3 +276,50 @@ func (c *Client) decryptSecretVersions(encVersions ...*api.EncryptedSecretVersio return versions, nil } + +// Iterator returns a new iterator that retrieves all accounts in the given namespace. +func (s secretVersionService) Iterator(path string, params *SecretVersionIteratorParams) SecretVersionIterator { + var data []*api.SecretVersion + var err error + if params.includeSensitiveData { + data, err = s.ListWithData(path) + } else { + data, err = s.ListWithoutData(path) + } + + return &secretVersionIterator{ + index: 0, + data: data, + err: err, + } +} + +// SecretVersionIteratorParams defines parameters used when listing SecretVersions. +type SecretVersionIteratorParams struct { + includeSensitiveData bool +} + +// SecretVersionIterator iterates over SecretVersions. +type SecretVersionIterator interface { + Next() (api.SecretVersion, error) +} + +type secretVersionIterator struct { + index int + data []*api.SecretVersion + err error +} + +// Next returns the next SecretVersion or iterator.Done as an error if there are no more SecretVersions. +func (it *secretVersionIterator) Next() (api.SecretVersion, error) { + if it.err != nil { + return api.SecretVersion{}, it.err + } + if it.index >= len(it.data) { + return api.SecretVersion{}, iterator.Done + } + + element := *it.data[it.index] + it.index++ + return element, nil +} From b584203fd607ff949540c85c23fdf052aecaa377 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Fri, 20 Dec 2019 13:02:31 +0100 Subject: [PATCH 12/68] Update Fakes --- pkg/secrethub/fakeclient/accessrule.go | 16 +++++++++++++++- pkg/secrethub/fakeclient/org.go | 6 ++++++ pkg/secrethub/fakeclient/org_member.go | 11 ++++++++++- pkg/secrethub/fakeclient/repo_service.go | 11 ++++++++++- pkg/secrethub/fakeclient/repo_user.go | 11 ++++++++++- pkg/secrethub/fakeclient/service.go | 7 +++++++ 6 files changed, 58 insertions(+), 4 deletions(-) diff --git a/pkg/secrethub/fakeclient/accessrule.go b/pkg/secrethub/fakeclient/accessrule.go index 86ac487f..19799bb5 100644 --- a/pkg/secrethub/fakeclient/accessrule.go +++ b/pkg/secrethub/fakeclient/accessrule.go @@ -2,7 +2,10 @@ package fakeclient -import "github.com/secrethub/secrethub-go/internals/api" +import ( + "github.com/secrethub/secrethub-go/internals/api" + "github.com/secrethub/secrethub-go/pkg/secrethub" +) // AccessRuleService is a mock of the AccessRuleService interface. type AccessRuleService struct { @@ -11,6 +14,17 @@ type AccessRuleService struct { Lister *AccessRuleLister LevelLister *AccessLevelLister Setter AccessRuleSetter + + IteratorFunc func() secrethub.AccessRuleIterator + LevelIteratorFunc func() secrethub.AccessLevelIterator +} + +func (s *AccessRuleService) Iterator(path string, _ *secrethub.AccessRuleIteratorParams) secrethub.AccessRuleIterator { + return s.IteratorFunc() +} + +func (s *AccessRuleService) LevelIterator(path string, _ *secrethub.AccessLevelIteratorParams) secrethub.AccessLevelIterator { + return s.LevelIteratorFunc() } // Delete implements the AccessRuleService interface Delete function. diff --git a/pkg/secrethub/fakeclient/org.go b/pkg/secrethub/fakeclient/org.go index e333a154..3992f0d1 100644 --- a/pkg/secrethub/fakeclient/org.go +++ b/pkg/secrethub/fakeclient/org.go @@ -14,6 +14,12 @@ type OrgService struct { Getter OrgGetter MemberService *OrgMemberService MineLister OrgMineLister + + IteratorFunc func() secrethub.OrgIterator +} + +func (s *OrgService) Iterator() secrethub.OrgIterator { + return s.IteratorFunc() } // Create implements the RepoService interface Create function. diff --git a/pkg/secrethub/fakeclient/org_member.go b/pkg/secrethub/fakeclient/org_member.go index bf2fe84b..50ebabbb 100644 --- a/pkg/secrethub/fakeclient/org_member.go +++ b/pkg/secrethub/fakeclient/org_member.go @@ -2,7 +2,10 @@ package fakeclient -import "github.com/secrethub/secrethub-go/internals/api" +import ( + "github.com/secrethub/secrethub-go/internals/api" + "github.com/secrethub/secrethub-go/pkg/secrethub" +) // OrgMemberService is a mock of the OrgMemberService interface. type OrgMemberService struct { @@ -10,6 +13,12 @@ type OrgMemberService struct { Lister OrgMemberLister Revoker OrgMemberRevoker Updater OrgMemberUpdater + + IteratorFunc func() secrethub.OrgMemberIterator +} + +func (s *OrgMemberService) Iterator(org string, _ *secrethub.OrgMemberIteratorParams) secrethub.OrgMemberIterator { + return s.IteratorFunc() } // Get implements the OrgMemberService interface Get function. diff --git a/pkg/secrethub/fakeclient/repo_service.go b/pkg/secrethub/fakeclient/repo_service.go index 98aed28a..56963206 100644 --- a/pkg/secrethub/fakeclient/repo_service.go +++ b/pkg/secrethub/fakeclient/repo_service.go @@ -2,11 +2,20 @@ package fakeclient -import "github.com/secrethub/secrethub-go/internals/api" +import ( + "github.com/secrethub/secrethub-go/internals/api" + "github.com/secrethub/secrethub-go/pkg/secrethub" +) // RepoServiceService is a mock of the RepoServiceService interface. type RepoServiceService struct { Lister RepoServiceLister + + IteratorFunc func() secrethub.ServiceIterator +} + +func (s *RepoServiceService) Iterator(path string, _ *secrethub.RepoServiceIteratorParams) secrethub.ServiceIterator { + return s.IteratorFunc() } // List implements the RepoServiceService interface List function. diff --git a/pkg/secrethub/fakeclient/repo_user.go b/pkg/secrethub/fakeclient/repo_user.go index 3ef2b28b..cc3f0ee8 100644 --- a/pkg/secrethub/fakeclient/repo_user.go +++ b/pkg/secrethub/fakeclient/repo_user.go @@ -2,13 +2,22 @@ package fakeclient -import "github.com/secrethub/secrethub-go/internals/api" +import ( + "github.com/secrethub/secrethub-go/internals/api" + "github.com/secrethub/secrethub-go/pkg/secrethub" +) // RepoUserService is a mock of the RepoUserService interface. type RepoUserService struct { RepoInviter RepoInviter Lister RepoUserLister Revoker RepoRevoker + + IteratorFunc func() secrethub.UserIterator +} + +func (s *RepoUserService) Iterator(path string, params *secrethub.UserIteratorParams) secrethub.UserIterator { + return s.IteratorFunc() } // Invite implements the RepoUserService interface Invite function. diff --git a/pkg/secrethub/fakeclient/service.go b/pkg/secrethub/fakeclient/service.go index 0c16954e..0d19a9dc 100644 --- a/pkg/secrethub/fakeclient/service.go +++ b/pkg/secrethub/fakeclient/service.go @@ -4,6 +4,7 @@ package fakeclient import ( "github.com/secrethub/secrethub-go/internals/api" + "github.com/secrethub/secrethub-go/pkg/secrethub" "github.com/secrethub/secrethub-go/pkg/secrethub/credentials" ) @@ -14,6 +15,12 @@ type ServiceService struct { Getter ServiceGetter Lister RepoServiceLister AWSService *ServiceAWSService + + IteratorFunc func() secrethub.ServiceIterator +} + +func (s *ServiceService) Iterator(path string, _ *secrethub.ServiceIteratorParams) secrethub.ServiceIterator { + return s.IteratorFunc() } // Create implements the ServiceService interface Create function. From c199a7a8a3a8980c920f5d3fc5122239e83bd403 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Sat, 21 Dec 2019 15:20:08 +0100 Subject: [PATCH 13/68] Add example for directory creation --- pkg/secrethub/acl.go | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/pkg/secrethub/acl.go b/pkg/secrethub/acl.go index 84cf07f1..cd80db63 100644 --- a/pkg/secrethub/acl.go +++ b/pkg/secrethub/acl.go @@ -93,7 +93,7 @@ func (s accessRuleService) Get(path string, accountName string) (*api.AccessRule return accessRule, nil } -// List etrieves all access rules that apply to a directory, including +// List retrieves all access rules that apply to a directory, including // rules that apply to its children up to a specified depth. When ancestors is set // to true, it also includes rules for any parent directories. When the depth is // set to -1, all children are retrieved without limit. @@ -301,8 +301,11 @@ func (s accessRuleService) Iterator(path string, params *AccessRuleIteratorParam if params == nil { depth = -1 ancestors = false + } else if params.depth == nil { + depth = -1 + ancestors = params.ancestors } else { - depth = params.depth + depth = int(*params.depth) ancestors = params.ancestors } @@ -316,8 +319,8 @@ func (s accessRuleService) Iterator(path string, params *AccessRuleIteratorParam // AccessRuleIteratorParams specify parameters used when listing access rules. type AccessRuleIteratorParams struct { - depth int // depth defines the depth of traversal for the iterator, -1 means listing all subdirectories. - ancestors bool // ancestors defines whether the iterator should also list access rules of parent directories. + depth *uint // depth defines the depth of traversal for the iterator, nil means listing all subdirectories. + ancestors bool // ancestors defines whether the iterator should also list access rules of parent directories. } // AccessLevelIterator iterates over access rules. From 6b152cb9ed6b26b98642759ac3974583df7d53d4 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Sat, 21 Dec 2019 15:21:15 +0100 Subject: [PATCH 14/68] Fix typo --- pkg/secrethub/org.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/secrethub/org.go b/pkg/secrethub/org.go index 0694f5b7..5ef247f4 100644 --- a/pkg/secrethub/org.go +++ b/pkg/secrethub/org.go @@ -18,7 +18,7 @@ type OrgService interface { Delete(name string) error // ListMine returns the organizations of the current user. ListMine() ([]*api.Org, error) - // Iterator returns an iterator that lists all organizations of the current users. + // Iterator returns an iterator that lists all organizations of the current user. Iterator() OrgIterator } @@ -77,7 +77,7 @@ func (s orgService) ListMine() ([]*api.Org, error) { return s.client.httpClient.ListMyOrgs() } -// Iterator returns an iterator that lists all organizations of the current users. +// Iterator returns an iterator that lists all organizations of the current user. func (s orgService) Iterator() OrgIterator { data, err := s.ListMine() return &orgIterator{ From d9e7d1ea161c8cfa69df40db415161c48e7ce90b Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Sat, 21 Dec 2019 15:25:06 +0100 Subject: [PATCH 15/68] Rephrase comment --- pkg/secrethub/org_member.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/secrethub/org_member.go b/pkg/secrethub/org_member.go index 8bb817e0..9b9dcb3d 100644 --- a/pkg/secrethub/org_member.go +++ b/pkg/secrethub/org_member.go @@ -126,10 +126,10 @@ func (s orgMemberService) Iterator(org string, _ *OrgMemberIteratorParams) OrgMe } } -// OrgMemberIteratorParams defines parameters used when listing OrgMembers. +// OrgMemberIteratorParams defines parameters used when listing members of the organization. type OrgMemberIteratorParams struct{} -// OrgMemberIterator iterates over OrgMembers. +// OrgMemberIterator iterates over members of the organization. type OrgMemberIterator interface { Next() (api.OrgMember, error) } From d61b3268c5063d1da3673f35c95fb7942d170ad1 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Sat, 21 Dec 2019 15:26:04 +0100 Subject: [PATCH 16/68] Fix comment --- pkg/secrethub/repo.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/secrethub/repo.go b/pkg/secrethub/repo.go index 3dd2593d..4afdce4f 100644 --- a/pkg/secrethub/repo.go +++ b/pkg/secrethub/repo.go @@ -18,7 +18,7 @@ type RepoService interface { Delete(path string) error // List retrieves all repositories in the given namespace. List(namespace string) ([]*api.Repo, error) - // Iterator returns a new Iterator that retrieves all repos in the given namespace. + // Iterator returns a new iterator that retrieves all repos in the given namespace. Iterator(namespace string, _ *RepoIteratorParams) RepoIterator // ListAccounts lists the accounts in the repository. ListAccounts(path string) ([]*api.Account, error) @@ -317,7 +317,7 @@ func (c *Client) getRepoIndexKey(repoPath api.RepoPath) (*crypto.SymmetricKey, e return repoIndexKey, nil } -// Iterator returns a new Iterator that retrieves all repos in the given namespace. +// Iterator returns a new iterator that retrieves all repos in the given namespace. func (s repoService) Iterator(namespace string, params *RepoIteratorParams) RepoIterator { data, err := s.List(namespace) return &repoIterator{ From d66b45b1355bb4141d42da12f98b9abbaa7ddf94 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Mon, 23 Dec 2019 10:13:19 +0100 Subject: [PATCH 17/68] Fix typo --- pkg/secrethub/acl.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/secrethub/acl.go b/pkg/secrethub/acl.go index cd80db63..dc83e3c8 100644 --- a/pkg/secrethub/acl.go +++ b/pkg/secrethub/acl.go @@ -15,7 +15,7 @@ type AccessRuleService interface { Set(path string, permission string, accountName string) (*api.AccessRule, error) // Delete removes the accessrule for the given directory and account. Delete(path string, accountName string) error - // List etrieves all access rules that apply to a directory, including + // List retrieves all access rules that apply to a directory, including // rules that apply to its children up to a specified depth. When ancestors is set // to true, it also includes rules for any parent directories. When the depth is // set to -1, all children are retrieved without limit. From bf60f283f421edd3e636c2b11003a8d2a3d4da22 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Wed, 25 Dec 2019 12:48:32 +0100 Subject: [PATCH 18/68] Update AccessRule iterator to use paginator --- pkg/secrethub/acl.go | 48 ++++++++++++++----------- pkg/secrethub/audit_test.go | 2 +- pkg/secrethub/iterator/iterator_test.go | 27 ++++++++++++++ pkg/secrethub/iterator/paginator.go | 31 ++++++++++++++++ 4 files changed, 86 insertions(+), 22 deletions(-) create mode 100644 pkg/secrethub/iterator/iterator_test.go create mode 100644 pkg/secrethub/iterator/paginator.go diff --git a/pkg/secrethub/acl.go b/pkg/secrethub/acl.go index dc83e3c8..4b660a61 100644 --- a/pkg/secrethub/acl.go +++ b/pkg/secrethub/acl.go @@ -309,43 +309,49 @@ func (s accessRuleService) Iterator(path string, params *AccessRuleIteratorParam ancestors = params.ancestors } - data, err := s.List(path, depth, ancestors) return &accessRuleIterator{ - index: 0, - data: data, - err: err, + iterator: iterator.New( + iterator.PaginatorConstructorWithFetch( + func() ([]interface{}, error) { + accessRules, err := s.client.httpClient.ListAccessRules(path, depth, ancestors) + if err != nil { + return nil, err + } + + res := make([]interface{}, len(accessRules)) + for i, element := range accessRules { + res[i] = element + } + return res, nil + }, + ), + ), } } -// AccessRuleIteratorParams specify parameters used when listing access rules. -type AccessRuleIteratorParams struct { - depth *uint // depth defines the depth of traversal for the iterator, nil means listing all subdirectories. - ancestors bool // ancestors defines whether the iterator should also list access rules of parent directories. -} - // AccessLevelIterator iterates over access rules. type AccessRuleIterator interface { Next() (api.AccessRule, error) } type accessRuleIterator struct { - index int - data []*api.AccessRule - err error + iterator iterator.Iterator } // Next returns the next access rule or iterator.Done if the all of them have been returned. func (it *accessRuleIterator) Next() (api.AccessRule, error) { - if it.err != nil { - return api.AccessRule{}, it.err - } - if it.index >= len(it.data) { - return api.AccessRule{}, iterator.Done + item, err := it.iterator.Next() + if err != nil { + return api.AccessRule{}, err } - element := *it.data[it.index] - it.index++ - return element, nil + return item.(api.AccessRule), nil +} + +// AccessRuleIteratorParams specify parameters used when listing access rules. +type AccessRuleIteratorParams struct { + depth *uint // depth defines the depth of traversal for the iterator, nil means listing all subdirectories. + ancestors bool // ancestors defines whether the iterator should also list access rules of parent directories. } // AccessLevelIteratorParams defines the parameters used when listing access levels. diff --git a/pkg/secrethub/audit_test.go b/pkg/secrethub/audit_test.go index 3041c60c..3bd97c8c 100644 --- a/pkg/secrethub/audit_test.go +++ b/pkg/secrethub/audit_test.go @@ -16,7 +16,7 @@ type fakeAuditPaginator struct { func (pag *fakeAuditPaginator) Next() ([]interface{}, error) { if pag.returned { - return []interface{}{}, nil + return make([]interface{}, 0), nil } res := make([]interface{}, len(pag.events)) diff --git a/pkg/secrethub/iterator/iterator_test.go b/pkg/secrethub/iterator/iterator_test.go new file mode 100644 index 00000000..0491e27a --- /dev/null +++ b/pkg/secrethub/iterator/iterator_test.go @@ -0,0 +1,27 @@ +package iterator + +import ( + "github.com/secrethub/secrethub-go/internals/assert" + "testing" +) + +func TestPaginatorConstructorWithFetch(t *testing.T) { + it := New(PaginatorConstructorWithFetch(func() ([]interface{}, error) { + return []interface{}{"this","is","a", "test"}, nil + })) + + expected := []string{"this", "is", "a", "test"} + i := 0 + + for { + str, err := it.Next() + if err == Done { + break + } else if err != nil { + t.Fail() + } else { + assert.Equal(t, str, expected[i]) + i++ + } + } +} diff --git a/pkg/secrethub/iterator/paginator.go b/pkg/secrethub/iterator/paginator.go new file mode 100644 index 00000000..79ff3492 --- /dev/null +++ b/pkg/secrethub/iterator/paginator.go @@ -0,0 +1,31 @@ +package iterator + +type paginator struct { + fetched bool + fetch func() ([]interface{}, error) +} + +// PaginatorConstructorWithFetch returns a new paginator constructor that constructs a paginator +// with the provided fetch function. +func PaginatorConstructorWithFetch(fetch func() ([]interface{}, error)) PaginatorConstructor { + return func() (Paginator, error) { + return &paginator{ + fetched:false, + fetch:fetch, + }, nil + } +} + +// Next returns the next page of items or an empty page if there are none left. +func (p *paginator) Next() ([]interface{}, error) { + if p.fetched { + return make([]interface{}, 0), nil + } + + res, err := p.fetch() + if err != nil { + return nil, err + } + p.fetched = true + return res, nil +} From 0b0f9289eb2e34af251c388c2272fadb5db51fc9 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Mon, 6 Jan 2020 16:11:13 +0100 Subject: [PATCH 19/68] Rename PaginatorConstructorWithFetch to PaginatorFactory --- pkg/secrethub/acl.go | 2 +- pkg/secrethub/iterator/iterator_test.go | 2 +- pkg/secrethub/iterator/paginator.go | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/secrethub/acl.go b/pkg/secrethub/acl.go index 4b660a61..0230cb4b 100644 --- a/pkg/secrethub/acl.go +++ b/pkg/secrethub/acl.go @@ -311,7 +311,7 @@ func (s accessRuleService) Iterator(path string, params *AccessRuleIteratorParam return &accessRuleIterator{ iterator: iterator.New( - iterator.PaginatorConstructorWithFetch( + iterator.PaginatorFactory( func() ([]interface{}, error) { accessRules, err := s.client.httpClient.ListAccessRules(path, depth, ancestors) if err != nil { diff --git a/pkg/secrethub/iterator/iterator_test.go b/pkg/secrethub/iterator/iterator_test.go index 0491e27a..1703e36d 100644 --- a/pkg/secrethub/iterator/iterator_test.go +++ b/pkg/secrethub/iterator/iterator_test.go @@ -6,7 +6,7 @@ import ( ) func TestPaginatorConstructorWithFetch(t *testing.T) { - it := New(PaginatorConstructorWithFetch(func() ([]interface{}, error) { + it := New(PaginatorFactory(func() ([]interface{}, error) { return []interface{}{"this","is","a", "test"}, nil })) diff --git a/pkg/secrethub/iterator/paginator.go b/pkg/secrethub/iterator/paginator.go index 79ff3492..db4f34ef 100644 --- a/pkg/secrethub/iterator/paginator.go +++ b/pkg/secrethub/iterator/paginator.go @@ -5,9 +5,9 @@ type paginator struct { fetch func() ([]interface{}, error) } -// PaginatorConstructorWithFetch returns a new paginator constructor that constructs a paginator +// PaginatorFactory returns a paginator constructor that constructs a paginator // with the provided fetch function. -func PaginatorConstructorWithFetch(fetch func() ([]interface{}, error)) PaginatorConstructor { +func PaginatorFactory(fetch func() ([]interface{}, error)) PaginatorConstructor { return func() (Paginator, error) { return &paginator{ fetched:false, From 08298fe327b614b20317664f63eb3f15876314bc Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Mon, 6 Jan 2020 16:18:23 +0100 Subject: [PATCH 20/68] Export parameters of access rule iterator --- pkg/secrethub/acl.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pkg/secrethub/acl.go b/pkg/secrethub/acl.go index 0230cb4b..eedc567d 100644 --- a/pkg/secrethub/acl.go +++ b/pkg/secrethub/acl.go @@ -301,12 +301,12 @@ func (s accessRuleService) Iterator(path string, params *AccessRuleIteratorParam if params == nil { depth = -1 ancestors = false - } else if params.depth == nil { + } else if params.Depth == nil { depth = -1 - ancestors = params.ancestors + ancestors = params.Ancestors } else { - depth = int(*params.depth) - ancestors = params.ancestors + depth = int(*params.Depth) + ancestors = params.Ancestors } return &accessRuleIterator{ @@ -350,8 +350,8 @@ func (it *accessRuleIterator) Next() (api.AccessRule, error) { // AccessRuleIteratorParams specify parameters used when listing access rules. type AccessRuleIteratorParams struct { - depth *uint // depth defines the depth of traversal for the iterator, nil means listing all subdirectories. - ancestors bool // ancestors defines whether the iterator should also list access rules of parent directories. + Depth *uint // Depth defines the depth of traversal for the iterator, nil means listing all subdirectories. + Ancestors bool // Ancestors defines whether the iterator should also list access rules of parent directories. } // AccessLevelIteratorParams defines the parameters used when listing access levels. From 3e47a5d2ca59931cd5f3b1682810659a63f596e9 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Mon, 6 Jan 2020 16:22:04 +0100 Subject: [PATCH 21/68] Run goimports --- pkg/secrethub/iterator/iterator_test.go | 5 +++-- pkg/secrethub/iterator/paginator.go | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/pkg/secrethub/iterator/iterator_test.go b/pkg/secrethub/iterator/iterator_test.go index 1703e36d..96a6ee7b 100644 --- a/pkg/secrethub/iterator/iterator_test.go +++ b/pkg/secrethub/iterator/iterator_test.go @@ -1,13 +1,14 @@ package iterator import ( - "github.com/secrethub/secrethub-go/internals/assert" "testing" + + "github.com/secrethub/secrethub-go/internals/assert" ) func TestPaginatorConstructorWithFetch(t *testing.T) { it := New(PaginatorFactory(func() ([]interface{}, error) { - return []interface{}{"this","is","a", "test"}, nil + return []interface{}{"this", "is", "a", "test"}, nil })) expected := []string{"this", "is", "a", "test"} diff --git a/pkg/secrethub/iterator/paginator.go b/pkg/secrethub/iterator/paginator.go index db4f34ef..ce1a0604 100644 --- a/pkg/secrethub/iterator/paginator.go +++ b/pkg/secrethub/iterator/paginator.go @@ -10,8 +10,8 @@ type paginator struct { func PaginatorFactory(fetch func() ([]interface{}, error)) PaginatorConstructor { return func() (Paginator, error) { return &paginator{ - fetched:false, - fetch:fetch, + fetched: false, + fetch: fetch, }, nil } } From 74f29226bc2be39882bf788f06d53b23b3c3daf4 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Mon, 6 Jan 2020 17:05:54 +0100 Subject: [PATCH 22/68] Add access level iterator --- pkg/secrethub/acl.go | 50 +++++++++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/pkg/secrethub/acl.go b/pkg/secrethub/acl.go index eedc567d..ea14d9c8 100644 --- a/pkg/secrethub/acl.go +++ b/pkg/secrethub/acl.go @@ -329,6 +329,28 @@ func (s accessRuleService) Iterator(path string, params *AccessRuleIteratorParam } } +// LevelIterator returns an iterator that retrieves all access levels on the given directory. +func (s accessRuleService) LevelIterator(path string, _ *AccessLevelIteratorParams) AccessLevelIterator { + return &accessLevelIterator{ + iterator: iterator.New( + iterator.PaginatorFactory( + func() ([]interface{}, error) { + accessLevels, err := s.ListLevels(path) + if err != nil { + return nil, err + } + + res := make([]interface{}, len(accessLevels)) + for i, element := range accessLevels { + res[i] = element + } + return res, nil + }, + ), + ), + } +} + // AccessLevelIterator iterates over access rules. type AccessRuleIterator interface { Next() (api.AccessRule, error) @@ -363,31 +385,15 @@ type AccessLevelIterator interface { } type accessLevelIterator struct { - index int - data []*api.AccessLevel - err error + iterator iterator.Iterator } -// Next returns the next access level or iterator.Done if the all of them have been returned. +// Next returns the next access rule or iterator.Done if the all of them have been returned. func (it *accessLevelIterator) Next() (api.AccessLevel, error) { - if it.err != nil { - return api.AccessLevel{}, it.err - } - if it.index >= len(it.data) { - return api.AccessLevel{}, iterator.Done + item, err := it.iterator.Next() + if err != nil { + return api.AccessLevel{}, err } - element := *it.data[it.index] - it.index++ - return element, nil -} - -// LevelIterator returns an iterator that retrieves all access levels on the given directory. -func (s accessRuleService) LevelIterator(path string, params *AccessLevelIteratorParams) AccessLevelIterator { - data, err := s.ListLevels(path) - return &accessLevelIterator{ - index: 0, - data: data, - err: err, - } + return item.(api.AccessLevel), nil } From c6986b1422f71b6953000728d51d39df27a0d823 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Mon, 6 Jan 2020 17:07:58 +0100 Subject: [PATCH 23/68] Add repo iterator to me service and repo service --- pkg/secrethub/me.go | 22 ++++++++++++---- pkg/secrethub/repo.go | 58 ++++++++++++++++++++++++++++--------------- 2 files changed, 55 insertions(+), 25 deletions(-) diff --git a/pkg/secrethub/me.go b/pkg/secrethub/me.go index bfa9fa4c..921ab12e 100644 --- a/pkg/secrethub/me.go +++ b/pkg/secrethub/me.go @@ -2,6 +2,7 @@ package secrethub import ( "github.com/secrethub/secrethub-go/internals/api" + "github.com/secrethub/secrethub-go/pkg/secrethub/iterator" ) // MeService handles operations on the authenticated account. @@ -49,11 +50,22 @@ func (ms meService) SendVerificationEmail() error { // RepoIterator returns a RepoIterator that retrieves all repos of the current user. func (ms meService) RepoIterator(params *RepoIteratorParams) RepoIterator { - data, err := ms.ListRepos() - return &repoIterator{ - index: 0, - data: data, - err: err, + iterator: iterator.New( + iterator.PaginatorFactory( + func() ([]interface{}, error) { + repos, err := ms.ListRepos() + if err != nil { + return nil, err + } + + res := make([]interface{}, len(repos)) + for i, element := range repos { + res[i] = element + } + return res, nil + }, + ), + ), } } diff --git a/pkg/secrethub/repo.go b/pkg/secrethub/repo.go index 4afdce4f..d7d1e142 100644 --- a/pkg/secrethub/repo.go +++ b/pkg/secrethub/repo.go @@ -319,21 +319,45 @@ func (c *Client) getRepoIndexKey(repoPath api.RepoPath) (*crypto.SymmetricKey, e // Iterator returns a new iterator that retrieves all repos in the given namespace. func (s repoService) Iterator(namespace string, params *RepoIteratorParams) RepoIterator { - data, err := s.List(namespace) return &repoIterator{ - index: 0, - data: data, - err: err, + iterator: iterator.New( + iterator.PaginatorFactory( + func() ([]interface{}, error) { + repos, err := s.List(namespace) + if err != nil { + return nil, err + } + + res := make([]interface{}, len(repos)) + for i, element := range repos { + res[i] = element + } + return res, nil + }, + ), + ), } } // IteratorMine returns an iterator that retrieves all repos of the current user. func (s repoService) IteratorMine(_ *RepoIteratorParams) RepoIterator { - data, err := s.ListMine() return &repoIterator{ - index: 0, - data: data, - err: err, + iterator: iterator.New( + iterator.PaginatorFactory( + func() ([]interface{}, error) { + repos, err := s.ListMine() + if err != nil { + return nil, err + } + + res := make([]interface{}, len(repos)) + for i, element := range repos { + res[i] = element + } + return res, nil + }, + ), + ), } } @@ -356,23 +380,17 @@ type RepoIterator interface { } type repoIterator struct { - index int - data []*api.Repo - err error + iterator iterator.Iterator } -// Next returns the next repo or iterator.Done as an error if there are no more repos. +// Next returns the next repo or iterator.Done as an error if the all of them have been returned. func (it *repoIterator) Next() (api.Repo, error) { - if it.err != nil { - return api.Repo{}, it.err - } - if it.index >= len(it.data) { - return api.Repo{}, iterator.Done + item, err := it.iterator.Next() + if err != nil { + return api.Repo{}, err } - element := *it.data[it.index] - it.index++ - return element, nil + return item.(api.Repo), nil } // AccountIteratorParams defines parameters used when listing Accounts. From aa1e6c86cb7bc526331cb3195dc3c646b3ac053f Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Mon, 6 Jan 2020 17:10:24 +0100 Subject: [PATCH 24/68] Add org iterator to org service --- pkg/secrethub/org.go | 43 +++++++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/pkg/secrethub/org.go b/pkg/secrethub/org.go index 5ef247f4..9304dc49 100644 --- a/pkg/secrethub/org.go +++ b/pkg/secrethub/org.go @@ -79,38 +79,41 @@ func (s orgService) ListMine() ([]*api.Org, error) { // Iterator returns an iterator that lists all organizations of the current user. func (s orgService) Iterator() OrgIterator { - data, err := s.ListMine() return &orgIterator{ - index: 0, - data: data, - err: err, + iterator: iterator.New( + iterator.PaginatorFactory( + func() ([]interface{}, error) { + orgs, err := s.ListMine() + if err != nil { + return nil, err + } + + res := make([]interface{}, len(orgs)) + for i, element := range orgs { + res[i] = element + } + return res, nil + }, + ), + ), } } -// RepoIteratorParams defines parameters used when listing repos. -type OrgIteratorParams struct{} - -// RepoIterator iterates over repositories. +// OrgIterator iterates over organizations. type OrgIterator interface { Next() (api.Org, error) } type orgIterator struct { - index int - data []*api.Org - err error + iterator iterator.Iterator } -// Next returns the next repo or iterator.Done as an error if there are no more repos. +// Next returns the next organization or iterator.Done as an error if the all of them have been returned. func (it *orgIterator) Next() (api.Org, error) { - if it.err != nil { - return api.Org{}, it.err - } - if it.index >= len(it.data) { - return api.Org{}, iterator.Done + item, err := it.iterator.Next() + if err != nil { + return api.Org{}, err } - element := *it.data[it.index] - it.index++ - return element, nil + return item.(api.Org), nil } From ac85391a3714a1b815f681aa482f693a7502d460 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Mon, 6 Jan 2020 17:12:41 +0100 Subject: [PATCH 25/68] Add org member iterator to org member service --- pkg/secrethub/org_member.go | 40 +++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/pkg/secrethub/org_member.go b/pkg/secrethub/org_member.go index 9b9dcb3d..f87bdc6a 100644 --- a/pkg/secrethub/org_member.go +++ b/pkg/secrethub/org_member.go @@ -118,38 +118,44 @@ func (s orgMemberService) Update(org string, username string, role string) (*api // Iterator returns an iterator that lists all members of a given organization. func (s orgMemberService) Iterator(org string, _ *OrgMemberIteratorParams) OrgMemberIterator { - data, err := s.List(org) return &orgMemberIterator{ - index: 0, - data: data, - err: err, + iterator: iterator.New( + iterator.PaginatorFactory( + func() ([]interface{}, error) { + orgMembers, err := s.List(org) + if err != nil { + return nil, err + } + + res := make([]interface{}, len(orgMembers)) + for i, element := range orgMembers { + res[i] = element + } + return res, nil + }, + ), + ), } } // OrgMemberIteratorParams defines parameters used when listing members of the organization. type OrgMemberIteratorParams struct{} -// OrgMemberIterator iterates over members of the organization. +// OrgMemberIterator iterates over organization members. type OrgMemberIterator interface { Next() (api.OrgMember, error) } type orgMemberIterator struct { - index int - data []*api.OrgMember - err error + iterator iterator.Iterator } -// Next returns the next OrgMember or iterator.Done as an error if there are no more OrgMembers. +// Next returns the next organization member or iterator.Done as an error if the all of them have been returned. func (it *orgMemberIterator) Next() (api.OrgMember, error) { - if it.err != nil { - return api.OrgMember{}, it.err - } - if it.index >= len(it.data) { - return api.OrgMember{}, iterator.Done + item, err := it.iterator.Next() + if err != nil { + return api.OrgMember{}, err } - element := *it.data[it.index] - it.index++ - return element, nil + return item.(api.OrgMember), nil } From 4d75f316adcb7599301417b0a5c80b4ca5c7fded Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Mon, 6 Jan 2020 17:15:12 +0100 Subject: [PATCH 26/68] Add Account iterator to repo service --- pkg/secrethub/repo.go | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/pkg/secrethub/repo.go b/pkg/secrethub/repo.go index d7d1e142..488d6830 100644 --- a/pkg/secrethub/repo.go +++ b/pkg/secrethub/repo.go @@ -363,11 +363,23 @@ func (s repoService) IteratorMine(_ *RepoIteratorParams) RepoIterator { // AccountIterator returns a new iterator that retrieves all accounts in the given namespace. func (s repoService) AccountIterator(namespace string, params *RepoIteratorParams) AccountIterator { - data, err := s.ListAccounts(namespace) return &accountIterator{ - index: 0, - data: data, - err: err, + iterator: iterator.New( + iterator.PaginatorFactory( + func() ([]interface{}, error) { + accounts, err := s.ListAccounts(namespace) + if err != nil { + return nil, err + } + + res := make([]interface{}, len(accounts)) + for i, element := range accounts { + res[i] = element + } + return res, nil + }, + ), + ), } } @@ -396,27 +408,21 @@ func (it *repoIterator) Next() (api.Repo, error) { // AccountIteratorParams defines parameters used when listing Accounts. type AccountIteratorParams struct{} -// AccountIterator iterates over Accounts. +// AccountIterator iterates over accounts. type AccountIterator interface { Next() (api.Account, error) } type accountIterator struct { - index int - data []*api.Account - err error + iterator iterator.Iterator } -// Next returns the next Account or iterator.Done as an error if there are no more Accounts. +// Next returns the next account or iterator.Done as an error if the all of them have been returned. func (it *accountIterator) Next() (api.Account, error) { - if it.err != nil { - return api.Account{}, it.err - } - if it.index >= len(it.data) { - return api.Account{}, iterator.Done + item, err := it.iterator.Next() + if err != nil { + return api.Account{}, err } - element := *it.data[it.index] - it.index++ - return element, nil + return item.(api.Account), nil } From 8399ca2ece60442c5713d27e470cefa33f780e8f Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Mon, 6 Jan 2020 17:16:36 +0100 Subject: [PATCH 27/68] Add service iterator to service service --- pkg/secrethub/service.go | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/pkg/secrethub/service.go b/pkg/secrethub/service.go index 3eff8b81..43ef78a4 100644 --- a/pkg/secrethub/service.go +++ b/pkg/secrethub/service.go @@ -121,38 +121,44 @@ func (s serviceService) List(path string) ([]*api.Service, error) { // Iterator returns an iterator that lists all service accounts in a given repository. func (s serviceService) Iterator(path string, params *ServiceIteratorParams) ServiceIterator { - data, err := s.List(path) return &serviceIterator{ - index: 0, - data: data, - err: err, + iterator: iterator.New( + iterator.PaginatorFactory( + func() ([]interface{}, error) { + services, err := s.List(path) + if err != nil { + return nil, err + } + + res := make([]interface{}, len(services)) + for i, element := range services { + res[i] = element + } + return res, nil + }, + ), + ), } } // ServiceIteratorParams defines parameters used when listing Services. type ServiceIteratorParams struct{} -// ServiceIterator iterates over Services. +// ServiceIterator iterates over services. type ServiceIterator interface { Next() (api.Service, error) } type serviceIterator struct { - index int - data []*api.Service - err error + iterator iterator.Iterator } -// Next returns the next Service or iterator.Done as an error if there are no more Services. +// Next returns the next service or iterator.Done as an error if the all of them have been returned. func (it *serviceIterator) Next() (api.Service, error) { - if it.err != nil { - return api.Service{}, it.err - } - if it.index >= len(it.data) { - return api.Service{}, iterator.Done + item, err := it.iterator.Next() + if err != nil { + return api.Service{}, err } - element := *it.data[it.index] - it.index++ - return element, nil + return item.(api.Service), nil } From c40d08c41c47dae06ef86a818698f63945d5276e Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Mon, 6 Jan 2020 17:19:05 +0100 Subject: [PATCH 28/68] Add user iterator to repo user service --- pkg/secrethub/repo_user.go | 40 ++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/pkg/secrethub/repo_user.go b/pkg/secrethub/repo_user.go index 42862846..08fba3e9 100644 --- a/pkg/secrethub/repo_user.go +++ b/pkg/secrethub/repo_user.go @@ -110,38 +110,44 @@ func (s repoUserService) Revoke(path string, username string) (*api.RevokeRepoRe // Iterator returns an iterator that lists the users of a given repository. func (s repoUserService) Iterator(path string, params *UserIteratorParams) UserIterator { - data, err := s.List(path) return &userIterator{ - index: 0, - data: data, - err: err, + iterator: iterator.New( + iterator.PaginatorFactory( + func() ([]interface{}, error) { + users, err := s.List(path) + if err != nil { + return nil, err + } + + res := make([]interface{}, len(users)) + for i, element := range users { + res[i] = element + } + return res, nil + }, + ), + ), } } // UserIteratorParams defines parameters used when listing Users. type UserIteratorParams struct{} -// UserIterator iterates over Users. +// UserIterator iterates over users. type UserIterator interface { Next() (api.User, error) } type userIterator struct { - index int - data []*api.User - err error + iterator iterator.Iterator } -// Next returns the next User or iterator.Done as an error if there are no more Users. +// Next returns the next user or iterator.Done as an error if the all of them have been returned. func (it *userIterator) Next() (api.User, error) { - if it.err != nil { - return api.User{}, it.err - } - if it.index >= len(it.data) { - return api.User{}, iterator.Done + item, err := it.iterator.Next() + if err != nil { + return api.User{}, err } - element := *it.data[it.index] - it.index++ - return element, nil + return item.(api.User), nil } From 057a0eb2e109962c819a2ede39cbda0a4f4ea645 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Mon, 6 Jan 2020 17:23:04 +0100 Subject: [PATCH 29/68] Add secret version iterator to secret version service --- pkg/secrethub/secret_version.go | 53 ++++++++++++++++++--------------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/pkg/secrethub/secret_version.go b/pkg/secrethub/secret_version.go index dc59a073..9e56003b 100644 --- a/pkg/secrethub/secret_version.go +++ b/pkg/secrethub/secret_version.go @@ -279,18 +279,29 @@ func (c *Client) decryptSecretVersions(encVersions ...*api.EncryptedSecretVersio // Iterator returns a new iterator that retrieves all accounts in the given namespace. func (s secretVersionService) Iterator(path string, params *SecretVersionIteratorParams) SecretVersionIterator { - var data []*api.SecretVersion - var err error - if params.includeSensitiveData { - data, err = s.ListWithData(path) - } else { - data, err = s.ListWithoutData(path) - } - return &secretVersionIterator{ - index: 0, - data: data, - err: err, + iterator: iterator.New( + iterator.PaginatorFactory( + func() ([]interface{}, error) { + var err error + var secretVersions []*api.SecretVersion + if params.includeSensitiveData { + secretVersions, err = s.ListWithData(path) + } else { + secretVersions, err = s.ListWithoutData(path) + } + if err != nil { + return nil, err + } + + res := make([]interface{}, len(secretVersions)) + for i, element := range secretVersions { + res[i] = element + } + return res, nil + }, + ), + ), } } @@ -299,27 +310,21 @@ type SecretVersionIteratorParams struct { includeSensitiveData bool } -// SecretVersionIterator iterates over SecretVersions. +// SecretVersionIterator iterates over secret versions. type SecretVersionIterator interface { Next() (api.SecretVersion, error) } type secretVersionIterator struct { - index int - data []*api.SecretVersion - err error + iterator iterator.Iterator } -// Next returns the next SecretVersion or iterator.Done as an error if there are no more SecretVersions. +// Next returns the next secret version or iterator.Done as an error if the all of them have been returned. func (it *secretVersionIterator) Next() (api.SecretVersion, error) { - if it.err != nil { - return api.SecretVersion{}, it.err - } - if it.index >= len(it.data) { - return api.SecretVersion{}, iterator.Done + item, err := it.iterator.Next() + if err != nil { + return api.SecretVersion{}, err } - element := *it.data[it.index] - it.index++ - return element, nil + return item.(api.SecretVersion), nil } From 5c67732857d6fcf38c00a3f5b06dae1e01a53f07 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Mon, 6 Jan 2020 17:33:38 +0100 Subject: [PATCH 30/68] Fix repo service iterator --- pkg/secrethub/repo_service.go | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/pkg/secrethub/repo_service.go b/pkg/secrethub/repo_service.go index 8ba7f0bf..f11f2511 100644 --- a/pkg/secrethub/repo_service.go +++ b/pkg/secrethub/repo_service.go @@ -3,6 +3,7 @@ package secrethub import ( "github.com/secrethub/secrethub-go/internals/api" "github.com/secrethub/secrethub-go/internals/errio" + "github.com/secrethub/secrethub-go/pkg/secrethub/iterator" ) // RepoServiceService handles operations on services of repositories. @@ -40,11 +41,23 @@ func (s repoServiceService) List(path string) ([]*api.Service, error) { // Iterator returns an iterator that lists all services of the given repository. func (s repoServiceService) Iterator(path string, _ *RepoServiceIteratorParams) ServiceIterator { - data, err := s.List(path) return &serviceIterator{ - index: 0, - data: data, - err: err, + iterator: iterator.New( + iterator.PaginatorFactory( + func() ([]interface{}, error) { + services, err := s.List(path) + if err != nil { + return nil, err + } + + res := make([]interface{}, len(services)) + for i, element := range services { + res[i] = element + } + return res, nil + }, + ), + ), } } From a702b588fe55a1020ae34042848fc4a830b426b4 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Tue, 7 Jan 2020 10:53:33 +0100 Subject: [PATCH 31/68] Fix typos in godoc --- pkg/secrethub/acl.go | 4 ++-- pkg/secrethub/org.go | 2 +- pkg/secrethub/org_member.go | 2 +- pkg/secrethub/repo.go | 4 ++-- pkg/secrethub/repo_user.go | 2 +- pkg/secrethub/secret_version.go | 2 +- pkg/secrethub/service.go | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/pkg/secrethub/acl.go b/pkg/secrethub/acl.go index ea14d9c8..d8339255 100644 --- a/pkg/secrethub/acl.go +++ b/pkg/secrethub/acl.go @@ -360,7 +360,7 @@ type accessRuleIterator struct { iterator iterator.Iterator } -// Next returns the next access rule or iterator.Done if the all of them have been returned. +// Next returns the next access rule or iterator.Done if all of them have been returned. func (it *accessRuleIterator) Next() (api.AccessRule, error) { item, err := it.iterator.Next() if err != nil { @@ -388,7 +388,7 @@ type accessLevelIterator struct { iterator iterator.Iterator } -// Next returns the next access rule or iterator.Done if the all of them have been returned. +// Next returns the next access level or iterator.Done if all of them have been returned. func (it *accessLevelIterator) Next() (api.AccessLevel, error) { item, err := it.iterator.Next() if err != nil { diff --git a/pkg/secrethub/org.go b/pkg/secrethub/org.go index 9304dc49..8fe82609 100644 --- a/pkg/secrethub/org.go +++ b/pkg/secrethub/org.go @@ -108,7 +108,7 @@ type orgIterator struct { iterator iterator.Iterator } -// Next returns the next organization or iterator.Done as an error if the all of them have been returned. +// Next returns the next organization or iterator.Done as an error if all of them have been returned. func (it *orgIterator) Next() (api.Org, error) { item, err := it.iterator.Next() if err != nil { diff --git a/pkg/secrethub/org_member.go b/pkg/secrethub/org_member.go index f87bdc6a..37e321c0 100644 --- a/pkg/secrethub/org_member.go +++ b/pkg/secrethub/org_member.go @@ -150,7 +150,7 @@ type orgMemberIterator struct { iterator iterator.Iterator } -// Next returns the next organization member or iterator.Done as an error if the all of them have been returned. +// Next returns the next organization member or iterator.Done as an error if all of them have been returned. func (it *orgMemberIterator) Next() (api.OrgMember, error) { item, err := it.iterator.Next() if err != nil { diff --git a/pkg/secrethub/repo.go b/pkg/secrethub/repo.go index 488d6830..5eb07788 100644 --- a/pkg/secrethub/repo.go +++ b/pkg/secrethub/repo.go @@ -395,7 +395,7 @@ type repoIterator struct { iterator iterator.Iterator } -// Next returns the next repo or iterator.Done as an error if the all of them have been returned. +// Next returns the next repo or iterator.Done as an error if all of them have been returned. func (it *repoIterator) Next() (api.Repo, error) { item, err := it.iterator.Next() if err != nil { @@ -417,7 +417,7 @@ type accountIterator struct { iterator iterator.Iterator } -// Next returns the next account or iterator.Done as an error if the all of them have been returned. +// Next returns the next account or iterator.Done as an error if all of them have been returned. func (it *accountIterator) Next() (api.Account, error) { item, err := it.iterator.Next() if err != nil { diff --git a/pkg/secrethub/repo_user.go b/pkg/secrethub/repo_user.go index 08fba3e9..4b5a4c2b 100644 --- a/pkg/secrethub/repo_user.go +++ b/pkg/secrethub/repo_user.go @@ -142,7 +142,7 @@ type userIterator struct { iterator iterator.Iterator } -// Next returns the next user or iterator.Done as an error if the all of them have been returned. +// Next returns the next user or iterator.Done as an error if all of them have been returned. func (it *userIterator) Next() (api.User, error) { item, err := it.iterator.Next() if err != nil { diff --git a/pkg/secrethub/secret_version.go b/pkg/secrethub/secret_version.go index 9e56003b..fba8f218 100644 --- a/pkg/secrethub/secret_version.go +++ b/pkg/secrethub/secret_version.go @@ -319,7 +319,7 @@ type secretVersionIterator struct { iterator iterator.Iterator } -// Next returns the next secret version or iterator.Done as an error if the all of them have been returned. +// Next returns the next secret version or iterator.Done as an error if all of them have been returned. func (it *secretVersionIterator) Next() (api.SecretVersion, error) { item, err := it.iterator.Next() if err != nil { diff --git a/pkg/secrethub/service.go b/pkg/secrethub/service.go index 43ef78a4..fd8c6551 100644 --- a/pkg/secrethub/service.go +++ b/pkg/secrethub/service.go @@ -153,7 +153,7 @@ type serviceIterator struct { iterator iterator.Iterator } -// Next returns the next service or iterator.Done as an error if the all of them have been returned. +// Next returns the next service or iterator.Done as an error if all of them have been returned. func (it *serviceIterator) Next() (api.Service, error) { item, err := it.iterator.Next() if err != nil { From 46086826546907618980595aa83d8e4b3d46504a Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Tue, 7 Jan 2020 10:57:16 +0100 Subject: [PATCH 32/68] Undo unneeded change --- pkg/secrethub/audit_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/secrethub/audit_test.go b/pkg/secrethub/audit_test.go index 3bd97c8c..3041c60c 100644 --- a/pkg/secrethub/audit_test.go +++ b/pkg/secrethub/audit_test.go @@ -16,7 +16,7 @@ type fakeAuditPaginator struct { func (pag *fakeAuditPaginator) Next() ([]interface{}, error) { if pag.returned { - return make([]interface{}, 0), nil + return []interface{}{}, nil } res := make([]interface{}, len(pag.events)) From 219af25e8ddb2f7783300c9c45dc9884687f681b Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Tue, 7 Jan 2020 11:06:09 +0100 Subject: [PATCH 33/68] Simplify access rule iterator default parameter assignment --- pkg/secrethub/acl.go | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/pkg/secrethub/acl.go b/pkg/secrethub/acl.go index d8339255..25d677c3 100644 --- a/pkg/secrethub/acl.go +++ b/pkg/secrethub/acl.go @@ -296,18 +296,17 @@ func (c *Client) getAccessLevel(path api.BlindNamePath, accountName api.AccountN // Iterator returns an iterator that retrieves all access rules that apply to a // directory. func (s accessRuleService) Iterator(path string, params *AccessRuleIteratorParams) AccessRuleIterator { - var depth int - var ancestors bool if params == nil { - depth = -1 - ancestors = false - } else if params.Depth == nil { - depth = -1 - ancestors = params.Ancestors - } else { + params = &AccessRuleIteratorParams{} + } + + var depth int + if params.Depth != nil { depth = int(*params.Depth) - ancestors = params.Ancestors + } else { + depth = -1 } + ancestors := params.Ancestors return &accessRuleIterator{ iterator: iterator.New( From ae9108201c89b89ae1690c6b14e5e19c4a5f2bb8 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Tue, 7 Jan 2020 11:17:09 +0100 Subject: [PATCH 34/68] Update account iterator param names --- pkg/secrethub/repo.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pkg/secrethub/repo.go b/pkg/secrethub/repo.go index 5eb07788..5d87827c 100644 --- a/pkg/secrethub/repo.go +++ b/pkg/secrethub/repo.go @@ -22,8 +22,8 @@ type RepoService interface { Iterator(namespace string, _ *RepoIteratorParams) RepoIterator // ListAccounts lists the accounts in the repository. ListAccounts(path string) ([]*api.Account, error) - // AccountIterator returns a new iterator that retrieves all accounts in the given namespace. - AccountIterator(namespace string, params *RepoIteratorParams) AccountIterator + // AccountIterator returns a new iterator that retrieves all accounts in the given repository. + AccountIterator(path string, params *RepoIteratorParams) AccountIterator // EventIterator returns an iterator that retrieves all audit events for a given repo. // // Usage: @@ -361,13 +361,13 @@ func (s repoService) IteratorMine(_ *RepoIteratorParams) RepoIterator { } } -// AccountIterator returns a new iterator that retrieves all accounts in the given namespace. -func (s repoService) AccountIterator(namespace string, params *RepoIteratorParams) AccountIterator { +// AccountIterator returns a new iterator that retrieves all accounts in the given repository. +func (s repoService) AccountIterator(path string, params *RepoIteratorParams) AccountIterator { return &accountIterator{ iterator: iterator.New( iterator.PaginatorFactory( func() ([]interface{}, error) { - accounts, err := s.ListAccounts(namespace) + accounts, err := s.ListAccounts(path) if err != nil { return nil, err } From ed47f9c02376b8a913d8dc4474c7430f321db681 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Tue, 7 Jan 2020 11:18:46 +0100 Subject: [PATCH 35/68] Fix account iterator params --- pkg/secrethub/repo.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/secrethub/repo.go b/pkg/secrethub/repo.go index 5d87827c..23344bf4 100644 --- a/pkg/secrethub/repo.go +++ b/pkg/secrethub/repo.go @@ -23,7 +23,7 @@ type RepoService interface { // ListAccounts lists the accounts in the repository. ListAccounts(path string) ([]*api.Account, error) // AccountIterator returns a new iterator that retrieves all accounts in the given repository. - AccountIterator(path string, params *RepoIteratorParams) AccountIterator + AccountIterator(path string, params *AccountIteratorParams) AccountIterator // EventIterator returns an iterator that retrieves all audit events for a given repo. // // Usage: @@ -362,7 +362,7 @@ func (s repoService) IteratorMine(_ *RepoIteratorParams) RepoIterator { } // AccountIterator returns a new iterator that retrieves all accounts in the given repository. -func (s repoService) AccountIterator(path string, params *RepoIteratorParams) AccountIterator { +func (s repoService) AccountIterator(path string, params *AccountIteratorParams) AccountIterator { return &accountIterator{ iterator: iterator.New( iterator.PaginatorFactory( From 917e7e04a0ea8a56e709dd90006f35ab2ee485d0 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Tue, 7 Jan 2020 11:20:16 +0100 Subject: [PATCH 36/68] Add org iterator params to org iterator --- pkg/secrethub/org.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pkg/secrethub/org.go b/pkg/secrethub/org.go index 8fe82609..4c5dbcd2 100644 --- a/pkg/secrethub/org.go +++ b/pkg/secrethub/org.go @@ -19,7 +19,7 @@ type OrgService interface { // ListMine returns the organizations of the current user. ListMine() ([]*api.Org, error) // Iterator returns an iterator that lists all organizations of the current user. - Iterator() OrgIterator + Iterator(params *OrgIteratorParams) OrgIterator } func newOrgService(client *Client) OrgService { @@ -78,7 +78,7 @@ func (s orgService) ListMine() ([]*api.Org, error) { } // Iterator returns an iterator that lists all organizations of the current user. -func (s orgService) Iterator() OrgIterator { +func (s orgService) Iterator(params *OrgIteratorParams) OrgIterator { return &orgIterator{ iterator: iterator.New( iterator.PaginatorFactory( @@ -99,6 +99,8 @@ func (s orgService) Iterator() OrgIterator { } } +type OrgIteratorParams struct{} + // OrgIterator iterates over organizations. type OrgIterator interface { Next() (api.Org, error) From c69ad65875e53c4d803f8b285b3c71b976f4a98f Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Tue, 7 Jan 2020 11:52:05 +0100 Subject: [PATCH 37/68] Update iterators to use the http client --- pkg/secrethub/acl.go | 46 +++++++++++++++++++++++++++++++-- pkg/secrethub/me.go | 2 +- pkg/secrethub/org.go | 2 +- pkg/secrethub/org_member.go | 7 ++++- pkg/secrethub/repo.go | 16 +++++++++--- pkg/secrethub/repo_service.go | 9 +++++-- pkg/secrethub/repo_user.go | 9 +++++-- pkg/secrethub/secret_version.go | 11 ++++---- pkg/secrethub/service.go | 9 +++++-- 9 files changed, 91 insertions(+), 20 deletions(-) diff --git a/pkg/secrethub/acl.go b/pkg/secrethub/acl.go index 25d677c3..4af1c2aa 100644 --- a/pkg/secrethub/acl.go +++ b/pkg/secrethub/acl.go @@ -334,9 +334,51 @@ func (s accessRuleService) LevelIterator(path string, _ *AccessLevelIteratorPara iterator: iterator.New( iterator.PaginatorFactory( func() ([]interface{}, error) { - accessLevels, err := s.ListLevels(path) + p, err := api.NewDirPath(path) if err != nil { - return nil, err + return nil, errio.Error(err) + } + + blindName, err := s.client.convertPathToBlindName(p) + if err != nil { + return nil, errio.Error(err) + } + + rules, err := s.client.httpClient.ListAccessRules(blindName, 0, true) + if err != nil { + return nil, errio.Error(err) + } + + dir, err := s.dirService.GetTree(path, 0, false) + if err != nil { + return nil, errio.Error(err) + } + + rights := make(map[uuid.UUID][]*api.AccessRule) + for _, rule := range rules { + list := rights[rule.AccountID] + rights[rule.AccountID] = append(list, rule) + } + + accessLevels := make([]*api.AccessLevel, len(rights)) + i := 0 + for _, list := range rights { + first := list[0] + maxPerm := first.Permission + for _, rule := range list { + if maxPerm < rule.Permission { + maxPerm = rule.Permission + } + } + + accessLevels[i] = &api.AccessLevel{ + Account: first.Account, + AccountID: first.AccountID, + DirID: dir.RootDir.DirID, // add this for completeness + Permission: maxPerm, + } + + i++ } res := make([]interface{}, len(accessLevels)) diff --git a/pkg/secrethub/me.go b/pkg/secrethub/me.go index 921ab12e..2096379f 100644 --- a/pkg/secrethub/me.go +++ b/pkg/secrethub/me.go @@ -54,7 +54,7 @@ func (ms meService) RepoIterator(params *RepoIteratorParams) RepoIterator { iterator: iterator.New( iterator.PaginatorFactory( func() ([]interface{}, error) { - repos, err := ms.ListRepos() + repos, err := ms.client.httpClient.ListMyRepos() if err != nil { return nil, err } diff --git a/pkg/secrethub/org.go b/pkg/secrethub/org.go index 4c5dbcd2..4aaa9934 100644 --- a/pkg/secrethub/org.go +++ b/pkg/secrethub/org.go @@ -83,7 +83,7 @@ func (s orgService) Iterator(params *OrgIteratorParams) OrgIterator { iterator: iterator.New( iterator.PaginatorFactory( func() ([]interface{}, error) { - orgs, err := s.ListMine() + orgs, err := s.client.httpClient.ListMyOrgs() if err != nil { return nil, err } diff --git a/pkg/secrethub/org_member.go b/pkg/secrethub/org_member.go index 37e321c0..9fa698f6 100644 --- a/pkg/secrethub/org_member.go +++ b/pkg/secrethub/org_member.go @@ -122,7 +122,12 @@ func (s orgMemberService) Iterator(org string, _ *OrgMemberIteratorParams) OrgMe iterator: iterator.New( iterator.PaginatorFactory( func() ([]interface{}, error) { - orgMembers, err := s.List(org) + err := api.ValidateOrgName(org) + if err != nil { + return nil, errio.Error(err) + } + + orgMembers, err := s.client.httpClient.ListOrgMembers(org) if err != nil { return nil, err } diff --git a/pkg/secrethub/repo.go b/pkg/secrethub/repo.go index 23344bf4..fb6d2d84 100644 --- a/pkg/secrethub/repo.go +++ b/pkg/secrethub/repo.go @@ -323,7 +323,12 @@ func (s repoService) Iterator(namespace string, params *RepoIteratorParams) Repo iterator: iterator.New( iterator.PaginatorFactory( func() ([]interface{}, error) { - repos, err := s.List(namespace) + err := api.ValidateNamespace(namespace) + if err != nil { + return nil, errio.Error(err) + } + + repos, err := s.client.httpClient.ListRepos(namespace) if err != nil { return nil, err } @@ -345,7 +350,7 @@ func (s repoService) IteratorMine(_ *RepoIteratorParams) RepoIterator { iterator: iterator.New( iterator.PaginatorFactory( func() ([]interface{}, error) { - repos, err := s.ListMine() + repos, err := s.client.httpClient.ListMyRepos() if err != nil { return nil, err } @@ -367,7 +372,12 @@ func (s repoService) AccountIterator(path string, params *AccountIteratorParams) iterator: iterator.New( iterator.PaginatorFactory( func() ([]interface{}, error) { - accounts, err := s.ListAccounts(path) + repoPath, err := api.NewRepoPath(path) + if err != nil { + return nil, errio.Error(err) + } + + accounts, err := s.client.httpClient.ListRepoAccounts(repoPath.GetNamespaceAndRepoName()) if err != nil { return nil, err } diff --git a/pkg/secrethub/repo_service.go b/pkg/secrethub/repo_service.go index f11f2511..a4c813a5 100644 --- a/pkg/secrethub/repo_service.go +++ b/pkg/secrethub/repo_service.go @@ -45,9 +45,14 @@ func (s repoServiceService) Iterator(path string, _ *RepoServiceIteratorParams) iterator: iterator.New( iterator.PaginatorFactory( func() ([]interface{}, error) { - services, err := s.List(path) + repoPath, err := api.NewRepoPath(path) if err != nil { - return nil, err + return nil, errio.Error(err) + } + + services, err := s.client.httpClient.ListServices(repoPath.GetNamespaceAndRepoName()) + if err != nil { + return nil, errio.Error(err) } res := make([]interface{}, len(services)) diff --git a/pkg/secrethub/repo_user.go b/pkg/secrethub/repo_user.go index 4b5a4c2b..ce55e5ec 100644 --- a/pkg/secrethub/repo_user.go +++ b/pkg/secrethub/repo_user.go @@ -114,9 +114,14 @@ func (s repoUserService) Iterator(path string, params *UserIteratorParams) UserI iterator: iterator.New( iterator.PaginatorFactory( func() ([]interface{}, error) { - users, err := s.List(path) + repoPath, err := api.NewRepoPath(path) if err != nil { - return nil, err + return nil, errio.Error(err) + } + + users, err := s.client.httpClient.ListRepoUsers(repoPath.GetNamespaceAndRepoName()) + if err != nil { + return nil, errio.Error(err) } res := make([]interface{}, len(users)) diff --git a/pkg/secrethub/secret_version.go b/pkg/secrethub/secret_version.go index fba8f218..9707fce1 100644 --- a/pkg/secrethub/secret_version.go +++ b/pkg/secrethub/secret_version.go @@ -283,13 +283,12 @@ func (s secretVersionService) Iterator(path string, params *SecretVersionIterato iterator: iterator.New( iterator.PaginatorFactory( func() ([]interface{}, error) { - var err error - var secretVersions []*api.SecretVersion - if params.includeSensitiveData { - secretVersions, err = s.ListWithData(path) - } else { - secretVersions, err = s.ListWithoutData(path) + secretPath, err := api.NewSecretPath(path) + if err != nil { + return nil, errio.Error(err) } + + secretVersions, err := s.list(secretPath, params.includeSensitiveData) if err != nil { return nil, err } diff --git a/pkg/secrethub/service.go b/pkg/secrethub/service.go index fd8c6551..c41bb50e 100644 --- a/pkg/secrethub/service.go +++ b/pkg/secrethub/service.go @@ -125,9 +125,14 @@ func (s serviceService) Iterator(path string, params *ServiceIteratorParams) Ser iterator: iterator.New( iterator.PaginatorFactory( func() ([]interface{}, error) { - services, err := s.List(path) + repoPath, err := api.NewRepoPath(path) if err != nil { - return nil, err + return nil, errio.Error(err) + } + + services, err := s.client.httpClient.ListServices(repoPath.GetNamespaceAndRepoName()) + if err != nil { + return nil, errio.Error(err) } res := make([]interface{}, len(services)) From 3363a2ab96bfe197a8795bc187a45ba760fe3495 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Tue, 7 Jan 2020 11:53:31 +0100 Subject: [PATCH 38/68] Fix org service mock --- pkg/secrethub/fakeclient/org.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/secrethub/fakeclient/org.go b/pkg/secrethub/fakeclient/org.go index 3992f0d1..0f843186 100644 --- a/pkg/secrethub/fakeclient/org.go +++ b/pkg/secrethub/fakeclient/org.go @@ -15,11 +15,11 @@ type OrgService struct { MemberService *OrgMemberService MineLister OrgMineLister - IteratorFunc func() secrethub.OrgIterator + IteratorFunc func(_ *secrethub.OrgIteratorParams) secrethub.OrgIterator } -func (s *OrgService) Iterator() secrethub.OrgIterator { - return s.IteratorFunc() +func (s *OrgService) Iterator(params *secrethub.OrgIteratorParams) secrethub.OrgIterator { + return s.IteratorFunc(params) } // Create implements the RepoService interface Create function. From de541a83476d41f310d850770e38d07510708ae8 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Tue, 7 Jan 2020 19:08:39 +0100 Subject: [PATCH 39/68] Fix casting bug in most iterators Fix bug in access rule iterator --- pkg/secrethub/acl.go | 18 ++++++++++++++---- pkg/secrethub/org.go | 2 +- pkg/secrethub/org_member.go | 2 +- pkg/secrethub/repo.go | 4 ++-- pkg/secrethub/repo_user.go | 2 +- pkg/secrethub/secret_version.go | 2 +- pkg/secrethub/service.go | 2 +- 7 files changed, 21 insertions(+), 11 deletions(-) diff --git a/pkg/secrethub/acl.go b/pkg/secrethub/acl.go index 4af1c2aa..b482c511 100644 --- a/pkg/secrethub/acl.go +++ b/pkg/secrethub/acl.go @@ -312,9 +312,19 @@ func (s accessRuleService) Iterator(path string, params *AccessRuleIteratorParam iterator: iterator.New( iterator.PaginatorFactory( func() ([]interface{}, error) { - accessRules, err := s.client.httpClient.ListAccessRules(path, depth, ancestors) + p, err := api.NewDirPath(path) + if err != nil { + return nil, errio.Error(err) + } + + blindName, err := s.client.convertPathToBlindName(p) if err != nil { - return nil, err + return nil, errio.Error(err) + } + + accessRules, err := s.client.httpClient.ListAccessRules(blindName, depth, ancestors) + if err != nil { + return nil, errio.Error(err) } res := make([]interface{}, len(accessRules)) @@ -408,7 +418,7 @@ func (it *accessRuleIterator) Next() (api.AccessRule, error) { return api.AccessRule{}, err } - return item.(api.AccessRule), nil + return *item.(*api.AccessRule), nil } // AccessRuleIteratorParams specify parameters used when listing access rules. @@ -436,5 +446,5 @@ func (it *accessLevelIterator) Next() (api.AccessLevel, error) { return api.AccessLevel{}, err } - return item.(api.AccessLevel), nil + return *item.(*api.AccessLevel), nil } diff --git a/pkg/secrethub/org.go b/pkg/secrethub/org.go index 4aaa9934..bba5941b 100644 --- a/pkg/secrethub/org.go +++ b/pkg/secrethub/org.go @@ -117,5 +117,5 @@ func (it *orgIterator) Next() (api.Org, error) { return api.Org{}, err } - return item.(api.Org), nil + return *item.(*api.Org), nil } diff --git a/pkg/secrethub/org_member.go b/pkg/secrethub/org_member.go index 9fa698f6..08113889 100644 --- a/pkg/secrethub/org_member.go +++ b/pkg/secrethub/org_member.go @@ -162,5 +162,5 @@ func (it *orgMemberIterator) Next() (api.OrgMember, error) { return api.OrgMember{}, err } - return item.(api.OrgMember), nil + return *item.(*api.OrgMember), nil } diff --git a/pkg/secrethub/repo.go b/pkg/secrethub/repo.go index fb6d2d84..f59626b4 100644 --- a/pkg/secrethub/repo.go +++ b/pkg/secrethub/repo.go @@ -412,7 +412,7 @@ func (it *repoIterator) Next() (api.Repo, error) { return api.Repo{}, err } - return item.(api.Repo), nil + return *item.(*api.Repo), nil } // AccountIteratorParams defines parameters used when listing Accounts. @@ -434,5 +434,5 @@ func (it *accountIterator) Next() (api.Account, error) { return api.Account{}, err } - return item.(api.Account), nil + return *item.(*api.Account), nil } diff --git a/pkg/secrethub/repo_user.go b/pkg/secrethub/repo_user.go index ce55e5ec..2e744069 100644 --- a/pkg/secrethub/repo_user.go +++ b/pkg/secrethub/repo_user.go @@ -154,5 +154,5 @@ func (it *userIterator) Next() (api.User, error) { return api.User{}, err } - return item.(api.User), nil + return *item.(*api.User), nil } diff --git a/pkg/secrethub/secret_version.go b/pkg/secrethub/secret_version.go index 9707fce1..8f6634a9 100644 --- a/pkg/secrethub/secret_version.go +++ b/pkg/secrethub/secret_version.go @@ -325,5 +325,5 @@ func (it *secretVersionIterator) Next() (api.SecretVersion, error) { return api.SecretVersion{}, err } - return item.(api.SecretVersion), nil + return *item.(*api.SecretVersion), nil } diff --git a/pkg/secrethub/service.go b/pkg/secrethub/service.go index c41bb50e..eecfe4aa 100644 --- a/pkg/secrethub/service.go +++ b/pkg/secrethub/service.go @@ -165,5 +165,5 @@ func (it *serviceIterator) Next() (api.Service, error) { return api.Service{}, err } - return item.(api.Service), nil + return *item.(*api.Service), nil } From 1f2d5f72879d670b2e7122b377ec51f4b470df01 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Tue, 7 Jan 2020 19:49:41 +0100 Subject: [PATCH 40/68] Add namespace to repo iterator params and remove IteratorMine from repo service --- pkg/secrethub/repo.go | 57 +++++++++++++++++-------------------------- 1 file changed, 22 insertions(+), 35 deletions(-) diff --git a/pkg/secrethub/repo.go b/pkg/secrethub/repo.go index f59626b4..0ca31ac1 100644 --- a/pkg/secrethub/repo.go +++ b/pkg/secrethub/repo.go @@ -18,8 +18,8 @@ type RepoService interface { Delete(path string) error // List retrieves all repositories in the given namespace. List(namespace string) ([]*api.Repo, error) - // Iterator returns a new iterator that retrieves all repos in the given namespace. - Iterator(namespace string, _ *RepoIteratorParams) RepoIterator + // Iterator returns a new iterator that retrieves all repos according to the specified parameters. + Iterator(_ *RepoIteratorParams) RepoIterator // ListAccounts lists the accounts in the repository. ListAccounts(path string) ([]*api.Account, error) // AccountIterator returns a new iterator that retrieves all accounts in the given repository. @@ -43,8 +43,6 @@ type RepoService interface { ListEvents(path string, subjectTypes api.AuditSubjectTypeList) ([]*api.Audit, error) // ListMine retrieves all repositories of the current user. ListMine() ([]*api.Repo, error) - // IteratorMine returns an iterator that retrieves all repos of the current user. - IteratorMine(_ *RepoIteratorParams) RepoIterator // Users returns a RepoUserService that handles operations on users of a repository. Users() RepoUserService // Services returns a RepoServiceService that handles operations on services of a repository. @@ -317,42 +315,29 @@ func (c *Client) getRepoIndexKey(repoPath api.RepoPath) (*crypto.SymmetricKey, e return repoIndexKey, nil } -// Iterator returns a new iterator that retrieves all repos in the given namespace. -func (s repoService) Iterator(namespace string, params *RepoIteratorParams) RepoIterator { - return &repoIterator{ - iterator: iterator.New( - iterator.PaginatorFactory( - func() ([]interface{}, error) { - err := api.ValidateNamespace(namespace) - if err != nil { - return nil, errio.Error(err) - } - - repos, err := s.client.httpClient.ListRepos(namespace) - if err != nil { - return nil, err - } - - res := make([]interface{}, len(repos)) - for i, element := range repos { - res[i] = element - } - return res, nil - }, - ), - ), +// Iterator returns a new iterator that retrieves all repos according to the specified parameters. +func (s repoService) Iterator(params *RepoIteratorParams) RepoIterator { + if params == nil { + params = &RepoIteratorParams{} } -} -// IteratorMine returns an iterator that retrieves all repos of the current user. -func (s repoService) IteratorMine(_ *RepoIteratorParams) RepoIterator { return &repoIterator{ iterator: iterator.New( iterator.PaginatorFactory( func() ([]interface{}, error) { - repos, err := s.client.httpClient.ListMyRepos() - if err != nil { - return nil, err + var err error + var repos []*api.Repo + if params.Namespace == nil { + repos, err = s.client.httpClient.ListMyRepos() + } else { + err = api.ValidateNamespace(*params.Namespace) + if err != nil { + return nil, errio.Error(err) + } + repos, err = s.client.httpClient.ListRepos(*params.Namespace) + if err != nil { + return nil, err + } } res := make([]interface{}, len(repos)) @@ -394,7 +379,9 @@ func (s repoService) AccountIterator(path string, params *AccountIteratorParams) } // RepoIteratorParams defines parameters used when listing repos. -type RepoIteratorParams struct{} +type RepoIteratorParams struct{ + Namespace *string +} // RepoIterator iterates over repositories. type RepoIterator interface { From 1c20beddd2ba791a3d701e4e9d6e69300cee195f Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Thu, 9 Jan 2020 14:04:58 +0100 Subject: [PATCH 41/68] Add default params for secret version iterator when nil is provided --- pkg/secrethub/secret_version.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pkg/secrethub/secret_version.go b/pkg/secrethub/secret_version.go index 8f6634a9..bcc448cf 100644 --- a/pkg/secrethub/secret_version.go +++ b/pkg/secrethub/secret_version.go @@ -279,6 +279,10 @@ func (c *Client) decryptSecretVersions(encVersions ...*api.EncryptedSecretVersio // Iterator returns a new iterator that retrieves all accounts in the given namespace. func (s secretVersionService) Iterator(path string, params *SecretVersionIteratorParams) SecretVersionIterator { + if params == nil { + params = &SecretVersionIteratorParams{} + } + return &secretVersionIterator{ iterator: iterator.New( iterator.PaginatorFactory( @@ -288,7 +292,7 @@ func (s secretVersionService) Iterator(path string, params *SecretVersionIterato return nil, errio.Error(err) } - secretVersions, err := s.list(secretPath, params.includeSensitiveData) + secretVersions, err := s.list(secretPath, params.IncludeSensitiveData) if err != nil { return nil, err } @@ -306,7 +310,7 @@ func (s secretVersionService) Iterator(path string, params *SecretVersionIterato // SecretVersionIteratorParams defines parameters used when listing SecretVersions. type SecretVersionIteratorParams struct { - includeSensitiveData bool + IncludeSensitiveData bool } // SecretVersionIterator iterates over secret versions. From 8553a8b0122e1cd0f62d4747b0882870d22d778f Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Thu, 9 Jan 2020 14:06:47 +0100 Subject: [PATCH 42/68] Fix error not checked --- pkg/secrethub/repo.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pkg/secrethub/repo.go b/pkg/secrethub/repo.go index 0ca31ac1..d32c99e2 100644 --- a/pkg/secrethub/repo.go +++ b/pkg/secrethub/repo.go @@ -329,6 +329,9 @@ func (s repoService) Iterator(params *RepoIteratorParams) RepoIterator { var repos []*api.Repo if params.Namespace == nil { repos, err = s.client.httpClient.ListMyRepos() + if err != nil { + return nil, errio.Error(err) + } } else { err = api.ValidateNamespace(*params.Namespace) if err != nil { @@ -336,7 +339,7 @@ func (s repoService) Iterator(params *RepoIteratorParams) RepoIterator { } repos, err = s.client.httpClient.ListRepos(*params.Namespace) if err != nil { - return nil, err + return nil, errio.Error(err) } } @@ -379,7 +382,7 @@ func (s repoService) AccountIterator(path string, params *AccountIteratorParams) } // RepoIteratorParams defines parameters used when listing repos. -type RepoIteratorParams struct{ +type RepoIteratorParams struct { Namespace *string } From 75448fda43fb234d47a795748d24d1cadf37a4ac Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Thu, 9 Jan 2020 14:08:17 +0100 Subject: [PATCH 43/68] Simplify error handling in repo service iterator --- pkg/secrethub/repo.go | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/pkg/secrethub/repo.go b/pkg/secrethub/repo.go index d32c99e2..9511ead9 100644 --- a/pkg/secrethub/repo.go +++ b/pkg/secrethub/repo.go @@ -329,18 +329,15 @@ func (s repoService) Iterator(params *RepoIteratorParams) RepoIterator { var repos []*api.Repo if params.Namespace == nil { repos, err = s.client.httpClient.ListMyRepos() - if err != nil { - return nil, errio.Error(err) - } } else { err = api.ValidateNamespace(*params.Namespace) if err != nil { return nil, errio.Error(err) } repos, err = s.client.httpClient.ListRepos(*params.Namespace) - if err != nil { - return nil, errio.Error(err) - } + } + if err != nil { + return nil, errio.Error(err) } res := make([]interface{}, len(repos)) From 8049283f2e8a0499e4175b8fcdbb866391447244 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Thu, 9 Jan 2020 14:09:29 +0100 Subject: [PATCH 44/68] Simplify access level iterator default parameter assignment --- pkg/secrethub/acl.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/pkg/secrethub/acl.go b/pkg/secrethub/acl.go index b482c511..644bb2c9 100644 --- a/pkg/secrethub/acl.go +++ b/pkg/secrethub/acl.go @@ -300,11 +300,9 @@ func (s accessRuleService) Iterator(path string, params *AccessRuleIteratorParam params = &AccessRuleIteratorParams{} } - var depth int + depth := -1 if params.Depth != nil { depth = int(*params.Depth) - } else { - depth = -1 } ancestors := params.Ancestors From 376d204a040399a11de03af0519ee656c1498ecb Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Thu, 9 Jan 2020 17:29:10 +0100 Subject: [PATCH 45/68] Improve secret version iterator godoc --- pkg/secrethub/secret_version.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkg/secrethub/secret_version.go b/pkg/secrethub/secret_version.go index bcc448cf..454bbeae 100644 --- a/pkg/secrethub/secret_version.go +++ b/pkg/secrethub/secret_version.go @@ -278,6 +278,7 @@ func (c *Client) decryptSecretVersions(encVersions ...*api.EncryptedSecretVersio } // Iterator returns a new iterator that retrieves all accounts in the given namespace. +// If the IncludeSensitiveData parameter is set to true, the secret data will also be retrieved. func (s secretVersionService) Iterator(path string, params *SecretVersionIteratorParams) SecretVersionIterator { if params == nil { params = &SecretVersionIteratorParams{} @@ -309,6 +310,7 @@ func (s secretVersionService) Iterator(path string, params *SecretVersionIterato } // SecretVersionIteratorParams defines parameters used when listing SecretVersions. +// If IncludeSensitiveData is set to true, secret data will also be retrieved. type SecretVersionIteratorParams struct { IncludeSensitiveData bool } From 96f5848dd767733eec7ca0904e9f4b97cf832a2b Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Thu, 9 Jan 2020 17:35:31 +0100 Subject: [PATCH 46/68] Fix secret version iterator godoc --- pkg/secrethub/secret_version.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/secrethub/secret_version.go b/pkg/secrethub/secret_version.go index 454bbeae..0ef605ed 100644 --- a/pkg/secrethub/secret_version.go +++ b/pkg/secrethub/secret_version.go @@ -35,7 +35,7 @@ type SecretVersionService interface { ListWithData(path string) ([]*api.SecretVersion, error) // ListWithoutData lists secret versions, without the sensitive data. ListWithoutData(path string) ([]*api.SecretVersion, error) - // Iterator returns a new iterator that retrieves all accounts in the given namespace. + // Iterator returns a new iterator that retrieves all secret versions in the given namespace. Iterator(path string, params *SecretVersionIteratorParams) SecretVersionIterator } @@ -277,7 +277,7 @@ func (c *Client) decryptSecretVersions(encVersions ...*api.EncryptedSecretVersio return versions, nil } -// Iterator returns a new iterator that retrieves all accounts in the given namespace. +// Iterator returns a new iterator that retrieves all secret versions in the given namespace. // If the IncludeSensitiveData parameter is set to true, the secret data will also be retrieved. func (s secretVersionService) Iterator(path string, params *SecretVersionIteratorParams) SecretVersionIterator { if params == nil { From d06192d131add91e9fd48cb569508bd34ccca2a0 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Thu, 9 Jan 2020 17:38:53 +0100 Subject: [PATCH 47/68] Improve godoc comment --- pkg/secrethub/me.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/secrethub/me.go b/pkg/secrethub/me.go index 2096379f..167a8c8c 100644 --- a/pkg/secrethub/me.go +++ b/pkg/secrethub/me.go @@ -14,7 +14,7 @@ type MeService interface { SendVerificationEmail() error // ListRepos retrieves all repositories of the current user. ListRepos() ([]*api.Repo, error) - // RepoIterator returns a RepoIterator that retrieves all repos of the current user. + // RepoIterator returns an iterator that retrieves all repos of the current user. RepoIterator(_ *RepoIteratorParams) RepoIterator } @@ -48,7 +48,7 @@ func (ms meService) SendVerificationEmail() error { return ms.client.httpClient.SendVerificationEmail() } -// RepoIterator returns a RepoIterator that retrieves all repos of the current user. +// RepoIterator returns an iterator that retrieves all repos of the current user. func (ms meService) RepoIterator(params *RepoIteratorParams) RepoIterator { return &repoIterator{ iterator: iterator.New( From 81a06d09a02335cfc5fb7f0c7e176488039a32c3 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Thu, 9 Jan 2020 17:47:19 +0100 Subject: [PATCH 48/68] Improve secret version iterator godoc --- pkg/secrethub/secret_version.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/secrethub/secret_version.go b/pkg/secrethub/secret_version.go index 0ef605ed..ce75ef33 100644 --- a/pkg/secrethub/secret_version.go +++ b/pkg/secrethub/secret_version.go @@ -36,6 +36,7 @@ type SecretVersionService interface { // ListWithoutData lists secret versions, without the sensitive data. ListWithoutData(path string) ([]*api.SecretVersion, error) // Iterator returns a new iterator that retrieves all secret versions in the given namespace. + // If the IncludeSensitiveData parameter is set to true, the secret data will also be retrieved. Iterator(path string, params *SecretVersionIteratorParams) SecretVersionIterator } From 3a76eaf55952cdce1af1d5ce24cf6d6487727584 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Tue, 28 Jan 2020 16:41:05 +0100 Subject: [PATCH 49/68] Deprecate list functions --- pkg/secrethub/acl.go | 2 ++ pkg/secrethub/me.go | 1 + pkg/secrethub/org.go | 1 + pkg/secrethub/org_member.go | 1 + pkg/secrethub/repo.go | 4 ++++ pkg/secrethub/repo_service.go | 1 + pkg/secrethub/repo_user.go | 1 + pkg/secrethub/secret.go | 1 + pkg/secrethub/secret_version.go | 2 ++ pkg/secrethub/service.go | 1 + 10 files changed, 15 insertions(+) diff --git a/pkg/secrethub/acl.go b/pkg/secrethub/acl.go index 644bb2c9..a67a05a2 100644 --- a/pkg/secrethub/acl.go +++ b/pkg/secrethub/acl.go @@ -19,11 +19,13 @@ type AccessRuleService interface { // rules that apply to its children up to a specified depth. When ancestors is set // to true, it also includes rules for any parent directories. When the depth is // set to -1, all children are retrieved without limit. + // Deprecated: Use iterator function instead. List(path string, depth int, ancestors bool) ([]*api.AccessRule, error) // Iterator returns an iterator that retrieves all access rules that apply to a // directory. Iterator(path string, _ *AccessRuleIteratorParams) AccessRuleIterator // ListLevels lists the access levels on the given directory. + // Deprecated: Use iterator function instead. ListLevels(path string) ([]*api.AccessLevel, error) // LevelIterator returns an iterator that retrieves all access levels on the given directory. LevelIterator(path string, _ *AccessLevelIteratorParams) AccessLevelIterator diff --git a/pkg/secrethub/me.go b/pkg/secrethub/me.go index 167a8c8c..712d04d6 100644 --- a/pkg/secrethub/me.go +++ b/pkg/secrethub/me.go @@ -13,6 +13,7 @@ type MeService interface { // for them to prove they own that email address. SendVerificationEmail() error // ListRepos retrieves all repositories of the current user. + // Deprecated: Use iterator function instead. ListRepos() ([]*api.Repo, error) // RepoIterator returns an iterator that retrieves all repos of the current user. RepoIterator(_ *RepoIteratorParams) RepoIterator diff --git a/pkg/secrethub/org.go b/pkg/secrethub/org.go index bba5941b..74e73791 100644 --- a/pkg/secrethub/org.go +++ b/pkg/secrethub/org.go @@ -17,6 +17,7 @@ type OrgService interface { // Delete removes an organization. Delete(name string) error // ListMine returns the organizations of the current user. + // Deprecated: Use iterator function instead. ListMine() ([]*api.Org, error) // Iterator returns an iterator that lists all organizations of the current user. Iterator(params *OrgIteratorParams) OrgIterator diff --git a/pkg/secrethub/org_member.go b/pkg/secrethub/org_member.go index 08113889..ee427297 100644 --- a/pkg/secrethub/org_member.go +++ b/pkg/secrethub/org_member.go @@ -17,6 +17,7 @@ type OrgMemberService interface { // Revoke removes the given user from the organization. Revoke(org string, username string, opts *api.RevokeOpts) (*api.RevokeOrgResponse, error) // List retrieves all members of the given organization. + // Deprecated: Use iterator function instead. List(org string) ([]*api.OrgMember, error) // Iterator returns an iterator that lists all members of a given organization. Iterator(org string, _ *OrgMemberIteratorParams) OrgMemberIterator diff --git a/pkg/secrethub/repo.go b/pkg/secrethub/repo.go index 9511ead9..be4f3345 100644 --- a/pkg/secrethub/repo.go +++ b/pkg/secrethub/repo.go @@ -17,10 +17,12 @@ type RepoService interface { // Delete removes the repo with the given path. Delete(path string) error // List retrieves all repositories in the given namespace. + // Deprecated: Use iterator function instead. List(namespace string) ([]*api.Repo, error) // Iterator returns a new iterator that retrieves all repos according to the specified parameters. Iterator(_ *RepoIteratorParams) RepoIterator // ListAccounts lists the accounts in the repository. + // Deprecated: Use iterator function instead. ListAccounts(path string) ([]*api.Account, error) // AccountIterator returns a new iterator that retrieves all accounts in the given repository. AccountIterator(path string, params *AccountIteratorParams) AccountIterator @@ -40,8 +42,10 @@ type RepoService interface { // } EventIterator(path string, _ *AuditEventIteratorParams) AuditEventIterator // ListEvents retrieves all audit events for a given repo. + // Deprecated: Use iterator function instead. ListEvents(path string, subjectTypes api.AuditSubjectTypeList) ([]*api.Audit, error) // ListMine retrieves all repositories of the current user. + // Deprecated: Use iterator function instead. ListMine() ([]*api.Repo, error) // Users returns a RepoUserService that handles operations on users of a repository. Users() RepoUserService diff --git a/pkg/secrethub/repo_service.go b/pkg/secrethub/repo_service.go index a4c813a5..0ec5f633 100644 --- a/pkg/secrethub/repo_service.go +++ b/pkg/secrethub/repo_service.go @@ -9,6 +9,7 @@ import ( // RepoServiceService handles operations on services of repositories. type RepoServiceService interface { // List lists the services of the given repository. + // Deprecated: Use iterator function instead. List(path string) ([]*api.Service, error) // Iterator returns an iterator that lists all services of the given repository. Iterator(path string, _ *RepoServiceIteratorParams) ServiceIterator diff --git a/pkg/secrethub/repo_user.go b/pkg/secrethub/repo_user.go index 2e744069..4553e157 100644 --- a/pkg/secrethub/repo_user.go +++ b/pkg/secrethub/repo_user.go @@ -13,6 +13,7 @@ type RepoUserService interface { // Revoke revokes the user with given username from the repository with the given path. Revoke(path string, username string) (*api.RevokeRepoResponse, error) // List lists the users of the given repository. + // Deprecated: Use iterator function instead. List(path string) ([]*api.User, error) // Iterator returns an iterator that lists the users of a given repository. Iterator(path string, params *UserIteratorParams) UserIterator diff --git a/pkg/secrethub/secret.go b/pkg/secrethub/secret.go index 977df855..64bab1fd 100644 --- a/pkg/secrethub/secret.go +++ b/pkg/secrethub/secret.go @@ -47,6 +47,7 @@ type SecretService interface { // } EventIterator(path string, _ *AuditEventIteratorParams) AuditEventIterator // ListEvents retrieves all audit events for a given secret. + // Deprecated: Use iterator function instead. ListEvents(path string, subjectTypes api.AuditSubjectTypeList) ([]*api.Audit, error) // Versions returns a SecretVersionService. Versions() SecretVersionService diff --git a/pkg/secrethub/secret_version.go b/pkg/secrethub/secret_version.go index ce75ef33..8d13c827 100644 --- a/pkg/secrethub/secret_version.go +++ b/pkg/secrethub/secret_version.go @@ -32,8 +32,10 @@ type SecretVersionService interface { // Delete removes a secret version. Delete(path string) error // ListWithData lists secret versions, with the sensitive data. + // Deprecated: Use iterator function instead. ListWithData(path string) ([]*api.SecretVersion, error) // ListWithoutData lists secret versions, without the sensitive data. + // Deprecated: Use iterator function instead. ListWithoutData(path string) ([]*api.SecretVersion, error) // Iterator returns a new iterator that retrieves all secret versions in the given namespace. // If the IncludeSensitiveData parameter is set to true, the secret data will also be retrieved. diff --git a/pkg/secrethub/service.go b/pkg/secrethub/service.go index eecfe4aa..0e32d391 100644 --- a/pkg/secrethub/service.go +++ b/pkg/secrethub/service.go @@ -16,6 +16,7 @@ type ServiceService interface { // Delete removes a service account by name. Delete(name string) (*api.RevokeRepoResponse, error) // List lists all service accounts in a given repository. + // Deprecated: Use iterator function instead. List(path string) ([]*api.Service, error) // Iterator returns an iterator that lists all service accounts in a given repository. Iterator(path string, _ *ServiceIteratorParams) ServiceIterator From c65034b7a01a42cb04a835fd3a4ff07f294a7b98 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Fri, 31 Jan 2020 17:07:06 +0100 Subject: [PATCH 50/68] Remove 'deprecated' comment from SecretService ListEvents --- pkg/secrethub/secret.go | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/secrethub/secret.go b/pkg/secrethub/secret.go index 64bab1fd..977df855 100644 --- a/pkg/secrethub/secret.go +++ b/pkg/secrethub/secret.go @@ -47,7 +47,6 @@ type SecretService interface { // } EventIterator(path string, _ *AuditEventIteratorParams) AuditEventIterator // ListEvents retrieves all audit events for a given secret. - // Deprecated: Use iterator function instead. ListEvents(path string, subjectTypes api.AuditSubjectTypeList) ([]*api.Audit, error) // Versions returns a SecretVersionService. Versions() SecretVersionService From c75e605679b37a3f92ff9f9164468b3d8f6efa92 Mon Sep 17 00:00:00 2001 From: Joris Coenen Date: Mon, 24 Feb 2020 15:15:08 +0100 Subject: [PATCH 51/68] Trim all v prefixes in user agent As is conventional for user agents --- pkg/secrethub/client.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/secrethub/client.go b/pkg/secrethub/client.go index 34b6d551..882969e9 100644 --- a/pkg/secrethub/client.go +++ b/pkg/secrethub/client.go @@ -17,8 +17,8 @@ import ( "github.com/secrethub/secrethub-go/pkg/secrethub/internals/http" ) -const ( - userAgentPrefix = "SecretHub/v1 secrethub-go/" + ClientVersion +var ( + userAgentPrefix = "SecretHub/1.0 secrethub-go/" + strings.TrimPrefix(ClientVersion, "v") ) // Errors @@ -86,7 +86,7 @@ type AppInfo struct { func (i AppInfo) userAgentSuffix() string { res := i.Name if i.Version != "" { - res += "/" + i.Version + res += "/" + strings.TrimPrefix(i.Version, "v") } return res } From f16c374ceee1f570a9fda28993c2b57b2ceb87bb Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Tue, 25 Feb 2020 13:38:20 +0100 Subject: [PATCH 52/68] Update secret not found error message --- pkg/secrethub/secret_version.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/pkg/secrethub/secret_version.go b/pkg/secrethub/secret_version.go index 8d13c827..4d193913 100644 --- a/pkg/secrethub/secret_version.go +++ b/pkg/secrethub/secret_version.go @@ -21,6 +21,7 @@ var ( ErrSecretTooBig = errClient.Code("secret_too_big").Error(fmt.Sprintf("maximum size of a secret is %s", units.BytesSize(MaxSecretSize))) ErrEmptySecret = errClient.Code("empty_secret").Error("secret is empty") ErrCannotWriteToVersion = errClient.Code("cannot_write_version").Error("cannot (over)write a specific secret version, they are append only") + ErrSecretNotFound = errClient.Code("secret_not_found").ErrorPref("cannot find secret: %s, error: %v") ) // SecretVersionService handles operations on secret versions from SecretHub. @@ -115,7 +116,13 @@ func (s secretVersionService) GetWithData(path string) (*api.SecretVersion, erro return nil, errio.Error(err) } - return s.get(secretPath, true) + secretVersion, err := s.get(secretPath, true) + if api.IsErrNotFound(err) { + return nil, ErrSecretNotFound(path, err) + } else if err != nil { + return nil, err + } + return secretVersion, nil } // GetWithoutData gets a secret version, without the sensitive data. From 1dce0fb142c8e8132a936fd90c74221c9cc182d4 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Wed, 26 Feb 2020 17:09:27 +0100 Subject: [PATCH 53/68] Change secret not found error to a status error --- pkg/secrethub/secret_version.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/secrethub/secret_version.go b/pkg/secrethub/secret_version.go index 4d193913..e8dc42df 100644 --- a/pkg/secrethub/secret_version.go +++ b/pkg/secrethub/secret_version.go @@ -2,6 +2,7 @@ package secrethub import ( "fmt" + "net/http" "github.com/secrethub/secrethub-go/pkg/secrethub/iterator" @@ -21,7 +22,7 @@ var ( ErrSecretTooBig = errClient.Code("secret_too_big").Error(fmt.Sprintf("maximum size of a secret is %s", units.BytesSize(MaxSecretSize))) ErrEmptySecret = errClient.Code("empty_secret").Error("secret is empty") ErrCannotWriteToVersion = errClient.Code("cannot_write_version").Error("cannot (over)write a specific secret version, they are append only") - ErrSecretNotFound = errClient.Code("secret_not_found").ErrorPref("cannot find secret: %s, error: %v") + ErrSecretNotFound = errClient.Code("secret_not_found").StatusErrorPref("cannot find secret: %s, error: %v", http.StatusNotFound) ) // SecretVersionService handles operations on secret versions from SecretHub. From 8a57efd8cd3196ea913736cc47093d08ec39de40 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Wed, 26 Feb 2020 18:52:45 +0100 Subject: [PATCH 54/68] Update secret not found error wrapping --- pkg/secrethub/secret_version.go | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/pkg/secrethub/secret_version.go b/pkg/secrethub/secret_version.go index e8dc42df..090fa578 100644 --- a/pkg/secrethub/secret_version.go +++ b/pkg/secrethub/secret_version.go @@ -2,8 +2,6 @@ package secrethub import ( "fmt" - "net/http" - "github.com/secrethub/secrethub-go/pkg/secrethub/iterator" units "github.com/docker/go-units" @@ -22,7 +20,7 @@ var ( ErrSecretTooBig = errClient.Code("secret_too_big").Error(fmt.Sprintf("maximum size of a secret is %s", units.BytesSize(MaxSecretSize))) ErrEmptySecret = errClient.Code("empty_secret").Error("secret is empty") ErrCannotWriteToVersion = errClient.Code("cannot_write_version").Error("cannot (over)write a specific secret version, they are append only") - ErrSecretNotFound = errClient.Code("secret_not_found").StatusErrorPref("cannot find secret: %s, error: %v", http.StatusNotFound) + ErrSecretNotFound = errClient.Code("secret_not_found").ErrorPref("cannot find secret: \"%s\": %v") ) // SecretVersionService handles operations on secret versions from SecretHub. @@ -82,7 +80,9 @@ func (s secretVersionService) Delete(path string) error { // get gets a version of a secret. withData specifies whether the encrypted data should be retrieved. func (s secretVersionService) get(path api.SecretPath, withData bool) (*api.SecretVersion, error) { blindName, err := s.client.convertPathToBlindName(path) - if err != nil { + if api.IsErrNotFound(err) { + return nil, ErrSecretNotFound(path, err) + } else if err != nil { return nil, errio.Error(err) } @@ -97,7 +97,9 @@ func (s secretVersionService) get(path api.SecretPath, withData bool) (*api.Secr } encVersion, err := s.client.httpClient.GetSecretVersion(blindName, versionParam, withData) - if err != nil { + if api.IsErrNotFound(err) { + return nil, ErrSecretNotFound(path, err) + } else if err != nil { return nil, errio.Error(err) } @@ -117,13 +119,7 @@ func (s secretVersionService) GetWithData(path string) (*api.SecretVersion, erro return nil, errio.Error(err) } - secretVersion, err := s.get(secretPath, true) - if api.IsErrNotFound(err) { - return nil, ErrSecretNotFound(path, err) - } else if err != nil { - return nil, err - } - return secretVersion, nil + return s.get(secretPath, true) } // GetWithoutData gets a secret version, without the sensitive data. From ae32fec19de0f8bf1b5196347485070d333466cf Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Tue, 3 Mar 2020 10:57:40 +0100 Subject: [PATCH 55/68] Update api.IsErrNotFound to check for secret not found errors --- internals/api/server_errors.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/internals/api/server_errors.go b/internals/api/server_errors.go index 2908d7e3..9fb3a522 100644 --- a/internals/api/server_errors.go +++ b/internals/api/server_errors.go @@ -104,9 +104,14 @@ var ( // IsErrNotFound returns whether the given error is caused by a un-existing resource. func IsErrNotFound(err error) bool { - statusError, ok := err.(errio.PublicStatusError) + publicError, ok := err.(errio.PublicError) + if ok { + return publicError.Namespace == errio.Namespace("client") && publicError.Code == "secret_not_found" + } + + publicStatusError, ok := err.(errio.PublicStatusError) if !ok { return false } - return statusError.StatusCode == 404 + return publicStatusError.StatusCode == 404 } From 05d938288d1c88f7490b5a2d796ecacd5c84a924 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Tue, 3 Mar 2020 11:05:24 +0100 Subject: [PATCH 56/68] Update fake SecretVersionService to have iterator function --- pkg/secrethub/fakeclient/secret_version.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/pkg/secrethub/fakeclient/secret_version.go b/pkg/secrethub/fakeclient/secret_version.go index fbf360c9..92eb3846 100644 --- a/pkg/secrethub/fakeclient/secret_version.go +++ b/pkg/secrethub/fakeclient/secret_version.go @@ -2,7 +2,10 @@ package fakeclient -import "github.com/secrethub/secrethub-go/internals/api" +import ( + "github.com/secrethub/secrethub-go/internals/api" + "github.com/secrethub/secrethub-go/pkg/secrethub" +) // SecretVersionService can be used to mock a SecretVersionService. type SecretVersionService struct { @@ -11,6 +14,7 @@ type SecretVersionService struct { WithoutDataGetter WithoutDataGetter WithDataLister WithDataLister WithoutDataLister WithoutDataLister + IteratorFunc func(path string, params *secrethub.SecretVersionIteratorParams) secrethub.SecretVersionIterator } // Delete implements the SecretVersionService interface Delete function. @@ -38,6 +42,10 @@ func (s *SecretVersionService) ListWithoutData(path string) ([]*api.SecretVersio return s.WithoutDataLister.ListWithoutData(path) } +func (s *SecretVersionService) Iterator(path string, params *secrethub.SecretVersionIteratorParams) secrethub.SecretVersionIterator { + return s.IteratorFunc(path, params) +} + // SecretVersionDeleter mocks the Delete function. type SecretVersionDeleter struct { ArgPath string From 99713a1ce2e172128e97628b229f19f0606bbe6f Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Tue, 3 Mar 2020 11:33:14 +0100 Subject: [PATCH 57/68] Add human-readable charset --- pkg/randchar/generator.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkg/randchar/generator.go b/pkg/randchar/generator.go index 588a280a..ea880ddf 100644 --- a/pkg/randchar/generator.go +++ b/pkg/randchar/generator.go @@ -263,6 +263,8 @@ func CharsetByName(charsetName string) (Charset, bool) { return All, true case "similar": return Similar, true + case "human-readable": + return Alphanumeric.Subtract(Similar), true default: return Charset{}, false } From 886ad558b7ab490fadd7945d99a33add3c6a9a79 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Wed, 4 Mar 2020 11:59:27 +0100 Subject: [PATCH 58/68] Add human readable charset as global variable --- pkg/randchar/generator.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkg/randchar/generator.go b/pkg/randchar/generator.go index ea880ddf..3115b199 100644 --- a/pkg/randchar/generator.go +++ b/pkg/randchar/generator.go @@ -34,6 +34,8 @@ var ( All = Alphanumeric.Add(Symbols) // Similar defines a character set containing similar looking characters. Similar = NewCharset("iIlL1oO0") + // HumanReadable defines a character set containing all alphanumeric characters except the similar ones. + HumanReadable = Alphanumeric.Subtract(Similar) // DefaultRand defines the default random generator to use. You can create // your own generators using NewRand. @@ -264,7 +266,7 @@ func CharsetByName(charsetName string) (Charset, bool) { case "similar": return Similar, true case "human-readable": - return Alphanumeric.Subtract(Similar), true + return HumanReadable, true default: return Charset{}, false } From daea8df559835e8dae4ee8391d6f85aabc0327d6 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Wed, 4 Mar 2020 13:50:15 +0100 Subject: [PATCH 59/68] Update SecretNotFoundError --- internals/api/server_errors.go | 9 +++------ pkg/secrethub/secret_version.go | 18 +++++++++++++++--- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/internals/api/server_errors.go b/internals/api/server_errors.go index 9fb3a522..15c633c6 100644 --- a/internals/api/server_errors.go +++ b/internals/api/server_errors.go @@ -1,6 +1,7 @@ package api import ( + "errors" "net/http" "fmt" @@ -104,12 +105,8 @@ var ( // IsErrNotFound returns whether the given error is caused by a un-existing resource. func IsErrNotFound(err error) bool { - publicError, ok := err.(errio.PublicError) - if ok { - return publicError.Namespace == errio.Namespace("client") && publicError.Code == "secret_not_found" - } - - publicStatusError, ok := err.(errio.PublicStatusError) + var publicStatusError errio.PublicStatusError + ok := errors.As(err, &publicStatusError) if !ok { return false } diff --git a/pkg/secrethub/secret_version.go b/pkg/secrethub/secret_version.go index 090fa578..0a45ae13 100644 --- a/pkg/secrethub/secret_version.go +++ b/pkg/secrethub/secret_version.go @@ -20,9 +20,21 @@ var ( ErrSecretTooBig = errClient.Code("secret_too_big").Error(fmt.Sprintf("maximum size of a secret is %s", units.BytesSize(MaxSecretSize))) ErrEmptySecret = errClient.Code("empty_secret").Error("secret is empty") ErrCannotWriteToVersion = errClient.Code("cannot_write_version").Error("cannot (over)write a specific secret version, they are append only") - ErrSecretNotFound = errClient.Code("secret_not_found").ErrorPref("cannot find secret: \"%s\": %v") ) +type errSecretNotFound struct { + path api.SecretPath + err error +} + +func (e *errSecretNotFound) Error() string { + return fmt.Sprintf("cannot find secret: \"%s\": %v", e.path, e.err) +} + +func (e *errSecretNotFound) Unwrap() error { + return e.err +} + // SecretVersionService handles operations on secret versions from SecretHub. type SecretVersionService interface { // GetWithData gets a secret version, with the sensitive data. @@ -81,7 +93,7 @@ func (s secretVersionService) Delete(path string) error { func (s secretVersionService) get(path api.SecretPath, withData bool) (*api.SecretVersion, error) { blindName, err := s.client.convertPathToBlindName(path) if api.IsErrNotFound(err) { - return nil, ErrSecretNotFound(path, err) + return nil, &errSecretNotFound{path:path, err:err} } else if err != nil { return nil, errio.Error(err) } @@ -98,7 +110,7 @@ func (s secretVersionService) get(path api.SecretPath, withData bool) (*api.Secr encVersion, err := s.client.httpClient.GetSecretVersion(blindName, versionParam, withData) if api.IsErrNotFound(err) { - return nil, ErrSecretNotFound(path, err) + return nil, &errSecretNotFound{path:path, err:err} } else if err != nil { return nil, errio.Error(err) } From 0cc8bde1ca0eebcd47caf146d162cfc7b9b3109e Mon Sep 17 00:00:00 2001 From: Simon Barendse Date: Wed, 4 Mar 2020 14:27:50 +0100 Subject: [PATCH 60/68] goimports Co-Authored-By: Bot from GolangCI <42910462+golangcibot@users.noreply.github.com> --- pkg/secrethub/secret_version.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/secrethub/secret_version.go b/pkg/secrethub/secret_version.go index 0a45ae13..eb5fbc50 100644 --- a/pkg/secrethub/secret_version.go +++ b/pkg/secrethub/secret_version.go @@ -24,7 +24,7 @@ var ( type errSecretNotFound struct { path api.SecretPath - err error + err error } func (e *errSecretNotFound) Error() string { From f0950a784271ec613eba2b40298845eeeb8ade50 Mon Sep 17 00:00:00 2001 From: Simon Barendse Date: Wed, 4 Mar 2020 14:36:09 +0100 Subject: [PATCH 61/68] gofmt Co-Authored-By: Bot from GolangCI <42910462+golangcibot@users.noreply.github.com> --- pkg/secrethub/secret_version.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/secrethub/secret_version.go b/pkg/secrethub/secret_version.go index eb5fbc50..524eb618 100644 --- a/pkg/secrethub/secret_version.go +++ b/pkg/secrethub/secret_version.go @@ -93,7 +93,7 @@ func (s secretVersionService) Delete(path string) error { func (s secretVersionService) get(path api.SecretPath, withData bool) (*api.SecretVersion, error) { blindName, err := s.client.convertPathToBlindName(path) if api.IsErrNotFound(err) { - return nil, &errSecretNotFound{path:path, err:err} + return nil, &errSecretNotFound{path: path, err: err} } else if err != nil { return nil, errio.Error(err) } From b6684c009f1bc4acc496a668f6589560d868f44f Mon Sep 17 00:00:00 2001 From: Simon Barendse Date: Wed, 4 Mar 2020 14:38:28 +0100 Subject: [PATCH 62/68] gofmt Co-Authored-By: Bot from GolangCI <42910462+golangcibot@users.noreply.github.com> --- pkg/secrethub/secret_version.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/secrethub/secret_version.go b/pkg/secrethub/secret_version.go index 524eb618..1c1d2c1c 100644 --- a/pkg/secrethub/secret_version.go +++ b/pkg/secrethub/secret_version.go @@ -110,7 +110,7 @@ func (s secretVersionService) get(path api.SecretPath, withData bool) (*api.Secr encVersion, err := s.client.httpClient.GetSecretVersion(blindName, versionParam, withData) if api.IsErrNotFound(err) { - return nil, &errSecretNotFound{path:path, err:err} + return nil, &errSecretNotFound{path: path, err: err} } else if err != nil { return nil, errio.Error(err) } From a55bae127bbdd2616883ba77d6b5340b4028be6c Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Thu, 5 Mar 2020 17:24:48 +0100 Subject: [PATCH 63/68] Refactor fakeclient to use functions --- pkg/secrethub/fakeclient/accessrule.go | 99 ++-------------- pkg/secrethub/fakeclient/account.go | 29 ++--- pkg/secrethub/fakeclient/dir.go | 52 +-------- pkg/secrethub/fakeclient/org.go | 74 ++---------- pkg/secrethub/fakeclient/org_member.go | 103 +++-------------- pkg/secrethub/fakeclient/repo.go | 128 +++------------------ pkg/secrethub/fakeclient/repo_service.go | 20 +--- pkg/secrethub/fakeclient/repo_user.go | 58 ++-------- pkg/secrethub/fakeclient/secret.go | 18 ++- pkg/secrethub/fakeclient/secret_version.go | 86 ++------------ pkg/secrethub/fakeclient/service.go | 61 ++-------- pkg/secrethub/fakeclient/service_aws.go | 25 +--- pkg/secrethub/fakeclient/user.go | 53 +-------- 13 files changed, 117 insertions(+), 689 deletions(-) diff --git a/pkg/secrethub/fakeclient/accessrule.go b/pkg/secrethub/fakeclient/accessrule.go index 19799bb5..966a32d0 100644 --- a/pkg/secrethub/fakeclient/accessrule.go +++ b/pkg/secrethub/fakeclient/accessrule.go @@ -9,12 +9,11 @@ import ( // AccessRuleService is a mock of the AccessRuleService interface. type AccessRuleService struct { - Deleter *AccessRuleDeleter - Getter *AccessRuleGetter - Lister *AccessRuleLister - LevelLister *AccessLevelLister - Setter AccessRuleSetter - + DeleteFunc func(path string, accountName string) error + GetFunc func(path string, accountName string) (*api.AccessRule, error) + ListLevelsFunc func(path string) ([]*api.AccessLevel, error) + ListFunc func(path string, depth int, ancestors bool) ([]*api.AccessRule, error) + SetFunc func(path string, permission string, accountName string) (*api.AccessRule, error) IteratorFunc func() secrethub.AccessRuleIterator LevelIteratorFunc func() secrethub.AccessLevelIterator } @@ -29,101 +28,25 @@ func (s *AccessRuleService) LevelIterator(path string, _ *secrethub.AccessLevelI // Delete implements the AccessRuleService interface Delete function. func (s *AccessRuleService) Delete(path string, accountName string) error { - return s.Deleter.Delete(path, accountName) + return s.DeleteFunc(path, accountName) } // Get implements the AccessRuleService interface Get function. func (s *AccessRuleService) Get(path string, accountName string) (*api.AccessRule, error) { - return s.Getter.Get(path, accountName) + return s.GetFunc(path, accountName) } // ListLevels implements the AccessRuleService interface ListLevels function. func (s *AccessRuleService) ListLevels(path string) ([]*api.AccessLevel, error) { - return s.LevelLister.ListLevels(path) + return s.ListLevelsFunc(path) } // List implements the AccessRuleService interface List function. func (s *AccessRuleService) List(path string, depth int, ancestors bool) ([]*api.AccessRule, error) { - return s.Lister.List(path, depth, ancestors) + return s.ListFunc(path, depth, ancestors) } // Set implements the AccessRuleService interface Set function. func (s *AccessRuleService) Set(path string, permission string, accountName string) (*api.AccessRule, error) { - return s.Setter.Set(path, permission, accountName) -} - -// AccessRuleDeleter mocks the Delete function. -type AccessRuleDeleter struct { - ArgPath string - ArgAccountName string - Err error -} - -// Delete saves the arguments it was called with and returns the mocked response. -func (d *AccessRuleDeleter) Delete(path string, accountName string) error { - d.ArgPath = path - d.ArgAccountName = accountName - return d.Err -} - -// AccessRuleGetter mocks the Get function. -type AccessRuleGetter struct { - ArgPath string - ArgAccountName string - ReturnsAccessRule *api.AccessRule - Err error -} - -// Get saves the arguments it was called with and returns the mocked response. -func (g *AccessRuleGetter) Get(path string, accountName string) (*api.AccessRule, error) { - g.ArgPath = path - g.ArgAccountName = accountName - return g.ReturnsAccessRule, g.Err -} - -// AccessLevelLister mocks the ListLevels function. -type AccessLevelLister struct { - ArgPath string - ReturnsAccessLevels []*api.AccessLevel - Err error -} - -// ListLevels saves the arguments it was called with and returns the mocked response. -func (l *AccessLevelLister) ListLevels(path string) ([]*api.AccessLevel, error) { - l.ArgPath = path - return l.ReturnsAccessLevels, l.Err -} - -// AccessRuleSetter mocks the Set function. -type AccessRuleSetter struct { - ArgPath string - ArgPermission string - ArgName string - ReturnsAccessRule *api.AccessRule - Err error -} - -// Set saves the arguments it was called with and returns the mocked response. -func (s *AccessRuleSetter) Set(path string, permission string, name string) (*api.AccessRule, error) { - s.ArgPath = path - s.ArgPermission = permission - s.ArgName = name - return s.ReturnsAccessRule, s.Err -} - -// AccessRuleLister mocks the List function. -type AccessRuleLister struct { - ArgPath string - ArgDepth int - ArgAncestors bool - ReturnsAccessRules []*api.AccessRule - Err error -} - -// List saves the arguments it was called with and returns the mocked response. -func (s *AccessRuleLister) List(path string, depth int, ancestors bool) ([]*api.AccessRule, error) { - s.ArgPath = path - s.ArgDepth = depth - s.ArgAncestors = ancestors - return s.ReturnsAccessRules, s.Err -} + return s.SetFunc(path, permission, accountName) +} \ No newline at end of file diff --git a/pkg/secrethub/fakeclient/account.go b/pkg/secrethub/fakeclient/account.go index 69bfa8b5..5cc048c0 100644 --- a/pkg/secrethub/fakeclient/account.go +++ b/pkg/secrethub/fakeclient/account.go @@ -9,28 +9,15 @@ import ( // AccountService is a mock of the AccountService interface. type AccountService struct { - Getter AccountGetter + GetFunc func(name string) (*api.Account, error) + AccountKeyService secrethub.AccountKeyService } -// Get implements the AccountService interface Get function. -func (s *AccountService) Get(name string) (*api.Account, error) { - return s.Getter.Get(name) -} - -// AccountGetter mocks the Get function. -type AccountGetter struct { - ArgName string - ReturnsAccount *api.Account - Err error -} - -// Get saves the arguments it was called with and returns the mocked response. -func (g *AccountGetter) Get(name string) (*api.Account, error) { - g.ArgName = name - return g.ReturnsAccount, g.Err -} - -// Keys implements the AccountService interface. func (s *AccountService) Keys() secrethub.AccountKeyService { - return nil + return s.AccountKeyService } + +// Get implements the AccountService interface Get function. +func (s *AccountService) Get(name string) (*api.Account, error) { + return s.GetFunc(name) +} \ No newline at end of file diff --git a/pkg/secrethub/fakeclient/dir.go b/pkg/secrethub/fakeclient/dir.go index 196b9357..4dc82edf 100644 --- a/pkg/secrethub/fakeclient/dir.go +++ b/pkg/secrethub/fakeclient/dir.go @@ -9,16 +9,16 @@ import ( // DirService is a mock of the DirService interface. type DirService struct { - Creater DirCreater - Deleter DirDeleter - TreeGetter TreeGetter + CreateFunc func(path string) (*api.Dir, error) ExistsFunc func(path string) (bool, error) + DeleteFunc func(path string) error + GetTreeFunc func(path string, depth int, ancestors bool) (*api.Tree, error) secrethub.DirService } // Create implements the DirService interface Create function. func (s *DirService) Create(path string) (*api.Dir, error) { - return s.Creater.Create(path) + return s.CreateFunc(path) } // Exists implements the DirService interface Exists function. @@ -28,50 +28,10 @@ func (s *DirService) Exists(path string) (bool, error) { // Delete implements the DirService interface Delete function. func (s *DirService) Delete(path string) error { - return s.Deleter.Delete(path) + return s.DeleteFunc(path) } // GetTree implements the DirService interface GetTree function. func (s *DirService) GetTree(path string, depth int, ancestors bool) (*api.Tree, error) { - return s.TreeGetter.GetTree(path, depth) -} - -// DirCreater mocks the Create function. -type DirCreater struct { - ArgPath string - ReturnsDir *api.Dir - Err error -} - -// Create saves the arguments it was called with and returns the mocked response. -func (dc *DirCreater) Create(path string) (*api.Dir, error) { - dc.ArgPath = path - return dc.ReturnsDir, dc.Err -} - -// DirDeleter mocks the Delete function. -type DirDeleter struct { - ArgPath string - Err error -} - -// Delete saves the arguments it was called with and returns the mocked response. -func (d *DirDeleter) Delete(path string) error { - d.ArgPath = path - return d.Err -} - -// TreeGetter mocks the Get function. -type TreeGetter struct { - ArgPath string - ArgDepth int - ReturnsTree *api.Tree - Err error -} - -// GetTree saves the arguments it was called with and returns the mocked response. -func (dg *TreeGetter) GetTree(path string, depth int) (*api.Tree, error) { - dg.ArgPath = path - dg.ArgDepth = depth - return dg.ReturnsTree, dg.Err + return s.GetTreeFunc(path, depth, ancestors) } diff --git a/pkg/secrethub/fakeclient/org.go b/pkg/secrethub/fakeclient/org.go index 0f843186..bb6f4b1c 100644 --- a/pkg/secrethub/fakeclient/org.go +++ b/pkg/secrethub/fakeclient/org.go @@ -9,13 +9,12 @@ import ( // OrgService is a mock of the RepoService interface. type OrgService struct { - Creater OrgCreater - Deleter OrgDeleter - Getter OrgGetter - MemberService *OrgMemberService - MineLister OrgMineLister - - IteratorFunc func(_ *secrethub.OrgIteratorParams) secrethub.OrgIterator + CreateFunc func(name string, description string) (*api.Org, error) + DeleteFunc func(name string) error + GetFunc func(name string) (*api.Org, error) + MembersService secrethub.OrgMemberService + ListMineFunc func() ([]*api.Org, error) + IteratorFunc func(params *secrethub.OrgIteratorParams) secrethub.OrgIterator } func (s *OrgService) Iterator(params *secrethub.OrgIteratorParams) secrethub.OrgIterator { @@ -24,76 +23,25 @@ func (s *OrgService) Iterator(params *secrethub.OrgIteratorParams) secrethub.Org // Create implements the RepoService interface Create function. func (s *OrgService) Create(name string, description string) (*api.Org, error) { - return s.Creater.Create(name, description) + return s.CreateFunc(name, description) } // Delete implements the RepoService interface Delete function. func (s *OrgService) Delete(name string) error { - return s.Deleter.Delete(name) + return s.DeleteFunc(name) } // Get implements the RepoService interface Get function. func (s *OrgService) Get(name string) (*api.Org, error) { - return s.Getter.Get(name) + return s.GetFunc(name) } // Members returns a mock of the OrgMemberService interface. func (s *OrgService) Members() secrethub.OrgMemberService { - return s.MemberService + return s.MembersService } // ListMine implements the RepoService interface ListMine function. func (s *OrgService) ListMine() ([]*api.Org, error) { - return s.MineLister.ListMine() -} - -// OrgCreater mocks the Create function. -type OrgCreater struct { - ArgName string - ArgDescription string - ReturnsOrg *api.Org - Err error -} - -// Create saves the arguments it was called with and returns the mocked response. -func (c *OrgCreater) Create(name string, description string) (*api.Org, error) { - c.ArgName = name - c.ArgDescription = description - return c.ReturnsOrg, c.Err -} - -// OrgDeleter mocks the Delete function. -type OrgDeleter struct { - ArgName string - Err error -} - -// Delete saves the arguments it was called with and returns the mocked response. -func (d *OrgDeleter) Delete(name string) error { - d.ArgName = name - return d.Err -} - -// OrgGetter mocks the Get function. -type OrgGetter struct { - ArgName string - ReturnsOrg *api.Org - Err error -} - -// Get saves the arguments it was called with and returns the mocked response. -func (g *OrgGetter) Get(name string) (*api.Org, error) { - g.ArgName = name - return g.ReturnsOrg, g.Err -} - -// OrgMineLister mocks the ListMine function. -type OrgMineLister struct { - ReturnsOrgs []*api.Org - Err error -} - -// ListMine returns the mocked response. -func (m *OrgMineLister) ListMine() ([]*api.Org, error) { - return m.ReturnsOrgs, m.Err + return s.ListMineFunc() } diff --git a/pkg/secrethub/fakeclient/org_member.go b/pkg/secrethub/fakeclient/org_member.go index 50ebabbb..acc97b6e 100644 --- a/pkg/secrethub/fakeclient/org_member.go +++ b/pkg/secrethub/fakeclient/org_member.go @@ -9,103 +9,34 @@ import ( // OrgMemberService is a mock of the OrgMemberService interface. type OrgMemberService struct { - Inviter OrgInviter - Lister OrgMemberLister - Revoker OrgMemberRevoker - Updater OrgMemberUpdater - - IteratorFunc func() secrethub.OrgMemberIterator -} - -func (s *OrgMemberService) Iterator(org string, _ *secrethub.OrgMemberIteratorParams) secrethub.OrgMemberIterator { - return s.IteratorFunc() -} - -// Get implements the OrgMemberService interface Get function. -func (s *OrgMemberService) Get(org string, username string) (*api.OrgMember, error) { - return nil, nil + InviteFunc func(org string, username string, role string) (*api.OrgMember, error) + GetFunc func(org string, username string) (*api.OrgMember, error) + UpdateFunc func(org string, username string, role string) (*api.OrgMember, error) + RevokeFunc func(org string, username string, opts *api.RevokeOpts) (*api.RevokeOrgResponse, error) + ListFunc func(org string) ([]*api.OrgMember, error) + IteratorFunc func(org string, params *secrethub.OrgMemberIteratorParams) secrethub.OrgMemberIterator } -// Invite implements the OrgMemberService interface Invite function. func (s *OrgMemberService) Invite(org string, username string, role string) (*api.OrgMember, error) { - return s.Inviter.Invite(org, username, role) -} - -// List implements the OrgMemberService interface List function. -func (s *OrgMemberService) List(name string) ([]*api.OrgMember, error) { - return s.Lister.List(name) -} - -// Revoke implements the OrgMemberService interface Revoke function. -func (s *OrgMemberService) Revoke(name string, username string, opts *api.RevokeOpts) (*api.RevokeOrgResponse, error) { - return s.Revoker.Revoke(name, username, opts) + return s.InviteFunc(org, username, role) } -// Update implements the OrgMemberService interface Update function. -func (s *OrgMemberService) Update(orgName string, username string, role string) (*api.OrgMember, error) { - return s.Updater.Update(orgName, username, role) -} - -// OrgInviter mocks the Invite function. -type OrgInviter struct { - ArgOrg string - ArgUsername string - ArgRole string - ReturnsOrgMember *api.OrgMember - Err error -} - -// Invite saves the arguments it was called with and returns the mocked response. -func (l *OrgInviter) Invite(org string, username string, role string) (*api.OrgMember, error) { - l.ArgOrg = org - l.ArgUsername = username - l.ArgRole = role - return l.ReturnsOrgMember, l.Err -} - -// OrgMemberLister mocks the List function. -type OrgMemberLister struct { - ArgName string - ReturnsMembers []*api.OrgMember - Err error -} - -// List saves the arguments it was called with and returns the mocked response. -func (l *OrgMemberLister) List(name string) ([]*api.OrgMember, error) { - l.ArgName = name - return l.ReturnsMembers, l.Err +func (s *OrgMemberService) Get(org string, username string) (*api.OrgMember, error) { + return s.GetFunc(org, username) } -// OrgMemberRevoker mocks the Revoke function. -type OrgMemberRevoker struct { - ArgOrgName string - ArgUsername string - ArgOpts *api.RevokeOpts - ReturnsRevokeOrgResponse *api.RevokeOrgResponse - Err error +func (s *OrgMemberService) Update(org string, username string, role string) (*api.OrgMember, error) { + return s.UpdateFunc(org, username, role) } -// Revoke saves the arguments it was called with and returns the mocked response. -func (r *OrgMemberRevoker) Revoke(orgName string, username string, opts *api.RevokeOpts) (*api.RevokeOrgResponse, error) { - r.ArgOrgName = orgName - r.ArgUsername = username - r.ArgOpts = opts - return r.ReturnsRevokeOrgResponse, r.Err +func (s *OrgMemberService) Revoke(org string, username string, opts *api.RevokeOpts) (*api.RevokeOrgResponse, error) { + return s.RevokeFunc(org, username, opts) } -// OrgMemberUpdater mocks the Update function. -type OrgMemberUpdater struct { - ArgOrgName string - ArgUsername string - ArgRole string - ReturnsOrgMember *api.OrgMember - Err error +func (s *OrgMemberService) List(org string) ([]*api.OrgMember, error) { + return s.ListFunc(org) } -// Update saves the arguments it was called with and returns the mocked response. -func (u *OrgMemberUpdater) Update(orgName string, username string, role string) (*api.OrgMember, error) { - u.ArgOrgName = orgName - u.ArgUsername = username - u.ArgRole = role - return u.ReturnsOrgMember, u.Err +func (s *OrgMemberService) Iterator(org string, params *secrethub.OrgMemberIteratorParams) secrethub.OrgMemberIterator { + return s.IteratorFunc(org, params) } diff --git a/pkg/secrethub/fakeclient/repo.go b/pkg/secrethub/fakeclient/repo.go index dc8d3fd5..a17a325a 100644 --- a/pkg/secrethub/fakeclient/repo.go +++ b/pkg/secrethub/fakeclient/repo.go @@ -9,34 +9,32 @@ import ( // RepoService is a mock of the RepoService interface. type RepoService struct { - AccountLister RepoAccountLister - Creater RepoCreater - Deleter RepoDeleter - Getter RepoGetter - EventLister RepoEventLister - Lister RepoLister - UserService *RepoUserService - ServiceService *RepoServiceService - MineLister RepoMineLister - + ListFunc func(namespace string) ([]*api.Repo, error) + ListAccountsFunc func(path string) ([]*api.Account, error) + ListEventsFunc func(path string, subjectTypes api.AuditSubjectTypeList) ([]*api.Audit, error) + ListMineFunc func() ([]*api.Repo, error) + CreateFunc func(path string) (*api.Repo, error) + DeleteFunc func(path string) error + GetFunc func(path string) (*api.Repo, error) + UserService secrethub.RepoUserService + RepoServiceService secrethub.RepoServiceService AuditEventIterator *AuditEventIterator - secrethub.RepoService } // List implements the RepoService interface List function. func (s *RepoService) List(namespace string) ([]*api.Repo, error) { - return s.Lister.List(namespace) + return s.ListFunc(namespace) } // ListAccounts implements the RepoService interface ListAccounts function. func (s *RepoService) ListAccounts(path string) ([]*api.Account, error) { - return s.AccountLister.ListAccounts(path) + return s.ListAccountsFunc(path) } // ListEvents implements the RepoService interface ListEvents function. func (s *RepoService) ListEvents(path string, subjectTypes api.AuditSubjectTypeList) ([]*api.Audit, error) { - return s.EventLister.ListEvents(path, subjectTypes) + return s.ListEventsFunc(path, subjectTypes) } // EventIterator implements the RepoService interface EventIterator function. @@ -46,22 +44,22 @@ func (s *RepoService) EventIterator(path string, config *secrethub.AuditEventIte // ListMine implements the RepoService interface ListMine function. func (s *RepoService) ListMine() ([]*api.Repo, error) { - return s.MineLister.ListMine() + return s.ListMineFunc() } // Create implements the RepoService interface Create function. func (s *RepoService) Create(path string) (*api.Repo, error) { - return s.Creater.Create(path) + return s.CreateFunc(path) } // Delete implements the RepoService interface Delete function. func (s *RepoService) Delete(path string) error { - return s.Deleter.Delete(path) + return s.DeleteFunc(path) } // Get implements the RepoService interface Get function. func (s *RepoService) Get(path string) (*api.Repo, error) { - return s.Getter.Get(path) + return s.GetFunc(path) } // Users returns the mocked UserService. @@ -71,95 +69,5 @@ func (s *RepoService) Users() secrethub.RepoUserService { // Services returns the mocked RepoServiceService. func (s *RepoService) Services() secrethub.RepoServiceService { - return s.ServiceService -} - -// RepoDeleter mocks the Delete function. -type RepoDeleter struct { - ArgPath string - Err error -} - -// Delete saves the arguments it was called with and returns the mocked response. -func (d *RepoDeleter) Delete(path string) error { - d.ArgPath = path - return d.Err -} - -// RepoGetter mocks the Get function. -type RepoGetter struct { - ArgPath string - ReturnsRepo *api.Repo - Err error -} - -// Get saves the arguments it was called with and returns the mocked response. -func (g *RepoGetter) Get(path string) (*api.Repo, error) { - g.ArgPath = path - return g.ReturnsRepo, g.Err -} - -// RepoLister mocks the List function. -type RepoLister struct { - ArgNamespace string - ReturnsRepos []*api.Repo - Err error -} - -// List saves the argument it was called with and returns the mocked response. -func (g *RepoLister) List(namespace string) ([]*api.Repo, error) { - g.ArgNamespace = namespace - return g.ReturnsRepos, g.Err -} - -// RepoEventLister mocks the ListEvents function. -type RepoEventLister struct { - ArgPath string - ArgSubjectTypes api.AuditSubjectTypeList - ReturnsAuditEvents []*api.Audit - Err error -} - -// ListEvents saves the arguments it was called with and returns the mocked response. -func (el *RepoEventLister) ListEvents(path string, subjectTypes api.AuditSubjectTypeList) ([]*api.Audit, error) { - el.ArgPath = path - el.ArgSubjectTypes = subjectTypes - return el.ReturnsAuditEvents, el.Err -} - -// RepoCreater mocks the Create function. -type RepoCreater struct { - Argpath string - ReturnsRepo *api.Repo - Err error -} - -// Create saves the arguments it was called with and returns the mocked response. -func (creater *RepoCreater) Create(path string) (*api.Repo, error) { - creater.Argpath = path - return creater.ReturnsRepo, creater.Err -} - -// RepoAccountLister mocks the ListAccounts function. -type RepoAccountLister struct { - ArgPath string - ReturnsAccounts []*api.Account - Err error -} - -// ListAccounts saves the arguments it was called with and returns the mocked response. -func (l *RepoAccountLister) ListAccounts(path string) ([]*api.Account, error) { - l.ArgPath = path - return l.ReturnsAccounts, l.Err -} - -// RepoMineLister mocks the ListMine function. -type RepoMineLister struct { - ReturnsRepos []*api.Repo - Err error -} - -// ListMine returns the mocked response. -func (m *RepoMineLister) ListMine() ([]*api.Repo, error) { - return m.ReturnsRepos, m.Err -} + return s.RepoServiceService +} \ No newline at end of file diff --git a/pkg/secrethub/fakeclient/repo_service.go b/pkg/secrethub/fakeclient/repo_service.go index 56963206..eae53af6 100644 --- a/pkg/secrethub/fakeclient/repo_service.go +++ b/pkg/secrethub/fakeclient/repo_service.go @@ -9,8 +9,7 @@ import ( // RepoServiceService is a mock of the RepoServiceService interface. type RepoServiceService struct { - Lister RepoServiceLister - + ListFunc func(path string) ([]*api.Service, error) IteratorFunc func() secrethub.ServiceIterator } @@ -20,18 +19,5 @@ func (s *RepoServiceService) Iterator(path string, _ *secrethub.RepoServiceItera // List implements the RepoServiceService interface List function. func (s *RepoServiceService) List(path string) ([]*api.Service, error) { - return s.Lister.List(path) -} - -// RepoServiceLister mocks the List function. -type RepoServiceLister struct { - ArgPath string - ReturnsServices []*api.Service - Err error -} - -// List saves the arguments it was called with and returns the mocked response. -func (l *RepoServiceLister) List(path string) ([]*api.Service, error) { - l.ArgPath = path - return l.ReturnsServices, l.Err -} + return s.ListFunc(path) +} \ No newline at end of file diff --git a/pkg/secrethub/fakeclient/repo_user.go b/pkg/secrethub/fakeclient/repo_user.go index cc3f0ee8..edd344cb 100644 --- a/pkg/secrethub/fakeclient/repo_user.go +++ b/pkg/secrethub/fakeclient/repo_user.go @@ -9,10 +9,9 @@ import ( // RepoUserService is a mock of the RepoUserService interface. type RepoUserService struct { - RepoInviter RepoInviter - Lister RepoUserLister - Revoker RepoRevoker - + InviteFunc func(path string, username string) (*api.RepoMember, error) + ListFunc func(path string) ([]*api.User, error) + RevokeFunc func(path string, username string) (*api.RevokeRepoResponse, error) IteratorFunc func() secrethub.UserIterator } @@ -22,58 +21,15 @@ func (s *RepoUserService) Iterator(path string, params *secrethub.UserIteratorPa // Invite implements the RepoUserService interface Invite function. func (s *RepoUserService) Invite(path string, username string) (*api.RepoMember, error) { - return s.RepoInviter.Invite(path, username) + return s.InviteFunc(path, username) } // List implements the RepoUserService interface List function. func (s *RepoUserService) List(path string) ([]*api.User, error) { - return s.Lister.List(path) + return s.ListFunc(path) } // Revoke implements the RepoUserService interface Revoke function. func (s *RepoUserService) Revoke(path string, username string) (*api.RevokeRepoResponse, error) { - return s.Revoker.Revoke(path, username) -} - -// RepoUserLister mocks the List function. -type RepoUserLister struct { - ArgPath string - ReturnsUsers []*api.User - Err error -} - -// List saves the arguments it was called with and returns the mocked response. -func (l *RepoUserLister) List(path string) ([]*api.User, error) { - l.ArgPath = path - return l.ReturnsUsers, l.Err -} - -// RepoInviter mocks the Invite function. -type RepoInviter struct { - ArgPath string - ArgUsername string - ReturnsRepoMember *api.RepoMember - Err error -} - -// Invite saves the arguments it was called with and returns the mocked response. -func (i *RepoInviter) Invite(path string, username string) (*api.RepoMember, error) { - i.ArgPath = path - i.ArgUsername = username - return i.ReturnsRepoMember, i.Err -} - -// RepoRevoker mocks the Revoke function. -type RepoRevoker struct { - ArgPath string - ArgUsername string - ReturnsRevokeResponse *api.RevokeRepoResponse - Err error -} - -// Revoke saves the arguments it was called with and returns the mocked response. -func (r *RepoRevoker) Revoke(path string, username string) (*api.RevokeRepoResponse, error) { - r.ArgPath = path - r.ArgUsername = username - return r.ReturnsRevokeResponse, r.Err -} + return s.RevokeFunc(path, username) +} \ No newline at end of file diff --git a/pkg/secrethub/fakeclient/secret.go b/pkg/secrethub/fakeclient/secret.go index 31c041c9..a4aaaf22 100644 --- a/pkg/secrethub/fakeclient/secret.go +++ b/pkg/secrethub/fakeclient/secret.go @@ -10,12 +10,10 @@ import ( // SecretService is a mock of the SecretService interface. type SecretService struct { VersionService secrethub.SecretVersionService - - Deleter SecretDeleter - Getter SecretGetter - EventLister SecretEventLister - Writer Writer - + DeleteFunc func(path string) error + GetFunc func(path string) (*api.Secret, error) + WriteFunc func(path string, data []byte) (*api.SecretVersion, error) + ListEventsFunc func(path string, subjectTypes api.AuditSubjectTypeList) ([]*api.Audit, error) AuditEventIterator *AuditEventIterator secrethub.SecretService @@ -23,7 +21,7 @@ type SecretService struct { // Delete implements the SecretService interface Delete function. func (s *SecretService) Delete(path string) error { - return s.Deleter.Delete(path) + return s.DeleteFunc(path) } // Exists implements the SecretService interface Exists function. @@ -33,17 +31,17 @@ func (s *SecretService) Exists(path string) (bool, error) { // Get implements the SecretService interface Get function. func (s *SecretService) Get(path string) (*api.Secret, error) { - return s.Getter.Get(path) + return s.GetFunc(path) } // Write implements the SecretService interface Write function. func (s *SecretService) Write(path string, data []byte) (*api.SecretVersion, error) { - return s.Writer.Write(path, data) + return s.WriteFunc(path, data) } // ListEvents implements the SecretService interface ListEvents function. func (s *SecretService) ListEvents(path string, subjectTypes api.AuditSubjectTypeList) ([]*api.Audit, error) { - return s.EventLister.ListEvents(path, subjectTypes) + return s.ListEventsFunc(path, subjectTypes) } // EventIterator implements the SecretService interface EventIterator function. diff --git a/pkg/secrethub/fakeclient/secret_version.go b/pkg/secrethub/fakeclient/secret_version.go index 92eb3846..34c5ab78 100644 --- a/pkg/secrethub/fakeclient/secret_version.go +++ b/pkg/secrethub/fakeclient/secret_version.go @@ -9,103 +9,39 @@ import ( // SecretVersionService can be used to mock a SecretVersionService. type SecretVersionService struct { - Deleter SecretVersionDeleter - WithDataGetter WithDataGetter - WithoutDataGetter WithoutDataGetter - WithDataLister WithDataLister - WithoutDataLister WithoutDataLister + DeleteFunc func(path string) error + GetWithDataFunc func(path string) (*api.SecretVersion, error) + GetWithoutDataFunc func(path string) (*api.SecretVersion, error) + ListWithDataFunc func(path string) ([]*api.SecretVersion, error) + ListWithoutDataFunc func(path string) ([]*api.SecretVersion, error) IteratorFunc func(path string, params *secrethub.SecretVersionIteratorParams) secrethub.SecretVersionIterator } // Delete implements the SecretVersionService interface Delete function. func (s *SecretVersionService) Delete(path string) error { - return s.Deleter.Delete(path) + return s.DeleteFunc(path) } // GetWithData implements the SecretVersionService interface GetWithData function. func (s *SecretVersionService) GetWithData(path string) (*api.SecretVersion, error) { - return s.WithDataGetter.GetWithData(path) + return s.GetWithDataFunc(path) } // GetWithoutData implements the SecretVersionService interface GetWithoutData function. func (s *SecretVersionService) GetWithoutData(path string) (*api.SecretVersion, error) { - return s.WithoutDataGetter.GetWithoutData(path) + return s.GetWithoutDataFunc(path) } // ListWithData implements the SecretVersionService interface ListWithData function. func (s *SecretVersionService) ListWithData(path string) ([]*api.SecretVersion, error) { - return s.WithDataLister.ListWithData(path) + return s.ListWithDataFunc(path) } // ListWithoutData implements the SecretVersionService interface ListWithoutData function. func (s *SecretVersionService) ListWithoutData(path string) ([]*api.SecretVersion, error) { - return s.WithoutDataLister.ListWithoutData(path) + return s.ListWithoutDataFunc(path) } func (s *SecretVersionService) Iterator(path string, params *secrethub.SecretVersionIteratorParams) secrethub.SecretVersionIterator { return s.IteratorFunc(path, params) -} - -// SecretVersionDeleter mocks the Delete function. -type SecretVersionDeleter struct { - ArgPath string - Err error -} - -// Delete saves the arguments it was called with and returns the mocked response. -func (d *SecretVersionDeleter) Delete(path string) error { - d.ArgPath = path - return d.Err -} - -// WithDataGetter mocks the GetWithData function. -type WithDataGetter struct { - ArgPath string - ReturnsVersion *api.SecretVersion - Err error -} - -// GetWithData saves the arguments it was called with and returns the mocked response. -func (g *WithDataGetter) GetWithData(path string) (*api.SecretVersion, error) { - g.ArgPath = path - return g.ReturnsVersion, g.Err -} - -// WithoutDataGetter mocks the GetWithoutData function. -type WithoutDataGetter struct { - ArgPath string - ReturnsVersion *api.SecretVersion - Err error -} - -// GetWithoutData saves the arguments it was called with and returns the mocked response. -func (g *WithoutDataGetter) GetWithoutData(path string) (*api.SecretVersion, error) { - g.ArgPath = path - return g.ReturnsVersion, g.Err -} - -// WithDataLister mocks the ListWithData function. -type WithDataLister struct { - ArgPath string - ReturnsVersions []*api.SecretVersion - Err error -} - -// ListWithData saves the arguments it was called with and returns the mocked response. -func (l *WithDataLister) ListWithData(path string) ([]*api.SecretVersion, error) { - l.ArgPath = path - return l.ReturnsVersions, l.Err -} - -// WithoutDataLister mocks the ListWithoutData function. -type WithoutDataLister struct { - ArgPath string - ReturnsVersions []*api.SecretVersion - Err error -} - -// ListWithoutData saves the arguments it was called with and returns the mocked response. -func (l *WithoutDataLister) ListWithoutData(path string) ([]*api.SecretVersion, error) { - l.ArgPath = path - return l.ReturnsVersions, l.Err -} +} \ No newline at end of file diff --git a/pkg/secrethub/fakeclient/service.go b/pkg/secrethub/fakeclient/service.go index 0d19a9dc..06f43bdd 100644 --- a/pkg/secrethub/fakeclient/service.go +++ b/pkg/secrethub/fakeclient/service.go @@ -10,10 +10,10 @@ import ( // ServiceService is a mock of the ServiceService interface. type ServiceService struct { - Creator ServiceCreater - Deleter ServiceDeleter - Getter ServiceGetter - Lister RepoServiceLister + CreateFunc func(path string, description string, credentialCreator credentials.Creator) (*api.Service, error) + DeleteFunc func(id string) (*api.RevokeRepoResponse, error) + GetFunc func(id string) (*api.Service, error) + ListFunc func(path string) ([]*api.Service, error) AWSService *ServiceAWSService IteratorFunc func() secrethub.ServiceIterator @@ -25,63 +25,20 @@ func (s *ServiceService) Iterator(path string, _ *secrethub.ServiceIteratorParam // Create implements the ServiceService interface Create function. func (s *ServiceService) Create(path string, description string, credentialCreator credentials.Creator) (*api.Service, error) { - return s.Creator.Create(path, description, credentialCreator) + return s.CreateFunc(path, description, credentialCreator) } // Delete implements the ServiceService interface Delete function. func (s *ServiceService) Delete(id string) (*api.RevokeRepoResponse, error) { - return s.Deleter.Delete(id) + return s.DeleteFunc(id) } // Get implements the ServiceService interface Get function. func (s *ServiceService) Get(id string) (*api.Service, error) { - return s.Getter.Get(id) + return s.GetFunc(id) } // List implements the ServiceService interface List function. func (s *ServiceService) List(path string) ([]*api.Service, error) { - return s.Lister.List(path) -} - -// ServiceCreater mocks the Create function. -type ServiceCreater struct { - ArgPath string - ArgDescription string - ArgCredentialCreator credentials.Creator - ReturnsService *api.Service - Err error -} - -// Create saves the arguments it was called with and returns the mocked response. -func (c *ServiceCreater) Create(path string, description string, credentialCreator credentials.Creator) (*api.Service, error) { - c.ArgPath = path - c.ArgDescription = description - c.ArgCredentialCreator = credentialCreator - return c.ReturnsService, c.Err -} - -// ServiceDeleter mocks the Delete function. -type ServiceDeleter struct { - ArgID string - ReturnsRevokeResponse *api.RevokeRepoResponse - Err error -} - -// Delete saves the arguments it was called with and returns the mocked response. -func (d *ServiceDeleter) Delete(id string) (*api.RevokeRepoResponse, error) { - d.ArgID = id - return d.ReturnsRevokeResponse, d.Err -} - -// ServiceGetter mocks the Get function. -type ServiceGetter struct { - ArgID string - ReturnsService *api.Service - Err error -} - -// Get saves the arguments it was called with and returns the mocked response. -func (g *ServiceGetter) Get(id string) (*api.Service, error) { - g.ArgID = id - return g.ReturnsService, g.Err -} + return s.ListFunc(path) +} \ No newline at end of file diff --git a/pkg/secrethub/fakeclient/service_aws.go b/pkg/secrethub/fakeclient/service_aws.go index f33a283c..48033a71 100644 --- a/pkg/secrethub/fakeclient/service_aws.go +++ b/pkg/secrethub/fakeclient/service_aws.go @@ -9,31 +9,10 @@ import ( // ServiceAWSService is a mock of the ServiceAWSService interface. type ServiceAWSService struct { - Creator ServiceAWSCreater + CreateFunc func(path string, description string, keyID, role string, cfgs ...*aws.Config) (*api.Service, error) } // Create implements the ServiceAWSService interface Create function. func (s *ServiceAWSService) Create(path string, description string, keyID, role string, cfgs ...*aws.Config) (*api.Service, error) { - return s.Creator.Create(path, description, keyID, role, cfgs...) -} - -// ServiceAWSCreater mocks the Create function. -type ServiceAWSCreater struct { - ArgPath string - ArgDescription string - ArgKeyID string - ArgRole string - Cfgs []*aws.Config - ReturnsService *api.Service - Err error -} - -// Create saves the arguments it was called with and returns the mocked response. -func (c *ServiceAWSCreater) Create(path string, description string, keyID, role string, cfgs ...*aws.Config) (*api.Service, error) { - c.ArgPath = path - c.ArgDescription = description - c.ArgKeyID = keyID - c.ArgRole = role - c.Cfgs = cfgs - return c.ReturnsService, c.Err + return s.CreateFunc(path, description, keyID, role, cfgs...) } diff --git a/pkg/secrethub/fakeclient/user.go b/pkg/secrethub/fakeclient/user.go index 2ccc69eb..15e89c12 100644 --- a/pkg/secrethub/fakeclient/user.go +++ b/pkg/secrethub/fakeclient/user.go @@ -9,63 +9,22 @@ import ( // UserService is a mock of the UserService interface. type UserService struct { - Getter UserGetter - MeGetter MeGetter - UserCreater UserCreater + GetFunc func(username string) (*api.User, error) + MeFunc func() (*api.User, error) + CreateFunc func(username, email, fullName string, credentialCreator credentials.Creator) (*api.User, error) } // Get implements the UserService interface Get function. func (s *UserService) Get(username string) (*api.User, error) { - return s.Getter.Get(username) + return s.GetFunc(username) } // Me implements the UserService interface Me function. func (s *UserService) Me() (*api.User, error) { - return s.MeGetter.Me() + return s.MeFunc() } // Create implements the UserService interface Create function. func (s *UserService) Create(username, email, fullName string, credentialCreator credentials.CreatorProvider) (*api.User, error) { - return s.UserCreater.Create(username, email, fullName, credentialCreator) -} - -// MeGetter is a wrapper for the return values of the mocked MeGetter method. -type MeGetter struct { - ReturnsUser *api.User - Err error -} - -// Me returns the mocked response. -func (g *MeGetter) Me() (*api.User, error) { - return g.ReturnsUser, g.Err -} - -// UserGetter mocks the Get function. -type UserGetter struct { - ArgUsername string - ReturnsUser *api.User - Err error -} - -// Get saves the arguments it was called with and returns the mocked response. -func (g *UserGetter) Get(username string) (*api.User, error) { - g.ArgUsername = username - return g.ReturnsUser, g.Err -} - -// UserCreater mocks the Create function. -type UserCreater struct { - ArgUsername string - ArgEmail string - ArgFullName string - ReturnsUser *api.User - Err error -} - -// Create saves the arguments it was called with and returns the mocked response. -func (s *UserCreater) Create(username, email, fullName string, credentialCreator credentials.CreatorProvider) (*api.User, error) { - s.ArgUsername = username - s.ArgEmail = email - s.ArgFullName = fullName - return s.ReturnsUser, s.Err + return s.CreateFunc(username, email, fullName, credentialCreator) } From 06577e2541266d3e12f5fa1614c07543edd69300 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Thu, 5 Mar 2020 17:32:34 +0100 Subject: [PATCH 64/68] Run gofmt and goimports --- pkg/secrethub/fakeclient/accessrule.go | 12 ++++++------ pkg/secrethub/fakeclient/account.go | 4 ++-- pkg/secrethub/fakeclient/dir.go | 6 +++--- pkg/secrethub/fakeclient/org.go | 10 +++++----- pkg/secrethub/fakeclient/org_member.go | 10 +++++----- pkg/secrethub/fakeclient/repo.go | 18 +++++++++--------- pkg/secrethub/fakeclient/repo_service.go | 4 ++-- pkg/secrethub/fakeclient/repo_user.go | 8 ++++---- pkg/secrethub/fakeclient/secret.go | 10 +++++----- pkg/secrethub/fakeclient/secret_version.go | 12 ++++++------ pkg/secrethub/fakeclient/service.go | 6 +++--- pkg/secrethub/fakeclient/user.go | 4 ++-- 12 files changed, 52 insertions(+), 52 deletions(-) diff --git a/pkg/secrethub/fakeclient/accessrule.go b/pkg/secrethub/fakeclient/accessrule.go index 966a32d0..cdbe5976 100644 --- a/pkg/secrethub/fakeclient/accessrule.go +++ b/pkg/secrethub/fakeclient/accessrule.go @@ -9,11 +9,11 @@ import ( // AccessRuleService is a mock of the AccessRuleService interface. type AccessRuleService struct { - DeleteFunc func(path string, accountName string) error - GetFunc func(path string, accountName string) (*api.AccessRule, error) - ListLevelsFunc func(path string) ([]*api.AccessLevel, error) - ListFunc func(path string, depth int, ancestors bool) ([]*api.AccessRule, error) - SetFunc func(path string, permission string, accountName string) (*api.AccessRule, error) + DeleteFunc func(path string, accountName string) error + GetFunc func(path string, accountName string) (*api.AccessRule, error) + ListLevelsFunc func(path string) ([]*api.AccessLevel, error) + ListFunc func(path string, depth int, ancestors bool) ([]*api.AccessRule, error) + SetFunc func(path string, permission string, accountName string) (*api.AccessRule, error) IteratorFunc func() secrethub.AccessRuleIterator LevelIteratorFunc func() secrethub.AccessLevelIterator } @@ -49,4 +49,4 @@ func (s *AccessRuleService) List(path string, depth int, ancestors bool) ([]*api // Set implements the AccessRuleService interface Set function. func (s *AccessRuleService) Set(path string, permission string, accountName string) (*api.AccessRule, error) { return s.SetFunc(path, permission, accountName) -} \ No newline at end of file +} diff --git a/pkg/secrethub/fakeclient/account.go b/pkg/secrethub/fakeclient/account.go index 5cc048c0..3699ef64 100644 --- a/pkg/secrethub/fakeclient/account.go +++ b/pkg/secrethub/fakeclient/account.go @@ -9,7 +9,7 @@ import ( // AccountService is a mock of the AccountService interface. type AccountService struct { - GetFunc func(name string) (*api.Account, error) + GetFunc func(name string) (*api.Account, error) AccountKeyService secrethub.AccountKeyService } @@ -20,4 +20,4 @@ func (s *AccountService) Keys() secrethub.AccountKeyService { // Get implements the AccountService interface Get function. func (s *AccountService) Get(name string) (*api.Account, error) { return s.GetFunc(name) -} \ No newline at end of file +} diff --git a/pkg/secrethub/fakeclient/dir.go b/pkg/secrethub/fakeclient/dir.go index 4dc82edf..3044e3a8 100644 --- a/pkg/secrethub/fakeclient/dir.go +++ b/pkg/secrethub/fakeclient/dir.go @@ -9,9 +9,9 @@ import ( // DirService is a mock of the DirService interface. type DirService struct { - CreateFunc func(path string) (*api.Dir, error) - ExistsFunc func(path string) (bool, error) - DeleteFunc func(path string) error + CreateFunc func(path string) (*api.Dir, error) + ExistsFunc func(path string) (bool, error) + DeleteFunc func(path string) error GetTreeFunc func(path string, depth int, ancestors bool) (*api.Tree, error) secrethub.DirService } diff --git a/pkg/secrethub/fakeclient/org.go b/pkg/secrethub/fakeclient/org.go index bb6f4b1c..1e1c1ee5 100644 --- a/pkg/secrethub/fakeclient/org.go +++ b/pkg/secrethub/fakeclient/org.go @@ -9,12 +9,12 @@ import ( // OrgService is a mock of the RepoService interface. type OrgService struct { - CreateFunc func(name string, description string) (*api.Org, error) - DeleteFunc func(name string) error - GetFunc func(name string) (*api.Org, error) + CreateFunc func(name string, description string) (*api.Org, error) + DeleteFunc func(name string) error + GetFunc func(name string) (*api.Org, error) MembersService secrethub.OrgMemberService - ListMineFunc func() ([]*api.Org, error) - IteratorFunc func(params *secrethub.OrgIteratorParams) secrethub.OrgIterator + ListMineFunc func() ([]*api.Org, error) + IteratorFunc func(params *secrethub.OrgIteratorParams) secrethub.OrgIterator } func (s *OrgService) Iterator(params *secrethub.OrgIteratorParams) secrethub.OrgIterator { diff --git a/pkg/secrethub/fakeclient/org_member.go b/pkg/secrethub/fakeclient/org_member.go index acc97b6e..a65016ac 100644 --- a/pkg/secrethub/fakeclient/org_member.go +++ b/pkg/secrethub/fakeclient/org_member.go @@ -9,11 +9,11 @@ import ( // OrgMemberService is a mock of the OrgMemberService interface. type OrgMemberService struct { - InviteFunc func(org string, username string, role string) (*api.OrgMember, error) - GetFunc func(org string, username string) (*api.OrgMember, error) - UpdateFunc func(org string, username string, role string) (*api.OrgMember, error) - RevokeFunc func(org string, username string, opts *api.RevokeOpts) (*api.RevokeOrgResponse, error) - ListFunc func(org string) ([]*api.OrgMember, error) + InviteFunc func(org string, username string, role string) (*api.OrgMember, error) + GetFunc func(org string, username string) (*api.OrgMember, error) + UpdateFunc func(org string, username string, role string) (*api.OrgMember, error) + RevokeFunc func(org string, username string, opts *api.RevokeOpts) (*api.RevokeOrgResponse, error) + ListFunc func(org string) ([]*api.OrgMember, error) IteratorFunc func(org string, params *secrethub.OrgMemberIteratorParams) secrethub.OrgMemberIterator } diff --git a/pkg/secrethub/fakeclient/repo.go b/pkg/secrethub/fakeclient/repo.go index a17a325a..ca275500 100644 --- a/pkg/secrethub/fakeclient/repo.go +++ b/pkg/secrethub/fakeclient/repo.go @@ -9,14 +9,14 @@ import ( // RepoService is a mock of the RepoService interface. type RepoService struct { - ListFunc func(namespace string) ([]*api.Repo, error) - ListAccountsFunc func(path string) ([]*api.Account, error) - ListEventsFunc func(path string, subjectTypes api.AuditSubjectTypeList) ([]*api.Audit, error) - ListMineFunc func() ([]*api.Repo, error) - CreateFunc func(path string) (*api.Repo, error) - DeleteFunc func(path string) error - GetFunc func(path string) (*api.Repo, error) - UserService secrethub.RepoUserService + ListFunc func(namespace string) ([]*api.Repo, error) + ListAccountsFunc func(path string) ([]*api.Account, error) + ListEventsFunc func(path string, subjectTypes api.AuditSubjectTypeList) ([]*api.Audit, error) + ListMineFunc func() ([]*api.Repo, error) + CreateFunc func(path string) (*api.Repo, error) + DeleteFunc func(path string) error + GetFunc func(path string) (*api.Repo, error) + UserService secrethub.RepoUserService RepoServiceService secrethub.RepoServiceService AuditEventIterator *AuditEventIterator secrethub.RepoService @@ -70,4 +70,4 @@ func (s *RepoService) Users() secrethub.RepoUserService { // Services returns the mocked RepoServiceService. func (s *RepoService) Services() secrethub.RepoServiceService { return s.RepoServiceService -} \ No newline at end of file +} diff --git a/pkg/secrethub/fakeclient/repo_service.go b/pkg/secrethub/fakeclient/repo_service.go index eae53af6..b53fc59a 100644 --- a/pkg/secrethub/fakeclient/repo_service.go +++ b/pkg/secrethub/fakeclient/repo_service.go @@ -9,7 +9,7 @@ import ( // RepoServiceService is a mock of the RepoServiceService interface. type RepoServiceService struct { - ListFunc func(path string) ([]*api.Service, error) + ListFunc func(path string) ([]*api.Service, error) IteratorFunc func() secrethub.ServiceIterator } @@ -20,4 +20,4 @@ func (s *RepoServiceService) Iterator(path string, _ *secrethub.RepoServiceItera // List implements the RepoServiceService interface List function. func (s *RepoServiceService) List(path string) ([]*api.Service, error) { return s.ListFunc(path) -} \ No newline at end of file +} diff --git a/pkg/secrethub/fakeclient/repo_user.go b/pkg/secrethub/fakeclient/repo_user.go index edd344cb..342ee1f6 100644 --- a/pkg/secrethub/fakeclient/repo_user.go +++ b/pkg/secrethub/fakeclient/repo_user.go @@ -9,9 +9,9 @@ import ( // RepoUserService is a mock of the RepoUserService interface. type RepoUserService struct { - InviteFunc func(path string, username string) (*api.RepoMember, error) - ListFunc func(path string) ([]*api.User, error) - RevokeFunc func(path string, username string) (*api.RevokeRepoResponse, error) + InviteFunc func(path string, username string) (*api.RepoMember, error) + ListFunc func(path string) ([]*api.User, error) + RevokeFunc func(path string, username string) (*api.RevokeRepoResponse, error) IteratorFunc func() secrethub.UserIterator } @@ -32,4 +32,4 @@ func (s *RepoUserService) List(path string) ([]*api.User, error) { // Revoke implements the RepoUserService interface Revoke function. func (s *RepoUserService) Revoke(path string, username string) (*api.RevokeRepoResponse, error) { return s.RevokeFunc(path, username) -} \ No newline at end of file +} diff --git a/pkg/secrethub/fakeclient/secret.go b/pkg/secrethub/fakeclient/secret.go index a4aaaf22..4aa56ae5 100644 --- a/pkg/secrethub/fakeclient/secret.go +++ b/pkg/secrethub/fakeclient/secret.go @@ -9,11 +9,11 @@ import ( // SecretService is a mock of the SecretService interface. type SecretService struct { - VersionService secrethub.SecretVersionService - DeleteFunc func(path string) error - GetFunc func(path string) (*api.Secret, error) - WriteFunc func(path string, data []byte) (*api.SecretVersion, error) - ListEventsFunc func(path string, subjectTypes api.AuditSubjectTypeList) ([]*api.Audit, error) + VersionService secrethub.SecretVersionService + DeleteFunc func(path string) error + GetFunc func(path string) (*api.Secret, error) + WriteFunc func(path string, data []byte) (*api.SecretVersion, error) + ListEventsFunc func(path string, subjectTypes api.AuditSubjectTypeList) ([]*api.Audit, error) AuditEventIterator *AuditEventIterator secrethub.SecretService diff --git a/pkg/secrethub/fakeclient/secret_version.go b/pkg/secrethub/fakeclient/secret_version.go index 34c5ab78..0fdc7037 100644 --- a/pkg/secrethub/fakeclient/secret_version.go +++ b/pkg/secrethub/fakeclient/secret_version.go @@ -9,12 +9,12 @@ import ( // SecretVersionService can be used to mock a SecretVersionService. type SecretVersionService struct { - DeleteFunc func(path string) error - GetWithDataFunc func(path string) (*api.SecretVersion, error) - GetWithoutDataFunc func(path string) (*api.SecretVersion, error) - ListWithDataFunc func(path string) ([]*api.SecretVersion, error) + DeleteFunc func(path string) error + GetWithDataFunc func(path string) (*api.SecretVersion, error) + GetWithoutDataFunc func(path string) (*api.SecretVersion, error) + ListWithDataFunc func(path string) ([]*api.SecretVersion, error) ListWithoutDataFunc func(path string) ([]*api.SecretVersion, error) - IteratorFunc func(path string, params *secrethub.SecretVersionIteratorParams) secrethub.SecretVersionIterator + IteratorFunc func(path string, params *secrethub.SecretVersionIteratorParams) secrethub.SecretVersionIterator } // Delete implements the SecretVersionService interface Delete function. @@ -44,4 +44,4 @@ func (s *SecretVersionService) ListWithoutData(path string) ([]*api.SecretVersio func (s *SecretVersionService) Iterator(path string, params *secrethub.SecretVersionIteratorParams) secrethub.SecretVersionIterator { return s.IteratorFunc(path, params) -} \ No newline at end of file +} diff --git a/pkg/secrethub/fakeclient/service.go b/pkg/secrethub/fakeclient/service.go index 06f43bdd..c300fd11 100644 --- a/pkg/secrethub/fakeclient/service.go +++ b/pkg/secrethub/fakeclient/service.go @@ -12,8 +12,8 @@ import ( type ServiceService struct { CreateFunc func(path string, description string, credentialCreator credentials.Creator) (*api.Service, error) DeleteFunc func(id string) (*api.RevokeRepoResponse, error) - GetFunc func(id string) (*api.Service, error) - ListFunc func(path string) ([]*api.Service, error) + GetFunc func(id string) (*api.Service, error) + ListFunc func(path string) ([]*api.Service, error) AWSService *ServiceAWSService IteratorFunc func() secrethub.ServiceIterator @@ -41,4 +41,4 @@ func (s *ServiceService) Get(id string) (*api.Service, error) { // List implements the ServiceService interface List function. func (s *ServiceService) List(path string) ([]*api.Service, error) { return s.ListFunc(path) -} \ No newline at end of file +} diff --git a/pkg/secrethub/fakeclient/user.go b/pkg/secrethub/fakeclient/user.go index 15e89c12..2952290c 100644 --- a/pkg/secrethub/fakeclient/user.go +++ b/pkg/secrethub/fakeclient/user.go @@ -9,8 +9,8 @@ import ( // UserService is a mock of the UserService interface. type UserService struct { - GetFunc func(username string) (*api.User, error) - MeFunc func() (*api.User, error) + GetFunc func(username string) (*api.User, error) + MeFunc func() (*api.User, error) CreateFunc func(username, email, fullName string, credentialCreator credentials.Creator) (*api.User, error) } From a6b707d9af4d79de2e379638b51ab2bf5b865ae4 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Tue, 17 Mar 2020 12:45:28 +0100 Subject: [PATCH 65/68] Update go version to 1.13 --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 93601aa7..3e30aef3 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -2,7 +2,7 @@ version: 2 jobs: test: docker: - - image: circleci/golang:1.12 + - image: circleci/golang:1.13 steps: - checkout - restore_cache: @@ -16,7 +16,7 @@ jobs: - run: make test verify-version: docker: - - image: circleci/golang:1.12 + - image: circleci/golang:1.13 steps: - checkout - restore_cache: From ea45ce382e5460aed8b09f8ef7f70b03f1a7e3a0 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Tue, 17 Mar 2020 18:14:06 +0100 Subject: [PATCH 66/68] Update Repo Not Found error to include repo path --- internals/api/server_errors.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internals/api/server_errors.go b/internals/api/server_errors.go index 2908d7e3..f2e85855 100644 --- a/internals/api/server_errors.go +++ b/internals/api/server_errors.go @@ -40,7 +40,7 @@ var ( ErrSignatureNotVerified = errHub.Code("invalid_signature").StatusError("request was not signed by a valid credential", http.StatusUnauthorized) // Repos - ErrRepoNotFound = errHub.Code("repo_not_found").StatusError("Repo not found", http.StatusNotFound) + ErrRepoNotFound = errHub.Code("repo_not_found").StatusErrorPref("Repo %s not found", http.StatusNotFound) ErrRepoAlreadyExists = errHub.Code("repo_already_exists").StatusError("Repo already exists, please create a different repo", http.StatusConflict) // Dirs From 92df22489f27dccaa6eb0bb6a80645da93056ae2 Mon Sep 17 00:00:00 2001 From: Marton Soos Date: Tue, 17 Mar 2020 18:17:12 +0100 Subject: [PATCH 67/68] Update repo not found error message --- internals/api/server_errors.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internals/api/server_errors.go b/internals/api/server_errors.go index f2e85855..83bc1e52 100644 --- a/internals/api/server_errors.go +++ b/internals/api/server_errors.go @@ -40,7 +40,7 @@ var ( ErrSignatureNotVerified = errHub.Code("invalid_signature").StatusError("request was not signed by a valid credential", http.StatusUnauthorized) // Repos - ErrRepoNotFound = errHub.Code("repo_not_found").StatusErrorPref("Repo %s not found", http.StatusNotFound) + ErrRepoNotFound = errHub.Code("repo_not_found").StatusErrorPref("Repo '%s' not found", http.StatusNotFound) ErrRepoAlreadyExists = errHub.Code("repo_already_exists").StatusError("Repo already exists, please create a different repo", http.StatusConflict) // Dirs From 8d0dcaacd2a0d5c9e1ec97c8d6e609637dd3ef6a Mon Sep 17 00:00:00 2001 From: Simon Barendse Date: Mon, 23 Mar 2020 11:45:11 +0100 Subject: [PATCH 68/68] Bump version to v0.27.0 --- pkg/secrethub/client_version.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/secrethub/client_version.go b/pkg/secrethub/client_version.go index de4dac3d..242b9568 100644 --- a/pkg/secrethub/client_version.go +++ b/pkg/secrethub/client_version.go @@ -2,4 +2,4 @@ package secrethub // ClientVersion is the current version of the client // Do not edit this unless you know what you're doing. -const ClientVersion = "v0.26.0" +const ClientVersion = "v0.27.0"