This commit is contained in:
2023-12-14 17:52:12 +03:00
parent 84c0248019
commit f111787976
3 changed files with 62 additions and 86 deletions

View File

@@ -1,7 +1,4 @@
## Version 1.6.8 ## Version 1.6.10
## Feature
- Add IDs() methods returning array of uint64 IDs for all List* structs in cloudapi/cloudbroker groups
## Bugfix ## Bugfix
- Fix field Audit in CloudBrokerEndpoints model in cloudbroker/apiaccess - Fix panic for nil pointer response reference in client and legacy-client

View File

@@ -4,7 +4,6 @@ import (
"bytes" "bytes"
"context" "context"
"crypto/tls" "crypto/tls"
"errors"
"fmt" "fmt"
"io" "io"
"mime/multipart" "mime/multipart"
@@ -97,22 +96,11 @@ func (dc *DecortClient) DecortApiCall(ctx context.Context, method, url string, p
return nil, err return nil, err
} }
resp, err := dc.do(req, ctype) // perform request
if err != nil { var respBytes []byte
return nil, err respBytes, err = dc.do(req, ctype)
}
defer resp.Body.Close()
respBytes, err := io.ReadAll(resp.Body) return respBytes, err
if err != nil {
return nil, err
}
if resp.StatusCode != 200 {
return nil, errors.New(string(respBytes))
}
return respBytes, nil
} }
func (dc *DecortClient) getToken(ctx context.Context) error { func (dc *DecortClient) getToken(ctx context.Context) error {
@@ -149,7 +137,7 @@ func (dc *DecortClient) getToken(ctx context.Context) error {
return nil return nil
} }
func (dc *DecortClient) do(req *http.Request, ctype string) (*http.Response, error) { func (dc *DecortClient) do(req *http.Request, ctype string) ([]byte, error) {
if ctype != "" { if ctype != "" {
req.Header.Add("Content-Type", ctype) req.Header.Add("Content-Type", ctype)
} else { } else {
@@ -159,31 +147,34 @@ func (dc *DecortClient) do(req *http.Request, ctype string) (*http.Response, err
req.Header.Add("Authorization", "bearer "+dc.cfg.Token) req.Header.Add("Authorization", "bearer "+dc.cfg.Token)
req.Header.Set("Accept", "application/json") req.Header.Set("Accept", "application/json")
// var resp *http.Response buf, err := io.ReadAll(req.Body)
// var err error if err != nil {
buf, _ := io.ReadAll(req.Body) return nil, err
// req = req.Clone(req.Context())
// for i := uint64(0); i < dc.cfg.Retries; i++ {
req.Body = io.NopCloser(bytes.NewBuffer(buf))
resp, err := dc.client.Do(req)
// if err == nil {
if resp.StatusCode == 200 {
return resp, err
} }
respBytes, _ := io.ReadAll(resp.Body)
err = fmt.Errorf("%s", respBytes)
resp.Body.Close()
// }
// }
req.Body = io.NopCloser(bytes.NewBuffer(buf))
resp, err := dc.client.Do(req)
if err != nil || resp == nil {
return nil, err
}
defer resp.Body.Close()
// handle successful request
respBytes, _ := io.ReadAll(resp.Body)
if resp.StatusCode == 200 {
return respBytes, nil
}
// handle errors with status code other than 200
err = fmt.Errorf("%s", respBytes)
return nil, fmt.Errorf("could not execute request: %w", err) return nil, fmt.Errorf("could not execute request: %w", err)
} }
func createK8sCloudApi(req k8s_ca.CreateRequest) (*bytes.Buffer, string) { func createK8sCloudApi(req k8s_ca.CreateRequest) (*bytes.Buffer, string) {
reqBody := &bytes.Buffer{} reqBody := &bytes.Buffer{}
writer := multipart.NewWriter(reqBody) writer := multipart.NewWriter(reqBody)
defer writer.Close()
if req.OidcCertificate != "" { if req.OidcCertificate != "" {
part, _ := writer.CreateFormFile("oidcCertificate", "ca.crt") part, _ := writer.CreateFormFile("oidcCertificate", "ca.crt")
_, _ = io.Copy(part, strings.NewReader(req.OidcCertificate)) _, _ = io.Copy(part, strings.NewReader(req.OidcCertificate))
@@ -290,14 +281,13 @@ func createK8sCloudApi(req k8s_ca.CreateRequest) (*bytes.Buffer, string) {
_ = writer.WriteField("extnetOnly", strconv.FormatBool(req.ExtNetOnly)) _ = writer.WriteField("extnetOnly", strconv.FormatBool(req.ExtNetOnly))
ct := writer.FormDataContentType() ct := writer.FormDataContentType()
writer.Close()
return reqBody, ct return reqBody, ct
} }
func createK8sCloudBroker(req k8s_cb.CreateRequest) (*bytes.Buffer, string) { func createK8sCloudBroker(req k8s_cb.CreateRequest) (*bytes.Buffer, string) {
reqBody := &bytes.Buffer{} reqBody := &bytes.Buffer{}
writer := multipart.NewWriter(reqBody) writer := multipart.NewWriter(reqBody)
defer writer.Close()
if req.OidcCertificate != "" { if req.OidcCertificate != "" {
part, _ := writer.CreateFormFile("oidcCertificate", "ca.crt") part, _ := writer.CreateFormFile("oidcCertificate", "ca.crt")
_, _ = io.Copy(part, strings.NewReader(req.OidcCertificate)) _, _ = io.Copy(part, strings.NewReader(req.OidcCertificate))
@@ -402,9 +392,7 @@ func createK8sCloudBroker(req k8s_cb.CreateRequest) (*bytes.Buffer, string) {
} }
_ = writer.WriteField("extnetOnly", strconv.FormatBool(req.ExtNetOnly)) _ = writer.WriteField("extnetOnly", strconv.FormatBool(req.ExtNetOnly))
ct := writer.FormDataContentType()
writer.Close() ct := writer.FormDataContentType()
return reqBody, ct return reqBody, ct
} }

View File

@@ -4,7 +4,6 @@ import (
"bytes" "bytes"
"context" "context"
"crypto/tls" "crypto/tls"
"errors"
"fmt" "fmt"
"io" "io"
"mime/multipart" "mime/multipart"
@@ -78,7 +77,7 @@ func (ldc *LegacyDecortClient) DecortApiCall(ctx context.Context, method, url st
k8sCaCreateReq, okCa := params.(k8s_ca.CreateRequest) k8sCaCreateReq, okCa := params.(k8s_ca.CreateRequest)
k8sCbCreateReq, okCb := params.(k8s_cb.CreateRequest) k8sCbCreateReq, okCb := params.(k8s_cb.CreateRequest)
var body *bytes.Buffer var body *bytes.Buffer
var ctype string var ctype string
@@ -93,28 +92,17 @@ func (ldc *LegacyDecortClient) DecortApiCall(ctx context.Context, method, url st
} }
body = bytes.NewBufferString(values.Encode() + fmt.Sprintf("&authkey=%s", ldc.cfg.Token)) body = bytes.NewBufferString(values.Encode() + fmt.Sprintf("&authkey=%s", ldc.cfg.Token))
} }
req, err := http.NewRequestWithContext(ctx, method, ldc.decortURL+"/restmachine"+url, body) req, err := http.NewRequestWithContext(ctx, method, ldc.decortURL+"/restmachine"+url, body)
if err != nil { if err != nil {
return nil, err return nil, err
} }
resp, err := ldc.do(req, ctype) // perform request
if err != nil { var respBytes []byte
return nil, err respBytes, err = ldc.do(req, ctype)
}
defer resp.Body.Close()
respBytes, err := io.ReadAll(resp.Body) return respBytes, err
if err != nil {
return nil, err
}
if resp.StatusCode != 200 {
return nil, errors.New(string(respBytes))
}
return respBytes, nil
} }
func (ldc *LegacyDecortClient) getToken(ctx context.Context) error { func (ldc *LegacyDecortClient) getToken(ctx context.Context) error {
@@ -148,7 +136,7 @@ func (ldc *LegacyDecortClient) getToken(ctx context.Context) error {
return nil return nil
} }
func (ldc *LegacyDecortClient) do(req *http.Request, ctype string) (*http.Response, error) { func (ldc *LegacyDecortClient) do(req *http.Request, ctype string) ([]byte, error) {
if ctype != "" { if ctype != "" {
req.Header.Add("Content-Type", ctype) req.Header.Add("Content-Type", ctype)
} else { } else {
@@ -156,32 +144,38 @@ func (ldc *LegacyDecortClient) do(req *http.Request, ctype string) (*http.Respon
} }
req.Header.Set("Accept", "application/json") req.Header.Set("Accept", "application/json")
// var resp *http.Response buf, err := io.ReadAll(req.Body)
// var err error if err != nil {
buf, _ := io.ReadAll(req.Body) return nil, err
// req = req.Clone(req.Context())
// for i := uint64(0); i < ldc.cfg.Retries; i++ {
req.Body = io.NopCloser(bytes.NewBuffer(buf))
resp, err := ldc.client.Do(req)
// if err == nil {
if resp.StatusCode == 200 {
return resp, err
} }
respBytes, _ := io.ReadAll(resp.Body) req.Body.Close()
err = fmt.Errorf("%s", respBytes) req.Body = io.NopCloser(bytes.NewBuffer(buf))
resp.Body.Close()
// }
// }
resp, err := ldc.client.Do(req)
if err != nil || resp == nil {
return nil, err
}
defer resp.Body.Close()
// handle successful request
respBytes, err := io.ReadAll(resp.Body)
if err!= nil {
return nil, err
}
if resp.StatusCode == 200 {
return respBytes, nil
}
// handle errors with status code other than 200
err = fmt.Errorf("%s", respBytes)
return nil, fmt.Errorf("could not execute request: %w", err) return nil, fmt.Errorf("could not execute request: %w", err)
} }
func createK8sCloudApiLegacy(req k8s_ca.CreateRequest, token string) (*bytes.Buffer, string) { func createK8sCloudApiLegacy(req k8s_ca.CreateRequest, token string) (*bytes.Buffer, string) {
reqBody := &bytes.Buffer{} reqBody := &bytes.Buffer{}
writer := multipart.NewWriter(reqBody) writer := multipart.NewWriter(reqBody)
defer writer.Close()
if req.OidcCertificate != "" { if req.OidcCertificate != "" {
part, _ := writer.CreateFormFile("oidcCertificate", "ca.crt") part, _ := writer.CreateFormFile("oidcCertificate", "ca.crt")
_, _ = io.Copy(part, strings.NewReader(req.OidcCertificate)) _, _ = io.Copy(part, strings.NewReader(req.OidcCertificate))
@@ -290,14 +284,13 @@ func createK8sCloudApiLegacy(req k8s_ca.CreateRequest, token string) (*bytes.Buf
_ = writer.WriteField("authkey", token) _ = writer.WriteField("authkey", token)
ct := writer.FormDataContentType() ct := writer.FormDataContentType()
writer.Close()
return reqBody, ct return reqBody, ct
} }
func createK8sCloudBrokerLegacy(req k8s_cb.CreateRequest, token string) (*bytes.Buffer, string) { func createK8sCloudBrokerLegacy(req k8s_cb.CreateRequest, token string) (*bytes.Buffer, string) {
reqBody := &bytes.Buffer{} reqBody := &bytes.Buffer{}
writer := multipart.NewWriter(reqBody) writer := multipart.NewWriter(reqBody)
defer writer.Close()
if req.OidcCertificate != "" { if req.OidcCertificate != "" {
part, _ := writer.CreateFormFile("oidcCertificate", "ca.crt") part, _ := writer.CreateFormFile("oidcCertificate", "ca.crt")
_, _ = io.Copy(part, strings.NewReader(req.OidcCertificate)) _, _ = io.Copy(part, strings.NewReader(req.OidcCertificate))
@@ -402,11 +395,9 @@ func createK8sCloudBrokerLegacy(req k8s_cb.CreateRequest, token string) (*bytes.
} }
_ = writer.WriteField("extnetOnly", strconv.FormatBool(req.ExtNetOnly)) _ = writer.WriteField("extnetOnly", strconv.FormatBool(req.ExtNetOnly))
_ = writer.WriteField("authkey", token) _ = writer.WriteField("authkey", token)
ct := writer.FormDataContentType() ct := writer.FormDataContentType()
writer.Close()
return reqBody, ct return reqBody, ct
} }