mirror of
https://github.com/kubescape/kubescape.git
synced 2026-02-14 18:09:55 +00:00
* Interfaces are unchanged
* Deprecated: low-level API funcs marked for deprecation:
HttpPost, HttpGetter, HttpDelete (an augmented version of the KS Cloud
client will expose the post report API, which is currently the sole
use-case of low-level API)
* Doc: the package is now godoc-friendly
* Style & code layout:
* listed all exposed types via aliases, for clarity/less confusing
imports
* unexported private types
* factorized query param logic
* factorized type <-> JSON using generic func & io.Reader
* "utils" are now limited to a few common utility functions
* centralized hard-coded strings as (unexported) constants
* concision: use higher-level http definitions such as constants,
cookie methods, etc
* included type-safety guards to verify that interfaces are
actually implemented by the exported types
* Tests: existing test assertions are unchanged
* tests are beefed-up to assert proper authentication flow (token & cookie).
* added unit tests for utility methods
* Perf:
* unmarshalling API responses is now flowing without extraneous memory allocation via string representation
* request headers are now passed withot extraneous map allocation
* JSON operations are now fully supported by jsoniter (no longer use encoding/json)
* Changes in functionality:
* the client is now fully extensible with KSCloudOption
* use the option functor idiom to keep constructors short
* methods that used to mute errors (i.e. return nil, nil) now bubble up errors
* the captured cookie is now captured in full, not just its value
(other cookie parameters returned are stored)
* added a request/response dump option, for debugging
* added support for SubmitReport and retrieval of UI url's
* backported utm changes (reports use case)
Signed-off-by: Frederic BIDON <fredbi@yahoo.com>
96 lines
2.6 KiB
Go
96 lines
2.6 KiB
Go
package cmd
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
|
|
logger "github.com/kubescape/go-logger"
|
|
"github.com/kubescape/go-logger/helpers"
|
|
"github.com/kubescape/kubescape/v2/core/cautils/getter"
|
|
|
|
"github.com/mattn/go-isatty"
|
|
)
|
|
|
|
const envFlagUsage = "Send report results to specific URL. Format:<ReportReceiver>,<Backend>,<Frontend>.\n\t\tExample:report.armo.cloud,api.armo.cloud,portal.armo.cloud"
|
|
|
|
func initLogger() {
|
|
logger.DisableColor(rootInfo.DisableColor)
|
|
logger.EnableColor(rootInfo.EnableColor)
|
|
|
|
if rootInfo.LoggerName == "" {
|
|
if l := os.Getenv("KS_LOGGER_NAME"); l != "" {
|
|
rootInfo.LoggerName = l
|
|
} else {
|
|
if isatty.IsTerminal(os.Stdout.Fd()) {
|
|
rootInfo.LoggerName = "pretty"
|
|
} else {
|
|
rootInfo.LoggerName = "zap"
|
|
}
|
|
}
|
|
}
|
|
|
|
logger.InitLogger(rootInfo.LoggerName)
|
|
|
|
}
|
|
func initLoggerLevel() {
|
|
if rootInfo.Logger == helpers.InfoLevel.String() {
|
|
} else if l := os.Getenv("KS_LOGGER"); l != "" {
|
|
rootInfo.Logger = l
|
|
}
|
|
|
|
if err := logger.L().SetLevel(rootInfo.Logger); err != nil {
|
|
logger.L().Fatal(fmt.Sprintf("supported levels: %s", strings.Join(helpers.SupportedLevels(), "/")), helpers.Error(err))
|
|
}
|
|
}
|
|
|
|
func initCacheDir() {
|
|
if rootInfo.CacheDir != getter.DefaultLocalStore {
|
|
getter.DefaultLocalStore = rootInfo.CacheDir
|
|
} else if cacheDir := os.Getenv("KS_CACHE_DIR"); cacheDir != "" {
|
|
getter.DefaultLocalStore = cacheDir
|
|
} else {
|
|
return // using default cache dir location
|
|
}
|
|
|
|
logger.L().Debug("cache dir updated", helpers.String("path", getter.DefaultLocalStore))
|
|
}
|
|
func initEnvironment() {
|
|
if rootInfo.KSCloudBEURLs == "" {
|
|
rootInfo.KSCloudBEURLs = rootInfo.KSCloudBEURLsDep
|
|
}
|
|
urlSlices := strings.Split(rootInfo.KSCloudBEURLs, ",")
|
|
if len(urlSlices) != 1 && len(urlSlices) < 3 {
|
|
logger.L().Fatal("expected at least 3 URLs (report, api, frontend, auth)")
|
|
}
|
|
switch len(urlSlices) {
|
|
case 1:
|
|
switch urlSlices[0] {
|
|
case "dev", "development":
|
|
getter.SetKSCloudAPIConnector(getter.NewKSCloudAPIDev())
|
|
case "stage", "staging":
|
|
getter.SetKSCloudAPIConnector(getter.NewKSCloudAPIStaging())
|
|
case "":
|
|
getter.SetKSCloudAPIConnector(getter.NewKSCloudAPIProd())
|
|
default:
|
|
logger.L().Fatal("--environment flag usage: " + envFlagUsage)
|
|
}
|
|
case 2:
|
|
logger.L().Fatal("--environment flag usage: " + envFlagUsage)
|
|
case 3, 4:
|
|
var ksAuthURL string
|
|
ksEventReceiverURL := urlSlices[0] // mandatory
|
|
ksBackendURL := urlSlices[1] // mandatory
|
|
ksFrontendURL := urlSlices[2] // mandatory
|
|
if len(urlSlices) >= 4 {
|
|
ksAuthURL = urlSlices[3]
|
|
}
|
|
|
|
getter.SetKSCloudAPIConnector(getter.NewKSCloudAPICustomized(
|
|
ksBackendURL, ksAuthURL,
|
|
getter.WithReportURL(ksEventReceiverURL),
|
|
getter.WithFrontendURL(ksFrontendURL),
|
|
))
|
|
}
|
|
}
|