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 <rawlin_pet...@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