mirror of
https://github.com/kubescape/kubescape.git
synced 2026-04-15 06:58:11 +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>
66 lines
1.5 KiB
Go
66 lines
1.5 KiB
Go
package getter
|
|
|
|
import (
|
|
"net/url"
|
|
"path"
|
|
)
|
|
|
|
// buildAPIURL builds an URL pointing to the API backend.
|
|
func (api *KSCloudAPI) buildAPIURL(pth string, pairs ...string) string {
|
|
return buildQuery(url.URL{
|
|
Scheme: api.scheme,
|
|
Host: api.host,
|
|
Path: pth,
|
|
}, pairs...)
|
|
}
|
|
|
|
// buildUIURL builds an URL pointing to the UI frontend.
|
|
func (api *KSCloudAPI) buildUIURL(pth string, pairs ...string) string {
|
|
return buildQuery(url.URL{
|
|
Scheme: api.uischeme,
|
|
Host: api.uihost,
|
|
Path: pth,
|
|
}, pairs...)
|
|
}
|
|
|
|
// buildAuthURL builds an URL pointing to the authentication endpoint.
|
|
func (api *KSCloudAPI) buildAuthURL(pth string, pairs ...string) string {
|
|
return buildQuery(url.URL{
|
|
Scheme: api.authscheme,
|
|
Host: api.authhost,
|
|
Path: pth,
|
|
}, pairs...)
|
|
}
|
|
|
|
// buildReportURL builds an URL pointing to the reporting endpoint.
|
|
func (api *KSCloudAPI) buildReportURL(pth string, pairs ...string) string {
|
|
return buildQuery(url.URL{
|
|
Scheme: api.reportscheme,
|
|
Host: api.reporthost,
|
|
Path: pth,
|
|
}, pairs...)
|
|
}
|
|
|
|
// buildQuery builds an URL with query params.
|
|
//
|
|
// Params are provided in pairs (param name, value).
|
|
func buildQuery(u url.URL, pairs ...string) string {
|
|
if len(pairs)%2 != 0 {
|
|
panic("dev error: buildURL accepts query params in (name, value) pairs")
|
|
}
|
|
|
|
q := u.Query()
|
|
|
|
for i := 0; i < len(pairs)-1; i += 2 {
|
|
param := pairs[i]
|
|
value := pairs[i+1]
|
|
|
|
q.Add(param, value)
|
|
}
|
|
|
|
u.RawQuery = q.Encode()
|
|
u.Path = path.Clean(u.Path)
|
|
|
|
return u.String()
|
|
}
|