Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .golangci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ linters-settings:
depguard:
list-type: blacklist
dupl:
threshold: 200
threshold: 500
funlen:
lines: 150
statements: 50
Expand Down
5 changes: 4 additions & 1 deletion cmd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,16 +47,19 @@ func main() {
scans := viper.GetString(scansPath)
uploads := viper.GetString(uploadsPath)
projects := viper.GetString(projectsPath)
results := viper.GetString(resultsPath)

scansURL := fmt.Sprintf("%s/%s", ast, scans)
uploadsURL := fmt.Sprintf("%s/%s", ast, uploads)
projectsURL := fmt.Sprintf("%s/%s", ast, projects)
resultsURL := fmt.Sprintf("%s/%s", ast, results)

scansWrapper := wrappers.NewHTTPScansWrapper(scansURL)
uploadsWrapper := wrappers.NewUploadsHTTPWrapper(uploadsURL)
projectsWrapper := wrappers.NewHTTPProjectsWrapper(projectsURL)
resultsWrapper := wrappers.NewHTTPResultsWrapper(resultsURL)

astCli := commands.NewAstCLI(scansWrapper, uploadsWrapper, projectsWrapper)
astCli := commands.NewAstCLI(scansWrapper, uploadsWrapper, projectsWrapper, resultsWrapper)
err := astCli.Execute()
if err != nil {
fmt.Println(err.Error())
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ module github.com/checkmarxDev/ast-cli
go 1.13

require (
github.com/checkmarxDev/scans v1.2.3
github.com/checkmarxDev/scans v1.2.7
github.com/checkmarxDev/uploads v1.0.0
github.com/pkg/errors v0.8.1
github.com/spf13/cobra v0.0.6
Expand Down
6 changes: 2 additions & 4 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,8 @@ github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kB
github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps=
github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
github.com/checkmarxDev/scans v1.2.2 h1:C0LbOpG9cdDmB3U+v8Q2rsYuzh8/+liPdwGCP4sIceo=
github.com/checkmarxDev/scans v1.2.2/go.mod h1:76lXRiVKa8XL7ST9qEQZUSnma4vUQ0GomTCSRfV4TsY=
github.com/checkmarxDev/scans v1.2.3 h1:YOc+c6EthgwTqVD7DmLRJa+b4dWOHyOzHi7mOKAeQYo=
github.com/checkmarxDev/scans v1.2.3/go.mod h1:76lXRiVKa8XL7ST9qEQZUSnma4vUQ0GomTCSRfV4TsY=
github.com/checkmarxDev/scans v1.2.7 h1:yGOZaWttkY0Ll6B2rQi70PKoRnh9VjMDPmtJjI71H/E=
github.com/checkmarxDev/scans v1.2.7/go.mod h1:hcAM6h2mAq8iC+IgqaKUPDFsKoYJEnLJFFPt/wJdnhA=
github.com/checkmarxDev/uploads v1.0.0 h1:Bypl38qpKyYM/P4WH+qnMC/cMrmXL+3gDgAZ8dc+wSY=
github.com/checkmarxDev/uploads v1.0.0/go.mod h1:7WMSc96f012/4O3+3rYV2vhKI9GTEBGNVkp56b8F0ok=
github.com/cheggaaa/pb v1.0.28/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s=
Expand Down
8 changes: 3 additions & 5 deletions internal/commands/payloads/uploads.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,9 @@
"id": "test",
"type": "upload",
"handler": {
"url": "MOSHIKO"
"url": ""
},
"tags": {
}
"tags": []
},
"config": [
{
Expand All @@ -17,6 +16,5 @@
}
}
],
"tags": {
}
"tags": []
}
170 changes: 101 additions & 69 deletions internal/commands/project.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@ import (
"encoding/json"
"fmt"
"io/ioutil"
"os"

"github.com/pkg/errors"

wrappers "github.com/checkmarxDev/ast-cli/internal/wrappers"
projApi "github.com/checkmarxDev/scans/api/v1/rest/projects"
projModels "github.com/checkmarxDev/scans/pkg/projects"
projectsRESTApi "github.com/checkmarxDev/scans/api/v1/rest/projects"
"github.com/spf13/cobra"
)

Expand All @@ -20,6 +20,52 @@ const (
failedDeletingProj = "Failed deleting a project"
)

func NewProjectCommand(projectsWrapper wrappers.ProjectsWrapper) *cobra.Command {
projCmd := &cobra.Command{
Use: "project",
Short: "Manage AST projects",
}

createProjCmd := &cobra.Command{
Use: "create",
Short: "Creates a new project",
RunE: runCreateProjectCommand(projectsWrapper),
}
createProjCmd.PersistentFlags().StringP(inputFlag, inputFlagSh, "",
"The object representing the requested project, in JSON format")
createProjCmd.PersistentFlags().StringP(inputFileFlag, inputFileFlagSh, "",
"A file holding the requested project object in JSON format. Takes precedence over --input")

getAllProjCmd := &cobra.Command{
Use: "get-all",
Short: "Returns all projects in the system",
RunE: runGetAllProjectsCommand(projectsWrapper),
}
getAllProjCmd.PersistentFlags().Uint64P(limitFlag, limitFlagSh, 0, limitUsage)
getAllProjCmd.PersistentFlags().Uint64P(offsetFlag, offsetFlagSh, 0, offsetUsage)

getProjCmd := &cobra.Command{
Use: "get",
Short: "Returns information about a project",
RunE: runGetProjectByIDCommand(projectsWrapper),
}

deleteProjCmd := &cobra.Command{
Use: "delete",
Short: "Delete a project",
RunE: runDeleteProjectCommand(projectsWrapper),
}

tagsCmd := &cobra.Command{
Use: "tags",
Short: "Get a list of all available tags",
RunE: runGetProjectsTagsCommand(projectsWrapper),
}

projCmd.AddCommand(createProjCmd, getProjCmd, getAllProjCmd, deleteProjCmd, tagsCmd)
return projCmd
}

func runCreateProjectCommand(projectsWrapper wrappers.ProjectsWrapper) func(cmd *cobra.Command, args []string) error {
return func(cmd *cobra.Command, args []string) error {
var input []byte
Expand Down Expand Up @@ -51,9 +97,9 @@ func runCreateProjectCommand(projectsWrapper wrappers.ProjectsWrapper) func(cmd
// No input was given
return errors.Errorf("%s: no input was given\n", failedCreatingProj)
}
var projModel = projApi.Project{}
var projResponseModel *projModels.ProjectResponseModel
var errorModel *projModels.ErrorModel
var projModel = projectsRESTApi.Project{}
var projResponseModel *projectsRESTApi.ProjectResponseModel
var errorModel *projectsRESTApi.ErrorModel
// Try to parse to a project model in order to manipulate the request payload
err = json.Unmarshal(input, &projModel)
if err != nil {
Expand All @@ -73,84 +119,62 @@ func runCreateProjectCommand(projectsWrapper wrappers.ProjectsWrapper) func(cmd
if errorModel != nil {
return errors.Errorf("%s: CODE: %d, %s\n", failedCreatingProj, errorModel.Code, errorModel.Message)
} else if projResponseModel != nil {
fmt.Printf("Project created successfully:\n")
var responseModelJSON []byte
responseModelJSON, err = json.Marshal(projResponseModel)
if err != nil {
return errors.Wrapf(err, "%s: failed to serialize project response ", failedCreatingProj)
}
cmdOut := cmd.OutOrStdout()
fmt.Fprintln(os.Stdout, "Project created successfully")
fmt.Fprintln(cmdOut, string(responseModelJSON))
}
return nil
}
}

func NewProjectCommand(projectsWrapper wrappers.ProjectsWrapper) *cobra.Command {
projCmd := &cobra.Command{
Use: "project",
Short: "Manage AST projects",
}

createProjCmd := &cobra.Command{
Use: "create",
Short: "Creates a new project",
RunE: runCreateProjectCommand(projectsWrapper),
}
createProjCmd.PersistentFlags().StringP(inputFlag, inputFlagSh, "",
"The object representing the requested project, in JSON format")
createProjCmd.PersistentFlags().StringP(inputFileFlag, inputFileFlagSh, "",
"A file holding the requested project object in JSON format. Takes precedence over --input")

getAllProjCmd := &cobra.Command{
Use: "get-all",
Short: "Returns all projects in the system",
RunE: runGetAllProjectsCommand(projectsWrapper),
}

getProjCmd := &cobra.Command{
Use: "get",
Short: "Returns information about a project",
RunE: runGetProjectByIDCommand(projectsWrapper),
}

deleteProjCmd := &cobra.Command{
Use: "delete",
Short: "Delete a project",
RunE: runDeleteProjectCommand(projectsWrapper),
}

tagsCmd := &cobra.Command{
Use: "tags",
Short: "Get a list of all available tags",
RunE: runGetProjectsTagsCommand(projectsWrapper),
}

projCmd.AddCommand(createProjCmd, getProjCmd, getAllProjCmd, deleteProjCmd, tagsCmd)
return projCmd
}

func runGetAllProjectsCommand(projectsWrapper wrappers.ProjectsWrapper) func(cmd *cobra.Command, args []string) error {
return func(cmd *cobra.Command, args []string) error {
var allProjectsModel *projModels.ResponseModel
var errorModel *projModels.ErrorModel
var allProjectsModel *projectsRESTApi.SlicedProjectsResponseModel
var errorModel *projectsRESTApi.ErrorModel
var err error
limit, offset := getLimitAndOffset(cmd)

allProjectsModel, errorModel, err = projectsWrapper.Get()
allProjectsModel, errorModel, err = projectsWrapper.Get(limit, offset)
if err != nil {
return errors.Wrapf(err, "%s\n", failedGettingAll)
}
// Checking the response
if errorModel != nil {
return errors.Errorf("%s: CODE: %d, %s\n", failedGettingAll, errorModel.Code, errorModel.Message)
} else if allProjectsModel != nil && allProjectsModel.Projects != nil {
for _, proj := range allProjectsModel.Projects {
fmt.Println("----------------------------")
fmt.Printf("Project ID %s:\n", proj.ID)
cmdOut := cmd.OutOrStdout()
if cmdOut != os.Stdout {
var allProjectsJSON []byte
allProjectsJSON, err = json.Marshal(allProjectsModel)
if err != nil {
return errors.Wrapf(err, "%s: failed to serialize project response ", failedGettingAll)
}
fmt.Fprintln(cmdOut, string(allProjectsJSON))
}
fmt.Println("----------------------------")
for _, project := range allProjectsModel.Projects {
var responseModelJSON []byte
responseModelJSON, err = json.Marshal(project)
if err != nil {
return errors.Wrapf(err, "%s: failed to serialize project response ", failedGettingAll)
}
fmt.Fprintln(os.Stdout, "----------------------------")
fmt.Fprintln(os.Stdout, string(responseModelJSON))
}
fmt.Fprintln(os.Stdout, "----------------------------")
}
return nil
}
}

func runGetProjectByIDCommand(projectsWrapper wrappers.ProjectsWrapper) func(cmd *cobra.Command, args []string) error {
return func(cmd *cobra.Command, args []string) error {
var projectResponseModel *projModels.ProjectResponseModel
var errorModel *projModels.ErrorModel
var projectResponseModel *projectsRESTApi.ProjectResponseModel
var errorModel *projectsRESTApi.ErrorModel
var err error
if len(args) == 0 {
return errors.Errorf("%s: Please provide a project ID", failedGettingProj)
Expand All @@ -164,30 +188,34 @@ func runGetProjectByIDCommand(projectsWrapper wrappers.ProjectsWrapper) func(cmd
if errorModel != nil {
return errors.Errorf("%s: CODE: %d, %s", failedGettingProj, errorModel.Code, errorModel.Message)
} else if projectResponseModel != nil {
fmt.Printf("Project ID %s:\n", projectResponseModel.ID)
var responseModelJSON []byte
responseModelJSON, err = json.Marshal(projectResponseModel)
if err != nil {
return errors.Wrapf(err, "%s: failed to serialize scan response ", failedGetting)
}
cmdOut := cmd.OutOrStdout()
fmt.Fprintf(os.Stdout, "-----Project ID %s-----\n", projectResponseModel.ID)
fmt.Fprintln(cmdOut, string(responseModelJSON))
}
return nil
}
}

func runDeleteProjectCommand(projectsWrapper wrappers.ProjectsWrapper) func(cmd *cobra.Command, args []string) error {
return func(cmd *cobra.Command, args []string) error {
var projectResponseModel *projModels.ProjectResponseModel
var errorModel *projModels.ErrorModel
var errorModel *projectsRESTApi.ErrorModel
var err error
if len(args) == 0 {
return errors.Errorf("%s: Please provide a project ID", failedDeletingProj)
}
projectID := args[0]
projectResponseModel, errorModel, err = projectsWrapper.Delete(projectID)
errorModel, err = projectsWrapper.Delete(projectID)
if err != nil {
return errors.Wrapf(err, "%s\n", failedDeletingProj)
}
// Checking the response
if errorModel != nil {
return errors.Errorf("%s: CODE: %d, %s\n", failedDeletingProj, errorModel.Code, errorModel.Message)
} else if projectResponseModel != nil {
fmt.Printf("Project ID %s:\n", projectResponseModel.ID)
}
return nil
}
Expand All @@ -196,7 +224,7 @@ func runDeleteProjectCommand(projectsWrapper wrappers.ProjectsWrapper) func(cmd
func runGetProjectsTagsCommand(projectsWrapper wrappers.ProjectsWrapper) func(cmd *cobra.Command, args []string) error {
return func(cmd *cobra.Command, args []string) error {
var tags *[]string
var errorModel *projModels.ErrorModel
var errorModel *projectsRESTApi.ErrorModel
var err error
tags, errorModel, err = projectsWrapper.Tags()
if err != nil {
Expand All @@ -206,10 +234,14 @@ func runGetProjectsTagsCommand(projectsWrapper wrappers.ProjectsWrapper) func(cm
if errorModel != nil {
return errors.Errorf("%s: CODE: %d, %s", failedGettingTags, errorModel.Code, errorModel.Message)
} else if tags != nil {
fmt.Println("Tags:")
for _, t := range *tags {
fmt.Println(t)
var tagsJSON []byte
tagsJSON, err = json.Marshal(tags)
if err != nil {
return errors.Wrapf(err, "%s: failed to serialize project tags response ", failedGettingTags)
}
cmdOut := cmd.OutOrStdout()
fmt.Fprintln(os.Stdout, "-----Tags-----")
fmt.Fprintln(cmdOut, string(tagsJSON))
}
return nil
}
Expand Down
Loading