Merge pull request #288 from meshplus/fix/cmd-https-error
fix(cmd/client): fix cmd client is not working when https is enabled
This commit is contained in:
commit
45985a7b28
1
Makefile
1
Makefile
|
@ -3,6 +3,7 @@ SHELL := /bin/bash
|
||||||
CURRENT_PATH = $(shell pwd)
|
CURRENT_PATH = $(shell pwd)
|
||||||
APP_NAME = bitxhub
|
APP_NAME = bitxhub
|
||||||
APP_VERSION = 1.4.0
|
APP_VERSION = 1.4.0
|
||||||
|
export GODEBUG=x509ignoreCN=0
|
||||||
|
|
||||||
# build with verison infos
|
# build with verison infos
|
||||||
VERSION_DIR = github.com/meshplus/${APP_NAME}
|
VERSION_DIR = github.com/meshplus/${APP_NAME}
|
||||||
|
|
|
@ -24,7 +24,7 @@ func getAccount(ctx *cli.Context) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
data, err := httpGet(url)
|
data, err := httpGet(ctx, url)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,7 +39,7 @@ func getBlockByHeight(ctx *cli.Context, height uint64) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
data, err := httpGet(url)
|
data, err := httpGet(ctx, url)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -54,7 +54,7 @@ func getBlockByHash(ctx *cli.Context, hash string) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
data, err := httpGet(url)
|
data, err := httpGet(ctx, url)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,7 @@ func getChainMeta(ctx *cli.Context) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
data, err := httpGet(url)
|
data, err := httpGet(ctx, url)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("http get: %w", err)
|
return fmt.Errorf("http get: %w", err)
|
||||||
}
|
}
|
||||||
|
@ -47,7 +47,7 @@ func getChainStatus(ctx *cli.Context) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
data, err := httpGet(url)
|
data, err := httpGet(ctx, url)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("http get: %w", err)
|
return fmt.Errorf("http get: %w", err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,13 +9,17 @@ var clientCMD = cli.Command{
|
||||||
cli.StringFlag{
|
cli.StringFlag{
|
||||||
Name: "gateway",
|
Name: "gateway",
|
||||||
Usage: "Specific gateway address",
|
Usage: "Specific gateway address",
|
||||||
Value: "localhost:9091",
|
Value: "http://localhost:9091/v1/",
|
||||||
},
|
},
|
||||||
cli.StringFlag{
|
cli.StringFlag{
|
||||||
Name: "grpc",
|
Name: "grpc",
|
||||||
Usage: "Specific grpc address",
|
Usage: "Specific grpc address",
|
||||||
Value: "localhost:60011",
|
Value: "localhost:60011",
|
||||||
},
|
},
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "cert",
|
||||||
|
Usage: "Specific ca cert file if https is enabled",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
Subcommands: cli.Commands{
|
Subcommands: cli.Commands{
|
||||||
accountCMD(),
|
accountCMD(),
|
||||||
|
|
|
@ -2,18 +2,32 @@ package client
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"fmt"
|
"crypto/tls"
|
||||||
|
"crypto/x509"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/meshplus/bitxhub/internal/repo"
|
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
)
|
)
|
||||||
|
|
||||||
func httpGet(url string) ([]byte, error) {
|
func httpGet(ctx *cli.Context, url string) ([]byte, error) {
|
||||||
/* #nosec */
|
/* #nosec */
|
||||||
resp, err := http.Get(url)
|
var (
|
||||||
|
client *http.Client
|
||||||
|
err error
|
||||||
|
)
|
||||||
|
certPath := ctx.GlobalString("cert")
|
||||||
|
if certPath != "" {
|
||||||
|
client, err = getHttpsClient(certPath)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
client = http.DefaultClient
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.Get(url)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -31,11 +45,24 @@ func httpGet(url string) ([]byte, error) {
|
||||||
return c, nil
|
return c, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func httpPost(url string, data []byte) ([]byte, error) {
|
func httpPost(ctx *cli.Context, url string, data []byte) ([]byte, error) {
|
||||||
|
var (
|
||||||
|
client *http.Client
|
||||||
|
err error
|
||||||
|
)
|
||||||
|
certPath := ctx.GlobalString("cert")
|
||||||
|
if certPath != "" {
|
||||||
|
client, err = getHttpsClient(certPath)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
client = http.DefaultClient
|
||||||
|
}
|
||||||
buffer := bytes.NewBuffer(data)
|
buffer := bytes.NewBuffer(data)
|
||||||
|
|
||||||
/* #nosec */
|
/* #nosec */
|
||||||
resp, err := http.Post(url, "application/json", buffer)
|
resp, err := client.Post(url, "application/json", buffer)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -52,18 +79,29 @@ func httpPost(url string, data []byte) ([]byte, error) {
|
||||||
return c, nil
|
return c, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getURL(ctx *cli.Context, path string) (string, error) {
|
func getHttpsClient(certPath string) (*http.Client, error) {
|
||||||
repoRoot, err := repo.PathRootWithDefault(ctx.GlobalString("repo"))
|
caCert, err := ioutil.ReadFile(certPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
api, err := repo.GetAPI(repoRoot)
|
caCertPool := x509.NewCertPool()
|
||||||
if err != nil {
|
caCertPool.AppendCertsFromPEM(caCert)
|
||||||
return "", fmt.Errorf("get api file: %w", err)
|
return &http.Client{
|
||||||
}
|
Transport: &http.Transport{
|
||||||
|
TLSClientConfig: &tls.Config{
|
||||||
api = strings.TrimSpace(api)
|
RootCAs: caCertPool,
|
||||||
|
},
|
||||||
return api + path, nil
|
},
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func getURL(ctx *cli.Context, p string) (string, error) {
|
||||||
|
api := ctx.GlobalString("gateway")
|
||||||
|
api = strings.TrimSpace(api)
|
||||||
|
if api[len(api)-1:] != "/" {
|
||||||
|
api = api + "/"
|
||||||
|
}
|
||||||
|
|
||||||
|
return api + p, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,7 +20,7 @@ func network(ctx *cli.Context) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
data, err := httpGet(url)
|
data, err := httpGet(ctx, url)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("http get: %w", err)
|
return fmt.Errorf("http get: %w", err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@ func getValidators(ctx *cli.Context) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
data, err := httpGet(url)
|
data, err := httpGet(ctx, url)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("http get: %w", err)
|
return fmt.Errorf("http get: %w", err)
|
||||||
}
|
}
|
||||||
|
@ -69,7 +69,7 @@ func delVPNode(ctx *cli.Context) error {
|
||||||
|
|
||||||
p := pb.DelVPNodeRequest{Pid: pid}
|
p := pb.DelVPNodeRequest{Pid: pid}
|
||||||
reqData, err := json.Marshal(p)
|
reqData, err := json.Marshal(p)
|
||||||
data, err := httpPost(url, reqData)
|
data, err := httpPost(ctx, url, reqData)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,7 +24,7 @@ func getReceipt(ctx *cli.Context) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
data, err := httpGet(url)
|
data, err := httpGet(ctx, url)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,7 +62,7 @@ func getTransaction(ctx *cli.Context) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
data, err := httpGet(url)
|
data, err := httpGet(ctx, url)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -130,7 +130,7 @@ func sendTransaction(ctx *cli.Context) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
resp, err := httpPost(url, reqData)
|
resp, err := httpPost(ctx, url, reqData)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
http://localhost:9091/v1/
|
|
|
@ -58,4 +58,4 @@ addresses = [
|
||||||
"0x79a1215469FaB6f9c63c1816b45183AD3624bE34",
|
"0x79a1215469FaB6f9c63c1816b45183AD3624bE34",
|
||||||
"0x97c8B516D19edBf575D72a172Af7F418BE498C37",
|
"0x97c8B516D19edBf575D72a172Af7F418BE498C37",
|
||||||
"0xc0Ff2e0b3189132D815b8eb325bE17285AC898f8"
|
"0xc0Ff2e0b3189132D815b8eb325bE17285AC898f8"
|
||||||
]
|
]
|
||||||
|
|
Loading…
Reference in New Issue