util.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package internal
  2. import (
  3. "bytes"
  4. "crypto/tls"
  5. "crypto/x509"
  6. "encoding/json"
  7. "errors"
  8. "io/ioutil"
  9. "net/http"
  10. )
  11. // GetTLSConfig generate tls.Config from CAFile
  12. func GetTLSConfig(CAFile string) (*tls.Config, error) {
  13. caCert, err := ioutil.ReadFile(CAFile)
  14. if err != nil {
  15. return nil, err
  16. }
  17. caCertPool := x509.NewCertPool()
  18. if ok := caCertPool.AppendCertsFromPEM(caCert); !ok {
  19. return nil, errors.New("Failed to add CA to pool")
  20. }
  21. tlsConfig := &tls.Config{
  22. RootCAs: caCertPool,
  23. }
  24. tlsConfig.BuildNameToCertificate()
  25. return tlsConfig, nil
  26. }
  27. // PostJSON posts json object to url
  28. func PostJSON(url string, obj interface{}, tlsConfig *tls.Config) (*http.Response, error) {
  29. var client *http.Client
  30. if tlsConfig == nil {
  31. client = &http.Client{}
  32. } else {
  33. tr := &http.Transport{
  34. TLSClientConfig: tlsConfig,
  35. }
  36. client = &http.Client{
  37. Transport: tr,
  38. }
  39. }
  40. b := new(bytes.Buffer)
  41. if err := json.NewEncoder(b).Encode(obj); err != nil {
  42. return nil, err
  43. }
  44. return client.Post(url, "application/json; charset=utf-8", b)
  45. }
  46. // GetJSON gets a json response from url
  47. func GetJSON(url string, obj interface{}, tlsConfig *tls.Config) (*http.Response, error) {
  48. var client *http.Client
  49. if tlsConfig == nil {
  50. client = &http.Client{}
  51. } else {
  52. tr := &http.Transport{
  53. TLSClientConfig: tlsConfig,
  54. }
  55. client = &http.Client{
  56. Transport: tr,
  57. }
  58. }
  59. resp, err := client.Get(url)
  60. if err != nil {
  61. return resp, err
  62. }
  63. if resp.StatusCode != http.StatusOK {
  64. return resp, errors.New("HTTP status code is not 200")
  65. }
  66. defer resp.Body.Close()
  67. body, err := ioutil.ReadAll(resp.Body)
  68. if err != nil {
  69. return resp, err
  70. }
  71. return resp, json.Unmarshal(body, obj)
  72. }