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