mirror of
https://github.com/rancher/k3k.git
synced 2026-08-18 03:46:31 +00:00
* Refactor bootstrap data management * Change errors from errors.New to fmt.Errorf Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com>
90 lines
1.9 KiB
Go
90 lines
1.9 KiB
Go
package k3s
|
|
|
|
import (
|
|
"encoding/base64"
|
|
"fmt"
|
|
"net/http"
|
|
)
|
|
|
|
type BootstrapData struct {
|
|
ServerCA cert `json:"serverCA"`
|
|
ServerCAKey cert `json:"serverCAKey"`
|
|
ClientCA cert `json:"clientCA"`
|
|
ClientCAKey cert `json:"clientCAKey"`
|
|
ETCDServerCA cert `json:"etcdServerCA"`
|
|
ETCDServerCAKey cert `json:"etcdServerCAKey"`
|
|
}
|
|
|
|
type cert struct {
|
|
Timestamp string
|
|
Content string
|
|
}
|
|
|
|
func GetServerBootstrap(c *Client) (*BootstrapData, error) {
|
|
endpoint := "/v1-k3s/server-bootstrap"
|
|
|
|
bootstrap, err := do[BootstrapData](c, endpoint, "server", http.MethodGet)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// we still need to decode each certs since the bootstrap data endpoint base64 encode each cert
|
|
if err := decode(&bootstrap); err != nil {
|
|
return nil, fmt.Errorf("failed to decode bootstrap secret: %w", err)
|
|
}
|
|
|
|
return &bootstrap, nil
|
|
}
|
|
|
|
func decode(data *BootstrapData) error {
|
|
// client-ca
|
|
decoded, err := base64.StdEncoding.DecodeString(data.ClientCA.Content)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
data.ClientCA.Content = string(decoded)
|
|
|
|
// client-ca-key
|
|
decoded, err = base64.StdEncoding.DecodeString(data.ClientCAKey.Content)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
data.ClientCAKey.Content = string(decoded)
|
|
|
|
// server-ca
|
|
decoded, err = base64.StdEncoding.DecodeString(data.ServerCA.Content)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
data.ServerCA.Content = string(decoded)
|
|
|
|
// server-ca-key
|
|
decoded, err = base64.StdEncoding.DecodeString(data.ServerCAKey.Content)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
data.ServerCAKey.Content = string(decoded)
|
|
|
|
// etcd-ca
|
|
decoded, err = base64.StdEncoding.DecodeString(data.ETCDServerCA.Content)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
data.ETCDServerCA.Content = string(decoded)
|
|
|
|
// etcd-ca-key
|
|
decoded, err = base64.StdEncoding.DecodeString(data.ETCDServerCAKey.Content)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
data.ETCDServerCAKey.Content = string(decoded)
|
|
|
|
return nil
|
|
}
|