Adding upstream version 1.34.4.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
e393c3af3f
commit
4978089aab
4963 changed files with 677545 additions and 0 deletions
81
plugins/outputs/quix/config.go
Normal file
81
plugins/outputs/quix/config.go
Normal file
|
@ -0,0 +1,81 @@
|
|||
package quix
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/base64"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
type brokerConfig struct {
|
||||
BootstrapServers string `json:"bootstrap.servers"`
|
||||
SaslMechanism string `json:"sasl.mechanism"`
|
||||
SaslUsername string `json:"sasl.username"`
|
||||
SaslPassword string `json:"sasl.password"`
|
||||
SecurityProtocol string `json:"security.protocol"`
|
||||
SSLCertBase64 string `json:"ssl.ca.cert"`
|
||||
|
||||
cert []byte
|
||||
}
|
||||
|
||||
func (q *Quix) fetchBrokerConfig() (*brokerConfig, error) {
|
||||
// Create request
|
||||
endpoint := fmt.Sprintf("%s/workspaces/%s/broker/librdkafka", q.APIURL, q.Workspace)
|
||||
req, err := http.NewRequest("GET", endpoint, nil)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("creating request failed: %w", err)
|
||||
}
|
||||
|
||||
// Setup authentication
|
||||
token, err := q.Token.Get()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("getting token failed: %w", err)
|
||||
}
|
||||
req.Header.Set("Authorization", "Bearer "+token.String())
|
||||
req.Header.Set("Accept", "application/json")
|
||||
token.Destroy()
|
||||
|
||||
// Query the broker configuration from the Quix API
|
||||
client, err := q.HTTPClientConfig.CreateClient(context.Background(), q.Log)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("creating client failed: %w", err)
|
||||
}
|
||||
defer client.CloseIdleConnections()
|
||||
|
||||
resp, err := client.Do(req)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("executing request failed: %w", err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
// Read the body as we need it both in case of an error as well as for
|
||||
// decoding the config in case of success
|
||||
body, err := io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
q.Log.Errorf("Reading message body failed: %v", err)
|
||||
}
|
||||
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
return nil, fmt.Errorf("unexpected response %q (%d): %s",
|
||||
http.StatusText(resp.StatusCode),
|
||||
resp.StatusCode,
|
||||
string(body),
|
||||
)
|
||||
}
|
||||
|
||||
// Decode the broker and the returned certificate
|
||||
var cfg brokerConfig
|
||||
if err := json.Unmarshal(body, &cfg); err != nil {
|
||||
return nil, fmt.Errorf("decoding body failed: %w", err)
|
||||
}
|
||||
|
||||
cert, err := base64.StdEncoding.DecodeString(cfg.SSLCertBase64)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("decoding certificate failed: %w", err)
|
||||
}
|
||||
cfg.cert = cert
|
||||
|
||||
return &cfg, nil
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue