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
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@ bin
.env
dist/
epcc-cli
epcc
epcc
profiles
3 changes: 2 additions & 1 deletion cmd/commercemanager.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package cmd
import (
"fmt"
"github.com/elasticpath/epcc-cli/config"
"github.com/elasticpath/epcc-cli/shared"
log "github.com/sirupsen/logrus"
"github.com/spf13/cobra"
"net/url"
Expand All @@ -28,7 +29,7 @@ var cmCommand = &cobra.Command{
if cmUrl == "" {
return fmt.Errorf("Don't know where Commerce Manager is for $EPCC_API_BASE_URL=%s \n", u)
}
err = OpenUrl(cmUrl)
err = shared.OpenUrl(cmUrl)
if err != nil {
return err
}
Expand Down
1 change: 0 additions & 1 deletion cmd/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,6 @@ var create = &cobra.Command{
}

aliases.SaveAliasesForResources(string(resBody))

return json.PrintJson(string(resBody))
},

Expand Down
13 changes: 7 additions & 6 deletions cmd/docs.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"fmt"
"github.com/elasticpath/epcc-cli/external/completion"
"github.com/elasticpath/epcc-cli/external/resources"
"github.com/elasticpath/epcc-cli/shared"
"github.com/spf13/cobra"
)

Expand Down Expand Up @@ -51,32 +52,32 @@ func openDoc(resourceDoc resources.Resource, verb string) error {
if len(resourceDoc.Docs) < 1 {
err = doDefault()
}
err = OpenUrl(resourceDoc.Docs)
err = shared.OpenUrl(resourceDoc.Docs)
case "get-collection":
if resourceDoc.GetCollectionInfo != nil && len(resourceDoc.GetCollectionInfo.Docs) < 1 {
err = doDefault()
}
err = OpenUrl(resourceDoc.GetCollectionInfo.Docs)
err = shared.OpenUrl(resourceDoc.GetCollectionInfo.Docs)
case "get":
if resourceDoc.GetEntityInfo != nil && len(resourceDoc.GetEntityInfo.Docs) < 1 {
err = doDefault()
}
err = OpenUrl(resourceDoc.GetEntityInfo.Docs)
err = shared.OpenUrl(resourceDoc.GetEntityInfo.Docs)
case "update":
if resourceDoc.UpdateEntityInfo != nil && len(resourceDoc.UpdateEntityInfo.Docs) < 1 {
err = doDefault()
}
err = OpenUrl(resourceDoc.UpdateEntityInfo.Docs)
err = shared.OpenUrl(resourceDoc.UpdateEntityInfo.Docs)
case "delete":
if resourceDoc.DeleteEntityInfo != nil && len(resourceDoc.DeleteEntityInfo.Docs) < 1 {
err = doDefault()
}
err = OpenUrl(resourceDoc.DeleteEntityInfo.Docs)
err = shared.OpenUrl(resourceDoc.DeleteEntityInfo.Docs)
case "create":
if resourceDoc.CreateEntityInfo != nil && len(resourceDoc.CreateEntityInfo.Docs) < 1 {
err = doDefault()
}
err = OpenUrl(resourceDoc.CreateEntityInfo.Docs)
err = shared.OpenUrl(resourceDoc.CreateEntityInfo.Docs)
default:
return fmt.Errorf("Could not find verb %s", verb)

Expand Down
52 changes: 52 additions & 0 deletions cmd/logs.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package cmd

import (
"fmt"
"github.com/elasticpath/epcc-cli/shared"
"github.com/spf13/cobra"
"os"
"strings"
)

var logsClear = &cobra.Command{
Use: "clear",
Short: "Clears all Http logs",
RunE: func(cmd *cobra.Command, args []string) error {
os.RemoveAll(shared.LogDirectory)
return nil
},
}

var logsList = &cobra.Command{
Use: "list",
Short: "List All Http logs",
RunE: func(cmd *cobra.Command, args []string) error {
Comment thread
mahsaelasticpath marked this conversation as resolved.
files := shared.AllFilesSortedByDate(shared.LogDirectory)
for i := 0; i < len(files); i++ {
name, _ := shared.Base64DecodeStripped(files[i].Name())
fmt.Println(name)
}
return nil
},
}

var logsShow = &cobra.Command{
Use: "show <NUMBER>",
Short: "Show Http logs for specific number",
Args: cobra.MinimumNArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
files := shared.AllFilesSortedByDate(shared.LogDirectory)
for i := 0; i < len(files); i++ {
name, _ := shared.Base64DecodeStripped(files[i].Name())
segments := strings.Split(name, " ")
if segments[0] == args[0] {
fmt.Println(name)
break
}
}

return nil
},
}

var logs = &cobra.Command{Use: "logs"}
2 changes: 2 additions & 0 deletions cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,11 @@ func init() {
create,
delete,
update,
logs,
resourceListCommand,
aliasesCmd,
)
logs.AddCommand(logsList, logsShow, logsClear)

testJson.Flags().BoolVarP(&noWrapping, "no-wrapping", "", false, "if set, we won't wrap the output the json in a data tag")
testJson.Flags().BoolVarP(&compliant, "compliant", "", false, "if set, we wrap most keys in an attributes tage automatically.")
Expand Down
23 changes: 0 additions & 23 deletions cmd/share.go

This file was deleted.

51 changes: 51 additions & 0 deletions external/httpclient/httpclient.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,17 @@ import (
"github.com/elasticpath/epcc-cli/external/json"
"github.com/elasticpath/epcc-cli/external/version"
"github.com/elasticpath/epcc-cli/globals"
"github.com/elasticpath/epcc-cli/shared"
log "github.com/sirupsen/logrus"
"io"
"io/fs"
"io/ioutil"
"mime/multipart"
"net/http"
"net/http/httputil"
"net/url"
"os"
"strconv"
"strings"
"time"
)
Expand Down Expand Up @@ -92,6 +97,17 @@ func doRequestInternal(ctx context.Context, method string, contentType string, p
} else if resp.StatusCode >= 200 && resp.StatusCode <= 399 {
log.Infof("%s %s ==> %s %s", method, reqURL.String(), resp.Proto, resp.Status)
}
dumpReq, err := httputil.DumpRequestOut(req, true)
if err != nil {
log.Error(err)
}

dumpRes, err := httputil.DumpResponse(resp, true)
if err != nil {
log.Error(err)
}

logToDisk(method, path, dumpReq, dumpRes, resp.StatusCode)

return resp, err
}
Expand Down Expand Up @@ -135,3 +151,38 @@ func AddHeaderByFlag(r *http.Request) error {
}
return nil
}

func logToDisk(requestMethod string, requestPath string, requestBytes []byte, responseBytes []byte, responseCode int) error {
os.Mkdir(shared.LogDirectory, os.ModePerm)
var logNumber = 1
lastFile := getLastFile(shared.LogDirectory)
if lastFile != nil {
decodedFileNAme, err := shared.Base64DecodeStripped((*lastFile).Name())
if err != nil {
return err
}

fileNameParts := strings.Split(decodedFileNAme, " ")
logNumber, _ = strconv.Atoi(fileNameParts[0])
logNumber++
}

filename := shared.Base64EncodeStripped(fmt.Sprintf("%d %s %s ==> %d", logNumber, requestMethod, requestPath, responseCode))
f, err := os.Create(fmt.Sprintf("%s/%s", shared.LogDirectory, filename))
if err != nil {
return err
}
defer f.Close()
f.Write(requestBytes)
f.Write([]byte("\n"))
f.Write(responseBytes)
return nil
}

func getLastFile(logDirectory string) *fs.FileInfo {
all := shared.AllFilesSortedByDate(logDirectory)
if len(all) >= 1 {
return &all[len(all)-1]
}
return nil
}
51 changes: 51 additions & 0 deletions shared/share.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package shared

import (
b64 "encoding/base64"
"fmt"
"io/fs"
"io/ioutil"
"os/exec"
"runtime"
"sort"
"strings"
)

const LogDirectory = "profiles"

func OpenUrl(cmUrl string) error {
switch runtime.GOOS {
case "linux":
exec.Command("xdg-open", cmUrl).Start()
case "windows":
exec.Command("rundll32", "url.dll,FileProtocolHandler", cmUrl).Start()
case "darwin":
exec.Command("open", cmUrl).Start()
default:
return fmt.Errorf("unsupported platform")
}

return nil
}

func AllFilesSortedByDate(logDirectory string) []fs.FileInfo {
files, _ := ioutil.ReadDir(logDirectory)
sort.Slice(files, func(i, j int) bool {
return files[i].ModTime().Before(files[j].ModTime())
})

return files
}

func Base64EncodeStripped(s string) string {
encoded := b64.StdEncoding.EncodeToString([]byte(s))
return strings.TrimRight(encoded, "=")
}

func Base64DecodeStripped(s string) (string, error) {
if i := len(s) % 4; i != 0 {
s += strings.Repeat("=", 4-i)
}
decoded, err := b64.StdEncoding.DecodeString(s)
return string(decoded), err
}