Skip to content

Commit b3fcb92

Browse files
committed
feat(github): add graphql client
1 parent 6d1c59f commit b3fcb92

File tree

7 files changed

+50
-10
lines changed

7 files changed

+50
-10
lines changed

go.mod

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,8 @@ require (
270270
github.com/sendgrid/rest v2.6.9+incompatible // indirect
271271
github.com/shirou/gopsutil/v3 v3.23.12 // indirect
272272
github.com/shoenig/go-m1cpu v0.1.6 // indirect
273+
github.com/shurcooL/githubv4 v0.0.0-20240727222349-48295856cce7 // indirect
274+
github.com/shurcooL/graphql v0.0.0-20230722043721-ed46e5a46466 // indirect
273275
github.com/sirupsen/logrus v1.9.3 // indirect
274276
github.com/skeema/knownhosts v1.3.0 // indirect
275277
github.com/sorairolake/lzip-go v0.3.5 // indirect

go.sum

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -709,6 +709,10 @@ github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU=
709709
github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k=
710710
github.com/shuheiktgw/go-travis v0.3.1 h1:SAT16mi77ccqogOslnXxBXzXbpeyChaIYUwi2aJpVZY=
711711
github.com/shuheiktgw/go-travis v0.3.1/go.mod h1:avnFFDqJDdRHwlF9tgqvYi3asQCm/HGL8aLxYiKa4Yg=
712+
github.com/shurcooL/githubv4 v0.0.0-20240727222349-48295856cce7 h1:cYCy18SHPKRkvclm+pWm1Lk4YrREb4IOIb/YdFO0p2M=
713+
github.com/shurcooL/githubv4 v0.0.0-20240727222349-48295856cce7/go.mod h1:zqMwyHmnN/eDOZOdiTohqIUKUrTFX62PNlu7IJdu0q8=
714+
github.com/shurcooL/graphql v0.0.0-20230722043721-ed46e5a46466 h1:17JxqqJY66GmZVHkmAsGEkcIu0oCe3AM420QDgGwZx0=
715+
github.com/shurcooL/graphql v0.0.0-20230722043721-ed46e5a46466/go.mod h1:9dIRpgIY7hVhoqfe0/FcYp0bpInZaT7dc3BYOprrIUE=
712716
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
713717
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
714718
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=

pkg/sources/github/connector.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@ import (
55

66
gogit "github.com/go-git/go-git/v5"
77
"github.com/google/go-github/v67/github"
8-
"github.com/trufflesecurity/trufflehog/v3/pkg/log"
8+
"github.com/shurcooL/githubv4"
99

1010
"github.com/trufflesecurity/trufflehog/v3/pkg/context"
11+
"github.com/trufflesecurity/trufflehog/v3/pkg/log"
1112
"github.com/trufflesecurity/trufflehog/v3/pkg/pb/sourcespb"
1213
)
1314

@@ -16,6 +17,8 @@ const cloudEndpoint = "https://api.github.com"
1617
type connector interface {
1718
// APIClient returns a configured GitHub client that can be used for GitHub API operations.
1819
APIClient() *github.Client
20+
// GraphQLClient returns a client that can be used for GraphQL operations.
21+
GraphQLClient() *githubv4.Client
1922
// Clone clones a repository using the configured authentication information.
2023
Clone(ctx context.Context, repoURL string) (string, *gogit.Repository, error)
2124
}

pkg/sources/github/connector_app.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import (
77
"github.com/bradleyfalzon/ghinstallation/v2"
88
gogit "github.com/go-git/go-git/v5"
99
"github.com/google/go-github/v67/github"
10+
"github.com/shurcooL/githubv4"
11+
1012
"github.com/trufflesecurity/trufflehog/v3/pkg/common"
1113
"github.com/trufflesecurity/trufflehog/v3/pkg/context"
1214
"github.com/trufflesecurity/trufflehog/v3/pkg/pb/credentialspb"
@@ -15,6 +17,7 @@ import (
1517

1618
type appConnector struct {
1719
apiClient *github.Client
20+
graphQlClient *githubv4.Client
1821
installationClient *github.Client
1922
installationID int64
2023
}
@@ -69,6 +72,7 @@ func newAppConnector(apiEndpoint string, app *credentialspb.GitHubApp) (*appConn
6972

7073
return &appConnector{
7174
apiClient: apiClient,
75+
graphQlClient: githubv4.NewEnterpriseClient(apiEndpoint, httpClient),
7276
installationClient: installationClient,
7377
installationID: installationID,
7478
}, nil
@@ -78,6 +82,10 @@ func (c *appConnector) APIClient() *github.Client {
7882
return c.apiClient
7983
}
8084

85+
func (c *appConnector) GraphQLClient() *githubv4.Client {
86+
return c.graphQlClient
87+
}
88+
8189
func (c *appConnector) Clone(ctx context.Context, repoURL string) (string, *gogit.Repository, error) {
8290
// TODO: Check rate limit for this call.
8391
token, _, err := c.installationClient.Apps.CreateInstallationToken(

pkg/sources/github/connector_basicauth.go

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,19 @@ import (
55

66
gogit "github.com/go-git/go-git/v5"
77
"github.com/google/go-github/v67/github"
8+
"github.com/shurcooL/githubv4"
9+
810
"github.com/trufflesecurity/trufflehog/v3/pkg/common"
911
"github.com/trufflesecurity/trufflehog/v3/pkg/context"
1012
"github.com/trufflesecurity/trufflehog/v3/pkg/pb/credentialspb"
1113
"github.com/trufflesecurity/trufflehog/v3/pkg/sources/git"
1214
)
1315

1416
type basicAuthConnector struct {
15-
apiClient *github.Client
16-
username string
17-
password string
17+
apiClient *github.Client
18+
graphQlClient *githubv4.Client
19+
username string
20+
password string
1821
}
1922

2023
var _ connector = (*basicAuthConnector)(nil)
@@ -33,16 +36,21 @@ func newBasicAuthConnector(apiEndpoint string, cred *credentialspb.BasicAuth) (*
3336
}
3437

3538
return &basicAuthConnector{
36-
apiClient: apiClient,
37-
username: cred.Username,
38-
password: cred.Password,
39+
apiClient: apiClient,
40+
graphQlClient: githubv4.NewEnterpriseClient(apiEndpoint, httpClient),
41+
username: cred.Username,
42+
password: cred.Password,
3943
}, nil
4044
}
4145

4246
func (c *basicAuthConnector) APIClient() *github.Client {
4347
return c.apiClient
4448
}
4549

50+
func (c *basicAuthConnector) GraphQLClient() *githubv4.Client {
51+
return c.graphQlClient
52+
}
53+
4654
func (c *basicAuthConnector) Clone(ctx context.Context, repoURL string) (string, *gogit.Repository, error) {
4755
return git.CloneRepoUsingToken(ctx, c.password, repoURL, c.username)
4856
}

pkg/sources/github/connector_token.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,18 @@ import (
77

88
gogit "github.com/go-git/go-git/v5"
99
"github.com/google/go-github/v67/github"
10+
"github.com/shurcooL/githubv4"
11+
"golang.org/x/oauth2"
12+
1013
"github.com/trufflesecurity/trufflehog/v3/pkg/common"
1114
"github.com/trufflesecurity/trufflehog/v3/pkg/context"
1215
"github.com/trufflesecurity/trufflehog/v3/pkg/sources/git"
13-
"golang.org/x/oauth2"
1416
)
1517

1618
type tokenConnector struct {
1719
apiClient *github.Client
1820
token string
21+
graphQlClient *githubv4.Client
1922
isGitHubEnterprise bool
2023
handleRateLimit func(context.Context, error) bool
2124
user string
@@ -40,6 +43,7 @@ func newTokenConnector(apiEndpoint string, token string, handleRateLimit func(co
4043

4144
return &tokenConnector{
4245
apiClient: apiClient,
46+
graphQlClient: githubv4.NewEnterpriseClient(apiEndpoint, httpClient),
4347
token: token,
4448
isGitHubEnterprise: !strings.EqualFold(apiEndpoint, cloudEndpoint),
4549
handleRateLimit: handleRateLimit,
@@ -50,6 +54,10 @@ func (c *tokenConnector) APIClient() *github.Client {
5054
return c.apiClient
5155
}
5256

57+
func (c *tokenConnector) GraphQLClient() *githubv4.Client {
58+
return c.graphQlClient
59+
}
60+
5361
func (c *tokenConnector) Clone(ctx context.Context, repoURL string) (string, *gogit.Repository, error) {
5462
if err := c.setUserIfUnset(ctx); err != nil {
5563
return "", nil, err

pkg/sources/github/connector_unauthenticated.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,16 @@ import (
55

66
gogit "github.com/go-git/go-git/v5"
77
"github.com/google/go-github/v67/github"
8+
"github.com/shurcooL/githubv4"
89

910
"github.com/trufflesecurity/trufflehog/v3/pkg/common"
1011
"github.com/trufflesecurity/trufflehog/v3/pkg/context"
1112
"github.com/trufflesecurity/trufflehog/v3/pkg/sources/git"
1213
)
1314

1415
type unauthenticatedConnector struct {
15-
apiClient *github.Client
16+
apiClient *github.Client
17+
graphQlClient *githubv4.Client
1618
}
1719

1820
var _ connector = (*unauthenticatedConnector)(nil)
@@ -25,14 +27,19 @@ func newUnauthenticatedConnector(apiEndpoint string) (*unauthenticatedConnector,
2527
return nil, fmt.Errorf("could not create API client: %w", err)
2628
}
2729
return &unauthenticatedConnector{
28-
apiClient: apiClient,
30+
apiClient: apiClient,
31+
graphQlClient: githubv4.NewEnterpriseClient(apiEndpoint, httpClient),
2932
}, nil
3033
}
3134

3235
func (c *unauthenticatedConnector) APIClient() *github.Client {
3336
return c.apiClient
3437
}
3538

39+
func (c *unauthenticatedConnector) GraphQLClient() *githubv4.Client {
40+
return c.graphQlClient
41+
}
42+
3643
func (c *unauthenticatedConnector) Clone(ctx context.Context, repoURL string) (string, *gogit.Repository, error) {
3744
return git.CloneRepoUsingUnauthenticated(ctx, repoURL)
3845
}

0 commit comments

Comments
 (0)