Skip to content

Commit

Permalink
fix: fix pagination method to return all issues
Browse files Browse the repository at this point in the history
  • Loading branch information
tubenhirn committed Nov 14, 2023
1 parent 7b5fe32 commit d17f76c
Show file tree
Hide file tree
Showing 4 changed files with 229 additions and 36 deletions.
28 changes: 12 additions & 16 deletions go.work.sum
Original file line number Diff line number Diff line change
Expand Up @@ -139,11 +139,9 @@ github.com/envoyproxy/protoc-gen-validate v0.10.1/go.mod h1:DRjgyB0I43LtJapqN6Ni
github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k=
github.com/googleapis/gax-go/v2 v2.7.1/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI=
Expand Down Expand Up @@ -172,22 +170,25 @@ go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U=
golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I=
golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g=
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8=
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns=
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
golang.org/x/net v0.11.0 h1:Gi2tvZIJyBtO9SDr1q9h5hEQCp/4L2RQ+ar0qjx2oNU=
golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ=
golang.org/x/net v0.16.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg=
golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ=
golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw=
golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4=
golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=
golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
Expand All @@ -196,30 +197,25 @@ golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY=
golang.org/x/term v0.9.0 h1:GRRCnKYhdQrD8kfRAdQ6Zcw1P0OcELxGLKJvtjVMZ28=
golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo=
golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek=
golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
golang.org/x/term v0.14.0 h1:LGK9IlZ8T9jvdy6cTdfKUCltatMFOehAQo9SRC46UQ8=
golang.org/x/term v0.14.0/go.mod h1:TySc+nGkYR6qt8km8wUhuFRTVSMIX3XPR58y2lC8vww=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.10.0 h1:UpjohKhiEgNc0CSauXmwYftY1+LlaC75SJwh0SgCX58=
golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM=
golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg=
golang.org/x/tools v0.15.0/go.mod h1:hpksKq4dtpQWS1uQ61JkdqWM3LscIS6Slf+VVkm+wQk=
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg=
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/genproto v0.0.0-20230323212658-478b75c54725/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak=
google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A=
google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU=
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g=
google.golang.org/grpc v1.56.3 h1:8I4C0Yq1EjstUzUJzpcRVbuYA2mODtEmpWiQoN/b2nc=
google.golang.org/grpc v1.56.3/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s=
google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w=
google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng=
google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
40 changes: 25 additions & 15 deletions plugins/reporter/gitlab.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,28 +4,31 @@ import (
"bytes"
"encoding/gob"
"encoding/json"
"fmt"
"net/http"
"strconv"
"strings"
"time"

"io"

"github.com/hashicorp/go-plugin"
"github.com/pterm/pterm"
"github.com/urfave/cli/v2"
"gitlab.com/jstang/rasic/types"
"gitlab.com/jstang/rasic/types/plugins"
"io"
)

const baseURL = "https://gitlab.com"
const apiPath = "/api/v4/"
const projectPath = "projects/"

const OK = "200 OK"

type ReporterGitlab struct{}

func (a *ReporterGitlab) GetProjects(client types.HTTPClient, group string, token string) []types.RasicProject {
url := baseURL + apiPath + "groups/" + group + "/projects?per_page=100&include_subgroups=true&archived=false"
// url := baseURL + apiPath + "groups/" + group + "/projects?per_page=100&include_subgroups=true&archived=false"
url := fmt.Sprintf("%s%sgroups/%s/projects?per_page=100&include_subgroups=true&archived=false", baseURL, apiPath, group)

res, err := apiCallGet(client, url, token)

Expand Down Expand Up @@ -63,7 +66,8 @@ func (a *ReporterGitlab) GetProjects(client types.HTTPClient, group string, toke
}

func (a *ReporterGitlab) GetProject(client types.HTTPClient, project string, token string) types.RasicProject {
url := baseURL + apiPath + "projects/" + project
// url := baseURL + apiPath + projectPath + project
url := fmt.Sprintf("%s%s%s%s", baseURL, apiPath, projectPath, project)

res, err := apiCallGet(client, url, token)

Expand Down Expand Up @@ -96,8 +100,8 @@ func (a *ReporterGitlab) GetProject(client types.HTTPClient, project string, tok
return types.RasicProject{}
}

func pagination(client types.HTTPClient, url string, token string, collectedIssues []types.RasicIssue, page int) []types.RasicIssue {
url = url + "&page=" + strconv.Itoa(page)
func pagination(client types.HTTPClient, url string, token string, collectedIssues *[]types.RasicIssue, page int) []types.RasicIssue {
url = fmt.Sprintf("%s&page=%d", url, page)

res, err := apiCallGet(client, url, token)
if err != nil {
Expand All @@ -118,7 +122,7 @@ func pagination(client types.HTTPClient, url string, token string, collectedIssu
Description: issue.Description,
State: issue.State,
}
collectedIssues = append(collectedIssues, ele)
*collectedIssues = append(*collectedIssues, ele)
}

// look for next page header
Expand All @@ -129,7 +133,7 @@ func pagination(client types.HTTPClient, url string, token string, collectedIssu
pagination(client, url, token, collectedIssues, nextPage)
}

return collectedIssues
return *collectedIssues
}

_, err = io.ReadAll(res.Body)
Expand All @@ -152,17 +156,19 @@ func (a *ReporterGitlab) GetIssues(client types.HTTPClient, subject string, subj
state := "opened"
labels := "cve"

url := baseURL + apiPath + subject + "/" + subjectID + "/issues?per_page=" + strconv.Itoa(pageSize) + "&labels=" + labels + "&state=" + state
// url := baseURL + apiPath + subject + "/" + subjectID + "/issues?per_page=" + strconv.Itoa(pageSize) + "&labels=" + labels + "&state=" + state
url := fmt.Sprintf("%s%s%s/%s/issues?per_page=%d&labels=%s&state=%s", baseURL, apiPath, subject, subjectID, pageSize, labels, state)

var collectedIssues []types.RasicIssue
collectedIssues = pagination(client, url, token, collectedIssues, startPage)
collectedIssues = pagination(client, url, token, &collectedIssues, startPage)

return collectedIssues
}

// edit a issue of a project
func (a *ReporterGitlab) EditIssue(client types.HTTPClient, projectID string, issueID string, token string, editPayload types.RasicIssueUpdate) types.RasicIssue {
url := baseURL + apiPath + "projects/" + projectID + "/issues/" + issueID
// url := baseURL + apiPath + projectPath + projectID + "/issues/" + issueID
url := fmt.Sprintf("%s%s%s/%s/issues/%s", baseURL, apiPath, projectPath, projectID, issueID)

issueUpdate := types.GitlabIssueUpdate{
StateEvent: editPayload.State,
Expand Down Expand Up @@ -193,7 +199,8 @@ func (a *ReporterGitlab) EditIssue(client types.HTTPClient, projectID string, is
}

func (a *ReporterGitlab) GetFile(client types.HTTPClient, project string, filepath string, fileref string, token string) string {
url := baseURL + apiPath + "projects/" + project + "/repository/files/" + filepath + "/raw?ref=" + fileref
// url := baseURL + apiPath + projectPath + project + "/repository/files/" + filepath + "/raw?ref=" + fileref
url := fmt.Sprintf("%s%s%s/%s/repository/files/%s/raw?ref=%s", baseURL, apiPath, projectPath, project, filepath, fileref)

res, err := apiCallGet(client, url, token)

Expand All @@ -216,7 +223,8 @@ func (a *ReporterGitlab) GetFile(client types.HTTPClient, project string, filepa
}

func (a *ReporterGitlab) CreateIssue(client types.HTTPClient, project string, token string, issue types.RasicIssue) types.RasicIssue {
url := baseURL + apiPath + "projects/" + project + "/issues"
// url := baseURL + apiPath + projectPath + project + "/issues"
url := fmt.Sprintf("%s%s%s/%s/issues", baseURL, apiPath, projectPath, project)

newGitlabIssue := types.GitlabIssue{
Title: issue.Title,
Expand Down Expand Up @@ -260,7 +268,8 @@ func (a *ReporterGitlab) CreateIssue(client types.HTTPClient, project string, to
}

func (a *ReporterGitlab) GetLabels(client types.HTTPClient, project string, token string) []types.RasicLabel {
url := baseURL + apiPath + "projects/" + project + "/labels"
// url := baseURL + apiPath + projectPath + project + "/labels"
url := fmt.Sprintf("%s%s%s/%s/labels", baseURL, apiPath, projectPath, project)

res, err := apiCallGet(client, url, token)

Expand Down Expand Up @@ -300,7 +309,8 @@ func (a *ReporterGitlab) GetLabels(client types.HTTPClient, project string, toke
}

func (a *ReporterGitlab) CreateLabel(client types.HTTPClient, project string, token string, label types.RasicLabel) types.RasicLabel {
url := baseURL + apiPath + "projects/" + project + "/labels"
// url := baseURL + apiPath + projectPath + project + "/labels"
url := fmt.Sprintf("%s%s%s/%s/labels", baseURL, apiPath, projectPath, project)

newGitlabLabel := types.GitlabLabel{
Name: label.Name,
Expand Down
Loading

0 comments on commit d17f76c

Please sign in to comment.