From 28c929aec677573653569c750b26965782cce624 Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Wed, 5 Mar 2025 17:14:55 -0500 Subject: [PATCH] Have a draft apiclient in golang --- confluent_osdeploy/utils/goapiclient/go.mod | 5 ++ confluent_osdeploy/utils/goapiclient/go.sum | 4 ++ confluent_osdeploy/utils/goapiclient/main.go | 57 ++++++++++++++++++++ 3 files changed, 66 insertions(+) create mode 100644 confluent_osdeploy/utils/goapiclient/go.mod create mode 100644 confluent_osdeploy/utils/goapiclient/go.sum create mode 100644 confluent_osdeploy/utils/goapiclient/main.go diff --git a/confluent_osdeploy/utils/goapiclient/go.mod b/confluent_osdeploy/utils/goapiclient/go.mod new file mode 100644 index 00000000..47f2cb65 --- /dev/null +++ b/confluent_osdeploy/utils/goapiclient/go.mod @@ -0,0 +1,5 @@ +module confluentapiclient + +go 1.22 + +toolchain go1.23.6 diff --git a/confluent_osdeploy/utils/goapiclient/go.sum b/confluent_osdeploy/utils/goapiclient/go.sum new file mode 100644 index 00000000..91d036f4 --- /dev/null +++ b/confluent_osdeploy/utils/goapiclient/go.sum @@ -0,0 +1,4 @@ +github.com/go-crypt/crypt v0.3.2 h1:I4i0u2g8X9bxCXIjvv19BDVXqQbddDQrURCJrOyyJos= +github.com/go-crypt/crypt v0.3.2/go.mod h1:U0YhpCizEtaVC4gVfUUN0qGn1Z6+e3at+B5uLYx/sV0= +github.com/go-crypt/x v0.3.2 h1:m2wn2+8tp28V4yDiW5NSTiyNSXnCoTs1R1+H+cAJA3M= +github.com/go-crypt/x v0.3.2/go.mod h1:uelN9rbD2e2eqE8KA26B9R6OQ0TdM6msWdPsoMM1ZFk= diff --git a/confluent_osdeploy/utils/goapiclient/main.go b/confluent_osdeploy/utils/goapiclient/main.go new file mode 100644 index 00000000..91ae02c3 --- /dev/null +++ b/confluent_osdeploy/utils/goapiclient/main.go @@ -0,0 +1,57 @@ +package main + +import ( + "flag" + "fmt" + "io" + "os" + "net/http" + "crypto/x509" + "crypto/tls" +) + +func main() { + certauthority := flag.String("c", "/etc/confluent/ca.pem", "Certificate authorities to use, in PEM format") + targurl := flag.String("u", "", "Url to connect to") + keyfile := flag.String("k", "/etc/confluent/confluent.apikey", "Confluent API key file") + nodename := flag.String("n", "", "Node Name") + usejson := flag.Bool("j", false, "Use JSON") + flag.Parse() + certpool := x509.NewCertPool() + currcacerts, err := os.ReadFile(*certauthority) + if err != nil { + panic(err) + } + confluentapikey, err := os.ReadFile(*keyfile) + if confluentapikey[len(confluentapikey) - 1] == 0xa { + confluentapikey = confluentapikey[:len(confluentapikey)-1] + } + if err != nil { + panic(err) + } + certpool.AppendCertsFromPEM(currcacerts) + + client := &http.Client{ + Transport: &http.Transport{ + TLSClientConfig: &tls.Config{ + RootCAs: certpool, + }, + }, + } + rq, err := http.NewRequest(http.MethodGet, *targurl, nil) + if err != nil { panic(err )} + if *usejson { rq.Header.Set("Accept", "application/json") } + if *nodename == "" { + *nodename, err = os.Hostname() + } + rq.Header.Set("CONFLUENT_NODENAME", *nodename) + fmt.Println(string(confluentapikey)) + rq.Header.Set("CONFLUENT_APIKEY", string(confluentapikey)) + if err != nil { panic(err )} + rsp, err := client.Do(rq) + if err != nil { panic(err )} + rspdata, err := io.ReadAll(rsp.Body) + rsptxt := string(rspdata) + fmt.Println(rsptxt) +} +