Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: align tmp and cache dir #4257

Merged
merged 1 commit into from Dec 28, 2022
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.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
6 changes: 1 addition & 5 deletions cliv2/internal/embedded/cliv1/cliv1.go
Expand Up @@ -21,11 +21,7 @@ func CLIV1Version() string {
func GetFullCLIV1TargetPath(cacheDir string) (string, error) {
cliv1Filename := getCLIv1Filename()
versionTag := CLIV1Version()
relPath := path.Join(versionTag, cliv1Filename)
fullPath, err := utils.FullPathInSnykCacheDir(cacheDir, relPath)
if err != nil {
return "", err
}
fullPath := path.Join(utils.GetVersionCacheDirectory(cacheDir, versionTag), cliv1Filename)
return fullPath, nil
}

Expand Down
9 changes: 2 additions & 7 deletions cliv2/internal/proxy/proxy.go
Expand Up @@ -58,13 +58,8 @@ func NewWrapperProxy(insecureSkipVerify bool, cacheDirectory string, cliVersion
return nil, err
}

tempDir, err := utils.SnykTempDirectory(p.DebugLogger)
if err != nil {
p.DebugLogger.Println("failed to create system temp directory:", tempDir)
return nil, err
}

certFile, err := os.CreateTemp(tempDir, "snyk-cli-cert-*.crt")
tmpDirectory := utils.GetTemporaryDirectory(cacheDirectory, cliVersion)
certFile, err := os.CreateTemp(tmpDirectory, "snyk-cli-cert-*.crt")
if err != nil {
fmt.Println("failed to create temp cert file")
return nil, err
Expand Down
52 changes: 46 additions & 6 deletions cliv2/internal/proxy/proxy_test.go
Expand Up @@ -15,6 +15,7 @@ import (

"github.com/snyk/cli/cliv2/internal/constants"
"github.com/snyk/cli/cliv2/internal/proxy"
"github.com/snyk/cli/cliv2/internal/utils"
"github.com/snyk/go-application-framework/pkg/networking/certs"
"github.com/snyk/go-httpauth/pkg/httpauth"

Expand Down Expand Up @@ -64,8 +65,23 @@ func helper_getHttpClient(gateway *proxy.WrapperProxy, useProxyAuth bool) (*http
return proxiedClient, nil
}

func setup(t *testing.T, baseCache string, version string) {
err := utils.CreateAllDirectories(baseCache, version)
assert.Nil(t, err)
}

func teardown(t *testing.T, baseCache string) {
err := os.RemoveAll(baseCache)
assert.Nil(t, err)
}

func Test_closingProxyDeletesTempCert(t *testing.T) {
wp, err := proxy.NewWrapperProxy(false, "", "", debugLogger)
basecache := "testcache"
version := "1.1.1"
setup(t, basecache, version)
defer teardown(t, basecache)

wp, err := proxy.NewWrapperProxy(false, basecache, version, debugLogger)
assert.Nil(t, err)

err = wp.Start()
Expand All @@ -84,7 +100,12 @@ func basicAuthValue(username string, password string) string {
}

func Test_canGoThroughProxy(t *testing.T) {
wp, err := proxy.NewWrapperProxy(false, "", "", debugLogger)
basecache := "testcache"
version := "1.1.1"
setup(t, basecache, version)
defer teardown(t, basecache)

wp, err := proxy.NewWrapperProxy(false, basecache, version, debugLogger)
assert.Nil(t, err)

err = wp.Start()
Expand All @@ -108,7 +129,12 @@ func Test_canGoThroughProxy(t *testing.T) {
}

func Test_proxyRejectsWithoutBasicAuthHeader(t *testing.T) {
wp, err := proxy.NewWrapperProxy(false, "", "", debugLogger)
basecache := "testcache"
version := "1.1.1"
setup(t, basecache, version)
defer teardown(t, basecache)

wp, err := proxy.NewWrapperProxy(false, basecache, version, debugLogger)
assert.Nil(t, err)

err = wp.Start()
Expand All @@ -131,8 +157,12 @@ func Test_proxyRejectsWithoutBasicAuthHeader(t *testing.T) {
}

func Test_xSnykCliVersionHeaderIsReplaced(t *testing.T) {
basecache := "testcache"
expectedVersion := "the-cli-version"
wp, err := proxy.NewWrapperProxy(false, "", expectedVersion, debugLogger)
setup(t, basecache, expectedVersion)
defer teardown(t, basecache)

wp, err := proxy.NewWrapperProxy(false, basecache, expectedVersion, debugLogger)
assert.Nil(t, err)

err = wp.Start()
Expand Down Expand Up @@ -175,6 +205,11 @@ func Test_xSnykCliVersionHeaderIsReplaced(t *testing.T) {
}

func Test_SetUpstreamProxy(t *testing.T) {
basecache := "testcache"
version := "1.1.1"
setup(t, basecache, version)
defer teardown(t, basecache)

var err error
var objectUnderTest *proxy.WrapperProxy

Expand All @@ -192,7 +227,7 @@ func Test_SetUpstreamProxy(t *testing.T) {
httpauth.UnknownMechanism,
}

objectUnderTest, err = proxy.NewWrapperProxy(false, "", "", debugLogger)
objectUnderTest, err = proxy.NewWrapperProxy(false, basecache, version, debugLogger)
assert.Nil(t, err)

// running different cases
Expand Down Expand Up @@ -222,13 +257,18 @@ func Test_SetUpstreamProxy(t *testing.T) {
}

func Test_appendExtraCaCert(t *testing.T) {
basecache := "testcache"
version := "1.1.1"
setup(t, basecache, version)
defer teardown(t, basecache)

certPem, _, _ := certs.MakeSelfSignedCert("mycert", []string{"dns"}, debugLogger)
file, _ := os.CreateTemp("", "")
file.Write(certPem)

os.Setenv(constants.SNYK_CA_CERTIFICATE_LOCATION_ENV, file.Name())

wp, err := proxy.NewWrapperProxy(false, "", "", debugLogger)
wp, err := proxy.NewWrapperProxy(false, basecache, version, debugLogger)
assert.Nil(t, err)

certsPem, err := os.ReadFile(wp.CertificateLocation)
Expand Down
25 changes: 0 additions & 25 deletions cliv2/internal/utils/cache-dir.go

This file was deleted.

36 changes: 36 additions & 0 deletions cliv2/internal/utils/directories.go
@@ -0,0 +1,36 @@
package utils

import (
"os"
"path"

"github.com/pkg/errors"
)

// The directory structure used to cache things into
// - Base cache directory (user definable, default depends on OS, exmple: /Users/username/Library/Caches/snyk/)
// |- Version cache directory (example: /Users/username/Library/Caches/snyk/1.1075.0/)
// |- Temp directory (example: /Users/username/Library/Caches/snyk/1.1075.0/tmp/)

func GetTemporaryDirectory(baseCacheDirectory string, versionNumber string) string {
return path.Join(GetVersionCacheDirectory(baseCacheDirectory, versionNumber), "tmp")
}

func GetVersionCacheDirectory(baseCacheDirectory string, versionNumber string) string {
return path.Join(baseCacheDirectory, versionNumber)
}

func CreateAllDirectories(baseCacheDirectory string, versionNumber string) error {
directoryList := []string{
GetTemporaryDirectory(baseCacheDirectory, versionNumber),
}

for _, dir := range directoryList {
err := os.MkdirAll(dir, 0755)
if err != nil {
return errors.Wrap(err, "failed to create all directories.")
}
}

return nil
}
47 changes: 0 additions & 47 deletions cliv2/internal/utils/temp-dir.go

This file was deleted.

6 changes: 6 additions & 0 deletions cliv2/pkg/basic_workflows/legacycli.go
Expand Up @@ -68,6 +68,12 @@ func legacycliWorkflow(invocation workflow.InvocationContext, input []workflow.D
debugLogger.Println("Insecure HTTPS:", insecure)
debugLogger.Println("Use StdIO:", useStdIo)

// prepare environment by creating all required folders in advance
err = utils.CreateAllDirectories(cacheDirectory, cliv2.GetFullVersion())
if err != nil {
return output, err
}

// init cli object
var cli *cliv2.CLI
cli, err = cliv2.NewCLIv2(cacheDirectory, debugLogger)
Expand Down