123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- package functions
- import (
- "bytes"
- "crypto/ed25519"
- "crypto/rand"
- "encoding/json"
- "errors"
- "log"
- "net/http"
- "os"
- "github.com/gravitl/netmaker/logger"
- "github.com/gravitl/netmaker/netclient/config"
- "github.com/gravitl/netmaker/netclient/ncutils"
- "github.com/gravitl/netmaker/tls"
- "github.com/kr/pretty"
- )
- func Register(cfg *config.ClientConfig) error {
- if cfg.Server.Server == "" {
- return errors.New("no server provided")
- }
- if cfg.Server.AccessKey == "" {
- return errors.New("no access key provided")
- }
- //create certificate request
- _, key, err := ed25519.GenerateKey(rand.Reader)
- if err != nil {
- return err
- }
- name := tls.NewCName(os.Getenv("HOSTNAME"))
- csr, err := tls.NewCSR(key, name)
- if err != nil {
- return err
- }
- data := config.RegisterRequest{
- Name: name,
- CSR: *csr,
- }
- pretty.Println(data.CSR.PublicKey)
- pretty.Println(data.CSR.RawSubjectPublicKeyInfo)
- pretty.Println("data\n", data)
- payload, err := json.Marshal(data)
- if err != nil {
- return err
- }
- os.WriteFile("/tmp/data", payload, os.ModePerm)
- url := cfg.Server.API + "/api/server/register"
- log.Println("registering at ", url)
- request, err := http.NewRequest(http.MethodPost, url, bytes.NewBuffer(payload))
- if err != nil {
- return err
- }
- request.Header.Set("Content-Type", "application/json")
- request.Header.Set("authorization", "Bearer "+cfg.Server.AccessKey)
- client := http.Client{}
- response, err := client.Do(request)
- if err != nil {
- return err
- }
- if response.StatusCode != http.StatusOK {
- return errors.New(response.Status)
- }
- var resp config.RegisterResponse
- if err := json.NewDecoder(response.Body).Decode(&resp); err != nil {
- return errors.New("unmarshal cert error " + err.Error())
- }
- if err := tls.SaveCert(ncutils.GetNetclientPath()+cfg.Server.Server, "root.cert", &resp.CA); err != nil {
- return err
- }
- if err := tls.SaveCert(ncutils.GetNetclientPath(), "client.cert", &resp.Cert); err != nil {
- return err
- }
- if err := tls.SaveKey(ncutils.GetNetclientPath(), "client.key", resp.Key); err != nil {
- return err
- }
- logger.Log(0, "certificates/key saved ")
- return nil
- }
|