From 0c8966b4ae5813f8a01188902b059aaf8681ef43 Mon Sep 17 00:00:00 2001 From: losyme Date: Fri, 10 Dec 2021 17:56:06 +0100 Subject: [PATCH] =?UTF-8?q?En=20cours=20de=20d=C3=A9veloppement?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/client.go | 51 ++++++++++++++++++++++++++++++++-- client/endpoint.go | 69 ++++++++++++++++++++++++++++++++++++++++++++++ workers/workers.go | 2 +- 3 files changed, 118 insertions(+), 4 deletions(-) create mode 100644 client/endpoint.go diff --git a/client/client.go b/client/client.go index 902f2e7..4be980b 100644 --- a/client/client.go +++ b/client/client.go @@ -6,10 +6,55 @@ package client -type Client struct{} +import ( + "crypto/tls" -func New(c *Config) *Client { - return &Client{} + "forge.chapril.org/losyme/errors" +) + +type Client struct { + endpoints []*endpoint +} + +func buildTLSCertificate(cfg *Config) (*tls.Certificate, error) { + if cfg.Cert == "" || cfg.Key == "" { + return nil, nil + } + + cert, err := tls.LoadX509KeyPair(cfg.Cert, cfg.Key) + if err != nil { + return nil, err + } + + return &cert, nil +} + +func New(cfg *Config) (*Client, error) { + if err := cfg.validate(); err != nil { + return nil, errors.WithMessage(err, "sdk.client") ////////////////////////////////////////////////////////////// + } + + endpoints := make([]*endpoint, 0, len(cfg.Endpoints)) + + tlsCert, err := buildTLSCertificate(cfg) + if err != nil { + return nil, err + } + + for _, ce := range cfg.Endpoints { + ep, err := newEndpoint(cfg, ce, tlsCert) + if err != nil { + return nil, err + } + + endpoints = append(endpoints, ep) + } + + c := &Client{ + endpoints: endpoints, + } + + return c, nil } /* diff --git a/client/endpoint.go b/client/endpoint.go new file mode 100644 index 0000000..6e0ee1b --- /dev/null +++ b/client/endpoint.go @@ -0,0 +1,69 @@ +/* +------------------------------------------------------------------------------------------------------------------------ +####### sdk ####### Copyright (c) 2021 losyme ###################################################### MIT License ####### +------------------------------------------------------------------------------------------------------------------------ +*/ + +package client + +import ( + "crypto/tls" + "crypto/x509" + "net/http" + "os" + "time" +) + +type endpoint struct { + endpoint *Endpoint + client *http.Client +} + +func buildTransport(ce *Endpoint, tlsCert *tls.Certificate) (http.RoundTripper, error) { + if ce.CA == "" { + return nil, nil + } + + buf, err := os.ReadFile(ce.CA) + if err != nil { + return nil, err + } + + certPool := x509.NewCertPool() + certPool.AppendCertsFromPEM(buf) + + t := &http.Transport{ + TLSClientConfig: &tls.Config{ + RootCAs: certPool, + }, + } + + if tlsCert != nil { + t.TLSClientConfig.Certificates = []tls.Certificate{*tlsCert} + } + + return t, nil +} + +func newEndpoint(cfg *Config, ce *Endpoint, tlsCert *tls.Certificate) (*endpoint, error) { + t, err := buildTransport(ce, tlsCert) + if err != nil { + return nil, err + } + + c := &http.Client{ + Transport: t, + Timeout: 10 * time.Second, // AFINIR + } + + ep := &endpoint{ + endpoint: ce, + client: c, + } + + return ep, nil +} + +/* +######################################################################################################## @(°_°)@ ####### +*/ diff --git a/workers/workers.go b/workers/workers.go index 583bc82..c8a60fd 100644 --- a/workers/workers.go +++ b/workers/workers.go @@ -29,7 +29,7 @@ type Workers struct { func New(cfg *Config) (*Workers, error) { if err := cfg.validate(); err != nil { - return nil, errors.WithMessage(err, "workers") ///////////////////////////////////////////////////////////////// + return nil, errors.WithMessage(err, "sdk.workers") ///////////////////////////////////////////////////////////// } dashboard := newDashboard()