You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by ro...@apache.org on 2018/09/28 00:12:39 UTC
[trafficcontrol] 04/04: Fix riak content-type json header,
use JSONIntStr for the version
This is an automated email from the ASF dual-hosted git repository.
rob pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficcontrol.git
commit 11a57ad0f66be98e8c5bc606a1c0c0d88a643235
Author: Rawlin Peters <ra...@comcast.com>
AuthorDate: Tue Sep 25 15:21:58 2018 -0600
Fix riak content-type json header, use JSONIntStr for the version
---
lib/go-tc/deliveryservice_ssl_keys.go | 6 ++----
lib/go-util/num.go | 19 ++++++++-----------
.../traffic_ops_golang/deliveryservice/keys.go | 9 ++-------
.../traffic_ops_golang/deliveryservice/sslkeys.go | 7 +------
traffic_ops/traffic_ops_golang/riaksvc/dsutil.go | 8 ++++----
5 files changed, 17 insertions(+), 32 deletions(-)
diff --git a/lib/go-tc/deliveryservice_ssl_keys.go b/lib/go-tc/deliveryservice_ssl_keys.go
index 007be74..e9d0ac5 100644
--- a/lib/go-tc/deliveryservice_ssl_keys.go
+++ b/lib/go-tc/deliveryservice_ssl_keys.go
@@ -45,7 +45,7 @@ type DeliveryServiceSSLKeys struct {
Country string `json:"country,omitempty"`
State string `json:"state,omitempty"`
Key string `json:"key"`
- Version util.JSONNumAsStr `json:"version"`
+ Version util.JSONIntStr `json:"version"`
Certificate DeliveryServiceSSLKeysCertificate `json:"certificate,omitempty"`
}
@@ -60,7 +60,7 @@ type DeliveryServiceSSLKeysReq struct {
State *string `json:"state,omitempty"`
// Key is the XMLID of the delivery service
Key *string `json:"key"`
- Version *util.JSONNumAsStr `json:"version"`
+ Version *util.JSONIntStr `json:"version"`
Certificate *DeliveryServiceSSLKeysCertificate `json:"certificate,omitempty"`
}
@@ -90,8 +90,6 @@ func (r *DeliveryServiceSSLKeysReq) validateSharedRequiredRequestFields() []stri
}
if r.Version == nil {
errs = append(errs, "version required")
- } else if _, err := strconv.Atoi(string(*r.Version)); err != nil {
- errs = append(errs, "version must parse to an integer")
}
if checkNilOrEmpty(r.Key) {
errs = append(errs, "key required")
diff --git a/lib/go-util/num.go b/lib/go-util/num.go
index a100170..a9dd450 100644
--- a/lib/go-util/num.go
+++ b/lib/go-util/num.go
@@ -80,6 +80,14 @@ func (i *JSONIntStr) UnmarshalJSON(d []byte) error {
return nil
}
+func (i JSONIntStr) ToInt64() int64 {
+ return int64(i)
+}
+
+func (i JSONIntStr) String() string {
+ return strconv.FormatInt(int64(i), 10)
+}
+
// JSONNumAsStr unmarshals JSON strings or numbers into strings
// This is designed to handle backwards-compatibility for old Perl endpoints which accept both. Please do not use this for new endpoints or new APIs, APIs should be well-typed.
type JSONNumAsStr string
@@ -95,17 +103,6 @@ func (s *JSONNumAsStr) UnmarshalJSON(d []byte) error {
return nil
}
-func (s *JSONNumAsStr) ToInt() (int, error) {
- if s == nil {
- return 0, errors.New("cannot parse nil JSONNumAsStr to int")
- }
- i, err := strconv.Atoi(string(*s))
- if err != nil {
- return 0, errors.New("parsing JSONNumAsStr to int: " + err.Error())
- }
- return i, nil
-}
-
// BytesLenSplit splits the given byte array into an n-length arrays. If n > len(s), returns a slice with a single []byte containing all of s. If n <= 0, returns an empty slice.
func BytesLenSplit(s []byte, n int) [][]byte {
ss := [][]byte{}
diff --git a/traffic_ops/traffic_ops_golang/deliveryservice/keys.go b/traffic_ops/traffic_ops_golang/deliveryservice/keys.go
index 0ac0aae..0c5a1a9 100644
--- a/traffic_ops/traffic_ops_golang/deliveryservice/keys.go
+++ b/traffic_ops/traffic_ops_golang/deliveryservice/keys.go
@@ -79,12 +79,7 @@ func AddSSLKeys(w http.ResponseWriter, r *http.Request) {
api.HandleErr(w, r, inf.Tx.Tx, http.StatusInternalServerError, nil, errors.New("putting SSL keys in Riak for delivery service '"+*req.DeliveryService+"': "+err.Error()))
return
}
- version, err := req.Version.ToInt()
- if err != nil {
- api.HandleErr(w, r, inf.Tx.Tx, http.StatusBadRequest, errors.New("adding SSL keys to delivery service '"+*req.DeliveryService+"': "+err.Error()), nil)
- return
- }
- if err := updateSSLKeyVersion(*req.DeliveryService, version, inf.Tx.Tx); err != nil {
+ if err := updateSSLKeyVersion(*req.DeliveryService, req.Version.ToInt64(), inf.Tx.Tx); err != nil {
api.HandleErr(w, r, inf.Tx.Tx, http.StatusInternalServerError, nil, errors.New("adding SSL keys to delivery service '"+*req.DeliveryService+"': "+err.Error()))
return
}
@@ -232,7 +227,7 @@ func DeleteSSLKeys(w http.ResponseWriter, r *http.Request) {
api.WriteResp(w, r, "Successfully deleted ssl keys for "+xmlID)
}
-func updateSSLKeyVersion(xmlID string, version int, tx *sql.Tx) error {
+func updateSSLKeyVersion(xmlID string, version int64, tx *sql.Tx) error {
q := `UPDATE deliveryservice SET ssl_key_version = $1 WHERE xml_id = $2`
if _, err := tx.Exec(q, version, xmlID); err != nil {
return errors.New("updating delivery service ssl_key_version: " + err.Error())
diff --git a/traffic_ops/traffic_ops_golang/deliveryservice/sslkeys.go b/traffic_ops/traffic_ops_golang/deliveryservice/sslkeys.go
index 5f4e602..34bd8b2 100644
--- a/traffic_ops/traffic_ops_golang/deliveryservice/sslkeys.go
+++ b/traffic_ops/traffic_ops_golang/deliveryservice/sslkeys.go
@@ -52,12 +52,7 @@ func GenerateSSLKeys(w http.ResponseWriter, r *http.Request) {
api.HandleErr(w, r, inf.Tx.Tx, http.StatusInternalServerError, nil, errors.New("generating and putting SSL keys: "+err.Error()))
return
}
- version, err := req.Version.ToInt()
- if err != nil {
- api.HandleErr(w, r, inf.Tx.Tx, http.StatusBadRequest, errors.New("generating SSL keys for delivery service '"+*req.DeliveryService+"': "+err.Error()), nil)
- return
- }
- if err := updateSSLKeyVersion(*req.DeliveryService, version, inf.Tx.Tx); err != nil {
+ if err := updateSSLKeyVersion(*req.DeliveryService, req.Version.ToInt64(), inf.Tx.Tx); err != nil {
api.HandleErr(w, r, inf.Tx.Tx, http.StatusInternalServerError, nil, errors.New("generating SSL keys for delivery service '"+*req.DeliveryService+"': "+err.Error()))
return
}
diff --git a/traffic_ops/traffic_ops_golang/riaksvc/dsutil.go b/traffic_ops/traffic_ops_golang/riaksvc/dsutil.go
index eb4c52e..a912530 100644
--- a/traffic_ops/traffic_ops_golang/riaksvc/dsutil.go
+++ b/traffic_ops/traffic_ops_golang/riaksvc/dsutil.go
@@ -75,17 +75,17 @@ func PutDeliveryServiceSSLKeysObj(key tc.DeliveryServiceSSLKeys, tx *sql.Tx, aut
}
err = WithClusterTx(tx, authOpts, func(cluster StorageCluster) error {
obj := &riak.Object{
- ContentType: "text/json",
+ ContentType: "application/json",
Charset: "utf-8",
ContentEncoding: "utf-8",
- Key: MakeDSSSLKeyKey(key.DeliveryService, string(key.Version)),
+ Key: MakeDSSSLKeyKey(key.DeliveryService, key.Version.String()),
Value: []byte(keyJSON),
}
- if err = SaveObject(obj, DeliveryServiceSSLKeysBucket, cluster); err != nil {
+ if err := SaveObject(obj, DeliveryServiceSSLKeysBucket, cluster); err != nil {
return errors.New("saving Riak object: " + err.Error())
}
obj.Key = MakeDSSSLKeyKey(key.DeliveryService, DSSSLKeyVersionLatest)
- if err = SaveObject(obj, DeliveryServiceSSLKeysBucket, cluster); err != nil {
+ if err := SaveObject(obj, DeliveryServiceSSLKeysBucket, cluster); err != nil {
return errors.New("saving Riak object: " + err.Error())
}
return nil